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

/No description available in the introspection data./
-}

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

module GI.GstVideo.Objects.VideoAggregatorPad
    (

-- * Exported types
    VideoAggregatorPad(..)                  ,
    IsVideoAggregatorPad                    ,
    toVideoAggregatorPad                    ,
    noVideoAggregatorPad                    ,


 -- * Methods
-- ** getCurrentBuffer #method:getCurrentBuffer#

#if ENABLE_OVERLOADING
    VideoAggregatorPadGetCurrentBufferMethodInfo,
#endif
    videoAggregatorPadGetCurrentBuffer      ,


-- ** getPreparedFrame #method:getPreparedFrame#

#if ENABLE_OVERLOADING
    VideoAggregatorPadGetPreparedFrameMethodInfo,
#endif
    videoAggregatorPadGetPreparedFrame      ,


-- ** hasCurrentBuffer #method:hasCurrentBuffer#

#if ENABLE_OVERLOADING
    VideoAggregatorPadHasCurrentBufferMethodInfo,
#endif
    videoAggregatorPadHasCurrentBuffer      ,


-- ** setNeedsAlpha #method:setNeedsAlpha#

#if ENABLE_OVERLOADING
    VideoAggregatorPadSetNeedsAlphaMethodInfo,
#endif
    videoAggregatorPadSetNeedsAlpha         ,




 -- * Properties
-- ** repeatAfterEos #attr:repeatAfterEos#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    VideoAggregatorPadRepeatAfterEosPropertyInfo,
#endif
    constructVideoAggregatorPadRepeatAfterEos,
    getVideoAggregatorPadRepeatAfterEos     ,
    setVideoAggregatorPadRepeatAfterEos     ,
#if ENABLE_OVERLOADING
    videoAggregatorPadRepeatAfterEos        ,
#endif


-- ** zorder #attr:zorder#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    VideoAggregatorPadZorderPropertyInfo    ,
#endif
    constructVideoAggregatorPadZorder       ,
    getVideoAggregatorPadZorder             ,
    setVideoAggregatorPadZorder             ,
#if ENABLE_OVERLOADING
    videoAggregatorPadZorder                ,
#endif




    ) 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.GClosure as B.GClosure
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.GI.Base.Properties as B.Properties
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 GHC.OverloadedLabels as OL

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
import qualified GI.GstBase.Objects.AggregatorPad as GstBase.AggregatorPad
import {-# SOURCE #-} qualified GI.GstVideo.Structs.VideoFrame as GstVideo.VideoFrame

-- | Memory-managed wrapper type.
newtype VideoAggregatorPad = VideoAggregatorPad (ManagedPtr VideoAggregatorPad)
foreign import ccall "gst_video_aggregator_pad_get_type"
    c_gst_video_aggregator_pad_get_type :: IO GType

instance GObject VideoAggregatorPad where
    gobjectType = c_gst_video_aggregator_pad_get_type


-- | Type class for types which can be safely cast to `VideoAggregatorPad`, for instance with `toVideoAggregatorPad`.
class (GObject o, O.IsDescendantOf VideoAggregatorPad o) => IsVideoAggregatorPad o
instance (GObject o, O.IsDescendantOf VideoAggregatorPad o) => IsVideoAggregatorPad o

instance O.HasParentTypes VideoAggregatorPad
type instance O.ParentTypes VideoAggregatorPad = '[GstBase.AggregatorPad.AggregatorPad, Gst.Pad.Pad, Gst.Object.Object, GObject.Object.Object]

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

-- | A convenience alias for `Nothing` :: `Maybe` `VideoAggregatorPad`.
noVideoAggregatorPad :: Maybe VideoAggregatorPad
noVideoAggregatorPad = Nothing

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

instance (info ~ ResolveVideoAggregatorPadMethod t VideoAggregatorPad, O.MethodInfo info VideoAggregatorPad p) => OL.IsLabel t (VideoAggregatorPad -> 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

-- VVV Prop "repeat-after-eos"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Nothing)

{- |
Get the value of the “@repeat-after-eos@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoAggregatorPad #repeatAfterEos
@
-}
getVideoAggregatorPadRepeatAfterEos :: (MonadIO m, IsVideoAggregatorPad o) => o -> m Bool
getVideoAggregatorPadRepeatAfterEos obj = liftIO $ B.Properties.getObjectPropertyBool obj "repeat-after-eos"

{- |
Set the value of the “@repeat-after-eos@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoAggregatorPad [ #repeatAfterEos 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoAggregatorPadRepeatAfterEos :: (MonadIO m, IsVideoAggregatorPad o) => o -> Bool -> m ()
setVideoAggregatorPadRepeatAfterEos obj val = liftIO $ B.Properties.setObjectPropertyBool obj "repeat-after-eos" val

{- |
Construct a `GValueConstruct` with valid value for the “@repeat-after-eos@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructVideoAggregatorPadRepeatAfterEos :: (IsVideoAggregatorPad o) => Bool -> IO (GValueConstruct o)
constructVideoAggregatorPadRepeatAfterEos val = B.Properties.constructObjectPropertyBool "repeat-after-eos" val

#if ENABLE_OVERLOADING
data VideoAggregatorPadRepeatAfterEosPropertyInfo
instance AttrInfo VideoAggregatorPadRepeatAfterEosPropertyInfo where
    type AttrAllowedOps VideoAggregatorPadRepeatAfterEosPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint VideoAggregatorPadRepeatAfterEosPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint VideoAggregatorPadRepeatAfterEosPropertyInfo = IsVideoAggregatorPad
    type AttrGetType VideoAggregatorPadRepeatAfterEosPropertyInfo = Bool
    type AttrLabel VideoAggregatorPadRepeatAfterEosPropertyInfo = "repeat-after-eos"
    type AttrOrigin VideoAggregatorPadRepeatAfterEosPropertyInfo = VideoAggregatorPad
    attrGet _ = getVideoAggregatorPadRepeatAfterEos
    attrSet _ = setVideoAggregatorPadRepeatAfterEos
    attrConstruct _ = constructVideoAggregatorPadRepeatAfterEos
    attrClear _ = undefined
#endif

-- VVV Prop "zorder"
   -- Type: TBasicType TUInt
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Nothing)

{- |
Get the value of the “@zorder@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoAggregatorPad #zorder
@
-}
getVideoAggregatorPadZorder :: (MonadIO m, IsVideoAggregatorPad o) => o -> m Word32
getVideoAggregatorPadZorder obj = liftIO $ B.Properties.getObjectPropertyUInt32 obj "zorder"

{- |
Set the value of the “@zorder@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoAggregatorPad [ #zorder 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoAggregatorPadZorder :: (MonadIO m, IsVideoAggregatorPad o) => o -> Word32 -> m ()
setVideoAggregatorPadZorder obj val = liftIO $ B.Properties.setObjectPropertyUInt32 obj "zorder" val

{- |
Construct a `GValueConstruct` with valid value for the “@zorder@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructVideoAggregatorPadZorder :: (IsVideoAggregatorPad o) => Word32 -> IO (GValueConstruct o)
constructVideoAggregatorPadZorder val = B.Properties.constructObjectPropertyUInt32 "zorder" val

#if ENABLE_OVERLOADING
data VideoAggregatorPadZorderPropertyInfo
instance AttrInfo VideoAggregatorPadZorderPropertyInfo where
    type AttrAllowedOps VideoAggregatorPadZorderPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint VideoAggregatorPadZorderPropertyInfo = (~) Word32
    type AttrBaseTypeConstraint VideoAggregatorPadZorderPropertyInfo = IsVideoAggregatorPad
    type AttrGetType VideoAggregatorPadZorderPropertyInfo = Word32
    type AttrLabel VideoAggregatorPadZorderPropertyInfo = "zorder"
    type AttrOrigin VideoAggregatorPadZorderPropertyInfo = VideoAggregatorPad
    attrGet _ = getVideoAggregatorPadZorder
    attrSet _ = setVideoAggregatorPadZorder
    attrConstruct _ = constructVideoAggregatorPadZorder
    attrClear _ = undefined
#endif

#if ENABLE_OVERLOADING
instance O.HasAttributeList VideoAggregatorPad
type instance O.AttributeList VideoAggregatorPad = VideoAggregatorPadAttributeList
type VideoAggregatorPadAttributeList = ('[ '("caps", Gst.Pad.PadCapsPropertyInfo), '("direction", Gst.Pad.PadDirectionPropertyInfo), '("emitSignals", GstBase.AggregatorPad.AggregatorPadEmitSignalsPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("offset", Gst.Pad.PadOffsetPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("repeatAfterEos", VideoAggregatorPadRepeatAfterEosPropertyInfo), '("template", Gst.Pad.PadTemplatePropertyInfo), '("zorder", VideoAggregatorPadZorderPropertyInfo)] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
videoAggregatorPadRepeatAfterEos :: AttrLabelProxy "repeatAfterEos"
videoAggregatorPadRepeatAfterEos = AttrLabelProxy

videoAggregatorPadZorder :: AttrLabelProxy "zorder"
videoAggregatorPadZorder = AttrLabelProxy

#endif

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

#endif

-- method VideoAggregatorPad::get_current_buffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstVideo", name = "VideoAggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstVideoAggregatorPad", 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_video_aggregator_pad_get_current_buffer" gst_video_aggregator_pad_get_current_buffer ::
    Ptr VideoAggregatorPad ->               -- pad : TInterface (Name {namespace = "GstVideo", name = "VideoAggregatorPad"})
    IO (Ptr Gst.Buffer.Buffer)

{- |
Returns the currently queued buffer that is going to be used
for the current output frame.

This must only be called from the @/aggregate_frames()/@ virtual method,
or from the @/prepare_frame()/@ virtual method of the aggregator pads.

The return value is only valid until @/aggregate_frames()/@ or @/prepare_frames()/@
returns.
-}
videoAggregatorPadGetCurrentBuffer ::
    (B.CallStack.HasCallStack, MonadIO m, IsVideoAggregatorPad a) =>
    a
    {- ^ /@pad@/: a 'GI.GstVideo.Objects.VideoAggregatorPad.VideoAggregatorPad' -}
    -> m Gst.Buffer.Buffer
    {- ^ __Returns:__ The currently queued buffer -}
videoAggregatorPadGetCurrentBuffer pad = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    result <- gst_video_aggregator_pad_get_current_buffer pad'
    checkUnexpectedReturnNULL "videoAggregatorPadGetCurrentBuffer" result
    result' <- (newBoxed Gst.Buffer.Buffer) result
    touchManagedPtr pad
    return result'

#if ENABLE_OVERLOADING
data VideoAggregatorPadGetCurrentBufferMethodInfo
instance (signature ~ (m Gst.Buffer.Buffer), MonadIO m, IsVideoAggregatorPad a) => O.MethodInfo VideoAggregatorPadGetCurrentBufferMethodInfo a signature where
    overloadedMethod _ = videoAggregatorPadGetCurrentBuffer

#endif

-- method VideoAggregatorPad::get_prepared_frame
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstVideo", name = "VideoAggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstVideoAggregatorPad", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GstVideo", name = "VideoFrame"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_aggregator_pad_get_prepared_frame" gst_video_aggregator_pad_get_prepared_frame ::
    Ptr VideoAggregatorPad ->               -- pad : TInterface (Name {namespace = "GstVideo", name = "VideoAggregatorPad"})
    IO (Ptr GstVideo.VideoFrame.VideoFrame)

{- |
Returns the currently prepared video frame that has to be aggregated into
the current output frame.

This must only be called from the @/aggregate_frames()/@ virtual method,
or from the @/prepare_frame()/@ virtual method of the aggregator pads.

The return value is only valid until @/aggregate_frames()/@ or @/prepare_frames()/@
returns.
-}
videoAggregatorPadGetPreparedFrame ::
    (B.CallStack.HasCallStack, MonadIO m, IsVideoAggregatorPad a) =>
    a
    {- ^ /@pad@/: a 'GI.GstVideo.Objects.VideoAggregatorPad.VideoAggregatorPad' -}
    -> m GstVideo.VideoFrame.VideoFrame
    {- ^ __Returns:__ The currently prepared video frame -}
videoAggregatorPadGetPreparedFrame pad = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    result <- gst_video_aggregator_pad_get_prepared_frame pad'
    checkUnexpectedReturnNULL "videoAggregatorPadGetPreparedFrame" result
    result' <- (newPtr GstVideo.VideoFrame.VideoFrame) result
    touchManagedPtr pad
    return result'

#if ENABLE_OVERLOADING
data VideoAggregatorPadGetPreparedFrameMethodInfo
instance (signature ~ (m GstVideo.VideoFrame.VideoFrame), MonadIO m, IsVideoAggregatorPad a) => O.MethodInfo VideoAggregatorPadGetPreparedFrameMethodInfo a signature where
    overloadedMethod _ = videoAggregatorPadGetPreparedFrame

#endif

-- method VideoAggregatorPad::has_current_buffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstVideo", name = "VideoAggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstVideoAggregatorPad", 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_video_aggregator_pad_has_current_buffer" gst_video_aggregator_pad_has_current_buffer ::
    Ptr VideoAggregatorPad ->               -- pad : TInterface (Name {namespace = "GstVideo", name = "VideoAggregatorPad"})
    IO CInt

{- |
Checks if the pad currently has a buffer queued that is going to be used
for the current output frame.

This must only be called from the @/aggregate_frames()/@ virtual method,
or from the @/prepare_frame()/@ virtual method of the aggregator pads.
-}
videoAggregatorPadHasCurrentBuffer ::
    (B.CallStack.HasCallStack, MonadIO m, IsVideoAggregatorPad a) =>
    a
    {- ^ /@pad@/: a 'GI.GstVideo.Objects.VideoAggregatorPad.VideoAggregatorPad' -}
    -> m Bool
    {- ^ __Returns:__ 'True' if the pad has currently a buffer queued -}
videoAggregatorPadHasCurrentBuffer pad = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    result <- gst_video_aggregator_pad_has_current_buffer pad'
    let result' = (/= 0) result
    touchManagedPtr pad
    return result'

#if ENABLE_OVERLOADING
data VideoAggregatorPadHasCurrentBufferMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsVideoAggregatorPad a) => O.MethodInfo VideoAggregatorPadHasCurrentBufferMethodInfo a signature where
    overloadedMethod _ = videoAggregatorPadHasCurrentBuffer

#endif

-- method VideoAggregatorPad::set_needs_alpha
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstVideo", name = "VideoAggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstVideoAggregatorPad", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "needs_alpha", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "%TRUE if this pad requires alpha output", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_aggregator_pad_set_needs_alpha" gst_video_aggregator_pad_set_needs_alpha ::
    Ptr VideoAggregatorPad ->               -- pad : TInterface (Name {namespace = "GstVideo", name = "VideoAggregatorPad"})
    CInt ->                                 -- needs_alpha : TBasicType TBoolean
    IO ()

{- |
Allows selecting that this pad requires an output format with alpha
-}
videoAggregatorPadSetNeedsAlpha ::
    (B.CallStack.HasCallStack, MonadIO m, IsVideoAggregatorPad a) =>
    a
    {- ^ /@pad@/: a 'GI.GstVideo.Objects.VideoAggregatorPad.VideoAggregatorPad' -}
    -> Bool
    {- ^ /@needsAlpha@/: 'True' if this pad requires alpha output -}
    -> m ()
videoAggregatorPadSetNeedsAlpha pad needsAlpha = liftIO $ do
    pad' <- unsafeManagedPtrCastPtr pad
    let needsAlpha' = (fromIntegral . fromEnum) needsAlpha
    gst_video_aggregator_pad_set_needs_alpha pad' needsAlpha'
    touchManagedPtr pad
    return ()

#if ENABLE_OVERLOADING
data VideoAggregatorPadSetNeedsAlphaMethodInfo
instance (signature ~ (Bool -> m ()), MonadIO m, IsVideoAggregatorPad a) => O.MethodInfo VideoAggregatorPadSetNeedsAlphaMethodInfo a signature where
    overloadedMethod _ = videoAggregatorPadSetNeedsAlpha

#endif