packages feed

gi-gstvideo-0.1.6.13: GI/GstVideo/Objects/VideoEncoder.hs


{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.GstVideo.Objects.VideoEncoder
    ( 

-- * Exported types
    VideoEncoder(..)                        ,
    VideoEncoderK                           ,
    toVideoEncoder                          ,
    noVideoEncoder                          ,


 -- * Methods
-- ** videoEncoderAllocateOutputBuffer
    VideoEncoderAllocateOutputBufferMethodInfo,
    videoEncoderAllocateOutputBuffer        ,


-- ** videoEncoderAllocateOutputFrame
    VideoEncoderAllocateOutputFrameMethodInfo,
    videoEncoderAllocateOutputFrame         ,


-- ** videoEncoderFinishFrame
    VideoEncoderFinishFrameMethodInfo       ,
    videoEncoderFinishFrame                 ,


-- ** videoEncoderGetAllocator
    VideoEncoderGetAllocatorMethodInfo      ,
    videoEncoderGetAllocator                ,


-- ** videoEncoderGetFrame
    VideoEncoderGetFrameMethodInfo          ,
    videoEncoderGetFrame                    ,


-- ** videoEncoderGetFrames
    VideoEncoderGetFramesMethodInfo         ,
    videoEncoderGetFrames                   ,


-- ** videoEncoderGetLatency
    VideoEncoderGetLatencyMethodInfo        ,
    videoEncoderGetLatency                  ,


-- ** videoEncoderGetOldestFrame
    VideoEncoderGetOldestFrameMethodInfo    ,
    videoEncoderGetOldestFrame              ,


-- ** videoEncoderGetOutputState
    VideoEncoderGetOutputStateMethodInfo    ,
    videoEncoderGetOutputState              ,


-- ** videoEncoderMergeTags
    VideoEncoderMergeTagsMethodInfo         ,
    videoEncoderMergeTags                   ,


-- ** videoEncoderNegotiate
    VideoEncoderNegotiateMethodInfo         ,
    videoEncoderNegotiate                   ,


-- ** videoEncoderProxyGetcaps
    VideoEncoderProxyGetcapsMethodInfo      ,
    videoEncoderProxyGetcaps                ,


-- ** videoEncoderSetHeaders
    VideoEncoderSetHeadersMethodInfo        ,
    videoEncoderSetHeaders                  ,


-- ** videoEncoderSetLatency
    VideoEncoderSetLatencyMethodInfo        ,
    videoEncoderSetLatency                  ,


-- ** videoEncoderSetMinPts
    VideoEncoderSetMinPtsMethodInfo         ,
    videoEncoderSetMinPts                   ,


-- ** videoEncoderSetOutputState
    VideoEncoderSetOutputStateMethodInfo    ,
    videoEncoderSetOutputState              ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.GstVideo.Types
import GI.GstVideo.Callbacks
import qualified GI.GObject as GObject
import qualified GI.Gst as Gst

newtype VideoEncoder = VideoEncoder (ForeignPtr VideoEncoder)
foreign import ccall "gst_video_encoder_get_type"
    c_gst_video_encoder_get_type :: IO GType

type instance ParentTypes VideoEncoder = VideoEncoderParentTypes
type VideoEncoderParentTypes = '[Gst.Element, Gst.Object, GObject.Object, Gst.Preset]

instance GObject VideoEncoder where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gst_video_encoder_get_type
    

class GObject o => VideoEncoderK o
instance (GObject o, IsDescendantOf VideoEncoder o) => VideoEncoderK o

toVideoEncoder :: VideoEncoderK o => o -> IO VideoEncoder
toVideoEncoder = unsafeCastTo VideoEncoder

noVideoEncoder :: Maybe VideoEncoder
noVideoEncoder = Nothing

type family ResolveVideoEncoderMethod (t :: Symbol) (o :: *) :: * where
    ResolveVideoEncoderMethod "abortState" o = Gst.ElementAbortStateMethodInfo
    ResolveVideoEncoderMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
    ResolveVideoEncoderMethod "addPad" o = Gst.ElementAddPadMethodInfo
    ResolveVideoEncoderMethod "allocateOutputBuffer" o = VideoEncoderAllocateOutputBufferMethodInfo
    ResolveVideoEncoderMethod "allocateOutputFrame" o = VideoEncoderAllocateOutputFrameMethodInfo
    ResolveVideoEncoderMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
    ResolveVideoEncoderMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
    ResolveVideoEncoderMethod "changeState" o = Gst.ElementChangeStateMethodInfo
    ResolveVideoEncoderMethod "continueState" o = Gst.ElementContinueStateMethodInfo
    ResolveVideoEncoderMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
    ResolveVideoEncoderMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
    ResolveVideoEncoderMethod "deletePreset" o = Gst.PresetDeletePresetMethodInfo
    ResolveVideoEncoderMethod "finishFrame" o = VideoEncoderFinishFrameMethodInfo
    ResolveVideoEncoderMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
    ResolveVideoEncoderMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
    ResolveVideoEncoderMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
    ResolveVideoEncoderMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
    ResolveVideoEncoderMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
    ResolveVideoEncoderMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
    ResolveVideoEncoderMethod "isEditable" o = Gst.PresetIsEditableMethodInfo
    ResolveVideoEncoderMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
    ResolveVideoEncoderMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
    ResolveVideoEncoderMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
    ResolveVideoEncoderMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
    ResolveVideoEncoderMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
    ResolveVideoEncoderMethod "link" o = Gst.ElementLinkMethodInfo
    ResolveVideoEncoderMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
    ResolveVideoEncoderMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
    ResolveVideoEncoderMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
    ResolveVideoEncoderMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
    ResolveVideoEncoderMethod "loadPreset" o = Gst.PresetLoadPresetMethodInfo
    ResolveVideoEncoderMethod "lostState" o = Gst.ElementLostStateMethodInfo
    ResolveVideoEncoderMethod "mergeTags" o = VideoEncoderMergeTagsMethodInfo
    ResolveVideoEncoderMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
    ResolveVideoEncoderMethod "negotiate" o = VideoEncoderNegotiateMethodInfo
    ResolveVideoEncoderMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
    ResolveVideoEncoderMethod "notify" o = GObject.ObjectNotifyMethodInfo
    ResolveVideoEncoderMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
    ResolveVideoEncoderMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
    ResolveVideoEncoderMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
    ResolveVideoEncoderMethod "proxyGetcaps" o = VideoEncoderProxyGetcapsMethodInfo
    ResolveVideoEncoderMethod "query" o = Gst.ElementQueryMethodInfo
    ResolveVideoEncoderMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
    ResolveVideoEncoderMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
    ResolveVideoEncoderMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
    ResolveVideoEncoderMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
    ResolveVideoEncoderMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
    ResolveVideoEncoderMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
    ResolveVideoEncoderMethod "removePad" o = Gst.ElementRemovePadMethodInfo
    ResolveVideoEncoderMethod "renamePreset" o = Gst.PresetRenamePresetMethodInfo
    ResolveVideoEncoderMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
    ResolveVideoEncoderMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
    ResolveVideoEncoderMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
    ResolveVideoEncoderMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
    ResolveVideoEncoderMethod "savePreset" o = Gst.PresetSavePresetMethodInfo
    ResolveVideoEncoderMethod "seek" o = Gst.ElementSeekMethodInfo
    ResolveVideoEncoderMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
    ResolveVideoEncoderMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
    ResolveVideoEncoderMethod "stealData" o = GObject.ObjectStealDataMethodInfo
    ResolveVideoEncoderMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
    ResolveVideoEncoderMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
    ResolveVideoEncoderMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
    ResolveVideoEncoderMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
    ResolveVideoEncoderMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
    ResolveVideoEncoderMethod "unlink" o = Gst.ElementUnlinkMethodInfo
    ResolveVideoEncoderMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
    ResolveVideoEncoderMethod "unparent" o = Gst.ObjectUnparentMethodInfo
    ResolveVideoEncoderMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
    ResolveVideoEncoderMethod "getAllocator" o = VideoEncoderGetAllocatorMethodInfo
    ResolveVideoEncoderMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
    ResolveVideoEncoderMethod "getBus" o = Gst.ElementGetBusMethodInfo
    ResolveVideoEncoderMethod "getClock" o = Gst.ElementGetClockMethodInfo
    ResolveVideoEncoderMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
    ResolveVideoEncoderMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
    ResolveVideoEncoderMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
    ResolveVideoEncoderMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
    ResolveVideoEncoderMethod "getData" o = GObject.ObjectGetDataMethodInfo
    ResolveVideoEncoderMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
    ResolveVideoEncoderMethod "getFrame" o = VideoEncoderGetFrameMethodInfo
    ResolveVideoEncoderMethod "getFrames" o = VideoEncoderGetFramesMethodInfo
    ResolveVideoEncoderMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
    ResolveVideoEncoderMethod "getLatency" o = VideoEncoderGetLatencyMethodInfo
    ResolveVideoEncoderMethod "getMeta" o = Gst.PresetGetMetaMethodInfo
    ResolveVideoEncoderMethod "getName" o = Gst.ObjectGetNameMethodInfo
    ResolveVideoEncoderMethod "getOldestFrame" o = VideoEncoderGetOldestFrameMethodInfo
    ResolveVideoEncoderMethod "getOutputState" o = VideoEncoderGetOutputStateMethodInfo
    ResolveVideoEncoderMethod "getParent" o = Gst.ObjectGetParentMethodInfo
    ResolveVideoEncoderMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
    ResolveVideoEncoderMethod "getPresetNames" o = Gst.PresetGetPresetNamesMethodInfo
    ResolveVideoEncoderMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
    ResolveVideoEncoderMethod "getPropertyNames" o = Gst.PresetGetPropertyNamesMethodInfo
    ResolveVideoEncoderMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
    ResolveVideoEncoderMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
    ResolveVideoEncoderMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
    ResolveVideoEncoderMethod "getState" o = Gst.ElementGetStateMethodInfo
    ResolveVideoEncoderMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
    ResolveVideoEncoderMethod "getValue" o = Gst.ObjectGetValueMethodInfo
    ResolveVideoEncoderMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
    ResolveVideoEncoderMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
    ResolveVideoEncoderMethod "setBus" o = Gst.ElementSetBusMethodInfo
    ResolveVideoEncoderMethod "setClock" o = Gst.ElementSetClockMethodInfo
    ResolveVideoEncoderMethod "setContext" o = Gst.ElementSetContextMethodInfo
    ResolveVideoEncoderMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
    ResolveVideoEncoderMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
    ResolveVideoEncoderMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
    ResolveVideoEncoderMethod "setData" o = GObject.ObjectSetDataMethodInfo
    ResolveVideoEncoderMethod "setHeaders" o = VideoEncoderSetHeadersMethodInfo
    ResolveVideoEncoderMethod "setLatency" o = VideoEncoderSetLatencyMethodInfo
    ResolveVideoEncoderMethod "setLockedState" o = Gst.ElementSetLockedStateMethodInfo
    ResolveVideoEncoderMethod "setMeta" o = Gst.PresetSetMetaMethodInfo
    ResolveVideoEncoderMethod "setMinPts" o = VideoEncoderSetMinPtsMethodInfo
    ResolveVideoEncoderMethod "setName" o = Gst.ObjectSetNameMethodInfo
    ResolveVideoEncoderMethod "setOutputState" o = VideoEncoderSetOutputStateMethodInfo
    ResolveVideoEncoderMethod "setParent" o = Gst.ObjectSetParentMethodInfo
    ResolveVideoEncoderMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
    ResolveVideoEncoderMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
    ResolveVideoEncoderMethod "setState" o = Gst.ElementSetStateMethodInfo
    ResolveVideoEncoderMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveVideoEncoderMethod t VideoEncoder, MethodInfo info VideoEncoder p) => IsLabelProxy t (VideoEncoder -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveVideoEncoderMethod t VideoEncoder, MethodInfo info VideoEncoder p) => IsLabel t (VideoEncoder -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif

type instance AttributeList VideoEncoder = VideoEncoderAttributeList
type VideoEncoderAttributeList = ('[ '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo)] :: [(Symbol, *)])

type instance SignalList VideoEncoder = VideoEncoderSignalList
type VideoEncoderSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])

-- method VideoEncoder::allocate_output_buffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Buffer"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_allocate_output_buffer" gst_video_encoder_allocate_output_buffer :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Word64 ->                               -- size : TBasicType TUInt64
    IO (Ptr Gst.Buffer)


videoEncoderAllocateOutputBuffer ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> Word64                               -- size
    -> m Gst.Buffer                         -- result
videoEncoderAllocateOutputBuffer _obj size = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_video_encoder_allocate_output_buffer _obj' size
    checkUnexpectedReturnNULL "gst_video_encoder_allocate_output_buffer" result
    result' <- (wrapBoxed Gst.Buffer) result
    touchManagedPtr _obj
    return result'

data VideoEncoderAllocateOutputBufferMethodInfo
instance (signature ~ (Word64 -> m Gst.Buffer), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderAllocateOutputBufferMethodInfo a signature where
    overloadedMethod _ = videoEncoderAllocateOutputBuffer

-- method VideoEncoder::allocate_output_frame
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "frame", argType = TInterface "GstVideo" "VideoCodecFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "FlowReturn"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_allocate_output_frame" gst_video_encoder_allocate_output_frame :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Ptr VideoCodecFrame ->                  -- frame : TInterface "GstVideo" "VideoCodecFrame"
    Word64 ->                               -- size : TBasicType TUInt64
    IO CUInt


videoEncoderAllocateOutputFrame ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> VideoCodecFrame                      -- frame
    -> Word64                               -- size
    -> m Gst.FlowReturn                     -- result
videoEncoderAllocateOutputFrame _obj frame size = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let frame' = unsafeManagedPtrGetPtr frame
    result <- gst_video_encoder_allocate_output_frame _obj' frame' size
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr frame
    return result'

data VideoEncoderAllocateOutputFrameMethodInfo
instance (signature ~ (VideoCodecFrame -> Word64 -> m Gst.FlowReturn), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderAllocateOutputFrameMethodInfo a signature where
    overloadedMethod _ = videoEncoderAllocateOutputFrame

-- method VideoEncoder::finish_frame
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "frame", argType = TInterface "GstVideo" "VideoCodecFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TInterface "Gst" "FlowReturn"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_finish_frame" gst_video_encoder_finish_frame :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Ptr VideoCodecFrame ->                  -- frame : TInterface "GstVideo" "VideoCodecFrame"
    IO CUInt


videoEncoderFinishFrame ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> VideoCodecFrame                      -- frame
    -> m Gst.FlowReturn                     -- result
videoEncoderFinishFrame _obj frame = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    frame' <- copyBoxed frame
    result <- gst_video_encoder_finish_frame _obj' frame'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr frame
    return result'

data VideoEncoderFinishFrameMethodInfo
instance (signature ~ (VideoCodecFrame -> m Gst.FlowReturn), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderFinishFrameMethodInfo a signature where
    overloadedMethod _ = videoEncoderFinishFrame

-- method VideoEncoder::get_allocator
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allocator", argType = TInterface "Gst" "Allocator", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "params", argType = TInterface "Gst" "AllocationParams", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_get_allocator" gst_video_encoder_get_allocator :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Ptr (Ptr Gst.Allocator) ->              -- allocator : TInterface "Gst" "Allocator"
    Ptr Gst.AllocationParams ->             -- params : TInterface "Gst" "AllocationParams"
    IO ()


videoEncoderGetAllocator ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> m (Gst.Allocator,Gst.AllocationParams)-- result
videoEncoderGetAllocator _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    allocator <- allocMem :: IO (Ptr (Ptr Gst.Allocator))
    params <- callocBoxedBytes 64 :: IO (Ptr Gst.AllocationParams)
    gst_video_encoder_get_allocator _obj' allocator params
    allocator' <- peek allocator
    allocator'' <- (wrapObject Gst.Allocator) allocator'
    params' <- (wrapBoxed Gst.AllocationParams) params
    touchManagedPtr _obj
    freeMem allocator
    return (allocator'', params')

data VideoEncoderGetAllocatorMethodInfo
instance (signature ~ (m (Gst.Allocator,Gst.AllocationParams)), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderGetAllocatorMethodInfo a signature where
    overloadedMethod _ = videoEncoderGetAllocator

-- method VideoEncoder::get_frame
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "frame_number", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "GstVideo" "VideoCodecFrame"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_get_frame" gst_video_encoder_get_frame :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Int32 ->                                -- frame_number : TBasicType TInt32
    IO (Ptr VideoCodecFrame)


videoEncoderGetFrame ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> Int32                                -- frameNumber
    -> m VideoCodecFrame                    -- result
videoEncoderGetFrame _obj frameNumber = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_video_encoder_get_frame _obj' frameNumber
    checkUnexpectedReturnNULL "gst_video_encoder_get_frame" result
    result' <- (wrapBoxed VideoCodecFrame) result
    touchManagedPtr _obj
    return result'

data VideoEncoderGetFrameMethodInfo
instance (signature ~ (Int32 -> m VideoCodecFrame), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderGetFrameMethodInfo a signature where
    overloadedMethod _ = videoEncoderGetFrame

-- method VideoEncoder::get_frames
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TGList (TInterface "GstVideo" "VideoCodecFrame")
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_get_frames" gst_video_encoder_get_frames :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    IO (Ptr (GList (Ptr VideoCodecFrame)))


videoEncoderGetFrames ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> m [VideoCodecFrame]                  -- result
videoEncoderGetFrames _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_video_encoder_get_frames _obj'
    checkUnexpectedReturnNULL "gst_video_encoder_get_frames" result
    result' <- unpackGList result
    result'' <- mapM (wrapBoxed VideoCodecFrame) result'
    g_list_free result
    touchManagedPtr _obj
    return result''

data VideoEncoderGetFramesMethodInfo
instance (signature ~ (m [VideoCodecFrame]), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderGetFramesMethodInfo a signature where
    overloadedMethod _ = videoEncoderGetFrames

-- method VideoEncoder::get_latency
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min_latency", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "max_latency", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_get_latency" gst_video_encoder_get_latency :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Ptr Word64 ->                           -- min_latency : TBasicType TUInt64
    Ptr Word64 ->                           -- max_latency : TBasicType TUInt64
    IO ()


videoEncoderGetLatency ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> m (Word64,Word64)                    -- result
videoEncoderGetLatency _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    minLatency <- allocMem :: IO (Ptr Word64)
    maxLatency <- allocMem :: IO (Ptr Word64)
    gst_video_encoder_get_latency _obj' minLatency maxLatency
    minLatency' <- peek minLatency
    maxLatency' <- peek maxLatency
    touchManagedPtr _obj
    freeMem minLatency
    freeMem maxLatency
    return (minLatency', maxLatency')

data VideoEncoderGetLatencyMethodInfo
instance (signature ~ (m (Word64,Word64)), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderGetLatencyMethodInfo a signature where
    overloadedMethod _ = videoEncoderGetLatency

-- method VideoEncoder::get_oldest_frame
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "GstVideo" "VideoCodecFrame"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_get_oldest_frame" gst_video_encoder_get_oldest_frame :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    IO (Ptr VideoCodecFrame)


videoEncoderGetOldestFrame ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> m VideoCodecFrame                    -- result
videoEncoderGetOldestFrame _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_video_encoder_get_oldest_frame _obj'
    checkUnexpectedReturnNULL "gst_video_encoder_get_oldest_frame" result
    result' <- (wrapBoxed VideoCodecFrame) result
    touchManagedPtr _obj
    return result'

data VideoEncoderGetOldestFrameMethodInfo
instance (signature ~ (m VideoCodecFrame), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderGetOldestFrameMethodInfo a signature where
    overloadedMethod _ = videoEncoderGetOldestFrame

-- method VideoEncoder::get_output_state
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "GstVideo" "VideoCodecState"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_get_output_state" gst_video_encoder_get_output_state :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    IO (Ptr VideoCodecState)


videoEncoderGetOutputState ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> m VideoCodecState                    -- result
videoEncoderGetOutputState _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_video_encoder_get_output_state _obj'
    checkUnexpectedReturnNULL "gst_video_encoder_get_output_state" result
    result' <- (wrapBoxed VideoCodecState) result
    touchManagedPtr _obj
    return result'

data VideoEncoderGetOutputStateMethodInfo
instance (signature ~ (m VideoCodecState), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderGetOutputStateMethodInfo a signature where
    overloadedMethod _ = videoEncoderGetOutputState

-- method VideoEncoder::merge_tags
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tags", argType = TInterface "Gst" "TagList", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface "Gst" "TagMergeMode", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_merge_tags" gst_video_encoder_merge_tags :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Ptr Gst.TagList ->                      -- tags : TInterface "Gst" "TagList"
    CUInt ->                                -- mode : TInterface "Gst" "TagMergeMode"
    IO ()


videoEncoderMergeTags ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> Maybe (Gst.TagList)                  -- tags
    -> Gst.TagMergeMode                     -- mode
    -> m ()                                 -- result
videoEncoderMergeTags _obj tags mode = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeTags <- case tags of
        Nothing -> return nullPtr
        Just jTags -> do
            let jTags' = unsafeManagedPtrGetPtr jTags
            return jTags'
    let mode' = (fromIntegral . fromEnum) mode
    gst_video_encoder_merge_tags _obj' maybeTags mode'
    touchManagedPtr _obj
    whenJust tags touchManagedPtr
    return ()

data VideoEncoderMergeTagsMethodInfo
instance (signature ~ (Maybe (Gst.TagList) -> Gst.TagMergeMode -> m ()), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderMergeTagsMethodInfo a signature where
    overloadedMethod _ = videoEncoderMergeTags

-- method VideoEncoder::negotiate
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_negotiate" gst_video_encoder_negotiate :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    IO CInt


videoEncoderNegotiate ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> m Bool                               -- result
videoEncoderNegotiate _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_video_encoder_negotiate _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data VideoEncoderNegotiateMethodInfo
instance (signature ~ (m Bool), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderNegotiateMethodInfo a signature where
    overloadedMethod _ = videoEncoderNegotiate

-- method VideoEncoder::proxy_getcaps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "filter", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Caps"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_proxy_getcaps" gst_video_encoder_proxy_getcaps :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Ptr Gst.Caps ->                         -- caps : TInterface "Gst" "Caps"
    Ptr Gst.Caps ->                         -- filter : TInterface "Gst" "Caps"
    IO (Ptr Gst.Caps)


videoEncoderProxyGetcaps ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> Maybe (Gst.Caps)                     -- caps
    -> Maybe (Gst.Caps)                     -- filter
    -> m Gst.Caps                           -- result
videoEncoderProxyGetcaps _obj caps filter = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeCaps <- case caps of
        Nothing -> return nullPtr
        Just jCaps -> do
            let jCaps' = unsafeManagedPtrGetPtr jCaps
            return jCaps'
    maybeFilter <- case filter of
        Nothing -> return nullPtr
        Just jFilter -> do
            let jFilter' = unsafeManagedPtrGetPtr jFilter
            return jFilter'
    result <- gst_video_encoder_proxy_getcaps _obj' maybeCaps maybeFilter
    checkUnexpectedReturnNULL "gst_video_encoder_proxy_getcaps" result
    result' <- (wrapBoxed Gst.Caps) result
    touchManagedPtr _obj
    whenJust caps touchManagedPtr
    whenJust filter touchManagedPtr
    return result'

data VideoEncoderProxyGetcapsMethodInfo
instance (signature ~ (Maybe (Gst.Caps) -> Maybe (Gst.Caps) -> m Gst.Caps), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderProxyGetcapsMethodInfo a signature where
    overloadedMethod _ = videoEncoderProxyGetcaps

-- method VideoEncoder::set_headers
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "headers", argType = TGList (TInterface "Gst" "Buffer"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_set_headers" gst_video_encoder_set_headers :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Ptr (GList (Ptr Gst.Buffer)) ->         -- headers : TGList (TInterface "Gst" "Buffer")
    IO ()


videoEncoderSetHeaders ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> [Gst.Buffer]                         -- headers
    -> m ()                                 -- result
videoEncoderSetHeaders _obj headers = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    headers' <- mapM copyBoxed headers
    headers'' <- packGList headers'
    gst_video_encoder_set_headers _obj' headers''
    touchManagedPtr _obj
    mapM_ touchManagedPtr headers
    return ()

data VideoEncoderSetHeadersMethodInfo
instance (signature ~ ([Gst.Buffer] -> m ()), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderSetHeadersMethodInfo a signature where
    overloadedMethod _ = videoEncoderSetHeaders

-- method VideoEncoder::set_latency
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min_latency", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "max_latency", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_set_latency" gst_video_encoder_set_latency :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Word64 ->                               -- min_latency : TBasicType TUInt64
    Word64 ->                               -- max_latency : TBasicType TUInt64
    IO ()


videoEncoderSetLatency ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> Word64                               -- minLatency
    -> Word64                               -- maxLatency
    -> m ()                                 -- result
videoEncoderSetLatency _obj minLatency maxLatency = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_video_encoder_set_latency _obj' minLatency maxLatency
    touchManagedPtr _obj
    return ()

data VideoEncoderSetLatencyMethodInfo
instance (signature ~ (Word64 -> Word64 -> m ()), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderSetLatencyMethodInfo a signature where
    overloadedMethod _ = videoEncoderSetLatency

-- method VideoEncoder::set_min_pts
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min_pts", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_set_min_pts" gst_video_encoder_set_min_pts :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Word64 ->                               -- min_pts : TBasicType TUInt64
    IO ()


videoEncoderSetMinPts ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> Word64                               -- minPts
    -> m ()                                 -- result
videoEncoderSetMinPts _obj minPts = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_video_encoder_set_min_pts _obj' minPts
    touchManagedPtr _obj
    return ()

data VideoEncoderSetMinPtsMethodInfo
instance (signature ~ (Word64 -> m ()), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderSetMinPtsMethodInfo a signature where
    overloadedMethod _ = videoEncoderSetMinPts

-- method VideoEncoder::set_output_state
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "reference", argType = TInterface "GstVideo" "VideoCodecState", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "GstVideo" "VideoCodecState"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_encoder_set_output_state" gst_video_encoder_set_output_state :: 
    Ptr VideoEncoder ->                     -- _obj : TInterface "GstVideo" "VideoEncoder"
    Ptr Gst.Caps ->                         -- caps : TInterface "Gst" "Caps"
    Ptr VideoCodecState ->                  -- reference : TInterface "GstVideo" "VideoCodecState"
    IO (Ptr VideoCodecState)


videoEncoderSetOutputState ::
    (MonadIO m, VideoEncoderK a) =>
    a                                       -- _obj
    -> Gst.Caps                             -- caps
    -> Maybe (VideoCodecState)              -- reference
    -> m VideoCodecState                    -- result
videoEncoderSetOutputState _obj caps reference = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    caps' <- copyBoxed caps
    maybeReference <- case reference of
        Nothing -> return nullPtr
        Just jReference -> do
            let jReference' = unsafeManagedPtrGetPtr jReference
            return jReference'
    result <- gst_video_encoder_set_output_state _obj' caps' maybeReference
    checkUnexpectedReturnNULL "gst_video_encoder_set_output_state" result
    result' <- (wrapBoxed VideoCodecState) result
    touchManagedPtr _obj
    touchManagedPtr caps
    whenJust reference touchManagedPtr
    return result'

data VideoEncoderSetOutputStateMethodInfo
instance (signature ~ (Gst.Caps -> Maybe (VideoCodecState) -> m VideoCodecState), MonadIO m, VideoEncoderK a) => MethodInfo VideoEncoderSetOutputStateMethodInfo a signature where
    overloadedMethod _ = videoEncoderSetOutputState