packages feed

gi-gst-0.1.6.13: GI/Gst/Objects/Pad.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.Gst.Objects.Pad
    ( 

-- * Exported types
    Pad(..)                                 ,
    PadK                                    ,
    toPad                                   ,
    noPad                                   ,


 -- * Methods
-- ** padActivateMode
    PadActivateModeMethodInfo               ,
    padActivateMode                         ,


-- ** padAddProbe
    PadAddProbeMethodInfo                   ,
    padAddProbe                             ,


-- ** padCanLink
    PadCanLinkMethodInfo                    ,
    padCanLink                              ,


-- ** padChain
    PadChainMethodInfo                      ,
    padChain                                ,


-- ** padChainList
    PadChainListMethodInfo                  ,
    padChainList                            ,


-- ** padCheckReconfigure
    PadCheckReconfigureMethodInfo           ,
    padCheckReconfigure                     ,


-- ** padCreateStreamId
    PadCreateStreamIdMethodInfo             ,
    padCreateStreamId                       ,


-- ** padEventDefault
    PadEventDefaultMethodInfo               ,
    padEventDefault                         ,


-- ** padForward
    PadForwardMethodInfo                    ,
    padForward                              ,


-- ** padGetAllowedCaps
    PadGetAllowedCapsMethodInfo             ,
    padGetAllowedCaps                       ,


-- ** padGetCurrentCaps
    PadGetCurrentCapsMethodInfo             ,
    padGetCurrentCaps                       ,


-- ** padGetDirection
    PadGetDirectionMethodInfo               ,
    padGetDirection                         ,


-- ** padGetElementPrivate
    PadGetElementPrivateMethodInfo          ,
    padGetElementPrivate                    ,


-- ** padGetLastFlowReturn
    PadGetLastFlowReturnMethodInfo          ,
    padGetLastFlowReturn                    ,


-- ** padGetOffset
    PadGetOffsetMethodInfo                  ,
    padGetOffset                            ,


-- ** padGetPadTemplate
    PadGetPadTemplateMethodInfo             ,
    padGetPadTemplate                       ,


-- ** padGetPadTemplateCaps
    PadGetPadTemplateCapsMethodInfo         ,
    padGetPadTemplateCaps                   ,


-- ** padGetParentElement
    PadGetParentElementMethodInfo           ,
    padGetParentElement                     ,


-- ** padGetPeer
    PadGetPeerMethodInfo                    ,
    padGetPeer                              ,


-- ** padGetRange
    PadGetRangeMethodInfo                   ,
    padGetRange                             ,


-- ** padGetStickyEvent
    PadGetStickyEventMethodInfo             ,
    padGetStickyEvent                       ,


-- ** padGetStreamId
    PadGetStreamIdMethodInfo                ,
    padGetStreamId                          ,


-- ** padHasCurrentCaps
    PadHasCurrentCapsMethodInfo             ,
    padHasCurrentCaps                       ,


-- ** padIsActive
    PadIsActiveMethodInfo                   ,
    padIsActive                             ,


-- ** padIsBlocked
    PadIsBlockedMethodInfo                  ,
    padIsBlocked                            ,


-- ** padIsBlocking
    PadIsBlockingMethodInfo                 ,
    padIsBlocking                           ,


-- ** padIsLinked
    PadIsLinkedMethodInfo                   ,
    padIsLinked                             ,


-- ** padIterateInternalLinks
    PadIterateInternalLinksMethodInfo       ,
    padIterateInternalLinks                 ,


-- ** padIterateInternalLinksDefault
    PadIterateInternalLinksDefaultMethodInfo,
    padIterateInternalLinksDefault          ,


-- ** padLink
    PadLinkMethodInfo                       ,
    padLink                                 ,


-- ** padLinkFull
    PadLinkFullMethodInfo                   ,
    padLinkFull                             ,


-- ** padLinkGetName
    padLinkGetName                          ,


-- ** padMarkReconfigure
    PadMarkReconfigureMethodInfo            ,
    padMarkReconfigure                      ,


-- ** padNeedsReconfigure
    PadNeedsReconfigureMethodInfo           ,
    padNeedsReconfigure                     ,


-- ** padNew
    padNew                                  ,


-- ** padNewFromStaticTemplate
    padNewFromStaticTemplate                ,


-- ** padNewFromTemplate
    padNewFromTemplate                      ,


-- ** padPauseTask
    PadPauseTaskMethodInfo                  ,
    padPauseTask                            ,


-- ** padPeerQuery
    PadPeerQueryMethodInfo                  ,
    padPeerQuery                            ,


-- ** padPeerQueryAcceptCaps
    PadPeerQueryAcceptCapsMethodInfo        ,
    padPeerQueryAcceptCaps                  ,


-- ** padPeerQueryCaps
    PadPeerQueryCapsMethodInfo              ,
    padPeerQueryCaps                        ,


-- ** padPeerQueryConvert
    PadPeerQueryConvertMethodInfo           ,
    padPeerQueryConvert                     ,


-- ** padPeerQueryDuration
    PadPeerQueryDurationMethodInfo          ,
    padPeerQueryDuration                    ,


-- ** padPeerQueryPosition
    PadPeerQueryPositionMethodInfo          ,
    padPeerQueryPosition                    ,


-- ** padProxyQueryAcceptCaps
    PadProxyQueryAcceptCapsMethodInfo       ,
    padProxyQueryAcceptCaps                 ,


-- ** padProxyQueryCaps
    PadProxyQueryCapsMethodInfo             ,
    padProxyQueryCaps                       ,


-- ** padPullRange
    PadPullRangeMethodInfo                  ,
    padPullRange                            ,


-- ** padPush
    PadPushMethodInfo                       ,
    padPush                                 ,


-- ** padPushEvent
    PadPushEventMethodInfo                  ,
    padPushEvent                            ,


-- ** padPushList
    PadPushListMethodInfo                   ,
    padPushList                             ,


-- ** padQuery
    PadQueryMethodInfo                      ,
    padQuery                                ,


-- ** padQueryAcceptCaps
    PadQueryAcceptCapsMethodInfo            ,
    padQueryAcceptCaps                      ,


-- ** padQueryCaps
    PadQueryCapsMethodInfo                  ,
    padQueryCaps                            ,


-- ** padQueryConvert
    PadQueryConvertMethodInfo               ,
    padQueryConvert                         ,


-- ** padQueryDefault
    PadQueryDefaultMethodInfo               ,
    padQueryDefault                         ,


-- ** padQueryDuration
    PadQueryDurationMethodInfo              ,
    padQueryDuration                        ,


-- ** padQueryPosition
    PadQueryPositionMethodInfo              ,
    padQueryPosition                        ,


-- ** padRemoveProbe
    PadRemoveProbeMethodInfo                ,
    padRemoveProbe                          ,


-- ** padSendEvent
    PadSendEventMethodInfo                  ,
    padSendEvent                            ,


-- ** padSetActivateFunctionFull
    PadSetActivateFunctionFullMethodInfo    ,
    padSetActivateFunctionFull              ,


-- ** padSetActivatemodeFunctionFull
    PadSetActivatemodeFunctionFullMethodInfo,
    padSetActivatemodeFunctionFull          ,


-- ** padSetActive
    PadSetActiveMethodInfo                  ,
    padSetActive                            ,


-- ** padSetChainFunctionFull
    PadSetChainFunctionFullMethodInfo       ,
    padSetChainFunctionFull                 ,


-- ** padSetChainListFunctionFull
    PadSetChainListFunctionFullMethodInfo   ,
    padSetChainListFunctionFull             ,


-- ** padSetElementPrivate
    PadSetElementPrivateMethodInfo          ,
    padSetElementPrivate                    ,


-- ** padSetEventFunctionFull
    PadSetEventFunctionFullMethodInfo       ,
    padSetEventFunctionFull                 ,


-- ** padSetGetrangeFunctionFull
    PadSetGetrangeFunctionFullMethodInfo    ,
    padSetGetrangeFunctionFull              ,


-- ** padSetIterateInternalLinksFunctionFull
    PadSetIterateInternalLinksFunctionFullMethodInfo,
    padSetIterateInternalLinksFunctionFull  ,


-- ** padSetLinkFunctionFull
    PadSetLinkFunctionFullMethodInfo        ,
    padSetLinkFunctionFull                  ,


-- ** padSetOffset
    PadSetOffsetMethodInfo                  ,
    padSetOffset                            ,


-- ** padSetQueryFunctionFull
    PadSetQueryFunctionFullMethodInfo       ,
    padSetQueryFunctionFull                 ,


-- ** padSetUnlinkFunctionFull
    PadSetUnlinkFunctionFullMethodInfo      ,
    padSetUnlinkFunctionFull                ,


-- ** padStartTask
    PadStartTaskMethodInfo                  ,
    padStartTask                            ,


-- ** padStickyEventsForeach
    PadStickyEventsForeachMethodInfo        ,
    padStickyEventsForeach                  ,


-- ** padStopTask
    PadStopTaskMethodInfo                   ,
    padStopTask                             ,


-- ** padStoreStickyEvent
    PadStoreStickyEventMethodInfo           ,
    padStoreStickyEvent                     ,


-- ** padUnlink
    PadUnlinkMethodInfo                     ,
    padUnlink                               ,


-- ** padUseFixedCaps
    PadUseFixedCapsMethodInfo               ,
    padUseFixedCaps                         ,




 -- * Properties
-- ** Caps
    PadCapsPropertyInfo                     ,
    getPadCaps                              ,


-- ** Direction
    PadDirectionPropertyInfo                ,
    constructPadDirection                   ,
    getPadDirection                         ,


-- ** Offset
    PadOffsetPropertyInfo                   ,
    constructPadOffset                      ,
    getPadOffset                            ,
    setPadOffset                            ,


-- ** Template
    PadTemplatePropertyInfo                 ,
    constructPadTemplate                    ,
    getPadTemplate                          ,
    setPadTemplate                          ,




 -- * Signals
-- ** Linked
    PadLinkedCallback                       ,
    PadLinkedCallbackC                      ,
    PadLinkedSignalInfo                     ,
    afterPadLinked                          ,
    mkPadLinkedCallback                     ,
    noPadLinkedCallback                     ,
    onPadLinked                             ,
    padLinkedCallbackWrapper                ,
    padLinkedClosure                        ,


-- ** Unlinked
    PadUnlinkedCallback                     ,
    PadUnlinkedCallbackC                    ,
    PadUnlinkedSignalInfo                   ,
    afterPadUnlinked                        ,
    mkPadUnlinkedCallback                   ,
    noPadUnlinkedCallback                   ,
    onPadUnlinked                           ,
    padUnlinkedCallbackWrapper              ,
    padUnlinkedClosure                      ,




    ) 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.Gst.Types
import GI.Gst.Callbacks
import qualified GI.GLib as GLib
import qualified GI.GObject as GObject

newtype Pad = Pad (ForeignPtr Pad)
foreign import ccall "gst_pad_get_type"
    c_gst_pad_get_type :: IO GType

type instance ParentTypes Pad = PadParentTypes
type PadParentTypes = '[Object, GObject.Object]

instance GObject Pad where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gst_pad_get_type
    

class GObject o => PadK o
instance (GObject o, IsDescendantOf Pad o) => PadK o

toPad :: PadK o => o -> IO Pad
toPad = unsafeCastTo Pad

noPad :: Maybe Pad
noPad = Nothing

type family ResolvePadMethod (t :: Symbol) (o :: *) :: * where
    ResolvePadMethod "activateMode" o = PadActivateModeMethodInfo
    ResolvePadMethod "addControlBinding" o = ObjectAddControlBindingMethodInfo
    ResolvePadMethod "addProbe" o = PadAddProbeMethodInfo
    ResolvePadMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
    ResolvePadMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
    ResolvePadMethod "canLink" o = PadCanLinkMethodInfo
    ResolvePadMethod "chain" o = PadChainMethodInfo
    ResolvePadMethod "chainList" o = PadChainListMethodInfo
    ResolvePadMethod "checkReconfigure" o = PadCheckReconfigureMethodInfo
    ResolvePadMethod "createStreamId" o = PadCreateStreamIdMethodInfo
    ResolvePadMethod "defaultError" o = ObjectDefaultErrorMethodInfo
    ResolvePadMethod "eventDefault" o = PadEventDefaultMethodInfo
    ResolvePadMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
    ResolvePadMethod "forward" o = PadForwardMethodInfo
    ResolvePadMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
    ResolvePadMethod "hasActiveControlBindings" o = ObjectHasActiveControlBindingsMethodInfo
    ResolvePadMethod "hasAncestor" o = ObjectHasAncestorMethodInfo
    ResolvePadMethod "hasAsAncestor" o = ObjectHasAsAncestorMethodInfo
    ResolvePadMethod "hasAsParent" o = ObjectHasAsParentMethodInfo
    ResolvePadMethod "hasCurrentCaps" o = PadHasCurrentCapsMethodInfo
    ResolvePadMethod "isActive" o = PadIsActiveMethodInfo
    ResolvePadMethod "isBlocked" o = PadIsBlockedMethodInfo
    ResolvePadMethod "isBlocking" o = PadIsBlockingMethodInfo
    ResolvePadMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
    ResolvePadMethod "isLinked" o = PadIsLinkedMethodInfo
    ResolvePadMethod "iterateInternalLinks" o = PadIterateInternalLinksMethodInfo
    ResolvePadMethod "iterateInternalLinksDefault" o = PadIterateInternalLinksDefaultMethodInfo
    ResolvePadMethod "link" o = PadLinkMethodInfo
    ResolvePadMethod "linkFull" o = PadLinkFullMethodInfo
    ResolvePadMethod "markReconfigure" o = PadMarkReconfigureMethodInfo
    ResolvePadMethod "needsReconfigure" o = PadNeedsReconfigureMethodInfo
    ResolvePadMethod "notify" o = GObject.ObjectNotifyMethodInfo
    ResolvePadMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
    ResolvePadMethod "pauseTask" o = PadPauseTaskMethodInfo
    ResolvePadMethod "peerQuery" o = PadPeerQueryMethodInfo
    ResolvePadMethod "peerQueryAcceptCaps" o = PadPeerQueryAcceptCapsMethodInfo
    ResolvePadMethod "peerQueryCaps" o = PadPeerQueryCapsMethodInfo
    ResolvePadMethod "peerQueryConvert" o = PadPeerQueryConvertMethodInfo
    ResolvePadMethod "peerQueryDuration" o = PadPeerQueryDurationMethodInfo
    ResolvePadMethod "peerQueryPosition" o = PadPeerQueryPositionMethodInfo
    ResolvePadMethod "proxyQueryAcceptCaps" o = PadProxyQueryAcceptCapsMethodInfo
    ResolvePadMethod "proxyQueryCaps" o = PadProxyQueryCapsMethodInfo
    ResolvePadMethod "pullRange" o = PadPullRangeMethodInfo
    ResolvePadMethod "push" o = PadPushMethodInfo
    ResolvePadMethod "pushEvent" o = PadPushEventMethodInfo
    ResolvePadMethod "pushList" o = PadPushListMethodInfo
    ResolvePadMethod "query" o = PadQueryMethodInfo
    ResolvePadMethod "queryAcceptCaps" o = PadQueryAcceptCapsMethodInfo
    ResolvePadMethod "queryCaps" o = PadQueryCapsMethodInfo
    ResolvePadMethod "queryConvert" o = PadQueryConvertMethodInfo
    ResolvePadMethod "queryDefault" o = PadQueryDefaultMethodInfo
    ResolvePadMethod "queryDuration" o = PadQueryDurationMethodInfo
    ResolvePadMethod "queryPosition" o = PadQueryPositionMethodInfo
    ResolvePadMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
    ResolvePadMethod "removeControlBinding" o = ObjectRemoveControlBindingMethodInfo
    ResolvePadMethod "removeProbe" o = PadRemoveProbeMethodInfo
    ResolvePadMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
    ResolvePadMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
    ResolvePadMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
    ResolvePadMethod "sendEvent" o = PadSendEventMethodInfo
    ResolvePadMethod "startTask" o = PadStartTaskMethodInfo
    ResolvePadMethod "stealData" o = GObject.ObjectStealDataMethodInfo
    ResolvePadMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
    ResolvePadMethod "stickyEventsForeach" o = PadStickyEventsForeachMethodInfo
    ResolvePadMethod "stopTask" o = PadStopTaskMethodInfo
    ResolvePadMethod "storeStickyEvent" o = PadStoreStickyEventMethodInfo
    ResolvePadMethod "suggestNextSync" o = ObjectSuggestNextSyncMethodInfo
    ResolvePadMethod "syncValues" o = ObjectSyncValuesMethodInfo
    ResolvePadMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
    ResolvePadMethod "unlink" o = PadUnlinkMethodInfo
    ResolvePadMethod "unparent" o = ObjectUnparentMethodInfo
    ResolvePadMethod "useFixedCaps" o = PadUseFixedCapsMethodInfo
    ResolvePadMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
    ResolvePadMethod "getAllowedCaps" o = PadGetAllowedCapsMethodInfo
    ResolvePadMethod "getControlBinding" o = ObjectGetControlBindingMethodInfo
    ResolvePadMethod "getControlRate" o = ObjectGetControlRateMethodInfo
    ResolvePadMethod "getCurrentCaps" o = PadGetCurrentCapsMethodInfo
    ResolvePadMethod "getData" o = GObject.ObjectGetDataMethodInfo
    ResolvePadMethod "getDirection" o = PadGetDirectionMethodInfo
    ResolvePadMethod "getElementPrivate" o = PadGetElementPrivateMethodInfo
    ResolvePadMethod "getGValueArray" o = ObjectGetGValueArrayMethodInfo
    ResolvePadMethod "getLastFlowReturn" o = PadGetLastFlowReturnMethodInfo
    ResolvePadMethod "getName" o = ObjectGetNameMethodInfo
    ResolvePadMethod "getOffset" o = PadGetOffsetMethodInfo
    ResolvePadMethod "getPadTemplate" o = PadGetPadTemplateMethodInfo
    ResolvePadMethod "getPadTemplateCaps" o = PadGetPadTemplateCapsMethodInfo
    ResolvePadMethod "getParent" o = ObjectGetParentMethodInfo
    ResolvePadMethod "getParentElement" o = PadGetParentElementMethodInfo
    ResolvePadMethod "getPathString" o = ObjectGetPathStringMethodInfo
    ResolvePadMethod "getPeer" o = PadGetPeerMethodInfo
    ResolvePadMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
    ResolvePadMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
    ResolvePadMethod "getRange" o = PadGetRangeMethodInfo
    ResolvePadMethod "getStickyEvent" o = PadGetStickyEventMethodInfo
    ResolvePadMethod "getStreamId" o = PadGetStreamIdMethodInfo
    ResolvePadMethod "getValue" o = ObjectGetValueMethodInfo
    ResolvePadMethod "getValueArray" o = ObjectGetValueArrayMethodInfo
    ResolvePadMethod "setActivateFunctionFull" o = PadSetActivateFunctionFullMethodInfo
    ResolvePadMethod "setActivatemodeFunctionFull" o = PadSetActivatemodeFunctionFullMethodInfo
    ResolvePadMethod "setActive" o = PadSetActiveMethodInfo
    ResolvePadMethod "setChainFunctionFull" o = PadSetChainFunctionFullMethodInfo
    ResolvePadMethod "setChainListFunctionFull" o = PadSetChainListFunctionFullMethodInfo
    ResolvePadMethod "setControlBindingDisabled" o = ObjectSetControlBindingDisabledMethodInfo
    ResolvePadMethod "setControlBindingsDisabled" o = ObjectSetControlBindingsDisabledMethodInfo
    ResolvePadMethod "setControlRate" o = ObjectSetControlRateMethodInfo
    ResolvePadMethod "setData" o = GObject.ObjectSetDataMethodInfo
    ResolvePadMethod "setElementPrivate" o = PadSetElementPrivateMethodInfo
    ResolvePadMethod "setEventFunctionFull" o = PadSetEventFunctionFullMethodInfo
    ResolvePadMethod "setGetrangeFunctionFull" o = PadSetGetrangeFunctionFullMethodInfo
    ResolvePadMethod "setIterateInternalLinksFunctionFull" o = PadSetIterateInternalLinksFunctionFullMethodInfo
    ResolvePadMethod "setLinkFunctionFull" o = PadSetLinkFunctionFullMethodInfo
    ResolvePadMethod "setName" o = ObjectSetNameMethodInfo
    ResolvePadMethod "setOffset" o = PadSetOffsetMethodInfo
    ResolvePadMethod "setParent" o = ObjectSetParentMethodInfo
    ResolvePadMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
    ResolvePadMethod "setQueryFunctionFull" o = PadSetQueryFunctionFullMethodInfo
    ResolvePadMethod "setUnlinkFunctionFull" o = PadSetUnlinkFunctionFullMethodInfo
    ResolvePadMethod l o = MethodResolutionFailed l o

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

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

-- signal Pad::linked
type PadLinkedCallback =
    Pad ->
    IO ()

noPadLinkedCallback :: Maybe PadLinkedCallback
noPadLinkedCallback = Nothing

type PadLinkedCallbackC =
    Ptr () ->                               -- object
    Ptr Pad ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkPadLinkedCallback :: PadLinkedCallbackC -> IO (FunPtr PadLinkedCallbackC)

padLinkedClosure :: PadLinkedCallback -> IO Closure
padLinkedClosure cb = newCClosure =<< mkPadLinkedCallback wrapped
    where wrapped = padLinkedCallbackWrapper cb

padLinkedCallbackWrapper ::
    PadLinkedCallback ->
    Ptr () ->
    Ptr Pad ->
    Ptr () ->
    IO ()
padLinkedCallbackWrapper _cb _ peer _ = do
    peer' <- (newObject Pad) peer
    _cb  peer'

onPadLinked :: (GObject a, MonadIO m) => a -> PadLinkedCallback -> m SignalHandlerId
onPadLinked obj cb = liftIO $ connectPadLinked obj cb SignalConnectBefore
afterPadLinked :: (GObject a, MonadIO m) => a -> PadLinkedCallback -> m SignalHandlerId
afterPadLinked obj cb = connectPadLinked obj cb SignalConnectAfter

connectPadLinked :: (GObject a, MonadIO m) =>
                    a -> PadLinkedCallback -> SignalConnectMode -> m SignalHandlerId
connectPadLinked obj cb after = liftIO $ do
    cb' <- mkPadLinkedCallback (padLinkedCallbackWrapper cb)
    connectSignalFunPtr obj "linked" cb' after

-- signal Pad::unlinked
type PadUnlinkedCallback =
    Pad ->
    IO ()

noPadUnlinkedCallback :: Maybe PadUnlinkedCallback
noPadUnlinkedCallback = Nothing

type PadUnlinkedCallbackC =
    Ptr () ->                               -- object
    Ptr Pad ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkPadUnlinkedCallback :: PadUnlinkedCallbackC -> IO (FunPtr PadUnlinkedCallbackC)

padUnlinkedClosure :: PadUnlinkedCallback -> IO Closure
padUnlinkedClosure cb = newCClosure =<< mkPadUnlinkedCallback wrapped
    where wrapped = padUnlinkedCallbackWrapper cb

padUnlinkedCallbackWrapper ::
    PadUnlinkedCallback ->
    Ptr () ->
    Ptr Pad ->
    Ptr () ->
    IO ()
padUnlinkedCallbackWrapper _cb _ peer _ = do
    peer' <- (newObject Pad) peer
    _cb  peer'

onPadUnlinked :: (GObject a, MonadIO m) => a -> PadUnlinkedCallback -> m SignalHandlerId
onPadUnlinked obj cb = liftIO $ connectPadUnlinked obj cb SignalConnectBefore
afterPadUnlinked :: (GObject a, MonadIO m) => a -> PadUnlinkedCallback -> m SignalHandlerId
afterPadUnlinked obj cb = connectPadUnlinked obj cb SignalConnectAfter

connectPadUnlinked :: (GObject a, MonadIO m) =>
                      a -> PadUnlinkedCallback -> SignalConnectMode -> m SignalHandlerId
connectPadUnlinked obj cb after = liftIO $ do
    cb' <- mkPadUnlinkedCallback (padUnlinkedCallbackWrapper cb)
    connectSignalFunPtr obj "unlinked" cb' after

-- VVV Prop "caps"
   -- Type: TInterface "Gst" "Caps"
   -- Flags: [PropertyReadable]

getPadCaps :: (MonadIO m, PadK o) => o -> m Caps
getPadCaps obj = liftIO $ getObjectPropertyBoxed obj "caps" Caps

data PadCapsPropertyInfo
instance AttrInfo PadCapsPropertyInfo where
    type AttrAllowedOps PadCapsPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint PadCapsPropertyInfo = (~) ()
    type AttrBaseTypeConstraint PadCapsPropertyInfo = PadK
    type AttrGetType PadCapsPropertyInfo = Caps
    type AttrLabel PadCapsPropertyInfo = "caps"
    attrGet _ = getPadCaps
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "direction"
   -- Type: TInterface "Gst" "PadDirection"
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]

getPadDirection :: (MonadIO m, PadK o) => o -> m PadDirection
getPadDirection obj = liftIO $ getObjectPropertyEnum obj "direction"

constructPadDirection :: PadDirection -> IO ([Char], GValue)
constructPadDirection val = constructObjectPropertyEnum "direction" val

data PadDirectionPropertyInfo
instance AttrInfo PadDirectionPropertyInfo where
    type AttrAllowedOps PadDirectionPropertyInfo = '[ 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint PadDirectionPropertyInfo = (~) PadDirection
    type AttrBaseTypeConstraint PadDirectionPropertyInfo = PadK
    type AttrGetType PadDirectionPropertyInfo = PadDirection
    type AttrLabel PadDirectionPropertyInfo = "direction"
    attrGet _ = getPadDirection
    attrSet _ = undefined
    attrConstruct _ = constructPadDirection

-- VVV Prop "offset"
   -- Type: TBasicType TInt64
   -- Flags: [PropertyReadable,PropertyWritable]

getPadOffset :: (MonadIO m, PadK o) => o -> m Int64
getPadOffset obj = liftIO $ getObjectPropertyInt64 obj "offset"

setPadOffset :: (MonadIO m, PadK o) => o -> Int64 -> m ()
setPadOffset obj val = liftIO $ setObjectPropertyInt64 obj "offset" val

constructPadOffset :: Int64 -> IO ([Char], GValue)
constructPadOffset val = constructObjectPropertyInt64 "offset" val

data PadOffsetPropertyInfo
instance AttrInfo PadOffsetPropertyInfo where
    type AttrAllowedOps PadOffsetPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint PadOffsetPropertyInfo = (~) Int64
    type AttrBaseTypeConstraint PadOffsetPropertyInfo = PadK
    type AttrGetType PadOffsetPropertyInfo = Int64
    type AttrLabel PadOffsetPropertyInfo = "offset"
    attrGet _ = getPadOffset
    attrSet _ = setPadOffset
    attrConstruct _ = constructPadOffset

-- VVV Prop "template"
   -- Type: TInterface "Gst" "PadTemplate"
   -- Flags: [PropertyReadable,PropertyWritable]

getPadTemplate :: (MonadIO m, PadK o) => o -> m PadTemplate
getPadTemplate obj = liftIO $ getObjectPropertyObject obj "template" PadTemplate

setPadTemplate :: (MonadIO m, PadK o, PadTemplateK a) => o -> a -> m ()
setPadTemplate obj val = liftIO $ setObjectPropertyObject obj "template" val

constructPadTemplate :: (PadTemplateK a) => a -> IO ([Char], GValue)
constructPadTemplate val = constructObjectPropertyObject "template" val

data PadTemplatePropertyInfo
instance AttrInfo PadTemplatePropertyInfo where
    type AttrAllowedOps PadTemplatePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint PadTemplatePropertyInfo = PadTemplateK
    type AttrBaseTypeConstraint PadTemplatePropertyInfo = PadK
    type AttrGetType PadTemplatePropertyInfo = PadTemplate
    type AttrLabel PadTemplatePropertyInfo = "template"
    attrGet _ = getPadTemplate
    attrSet _ = setPadTemplate
    attrConstruct _ = constructPadTemplate

type instance AttributeList Pad = PadAttributeList
type PadAttributeList = ('[ '("caps", PadCapsPropertyInfo), '("direction", PadDirectionPropertyInfo), '("name", ObjectNamePropertyInfo), '("offset", PadOffsetPropertyInfo), '("parent", ObjectParentPropertyInfo), '("template", PadTemplatePropertyInfo)] :: [(Symbol, *)])

data PadLinkedSignalInfo
instance SignalInfo PadLinkedSignalInfo where
    type HaskellCallbackType PadLinkedSignalInfo = PadLinkedCallback
    connectSignal _ = connectPadLinked

data PadUnlinkedSignalInfo
instance SignalInfo PadUnlinkedSignalInfo where
    type HaskellCallbackType PadUnlinkedSignalInfo = PadUnlinkedCallback
    connectSignal _ = connectPadUnlinked

type instance SignalList Pad = PadSignalList
type PadSignalList = ('[ '("deepNotify", ObjectDeepNotifySignalInfo), '("linked", PadLinkedSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("unlinked", PadUnlinkedSignalInfo)] :: [(Symbol, *)])

-- method Pad::new
-- method type : Constructor
-- Args : [Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "direction", argType = TInterface "Gst" "PadDirection", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Pad"
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_new" gst_pad_new :: 
    CString ->                              -- name : TBasicType TUTF8
    CUInt ->                                -- direction : TInterface "Gst" "PadDirection"
    IO (Ptr Pad)


padNew ::
    (MonadIO m) =>
    Maybe (T.Text)                          -- name
    -> PadDirection                         -- direction
    -> m Pad                                -- result
padNew name direction = liftIO $ do
    maybeName <- case name of
        Nothing -> return nullPtr
        Just jName -> do
            jName' <- textToCString jName
            return jName'
    let direction' = (fromIntegral . fromEnum) direction
    result <- gst_pad_new maybeName direction'
    checkUnexpectedReturnNULL "gst_pad_new" result
    result' <- (newObject Pad) result
    freeMem maybeName
    return result'

-- method Pad::new_from_static_template
-- method type : Constructor
-- Args : [Arg {argCName = "templ", argType = TInterface "Gst" "StaticPadTemplate", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Pad"
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_new_from_static_template" gst_pad_new_from_static_template :: 
    Ptr StaticPadTemplate ->                -- templ : TInterface "Gst" "StaticPadTemplate"
    CString ->                              -- name : TBasicType TUTF8
    IO (Ptr Pad)


padNewFromStaticTemplate ::
    (MonadIO m) =>
    StaticPadTemplate                       -- templ
    -> T.Text                               -- name
    -> m Pad                                -- result
padNewFromStaticTemplate templ name = liftIO $ do
    let templ' = unsafeManagedPtrGetPtr templ
    name' <- textToCString name
    result <- gst_pad_new_from_static_template templ' name'
    checkUnexpectedReturnNULL "gst_pad_new_from_static_template" result
    result' <- (newObject Pad) result
    touchManagedPtr templ
    freeMem name'
    return result'

-- method Pad::new_from_template
-- method type : Constructor
-- Args : [Arg {argCName = "templ", argType = TInterface "Gst" "PadTemplate", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Pad"
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_new_from_template" gst_pad_new_from_template :: 
    Ptr PadTemplate ->                      -- templ : TInterface "Gst" "PadTemplate"
    CString ->                              -- name : TBasicType TUTF8
    IO (Ptr Pad)


padNewFromTemplate ::
    (MonadIO m, PadTemplateK a) =>
    a                                       -- templ
    -> Maybe (T.Text)                       -- name
    -> m Pad                                -- result
padNewFromTemplate templ name = liftIO $ do
    let templ' = unsafeManagedPtrCastPtr templ
    maybeName <- case name of
        Nothing -> return nullPtr
        Just jName -> do
            jName' <- textToCString jName
            return jName'
    result <- gst_pad_new_from_template templ' maybeName
    checkUnexpectedReturnNULL "gst_pad_new_from_template" result
    result' <- (newObject Pad) result
    touchManagedPtr templ
    freeMem maybeName
    return result'

-- method Pad::activate_mode
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface "Gst" "PadMode", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "active", argType = TBasicType TBoolean, 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_pad_activate_mode" gst_pad_activate_mode :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- mode : TInterface "Gst" "PadMode"
    CInt ->                                 -- active : TBasicType TBoolean
    IO CInt


padActivateMode ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadMode                              -- mode
    -> Bool                                 -- active
    -> m Bool                               -- result
padActivateMode _obj mode active = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let mode' = (fromIntegral . fromEnum) mode
    let active' = (fromIntegral . fromEnum) active
    result <- gst_pad_activate_mode _obj' mode' active'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data PadActivateModeMethodInfo
instance (signature ~ (PadMode -> Bool -> m Bool), MonadIO m, PadK a) => MethodInfo PadActivateModeMethodInfo a signature where
    overloadedMethod _ = padActivateMode

-- method Pad::add_probe
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mask", argType = TInterface "Gst" "PadProbeType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface "Gst" "PadProbeCallback", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 3, argDestroy = 4, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_data", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TUInt64
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_add_probe" gst_pad_add_probe :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- mask : TInterface "Gst" "PadProbeType"
    FunPtr PadProbeCallbackC ->             -- callback : TInterface "Gst" "PadProbeCallback"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- destroy_data : TInterface "GLib" "DestroyNotify"
    IO Word64


padAddProbe ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> [PadProbeType]                       -- mask
    -> PadProbeCallback                     -- callback
    -> m Word64                             -- result
padAddProbe _obj mask callback = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let mask' = gflagsToWord mask
    callback' <- mkPadProbeCallback (padProbeCallbackWrapper Nothing callback)
    let userData = castFunPtrToPtr callback'
    let destroyData = safeFreeFunPtrPtr
    result <- gst_pad_add_probe _obj' mask' callback' userData destroyData
    touchManagedPtr _obj
    return result

data PadAddProbeMethodInfo
instance (signature ~ ([PadProbeType] -> PadProbeCallback -> m Word64), MonadIO m, PadK a) => MethodInfo PadAddProbeMethodInfo a signature where
    overloadedMethod _ = padAddProbe

-- method Pad::can_link
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sinkpad", argType = TInterface "Gst" "Pad", 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_pad_can_link" gst_pad_can_link :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Pad ->                              -- sinkpad : TInterface "Gst" "Pad"
    IO CInt


padCanLink ::
    (MonadIO m, PadK a, PadK b) =>
    a                                       -- _obj
    -> b                                    -- sinkpad
    -> m Bool                               -- result
padCanLink _obj sinkpad = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let sinkpad' = unsafeManagedPtrCastPtr sinkpad
    result <- gst_pad_can_link _obj' sinkpad'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr sinkpad
    return result'

data PadCanLinkMethodInfo
instance (signature ~ (b -> m Bool), MonadIO m, PadK a, PadK b) => MethodInfo PadCanLinkMethodInfo a signature where
    overloadedMethod _ = padCanLink

-- method Pad::chain
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", 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_pad_chain" gst_pad_chain :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Buffer ->                           -- buffer : TInterface "Gst" "Buffer"
    IO CUInt


padChain ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Buffer                               -- buffer
    -> m FlowReturn                         -- result
padChain _obj buffer = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    buffer' <- copyBoxed buffer
    result <- gst_pad_chain _obj' buffer'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr buffer
    return result'

data PadChainMethodInfo
instance (signature ~ (Buffer -> m FlowReturn), MonadIO m, PadK a) => MethodInfo PadChainMethodInfo a signature where
    overloadedMethod _ = padChain

-- method Pad::chain_list
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "list", argType = TInterface "Gst" "BufferList", 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_pad_chain_list" gst_pad_chain_list :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr BufferList ->                       -- list : TInterface "Gst" "BufferList"
    IO CUInt


padChainList ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> BufferList                           -- list
    -> m FlowReturn                         -- result
padChainList _obj list = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    list' <- copyBoxed list
    result <- gst_pad_chain_list _obj' list'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr list
    return result'

data PadChainListMethodInfo
instance (signature ~ (BufferList -> m FlowReturn), MonadIO m, PadK a) => MethodInfo PadChainListMethodInfo a signature where
    overloadedMethod _ = padChainList

-- method Pad::check_reconfigure
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_check_reconfigure" gst_pad_check_reconfigure :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadCheckReconfigureMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadCheckReconfigureMethodInfo a signature where
    overloadedMethod _ = padCheckReconfigure

-- method Pad::create_stream_id
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "parent", argType = TInterface "Gst" "Element", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stream_id", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_create_stream_id" gst_pad_create_stream_id :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Element ->                          -- parent : TInterface "Gst" "Element"
    CString ->                              -- stream_id : TBasicType TUTF8
    IO CString


padCreateStreamId ::
    (MonadIO m, PadK a, ElementK b) =>
    a                                       -- _obj
    -> b                                    -- parent
    -> Maybe (T.Text)                       -- streamId
    -> m T.Text                             -- result
padCreateStreamId _obj parent streamId = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let parent' = unsafeManagedPtrCastPtr parent
    maybeStreamId <- case streamId of
        Nothing -> return nullPtr
        Just jStreamId -> do
            jStreamId' <- textToCString jStreamId
            return jStreamId'
    result <- gst_pad_create_stream_id _obj' parent' maybeStreamId
    checkUnexpectedReturnNULL "gst_pad_create_stream_id" result
    result' <- cstringToText result
    freeMem result
    touchManagedPtr _obj
    touchManagedPtr parent
    freeMem maybeStreamId
    return result'

data PadCreateStreamIdMethodInfo
instance (signature ~ (b -> Maybe (T.Text) -> m T.Text), MonadIO m, PadK a, ElementK b) => MethodInfo PadCreateStreamIdMethodInfo a signature where
    overloadedMethod _ = padCreateStreamId

-- method Pad::event_default
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "parent", argType = TInterface "Gst" "Object", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "event", argType = TInterface "Gst" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_event_default" gst_pad_event_default :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Object ->                           -- parent : TInterface "Gst" "Object"
    Ptr Event ->                            -- event : TInterface "Gst" "Event"
    IO CInt


padEventDefault ::
    (MonadIO m, PadK a, ObjectK b) =>
    a                                       -- _obj
    -> Maybe (b)                            -- parent
    -> Event                                -- event
    -> m Bool                               -- result
padEventDefault _obj parent event = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeParent <- case parent of
        Nothing -> return nullPtr
        Just jParent -> do
            let jParent' = unsafeManagedPtrCastPtr jParent
            return jParent'
    event' <- copyBoxed event
    result <- gst_pad_event_default _obj' maybeParent event'
    let result' = (/= 0) result
    touchManagedPtr _obj
    whenJust parent touchManagedPtr
    touchManagedPtr event
    return result'

data PadEventDefaultMethodInfo
instance (signature ~ (Maybe (b) -> Event -> m Bool), MonadIO m, PadK a, ObjectK b) => MethodInfo PadEventDefaultMethodInfo a signature where
    overloadedMethod _ = padEventDefault

-- method Pad::forward
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "forward", argType = TInterface "Gst" "PadForwardFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeCall, argClosure = 2, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, 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_pad_forward" gst_pad_forward :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadForwardFunctionC ->           -- forward : TInterface "Gst" "PadForwardFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    IO CInt


padForward ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadForwardFunction                   -- forward
    -> m Bool                               -- result
padForward _obj forward = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    forward' <- mkPadForwardFunction (padForwardFunctionWrapper Nothing forward)
    let userData = nullPtr
    result <- gst_pad_forward _obj' forward' userData
    let result' = (/= 0) result
    safeFreeFunPtr $ castFunPtrToPtr forward'
    touchManagedPtr _obj
    return result'

data PadForwardMethodInfo
instance (signature ~ (PadForwardFunction -> m Bool), MonadIO m, PadK a) => MethodInfo PadForwardMethodInfo a signature where
    overloadedMethod _ = padForward

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

foreign import ccall "gst_pad_get_allowed_caps" gst_pad_get_allowed_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO (Ptr Caps)


padGetAllowedCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m Caps                               -- result
padGetAllowedCaps _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_allowed_caps _obj'
    checkUnexpectedReturnNULL "gst_pad_get_allowed_caps" result
    result' <- (wrapBoxed Caps) result
    touchManagedPtr _obj
    return result'

data PadGetAllowedCapsMethodInfo
instance (signature ~ (m Caps), MonadIO m, PadK a) => MethodInfo PadGetAllowedCapsMethodInfo a signature where
    overloadedMethod _ = padGetAllowedCaps

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

foreign import ccall "gst_pad_get_current_caps" gst_pad_get_current_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO (Ptr Caps)


padGetCurrentCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m Caps                               -- result
padGetCurrentCaps _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_current_caps _obj'
    checkUnexpectedReturnNULL "gst_pad_get_current_caps" result
    result' <- (wrapBoxed Caps) result
    touchManagedPtr _obj
    return result'

data PadGetCurrentCapsMethodInfo
instance (signature ~ (m Caps), MonadIO m, PadK a) => MethodInfo PadGetCurrentCapsMethodInfo a signature where
    overloadedMethod _ = padGetCurrentCaps

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

foreign import ccall "gst_pad_get_direction" gst_pad_get_direction :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CUInt


padGetDirection ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m PadDirection                       -- result
padGetDirection _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_direction _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

data PadGetDirectionMethodInfo
instance (signature ~ (m PadDirection), MonadIO m, PadK a) => MethodInfo PadGetDirectionMethodInfo a signature where
    overloadedMethod _ = padGetDirection

-- method Pad::get_element_private
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_get_element_private" gst_pad_get_element_private :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO ()


padGetElementPrivate ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m ()                                 -- result
padGetElementPrivate _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_pad_get_element_private _obj'
    touchManagedPtr _obj
    return ()

data PadGetElementPrivateMethodInfo
instance (signature ~ (m ()), MonadIO m, PadK a) => MethodInfo PadGetElementPrivateMethodInfo a signature where
    overloadedMethod _ = padGetElementPrivate

-- method Pad::get_last_flow_return
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_get_last_flow_return" gst_pad_get_last_flow_return :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CUInt


padGetLastFlowReturn ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m FlowReturn                         -- result
padGetLastFlowReturn _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_last_flow_return _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

data PadGetLastFlowReturnMethodInfo
instance (signature ~ (m FlowReturn), MonadIO m, PadK a) => MethodInfo PadGetLastFlowReturnMethodInfo a signature where
    overloadedMethod _ = padGetLastFlowReturn

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

foreign import ccall "gst_pad_get_offset" gst_pad_get_offset :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO Int64


padGetOffset ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m Int64                              -- result
padGetOffset _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_offset _obj'
    touchManagedPtr _obj
    return result

data PadGetOffsetMethodInfo
instance (signature ~ (m Int64), MonadIO m, PadK a) => MethodInfo PadGetOffsetMethodInfo a signature where
    overloadedMethod _ = padGetOffset

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

foreign import ccall "gst_pad_get_pad_template" gst_pad_get_pad_template :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO (Ptr PadTemplate)


padGetPadTemplate ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m PadTemplate                        -- result
padGetPadTemplate _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_pad_template _obj'
    checkUnexpectedReturnNULL "gst_pad_get_pad_template" result
    result' <- (wrapObject PadTemplate) result
    touchManagedPtr _obj
    return result'

data PadGetPadTemplateMethodInfo
instance (signature ~ (m PadTemplate), MonadIO m, PadK a) => MethodInfo PadGetPadTemplateMethodInfo a signature where
    overloadedMethod _ = padGetPadTemplate

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

foreign import ccall "gst_pad_get_pad_template_caps" gst_pad_get_pad_template_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO (Ptr Caps)


padGetPadTemplateCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m Caps                               -- result
padGetPadTemplateCaps _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_pad_template_caps _obj'
    checkUnexpectedReturnNULL "gst_pad_get_pad_template_caps" result
    result' <- (wrapBoxed Caps) result
    touchManagedPtr _obj
    return result'

data PadGetPadTemplateCapsMethodInfo
instance (signature ~ (m Caps), MonadIO m, PadK a) => MethodInfo PadGetPadTemplateCapsMethodInfo a signature where
    overloadedMethod _ = padGetPadTemplateCaps

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

foreign import ccall "gst_pad_get_parent_element" gst_pad_get_parent_element :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO (Ptr Element)


padGetParentElement ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m Element                            -- result
padGetParentElement _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_parent_element _obj'
    checkUnexpectedReturnNULL "gst_pad_get_parent_element" result
    result' <- (wrapObject Element) result
    touchManagedPtr _obj
    return result'

data PadGetParentElementMethodInfo
instance (signature ~ (m Element), MonadIO m, PadK a) => MethodInfo PadGetParentElementMethodInfo a signature where
    overloadedMethod _ = padGetParentElement

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

foreign import ccall "gst_pad_get_peer" gst_pad_get_peer :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO (Ptr Pad)


padGetPeer ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m Pad                                -- result
padGetPeer _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_peer _obj'
    checkUnexpectedReturnNULL "gst_pad_get_peer" result
    result' <- (wrapObject Pad) result
    touchManagedPtr _obj
    return result'

data PadGetPeerMethodInfo
instance (signature ~ (m Pad), MonadIO m, PadK a) => MethodInfo PadGetPeerMethodInfo a signature where
    overloadedMethod _ = padGetPeer

-- method Pad::get_range
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "offset", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionOut, 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_pad_get_range" gst_pad_get_range :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Word64 ->                               -- offset : TBasicType TUInt64
    Word32 ->                               -- size : TBasicType TUInt32
    Ptr Buffer ->                           -- buffer : TInterface "Gst" "Buffer"
    IO CUInt


padGetRange ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Word64                               -- offset
    -> Word32                               -- size
    -> m (FlowReturn,Buffer)                -- result
padGetRange _obj offset size = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    buffer <- callocBoxedBytes 112 :: IO (Ptr Buffer)
    result <- gst_pad_get_range _obj' offset size buffer
    let result' = (toEnum . fromIntegral) result
    buffer' <- (wrapBoxed Buffer) buffer
    touchManagedPtr _obj
    return (result', buffer')

data PadGetRangeMethodInfo
instance (signature ~ (Word64 -> Word32 -> m (FlowReturn,Buffer)), MonadIO m, PadK a) => MethodInfo PadGetRangeMethodInfo a signature where
    overloadedMethod _ = padGetRange

-- method Pad::get_sticky_event
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "event_type", argType = TInterface "Gst" "EventType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "idx", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Event"
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_get_sticky_event" gst_pad_get_sticky_event :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- event_type : TInterface "Gst" "EventType"
    Word32 ->                               -- idx : TBasicType TUInt32
    IO (Ptr Event)


padGetStickyEvent ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> EventType                            -- eventType
    -> Word32                               -- idx
    -> m Event                              -- result
padGetStickyEvent _obj eventType idx = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let eventType' = (fromIntegral . fromEnum) eventType
    result <- gst_pad_get_sticky_event _obj' eventType' idx
    checkUnexpectedReturnNULL "gst_pad_get_sticky_event" result
    result' <- (wrapBoxed Event) result
    touchManagedPtr _obj
    return result'

data PadGetStickyEventMethodInfo
instance (signature ~ (EventType -> Word32 -> m Event), MonadIO m, PadK a) => MethodInfo PadGetStickyEventMethodInfo a signature where
    overloadedMethod _ = padGetStickyEvent

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

foreign import ccall "gst_pad_get_stream_id" gst_pad_get_stream_id :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CString


padGetStreamId ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m T.Text                             -- result
padGetStreamId _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_get_stream_id _obj'
    checkUnexpectedReturnNULL "gst_pad_get_stream_id" result
    result' <- cstringToText result
    freeMem result
    touchManagedPtr _obj
    return result'

data PadGetStreamIdMethodInfo
instance (signature ~ (m T.Text), MonadIO m, PadK a) => MethodInfo PadGetStreamIdMethodInfo a signature where
    overloadedMethod _ = padGetStreamId

-- method Pad::has_current_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_has_current_caps" gst_pad_has_current_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadHasCurrentCapsMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadHasCurrentCapsMethodInfo a signature where
    overloadedMethod _ = padHasCurrentCaps

-- method Pad::is_active
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_is_active" gst_pad_is_active :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadIsActiveMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadIsActiveMethodInfo a signature where
    overloadedMethod _ = padIsActive

-- method Pad::is_blocked
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_is_blocked" gst_pad_is_blocked :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadIsBlockedMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadIsBlockedMethodInfo a signature where
    overloadedMethod _ = padIsBlocked

-- method Pad::is_blocking
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_is_blocking" gst_pad_is_blocking :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadIsBlockingMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadIsBlockingMethodInfo a signature where
    overloadedMethod _ = padIsBlocking

-- method Pad::is_linked
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_is_linked" gst_pad_is_linked :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadIsLinkedMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadIsLinkedMethodInfo a signature where
    overloadedMethod _ = padIsLinked

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

foreign import ccall "gst_pad_iterate_internal_links" gst_pad_iterate_internal_links :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO (Ptr Iterator)


padIterateInternalLinks ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m Iterator                           -- result
padIterateInternalLinks _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_pad_iterate_internal_links _obj'
    checkUnexpectedReturnNULL "gst_pad_iterate_internal_links" result
    result' <- (wrapBoxed Iterator) result
    touchManagedPtr _obj
    return result'

data PadIterateInternalLinksMethodInfo
instance (signature ~ (m Iterator), MonadIO m, PadK a) => MethodInfo PadIterateInternalLinksMethodInfo a signature where
    overloadedMethod _ = padIterateInternalLinks

-- method Pad::iterate_internal_links_default
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "parent", argType = TInterface "Gst" "Object", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Iterator"
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_iterate_internal_links_default" gst_pad_iterate_internal_links_default :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Object ->                           -- parent : TInterface "Gst" "Object"
    IO (Ptr Iterator)


padIterateInternalLinksDefault ::
    (MonadIO m, PadK a, ObjectK b) =>
    a                                       -- _obj
    -> Maybe (b)                            -- parent
    -> m Iterator                           -- result
padIterateInternalLinksDefault _obj parent = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeParent <- case parent of
        Nothing -> return nullPtr
        Just jParent -> do
            let jParent' = unsafeManagedPtrCastPtr jParent
            return jParent'
    result <- gst_pad_iterate_internal_links_default _obj' maybeParent
    checkUnexpectedReturnNULL "gst_pad_iterate_internal_links_default" result
    result' <- (wrapBoxed Iterator) result
    touchManagedPtr _obj
    whenJust parent touchManagedPtr
    return result'

data PadIterateInternalLinksDefaultMethodInfo
instance (signature ~ (Maybe (b) -> m Iterator), MonadIO m, PadK a, ObjectK b) => MethodInfo PadIterateInternalLinksDefaultMethodInfo a signature where
    overloadedMethod _ = padIterateInternalLinksDefault

-- method Pad::link
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sinkpad", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "PadLinkReturn"
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_link" gst_pad_link :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Pad ->                              -- sinkpad : TInterface "Gst" "Pad"
    IO CUInt


padLink ::
    (MonadIO m, PadK a, PadK b) =>
    a                                       -- _obj
    -> b                                    -- sinkpad
    -> m PadLinkReturn                      -- result
padLink _obj sinkpad = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let sinkpad' = unsafeManagedPtrCastPtr sinkpad
    result <- gst_pad_link _obj' sinkpad'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr sinkpad
    return result'

data PadLinkMethodInfo
instance (signature ~ (b -> m PadLinkReturn), MonadIO m, PadK a, PadK b) => MethodInfo PadLinkMethodInfo a signature where
    overloadedMethod _ = padLink

-- method Pad::link_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sinkpad", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface "Gst" "PadLinkCheck", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "PadLinkReturn"
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_link_full" gst_pad_link_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Pad ->                              -- sinkpad : TInterface "Gst" "Pad"
    CUInt ->                                -- flags : TInterface "Gst" "PadLinkCheck"
    IO CUInt


padLinkFull ::
    (MonadIO m, PadK a, PadK b) =>
    a                                       -- _obj
    -> b                                    -- sinkpad
    -> [PadLinkCheck]                       -- flags
    -> m PadLinkReturn                      -- result
padLinkFull _obj sinkpad flags = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let sinkpad' = unsafeManagedPtrCastPtr sinkpad
    let flags' = gflagsToWord flags
    result <- gst_pad_link_full _obj' sinkpad' flags'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr sinkpad
    return result'

data PadLinkFullMethodInfo
instance (signature ~ (b -> [PadLinkCheck] -> m PadLinkReturn), MonadIO m, PadK a, PadK b) => MethodInfo PadLinkFullMethodInfo a signature where
    overloadedMethod _ = padLinkFull

-- method Pad::mark_reconfigure
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_mark_reconfigure" gst_pad_mark_reconfigure :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO ()


padMarkReconfigure ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m ()                                 -- result
padMarkReconfigure _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_pad_mark_reconfigure _obj'
    touchManagedPtr _obj
    return ()

data PadMarkReconfigureMethodInfo
instance (signature ~ (m ()), MonadIO m, PadK a) => MethodInfo PadMarkReconfigureMethodInfo a signature where
    overloadedMethod _ = padMarkReconfigure

-- method Pad::needs_reconfigure
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_needs_reconfigure" gst_pad_needs_reconfigure :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadNeedsReconfigureMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadNeedsReconfigureMethodInfo a signature where
    overloadedMethod _ = padNeedsReconfigure

-- method Pad::pause_task
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_pause_task" gst_pad_pause_task :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadPauseTaskMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadPauseTaskMethodInfo a signature where
    overloadedMethod _ = padPauseTask

-- method Pad::peer_query
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "query", argType = TInterface "Gst" "Query", 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_pad_peer_query" gst_pad_peer_query :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Query ->                            -- query : TInterface "Gst" "Query"
    IO CInt


padPeerQuery ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Query                                -- query
    -> m Bool                               -- result
padPeerQuery _obj query = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let query' = unsafeManagedPtrGetPtr query
    result <- gst_pad_peer_query _obj' query'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr query
    return result'

data PadPeerQueryMethodInfo
instance (signature ~ (Query -> m Bool), MonadIO m, PadK a) => MethodInfo PadPeerQueryMethodInfo a signature where
    overloadedMethod _ = padPeerQuery

-- method Pad::peer_query_accept_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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 = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_peer_query_accept_caps" gst_pad_peer_query_accept_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Caps ->                             -- caps : TInterface "Gst" "Caps"
    IO CInt


padPeerQueryAcceptCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Caps                                 -- caps
    -> m Bool                               -- result
padPeerQueryAcceptCaps _obj caps = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let caps' = unsafeManagedPtrGetPtr caps
    result <- gst_pad_peer_query_accept_caps _obj' caps'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr caps
    return result'

data PadPeerQueryAcceptCapsMethodInfo
instance (signature ~ (Caps -> m Bool), MonadIO m, PadK a) => MethodInfo PadPeerQueryAcceptCapsMethodInfo a signature where
    overloadedMethod _ = padPeerQueryAcceptCaps

-- method Pad::peer_query_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, 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_pad_peer_query_caps" gst_pad_peer_query_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Caps ->                             -- filter : TInterface "Gst" "Caps"
    IO (Ptr Caps)


padPeerQueryCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Maybe (Caps)                         -- filter
    -> m Caps                               -- result
padPeerQueryCaps _obj filter = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeFilter <- case filter of
        Nothing -> return nullPtr
        Just jFilter -> do
            let jFilter' = unsafeManagedPtrGetPtr jFilter
            return jFilter'
    result <- gst_pad_peer_query_caps _obj' maybeFilter
    checkUnexpectedReturnNULL "gst_pad_peer_query_caps" result
    result' <- (wrapBoxed Caps) result
    touchManagedPtr _obj
    whenJust filter touchManagedPtr
    return result'

data PadPeerQueryCapsMethodInfo
instance (signature ~ (Maybe (Caps) -> m Caps), MonadIO m, PadK a) => MethodInfo PadPeerQueryCapsMethodInfo a signature where
    overloadedMethod _ = padPeerQueryCaps

-- method Pad::peer_query_convert
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_format", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_format", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_val", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_peer_query_convert" gst_pad_peer_query_convert :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- src_format : TInterface "Gst" "Format"
    Int64 ->                                -- src_val : TBasicType TInt64
    CUInt ->                                -- dest_format : TInterface "Gst" "Format"
    Ptr Int64 ->                            -- dest_val : TBasicType TInt64
    IO CInt


padPeerQueryConvert ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Format                               -- srcFormat
    -> Int64                                -- srcVal
    -> Format                               -- destFormat
    -> m (Bool,Int64)                       -- result
padPeerQueryConvert _obj srcFormat srcVal destFormat = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let srcFormat' = (fromIntegral . fromEnum) srcFormat
    let destFormat' = (fromIntegral . fromEnum) destFormat
    destVal <- allocMem :: IO (Ptr Int64)
    result <- gst_pad_peer_query_convert _obj' srcFormat' srcVal destFormat' destVal
    let result' = (/= 0) result
    destVal' <- peek destVal
    touchManagedPtr _obj
    freeMem destVal
    return (result', destVal')

data PadPeerQueryConvertMethodInfo
instance (signature ~ (Format -> Int64 -> Format -> m (Bool,Int64)), MonadIO m, PadK a) => MethodInfo PadPeerQueryConvertMethodInfo a signature where
    overloadedMethod _ = padPeerQueryConvert

-- method Pad::peer_query_duration
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "duration", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_peer_query_duration" gst_pad_peer_query_duration :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- format : TInterface "Gst" "Format"
    Ptr Int64 ->                            -- duration : TBasicType TInt64
    IO CInt


padPeerQueryDuration ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Format                               -- format
    -> m (Bool,Int64)                       -- result
padPeerQueryDuration _obj format = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let format' = (fromIntegral . fromEnum) format
    duration <- allocMem :: IO (Ptr Int64)
    result <- gst_pad_peer_query_duration _obj' format' duration
    let result' = (/= 0) result
    duration' <- peek duration
    touchManagedPtr _obj
    freeMem duration
    return (result', duration')

data PadPeerQueryDurationMethodInfo
instance (signature ~ (Format -> m (Bool,Int64)), MonadIO m, PadK a) => MethodInfo PadPeerQueryDurationMethodInfo a signature where
    overloadedMethod _ = padPeerQueryDuration

-- method Pad::peer_query_position
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cur", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_peer_query_position" gst_pad_peer_query_position :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- format : TInterface "Gst" "Format"
    Ptr Int64 ->                            -- cur : TBasicType TInt64
    IO CInt


padPeerQueryPosition ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Format                               -- format
    -> m (Bool,Int64)                       -- result
padPeerQueryPosition _obj format = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let format' = (fromIntegral . fromEnum) format
    cur <- allocMem :: IO (Ptr Int64)
    result <- gst_pad_peer_query_position _obj' format' cur
    let result' = (/= 0) result
    cur' <- peek cur
    touchManagedPtr _obj
    freeMem cur
    return (result', cur')

data PadPeerQueryPositionMethodInfo
instance (signature ~ (Format -> m (Bool,Int64)), MonadIO m, PadK a) => MethodInfo PadPeerQueryPositionMethodInfo a signature where
    overloadedMethod _ = padPeerQueryPosition

-- method Pad::proxy_query_accept_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "query", argType = TInterface "Gst" "Query", 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_pad_proxy_query_accept_caps" gst_pad_proxy_query_accept_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Query ->                            -- query : TInterface "Gst" "Query"
    IO CInt


padProxyQueryAcceptCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Query                                -- query
    -> m Bool                               -- result
padProxyQueryAcceptCaps _obj query = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let query' = unsafeManagedPtrGetPtr query
    result <- gst_pad_proxy_query_accept_caps _obj' query'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr query
    return result'

data PadProxyQueryAcceptCapsMethodInfo
instance (signature ~ (Query -> m Bool), MonadIO m, PadK a) => MethodInfo PadProxyQueryAcceptCapsMethodInfo a signature where
    overloadedMethod _ = padProxyQueryAcceptCaps

-- method Pad::proxy_query_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "query", argType = TInterface "Gst" "Query", 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_pad_proxy_query_caps" gst_pad_proxy_query_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Query ->                            -- query : TInterface "Gst" "Query"
    IO CInt


padProxyQueryCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Query                                -- query
    -> m Bool                               -- result
padProxyQueryCaps _obj query = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let query' = unsafeManagedPtrGetPtr query
    result <- gst_pad_proxy_query_caps _obj' query'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr query
    return result'

data PadProxyQueryCapsMethodInfo
instance (signature ~ (Query -> m Bool), MonadIO m, PadK a) => MethodInfo PadProxyQueryCapsMethodInfo a signature where
    overloadedMethod _ = padProxyQueryCaps

-- method Pad::pull_range
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "offset", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionOut, 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_pad_pull_range" gst_pad_pull_range :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Word64 ->                               -- offset : TBasicType TUInt64
    Word32 ->                               -- size : TBasicType TUInt32
    Ptr Buffer ->                           -- buffer : TInterface "Gst" "Buffer"
    IO CUInt


padPullRange ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Word64                               -- offset
    -> Word32                               -- size
    -> m (FlowReturn,Buffer)                -- result
padPullRange _obj offset size = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    buffer <- callocBoxedBytes 112 :: IO (Ptr Buffer)
    result <- gst_pad_pull_range _obj' offset size buffer
    let result' = (toEnum . fromIntegral) result
    buffer' <- (wrapBoxed Buffer) buffer
    touchManagedPtr _obj
    return (result', buffer')

data PadPullRangeMethodInfo
instance (signature ~ (Word64 -> Word32 -> m (FlowReturn,Buffer)), MonadIO m, PadK a) => MethodInfo PadPullRangeMethodInfo a signature where
    overloadedMethod _ = padPullRange

-- method Pad::push
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", 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_pad_push" gst_pad_push :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Buffer ->                           -- buffer : TInterface "Gst" "Buffer"
    IO CUInt


padPush ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Buffer                               -- buffer
    -> m FlowReturn                         -- result
padPush _obj buffer = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    buffer' <- copyBoxed buffer
    result <- gst_pad_push _obj' buffer'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr buffer
    return result'

data PadPushMethodInfo
instance (signature ~ (Buffer -> m FlowReturn), MonadIO m, PadK a) => MethodInfo PadPushMethodInfo a signature where
    overloadedMethod _ = padPush

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

foreign import ccall "gst_pad_push_event" gst_pad_push_event :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Event ->                            -- event : TInterface "Gst" "Event"
    IO CInt


padPushEvent ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Event                                -- event
    -> m Bool                               -- result
padPushEvent _obj event = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    event' <- copyBoxed event
    result <- gst_pad_push_event _obj' event'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr event
    return result'

data PadPushEventMethodInfo
instance (signature ~ (Event -> m Bool), MonadIO m, PadK a) => MethodInfo PadPushEventMethodInfo a signature where
    overloadedMethod _ = padPushEvent

-- method Pad::push_list
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "list", argType = TInterface "Gst" "BufferList", 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_pad_push_list" gst_pad_push_list :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr BufferList ->                       -- list : TInterface "Gst" "BufferList"
    IO CUInt


padPushList ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> BufferList                           -- list
    -> m FlowReturn                         -- result
padPushList _obj list = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    list' <- copyBoxed list
    result <- gst_pad_push_list _obj' list'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr list
    return result'

data PadPushListMethodInfo
instance (signature ~ (BufferList -> m FlowReturn), MonadIO m, PadK a) => MethodInfo PadPushListMethodInfo a signature where
    overloadedMethod _ = padPushList

-- method Pad::query
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "query", argType = TInterface "Gst" "Query", 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_pad_query" gst_pad_query :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Query ->                            -- query : TInterface "Gst" "Query"
    IO CInt


padQuery ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Query                                -- query
    -> m Bool                               -- result
padQuery _obj query = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let query' = unsafeManagedPtrGetPtr query
    result <- gst_pad_query _obj' query'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr query
    return result'

data PadQueryMethodInfo
instance (signature ~ (Query -> m Bool), MonadIO m, PadK a) => MethodInfo PadQueryMethodInfo a signature where
    overloadedMethod _ = padQuery

-- method Pad::query_accept_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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 = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_query_accept_caps" gst_pad_query_accept_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Caps ->                             -- caps : TInterface "Gst" "Caps"
    IO CInt


padQueryAcceptCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Caps                                 -- caps
    -> m Bool                               -- result
padQueryAcceptCaps _obj caps = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let caps' = unsafeManagedPtrGetPtr caps
    result <- gst_pad_query_accept_caps _obj' caps'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr caps
    return result'

data PadQueryAcceptCapsMethodInfo
instance (signature ~ (Caps -> m Bool), MonadIO m, PadK a) => MethodInfo PadQueryAcceptCapsMethodInfo a signature where
    overloadedMethod _ = padQueryAcceptCaps

-- method Pad::query_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, 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_pad_query_caps" gst_pad_query_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Caps ->                             -- filter : TInterface "Gst" "Caps"
    IO (Ptr Caps)


padQueryCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Maybe (Caps)                         -- filter
    -> m Caps                               -- result
padQueryCaps _obj filter = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeFilter <- case filter of
        Nothing -> return nullPtr
        Just jFilter -> do
            let jFilter' = unsafeManagedPtrGetPtr jFilter
            return jFilter'
    result <- gst_pad_query_caps _obj' maybeFilter
    checkUnexpectedReturnNULL "gst_pad_query_caps" result
    result' <- (wrapBoxed Caps) result
    touchManagedPtr _obj
    whenJust filter touchManagedPtr
    return result'

data PadQueryCapsMethodInfo
instance (signature ~ (Maybe (Caps) -> m Caps), MonadIO m, PadK a) => MethodInfo PadQueryCapsMethodInfo a signature where
    overloadedMethod _ = padQueryCaps

-- method Pad::query_convert
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_format", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_format", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_val", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_query_convert" gst_pad_query_convert :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- src_format : TInterface "Gst" "Format"
    Int64 ->                                -- src_val : TBasicType TInt64
    CUInt ->                                -- dest_format : TInterface "Gst" "Format"
    Ptr Int64 ->                            -- dest_val : TBasicType TInt64
    IO CInt


padQueryConvert ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Format                               -- srcFormat
    -> Int64                                -- srcVal
    -> Format                               -- destFormat
    -> m (Bool,Int64)                       -- result
padQueryConvert _obj srcFormat srcVal destFormat = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let srcFormat' = (fromIntegral . fromEnum) srcFormat
    let destFormat' = (fromIntegral . fromEnum) destFormat
    destVal <- allocMem :: IO (Ptr Int64)
    result <- gst_pad_query_convert _obj' srcFormat' srcVal destFormat' destVal
    let result' = (/= 0) result
    destVal' <- peek destVal
    touchManagedPtr _obj
    freeMem destVal
    return (result', destVal')

data PadQueryConvertMethodInfo
instance (signature ~ (Format -> Int64 -> Format -> m (Bool,Int64)), MonadIO m, PadK a) => MethodInfo PadQueryConvertMethodInfo a signature where
    overloadedMethod _ = padQueryConvert

-- method Pad::query_default
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "parent", argType = TInterface "Gst" "Object", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "query", argType = TInterface "Gst" "Query", 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_pad_query_default" gst_pad_query_default :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Object ->                           -- parent : TInterface "Gst" "Object"
    Ptr Query ->                            -- query : TInterface "Gst" "Query"
    IO CInt


padQueryDefault ::
    (MonadIO m, PadK a, ObjectK b) =>
    a                                       -- _obj
    -> Maybe (b)                            -- parent
    -> Query                                -- query
    -> m Bool                               -- result
padQueryDefault _obj parent query = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeParent <- case parent of
        Nothing -> return nullPtr
        Just jParent -> do
            let jParent' = unsafeManagedPtrCastPtr jParent
            return jParent'
    let query' = unsafeManagedPtrGetPtr query
    result <- gst_pad_query_default _obj' maybeParent query'
    let result' = (/= 0) result
    touchManagedPtr _obj
    whenJust parent touchManagedPtr
    touchManagedPtr query
    return result'

data PadQueryDefaultMethodInfo
instance (signature ~ (Maybe (b) -> Query -> m Bool), MonadIO m, PadK a, ObjectK b) => MethodInfo PadQueryDefaultMethodInfo a signature where
    overloadedMethod _ = padQueryDefault

-- method Pad::query_duration
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "duration", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_query_duration" gst_pad_query_duration :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- format : TInterface "Gst" "Format"
    Ptr Int64 ->                            -- duration : TBasicType TInt64
    IO CInt


padQueryDuration ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Format                               -- format
    -> m (Bool,Int64)                       -- result
padQueryDuration _obj format = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let format' = (fromIntegral . fromEnum) format
    duration <- allocMem :: IO (Ptr Int64)
    result <- gst_pad_query_duration _obj' format' duration
    let result' = (/= 0) result
    duration' <- peek duration
    touchManagedPtr _obj
    freeMem duration
    return (result', duration')

data PadQueryDurationMethodInfo
instance (signature ~ (Format -> m (Bool,Int64)), MonadIO m, PadK a) => MethodInfo PadQueryDurationMethodInfo a signature where
    overloadedMethod _ = padQueryDuration

-- method Pad::query_position
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cur", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_query_position" gst_pad_query_position :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CUInt ->                                -- format : TInterface "Gst" "Format"
    Ptr Int64 ->                            -- cur : TBasicType TInt64
    IO CInt


padQueryPosition ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Format                               -- format
    -> m (Bool,Int64)                       -- result
padQueryPosition _obj format = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let format' = (fromIntegral . fromEnum) format
    cur <- allocMem :: IO (Ptr Int64)
    result <- gst_pad_query_position _obj' format' cur
    let result' = (/= 0) result
    cur' <- peek cur
    touchManagedPtr _obj
    freeMem cur
    return (result', cur')

data PadQueryPositionMethodInfo
instance (signature ~ (Format -> m (Bool,Int64)), MonadIO m, PadK a) => MethodInfo PadQueryPositionMethodInfo a signature where
    overloadedMethod _ = padQueryPosition

-- method Pad::remove_probe
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "id", 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_pad_remove_probe" gst_pad_remove_probe :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Word64 ->                               -- id : TBasicType TUInt64
    IO ()


padRemoveProbe ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Word64                               -- id
    -> m ()                                 -- result
padRemoveProbe _obj id = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_pad_remove_probe _obj' id
    touchManagedPtr _obj
    return ()

data PadRemoveProbeMethodInfo
instance (signature ~ (Word64 -> m ()), MonadIO m, PadK a) => MethodInfo PadRemoveProbeMethodInfo a signature where
    overloadedMethod _ = padRemoveProbe

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

foreign import ccall "gst_pad_send_event" gst_pad_send_event :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Event ->                            -- event : TInterface "Gst" "Event"
    IO CInt


padSendEvent ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Event                                -- event
    -> m Bool                               -- result
padSendEvent _obj event = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    event' <- copyBoxed event
    result <- gst_pad_send_event _obj' event'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr event
    return result'

data PadSendEventMethodInfo
instance (signature ~ (Event -> m Bool), MonadIO m, PadK a) => MethodInfo PadSendEventMethodInfo a signature where
    overloadedMethod _ = padSendEvent

-- method Pad::set_activate_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "activate", argType = TInterface "Gst" "PadActivateFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_activate_function_full" gst_pad_set_activate_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadActivateFunctionC ->          -- activate : TInterface "Gst" "PadActivateFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetActivateFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadActivateFunction                  -- activate
    -> m ()                                 -- result
padSetActivateFunctionFull _obj activate = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    activate' <- mkPadActivateFunction (padActivateFunctionWrapper Nothing activate)
    let userData = castFunPtrToPtr activate'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_activate_function_full _obj' activate' userData notify
    touchManagedPtr _obj
    return ()

data PadSetActivateFunctionFullMethodInfo
instance (signature ~ (PadActivateFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetActivateFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetActivateFunctionFull

-- method Pad::set_activatemode_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "activatemode", argType = TInterface "Gst" "PadActivateModeFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_activatemode_function_full" gst_pad_set_activatemode_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadActivateModeFunctionC ->      -- activatemode : TInterface "Gst" "PadActivateModeFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetActivatemodeFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadActivateModeFunction              -- activatemode
    -> m ()                                 -- result
padSetActivatemodeFunctionFull _obj activatemode = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    activatemode' <- mkPadActivateModeFunction (padActivateModeFunctionWrapper Nothing activatemode)
    let userData = castFunPtrToPtr activatemode'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_activatemode_function_full _obj' activatemode' userData notify
    touchManagedPtr _obj
    return ()

data PadSetActivatemodeFunctionFullMethodInfo
instance (signature ~ (PadActivateModeFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetActivatemodeFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetActivatemodeFunctionFull

-- method Pad::set_active
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "active", argType = TBasicType TBoolean, 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_pad_set_active" gst_pad_set_active :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    CInt ->                                 -- active : TBasicType TBoolean
    IO CInt


padSetActive ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Bool                                 -- active
    -> m Bool                               -- result
padSetActive _obj active = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let active' = (fromIntegral . fromEnum) active
    result <- gst_pad_set_active _obj' active'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data PadSetActiveMethodInfo
instance (signature ~ (Bool -> m Bool), MonadIO m, PadK a) => MethodInfo PadSetActiveMethodInfo a signature where
    overloadedMethod _ = padSetActive

-- method Pad::set_chain_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "chain", argType = TInterface "Gst" "PadChainFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_chain_function_full" gst_pad_set_chain_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadChainFunctionC ->             -- chain : TInterface "Gst" "PadChainFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetChainFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadChainFunction                     -- chain
    -> m ()                                 -- result
padSetChainFunctionFull _obj chain = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    chain' <- mkPadChainFunction (padChainFunctionWrapper Nothing chain)
    let userData = castFunPtrToPtr chain'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_chain_function_full _obj' chain' userData notify
    touchManagedPtr _obj
    return ()

data PadSetChainFunctionFullMethodInfo
instance (signature ~ (PadChainFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetChainFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetChainFunctionFull

-- method Pad::set_chain_list_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "chainlist", argType = TInterface "Gst" "PadChainListFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_chain_list_function_full" gst_pad_set_chain_list_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadChainListFunctionC ->         -- chainlist : TInterface "Gst" "PadChainListFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetChainListFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadChainListFunction                 -- chainlist
    -> m ()                                 -- result
padSetChainListFunctionFull _obj chainlist = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    chainlist' <- mkPadChainListFunction (padChainListFunctionWrapper Nothing chainlist)
    let userData = castFunPtrToPtr chainlist'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_chain_list_function_full _obj' chainlist' userData notify
    touchManagedPtr _obj
    return ()

data PadSetChainListFunctionFullMethodInfo
instance (signature ~ (PadChainListFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetChainListFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetChainListFunctionFull

-- method Pad::set_element_private
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "priv", argType = TBasicType TVoid, 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_pad_set_element_private" gst_pad_set_element_private :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr () ->                               -- priv : TBasicType TVoid
    IO ()


padSetElementPrivate ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Ptr ()                               -- priv
    -> m ()                                 -- result
padSetElementPrivate _obj priv = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_pad_set_element_private _obj' priv
    touchManagedPtr _obj
    return ()

data PadSetElementPrivateMethodInfo
instance (signature ~ (Ptr () -> m ()), MonadIO m, PadK a) => MethodInfo PadSetElementPrivateMethodInfo a signature where
    overloadedMethod _ = padSetElementPrivate

-- method Pad::set_event_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "event", argType = TInterface "Gst" "PadEventFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_event_function_full" gst_pad_set_event_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadEventFunctionC ->             -- event : TInterface "Gst" "PadEventFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetEventFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadEventFunction                     -- event
    -> m ()                                 -- result
padSetEventFunctionFull _obj event = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    event' <- mkPadEventFunction (padEventFunctionWrapper Nothing event)
    let userData = castFunPtrToPtr event'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_event_function_full _obj' event' userData notify
    touchManagedPtr _obj
    return ()

data PadSetEventFunctionFullMethodInfo
instance (signature ~ (PadEventFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetEventFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetEventFunctionFull

-- method Pad::set_getrange_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "get", argType = TInterface "Gst" "PadGetRangeFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_getrange_function_full" gst_pad_set_getrange_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadGetRangeFunctionC ->          -- get : TInterface "Gst" "PadGetRangeFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetGetrangeFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadGetRangeFunction                  -- get
    -> m ()                                 -- result
padSetGetrangeFunctionFull _obj get = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    get' <- mkPadGetRangeFunction (padGetRangeFunctionWrapper Nothing get)
    let userData = castFunPtrToPtr get'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_getrange_function_full _obj' get' userData notify
    touchManagedPtr _obj
    return ()

data PadSetGetrangeFunctionFullMethodInfo
instance (signature ~ (PadGetRangeFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetGetrangeFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetGetrangeFunctionFull

-- method Pad::set_iterate_internal_links_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "iterintlink", argType = TInterface "Gst" "PadIterIntLinkFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_iterate_internal_links_function_full" gst_pad_set_iterate_internal_links_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadIterIntLinkFunctionC ->       -- iterintlink : TInterface "Gst" "PadIterIntLinkFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetIterateInternalLinksFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadIterIntLinkFunction               -- iterintlink
    -> m ()                                 -- result
padSetIterateInternalLinksFunctionFull _obj iterintlink = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    iterintlink' <- mkPadIterIntLinkFunction (padIterIntLinkFunctionWrapper Nothing iterintlink)
    let userData = castFunPtrToPtr iterintlink'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_iterate_internal_links_function_full _obj' iterintlink' userData notify
    touchManagedPtr _obj
    return ()

data PadSetIterateInternalLinksFunctionFullMethodInfo
instance (signature ~ (PadIterIntLinkFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetIterateInternalLinksFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetIterateInternalLinksFunctionFull

-- method Pad::set_link_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "link", argType = TInterface "Gst" "PadLinkFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_link_function_full" gst_pad_set_link_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadLinkFunctionC ->              -- link : TInterface "Gst" "PadLinkFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetLinkFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadLinkFunction                      -- link
    -> m ()                                 -- result
padSetLinkFunctionFull _obj link = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    link' <- mkPadLinkFunction (padLinkFunctionWrapper Nothing link)
    let userData = castFunPtrToPtr link'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_link_function_full _obj' link' userData notify
    touchManagedPtr _obj
    return ()

data PadSetLinkFunctionFullMethodInfo
instance (signature ~ (PadLinkFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetLinkFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetLinkFunctionFull

-- method Pad::set_offset
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "offset", argType = TBasicType TInt64, 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_pad_set_offset" gst_pad_set_offset :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Int64 ->                                -- offset : TBasicType TInt64
    IO ()


padSetOffset ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Int64                                -- offset
    -> m ()                                 -- result
padSetOffset _obj offset = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_pad_set_offset _obj' offset
    touchManagedPtr _obj
    return ()

data PadSetOffsetMethodInfo
instance (signature ~ (Int64 -> m ()), MonadIO m, PadK a) => MethodInfo PadSetOffsetMethodInfo a signature where
    overloadedMethod _ = padSetOffset

-- method Pad::set_query_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "query", argType = TInterface "Gst" "PadQueryFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_query_function_full" gst_pad_set_query_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadQueryFunctionC ->             -- query : TInterface "Gst" "PadQueryFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetQueryFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadQueryFunction                     -- query
    -> m ()                                 -- result
padSetQueryFunctionFull _obj query = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    query' <- mkPadQueryFunction (padQueryFunctionWrapper Nothing query)
    let userData = castFunPtrToPtr query'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_query_function_full _obj' query' userData notify
    touchManagedPtr _obj
    return ()

data PadSetQueryFunctionFullMethodInfo
instance (signature ~ (PadQueryFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetQueryFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetQueryFunctionFull

-- method Pad::set_unlink_function_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "unlink", argType = TInterface "Gst" "PadUnlinkFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_set_unlink_function_full" gst_pad_set_unlink_function_full :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadUnlinkFunctionC ->            -- unlink : TInterface "Gst" "PadUnlinkFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO ()


padSetUnlinkFunctionFull ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadUnlinkFunction                    -- unlink
    -> m ()                                 -- result
padSetUnlinkFunctionFull _obj unlink = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    unlink' <- mkPadUnlinkFunction (padUnlinkFunctionWrapper Nothing unlink)
    let userData = castFunPtrToPtr unlink'
    let notify = safeFreeFunPtrPtr
    gst_pad_set_unlink_function_full _obj' unlink' userData notify
    touchManagedPtr _obj
    return ()

data PadSetUnlinkFunctionFullMethodInfo
instance (signature ~ (PadUnlinkFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadSetUnlinkFunctionFullMethodInfo a signature where
    overloadedMethod _ = padSetUnlinkFunctionFull

-- method Pad::start_task
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "func", argType = TInterface "Gst" "TaskFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_start_task" gst_pad_start_task :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr TaskFunctionC ->                 -- func : TInterface "Gst" "TaskFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
    IO CInt


padStartTask ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> TaskFunction                         -- func
    -> m Bool                               -- result
padStartTask _obj func = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    func' <- mkTaskFunction (taskFunctionWrapper Nothing func)
    let userData = castFunPtrToPtr func'
    let notify = safeFreeFunPtrPtr
    result <- gst_pad_start_task _obj' func' userData notify
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data PadStartTaskMethodInfo
instance (signature ~ (TaskFunction -> m Bool), MonadIO m, PadK a) => MethodInfo PadStartTaskMethodInfo a signature where
    overloadedMethod _ = padStartTask

-- method Pad::sticky_events_foreach
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "foreach_func", argType = TInterface "Gst" "PadStickyEventsForeachFunction", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeCall, argClosure = 2, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, 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_pad_sticky_events_foreach" gst_pad_sticky_events_foreach :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    FunPtr PadStickyEventsForeachFunctionC -> -- foreach_func : TInterface "Gst" "PadStickyEventsForeachFunction"
    Ptr () ->                               -- user_data : TBasicType TVoid
    IO ()


padStickyEventsForeach ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> PadStickyEventsForeachFunction       -- foreachFunc
    -> m ()                                 -- result
padStickyEventsForeach _obj foreachFunc = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    foreachFunc' <- mkPadStickyEventsForeachFunction (padStickyEventsForeachFunctionWrapper Nothing foreachFunc)
    let userData = nullPtr
    gst_pad_sticky_events_foreach _obj' foreachFunc' userData
    safeFreeFunPtr $ castFunPtrToPtr foreachFunc'
    touchManagedPtr _obj
    return ()

data PadStickyEventsForeachMethodInfo
instance (signature ~ (PadStickyEventsForeachFunction -> m ()), MonadIO m, PadK a) => MethodInfo PadStickyEventsForeachMethodInfo a signature where
    overloadedMethod _ = padStickyEventsForeach

-- method Pad::stop_task
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_stop_task" gst_pad_stop_task :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO CInt


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

data PadStopTaskMethodInfo
instance (signature ~ (m Bool), MonadIO m, PadK a) => MethodInfo PadStopTaskMethodInfo a signature where
    overloadedMethod _ = padStopTask

-- method Pad::store_sticky_event
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "event", argType = TInterface "Gst" "Event", 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_pad_store_sticky_event" gst_pad_store_sticky_event :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Event ->                            -- event : TInterface "Gst" "Event"
    IO CUInt


padStoreStickyEvent ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> Event                                -- event
    -> m FlowReturn                         -- result
padStoreStickyEvent _obj event = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let event' = unsafeManagedPtrGetPtr event
    result <- gst_pad_store_sticky_event _obj' event'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    touchManagedPtr event
    return result'

data PadStoreStickyEventMethodInfo
instance (signature ~ (Event -> m FlowReturn), MonadIO m, PadK a) => MethodInfo PadStoreStickyEventMethodInfo a signature where
    overloadedMethod _ = padStoreStickyEvent

-- method Pad::unlink
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sinkpad", argType = TInterface "Gst" "Pad", 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_pad_unlink" gst_pad_unlink :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    Ptr Pad ->                              -- sinkpad : TInterface "Gst" "Pad"
    IO CInt


padUnlink ::
    (MonadIO m, PadK a, PadK b) =>
    a                                       -- _obj
    -> b                                    -- sinkpad
    -> m Bool                               -- result
padUnlink _obj sinkpad = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let sinkpad' = unsafeManagedPtrCastPtr sinkpad
    result <- gst_pad_unlink _obj' sinkpad'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr sinkpad
    return result'

data PadUnlinkMethodInfo
instance (signature ~ (b -> m Bool), MonadIO m, PadK a, PadK b) => MethodInfo PadUnlinkMethodInfo a signature where
    overloadedMethod _ = padUnlink

-- method Pad::use_fixed_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Pad", 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_pad_use_fixed_caps" gst_pad_use_fixed_caps :: 
    Ptr Pad ->                              -- _obj : TInterface "Gst" "Pad"
    IO ()


padUseFixedCaps ::
    (MonadIO m, PadK a) =>
    a                                       -- _obj
    -> m ()                                 -- result
padUseFixedCaps _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_pad_use_fixed_caps _obj'
    touchManagedPtr _obj
    return ()

data PadUseFixedCapsMethodInfo
instance (signature ~ (m ()), MonadIO m, PadK a) => MethodInfo PadUseFixedCapsMethodInfo a signature where
    overloadedMethod _ = padUseFixedCaps

-- method Pad::link_get_name
-- method type : MemberFunction
-- Args : [Arg {argCName = "ret", argType = TInterface "Gst" "PadLinkReturn", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "gst_pad_link_get_name" gst_pad_link_get_name :: 
    CUInt ->                                -- ret : TInterface "Gst" "PadLinkReturn"
    IO CString


padLinkGetName ::
    (MonadIO m) =>
    PadLinkReturn                           -- ret
    -> m T.Text                             -- result
padLinkGetName ret = liftIO $ do
    let ret' = (fromIntegral . fromEnum) ret
    result <- gst_pad_link_get_name ret'
    checkUnexpectedReturnNULL "gst_pad_link_get_name" result
    result' <- cstringToText result
    return result'