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

Pads managed by a @/GstAggregor/@ subclass.

This class used to live in gst-plugins-bad and was moved to core.
-}

#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))

module GI.GstBase.Objects.AggregatorPad
    (

-- * Exported types
    AggregatorPad(..)                       ,
    IsAggregatorPad                         ,
    toAggregatorPad                         ,
    noAggregatorPad                         ,


 -- * Methods
-- ** dropBuffer #method:dropBuffer#

#if ENABLE_OVERLOADING
    AggregatorPadDropBufferMethodInfo       ,
#endif
    aggregatorPadDropBuffer                 ,


-- ** hasBuffer #method:hasBuffer#

#if ENABLE_OVERLOADING
    AggregatorPadHasBufferMethodInfo        ,
#endif
    aggregatorPadHasBuffer                  ,


-- ** isEos #method:isEos#

#if ENABLE_OVERLOADING
    AggregatorPadIsEosMethodInfo            ,
#endif
    aggregatorPadIsEos                      ,


-- ** peekBuffer #method:peekBuffer#

#if ENABLE_OVERLOADING
    AggregatorPadPeekBufferMethodInfo       ,
#endif
    aggregatorPadPeekBuffer                 ,


-- ** popBuffer #method:popBuffer#

#if ENABLE_OVERLOADING
    AggregatorPadPopBufferMethodInfo        ,
#endif
    aggregatorPadPopBuffer                  ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gst.Objects.Object as Gst.Object
import qualified GI.Gst.Objects.Pad as Gst.Pad
import qualified GI.Gst.Structs.Buffer as Gst.Buffer

-- | Memory-managed wrapper type.
newtype AggregatorPad = AggregatorPad (ManagedPtr AggregatorPad)
foreign import ccall "gst_aggregator_pad_get_type"
    c_gst_aggregator_pad_get_type :: IO GType

instance GObject AggregatorPad where
    gobjectType _ = c_gst_aggregator_pad_get_type


-- | Type class for types which can be safely cast to `AggregatorPad`, for instance with `toAggregatorPad`.
class GObject o => IsAggregatorPad o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError AggregatorPad a) =>
    IsAggregatorPad a
#endif
instance IsAggregatorPad AggregatorPad
instance Gst.Pad.IsPad AggregatorPad
instance Gst.Object.IsObject AggregatorPad
instance GObject.Object.IsObject AggregatorPad

-- | Cast to `AggregatorPad`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toAggregatorPad :: (MonadIO m, IsAggregatorPad o) => o -> m AggregatorPad
toAggregatorPad = liftIO . unsafeCastTo AggregatorPad

-- | A convenience alias for `Nothing` :: `Maybe` `AggregatorPad`.
noAggregatorPad :: Maybe AggregatorPad
noAggregatorPad = Nothing

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

instance (info ~ ResolveAggregatorPadMethod t AggregatorPad, O.MethodInfo info AggregatorPad p) => O.IsLabelProxy t (AggregatorPad -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveAggregatorPadMethod t AggregatorPad, O.MethodInfo info AggregatorPad p) => O.IsLabel t (AggregatorPad -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif
#endif

#endif

#if ENABLE_OVERLOADING
instance O.HasAttributeList AggregatorPad
type instance O.AttributeList AggregatorPad = AggregatorPadAttributeList
type AggregatorPadAttributeList = ('[ '("caps", Gst.Pad.PadCapsPropertyInfo), '("direction", Gst.Pad.PadDirectionPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("offset", Gst.Pad.PadOffsetPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("template", Gst.Pad.PadTemplatePropertyInfo)] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
#endif

#if ENABLE_OVERLOADING
type instance O.SignalList AggregatorPad = AggregatorPadSignalList
type AggregatorPadSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("linked", Gst.Pad.PadLinkedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("unlinked", Gst.Pad.PadUnlinkedSignalInfo)] :: [(Symbol, *)])

#endif

-- method AggregatorPad::drop_buffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstBase", name = "AggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the pad where to drop any pending buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_aggregator_pad_drop_buffer" gst_aggregator_pad_drop_buffer ::
    Ptr AggregatorPad ->                    -- pad : TInterface (Name {namespace = "GstBase", name = "AggregatorPad"})
    IO CInt

{- |
Drop the buffer currently queued in /@pad@/.
-}
aggregatorPadDropBuffer ::
    (B.CallStack.HasCallStack, MonadIO m, IsAggregatorPad a) =>
    a
    {- ^ /@pad@/: the pad where to drop any pending buffer -}
    -> m Bool
    {- ^ __Returns:__ TRUE if there was a buffer queued in /@pad@/, or FALSE if not. -}
aggregatorPadDropBuffer pad = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    result <- gst_aggregator_pad_drop_buffer pad'
    let result' = (/= 0) result
    touchManagedPtr pad
    return result'

#if ENABLE_OVERLOADING
data AggregatorPadDropBufferMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsAggregatorPad a) => O.MethodInfo AggregatorPadDropBufferMethodInfo a signature where
    overloadedMethod _ = aggregatorPadDropBuffer

#endif

-- method AggregatorPad::has_buffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstBase", name = "AggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the pad to check the buffer on", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_aggregator_pad_has_buffer" gst_aggregator_pad_has_buffer ::
    Ptr AggregatorPad ->                    -- pad : TInterface (Name {namespace = "GstBase", name = "AggregatorPad"})
    IO CInt

{- |
/No description available in the introspection data./

/Since: 1.14.1/
-}
aggregatorPadHasBuffer ::
    (B.CallStack.HasCallStack, MonadIO m, IsAggregatorPad a) =>
    a
    {- ^ /@pad@/: the pad to check the buffer on -}
    -> m Bool
    {- ^ __Returns:__ 'True' if the pad has a buffer available as the next thing. -}
aggregatorPadHasBuffer pad = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    result <- gst_aggregator_pad_has_buffer pad'
    let result' = (/= 0) result
    touchManagedPtr pad
    return result'

#if ENABLE_OVERLOADING
data AggregatorPadHasBufferMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsAggregatorPad a) => O.MethodInfo AggregatorPadHasBufferMethodInfo a signature where
    overloadedMethod _ = aggregatorPadHasBuffer

#endif

-- method AggregatorPad::is_eos
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstBase", name = "AggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an aggregator pad", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_aggregator_pad_is_eos" gst_aggregator_pad_is_eos ::
    Ptr AggregatorPad ->                    -- pad : TInterface (Name {namespace = "GstBase", name = "AggregatorPad"})
    IO CInt

{- |
/No description available in the introspection data./
-}
aggregatorPadIsEos ::
    (B.CallStack.HasCallStack, MonadIO m, IsAggregatorPad a) =>
    a
    {- ^ /@pad@/: an aggregator pad -}
    -> m Bool
    {- ^ __Returns:__ 'True' if the pad is EOS, otherwise 'False'. -}
aggregatorPadIsEos pad = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    result <- gst_aggregator_pad_is_eos pad'
    let result' = (/= 0) result
    touchManagedPtr pad
    return result'

#if ENABLE_OVERLOADING
data AggregatorPadIsEosMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsAggregatorPad a) => O.MethodInfo AggregatorPadIsEosMethodInfo a signature where
    overloadedMethod _ = aggregatorPadIsEos

#endif

-- method AggregatorPad::peek_buffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstBase", name = "AggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the pad to get buffer from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Buffer"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_aggregator_pad_peek_buffer" gst_aggregator_pad_peek_buffer ::
    Ptr AggregatorPad ->                    -- pad : TInterface (Name {namespace = "GstBase", name = "AggregatorPad"})
    IO (Ptr Gst.Buffer.Buffer)

{- |
/No description available in the introspection data./
-}
aggregatorPadPeekBuffer ::
    (B.CallStack.HasCallStack, MonadIO m, IsAggregatorPad a) =>
    a
    {- ^ /@pad@/: the pad to get buffer from -}
    -> m Gst.Buffer.Buffer
    {- ^ __Returns:__ A reference to the buffer in /@pad@/ or
NULL if no buffer was queued. You should unref the buffer after
usage. -}
aggregatorPadPeekBuffer pad = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    result <- gst_aggregator_pad_peek_buffer pad'
    checkUnexpectedReturnNULL "aggregatorPadPeekBuffer" result
    result' <- (wrapBoxed Gst.Buffer.Buffer) result
    touchManagedPtr pad
    return result'

#if ENABLE_OVERLOADING
data AggregatorPadPeekBufferMethodInfo
instance (signature ~ (m Gst.Buffer.Buffer), MonadIO m, IsAggregatorPad a) => O.MethodInfo AggregatorPadPeekBufferMethodInfo a signature where
    overloadedMethod _ = aggregatorPadPeekBuffer

#endif

-- method AggregatorPad::pop_buffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstBase", name = "AggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the pad to get buffer from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Buffer"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_aggregator_pad_pop_buffer" gst_aggregator_pad_pop_buffer ::
    Ptr AggregatorPad ->                    -- pad : TInterface (Name {namespace = "GstBase", name = "AggregatorPad"})
    IO (Ptr Gst.Buffer.Buffer)

{- |
Steal the ref to the buffer currently queued in /@pad@/.
-}
aggregatorPadPopBuffer ::
    (B.CallStack.HasCallStack, MonadIO m, IsAggregatorPad a) =>
    a
    {- ^ /@pad@/: the pad to get buffer from -}
    -> m Gst.Buffer.Buffer
    {- ^ __Returns:__ The buffer in /@pad@/ or NULL if no buffer was
  queued. You should unref the buffer after usage. -}
aggregatorPadPopBuffer pad = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    result <- gst_aggregator_pad_pop_buffer pad'
    checkUnexpectedReturnNULL "aggregatorPadPopBuffer" result
    result' <- (wrapBoxed Gst.Buffer.Buffer) result
    touchManagedPtr pad
    return result'

#if ENABLE_OVERLOADING
data AggregatorPadPopBufferMethodInfo
instance (signature ~ (m Gst.Buffer.Buffer), MonadIO m, IsAggregatorPad a) => O.MethodInfo AggregatorPadPopBufferMethodInfo a signature where
    overloadedMethod _ = aggregatorPadPopBuffer

#endif