{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- VideoAggregator can accept AYUV, ARGB and BGRA video streams. For each of the requested
-- sink pads it will compare the incoming geometry and framerate to define the
-- output parameters. Indeed output video frames will have the geometry of the
-- biggest incoming video stream and the framerate of the fastest incoming one.
-- 
-- VideoAggregator will do colorspace conversion.
-- 
-- Zorder for each input stream can be configured on the
-- t'GI.GstVideo.Objects.VideoAggregatorPad.VideoAggregatorPad'.
-- 
-- /Since: 1.16/

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

module GI.GstVideo.Objects.VideoAggregator
    ( 

-- * Exported types
    VideoAggregator(..)                     ,
    IsVideoAggregator                       ,
    toVideoAggregator                       ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [abortState]("GI.Gst.Objects.Element#g:method:abortState"), [addControlBinding]("GI.Gst.Objects.Object#g:method:addControlBinding"), [addPad]("GI.Gst.Objects.Element#g:method:addPad"), [addPropertyDeepNotifyWatch]("GI.Gst.Objects.Element#g:method:addPropertyDeepNotifyWatch"), [addPropertyNotifyWatch]("GI.Gst.Objects.Element#g:method:addPropertyNotifyWatch"), [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [callAsync]("GI.Gst.Objects.Element#g:method:callAsync"), [changeState]("GI.Gst.Objects.Element#g:method:changeState"), [continueState]("GI.Gst.Objects.Element#g:method:continueState"), [createAllPads]("GI.Gst.Objects.Element#g:method:createAllPads"), [defaultError]("GI.Gst.Objects.Object#g:method:defaultError"), [finishBuffer]("GI.GstBase.Objects.Aggregator#g:method:finishBuffer"), [finishBufferList]("GI.GstBase.Objects.Aggregator#g:method:finishBufferList"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [foreachPad]("GI.Gst.Objects.Element#g:method:foreachPad"), [foreachSinkPad]("GI.Gst.Objects.Element#g:method:foreachSinkPad"), [foreachSrcPad]("GI.Gst.Objects.Element#g:method:foreachSrcPad"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [hasActiveControlBindings]("GI.Gst.Objects.Object#g:method:hasActiveControlBindings"), [hasAncestor]("GI.Gst.Objects.Object#g:method:hasAncestor"), [hasAsAncestor]("GI.Gst.Objects.Object#g:method:hasAsAncestor"), [hasAsParent]("GI.Gst.Objects.Object#g:method:hasAsParent"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [isLockedState]("GI.Gst.Objects.Element#g:method:isLockedState"), [iteratePads]("GI.Gst.Objects.Element#g:method:iteratePads"), [iterateSinkPads]("GI.Gst.Objects.Element#g:method:iterateSinkPads"), [iterateSrcPads]("GI.Gst.Objects.Element#g:method:iterateSrcPads"), [link]("GI.Gst.Objects.Element#g:method:link"), [linkFiltered]("GI.Gst.Objects.Element#g:method:linkFiltered"), [linkPads]("GI.Gst.Objects.Element#g:method:linkPads"), [linkPadsFiltered]("GI.Gst.Objects.Element#g:method:linkPadsFiltered"), [linkPadsFull]("GI.Gst.Objects.Element#g:method:linkPadsFull"), [lostState]("GI.Gst.Objects.Element#g:method:lostState"), [messageFull]("GI.Gst.Objects.Element#g:method:messageFull"), [messageFullWithDetails]("GI.Gst.Objects.Element#g:method:messageFullWithDetails"), [negotiate]("GI.GstBase.Objects.Aggregator#g:method:negotiate"), [noMorePads]("GI.Gst.Objects.Element#g:method:noMorePads"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [peekNextSample]("GI.GstBase.Objects.Aggregator#g:method:peekNextSample"), [postMessage]("GI.Gst.Objects.Element#g:method:postMessage"), [provideClock]("GI.Gst.Objects.Element#g:method:provideClock"), [query]("GI.Gst.Objects.Element#g:method:query"), [queryConvert]("GI.Gst.Objects.Element#g:method:queryConvert"), [queryDuration]("GI.Gst.Objects.Element#g:method:queryDuration"), [queryPosition]("GI.Gst.Objects.Element#g:method:queryPosition"), [ref]("GI.Gst.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [releaseRequestPad]("GI.Gst.Objects.Element#g:method:releaseRequestPad"), [removeControlBinding]("GI.Gst.Objects.Object#g:method:removeControlBinding"), [removePad]("GI.Gst.Objects.Element#g:method:removePad"), [removePropertyNotifyWatch]("GI.Gst.Objects.Element#g:method:removePropertyNotifyWatch"), [requestPad]("GI.Gst.Objects.Element#g:method:requestPad"), [requestPadSimple]("GI.Gst.Objects.Element#g:method:requestPadSimple"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [seek]("GI.Gst.Objects.Element#g:method:seek"), [seekSimple]("GI.Gst.Objects.Element#g:method:seekSimple"), [selectedSamples]("GI.GstBase.Objects.Aggregator#g:method:selectedSamples"), [sendEvent]("GI.Gst.Objects.Element#g:method:sendEvent"), [simpleGetNextTime]("GI.GstBase.Objects.Aggregator#g:method:simpleGetNextTime"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [suggestNextSync]("GI.Gst.Objects.Object#g:method:suggestNextSync"), [syncStateWithParent]("GI.Gst.Objects.Element#g:method:syncStateWithParent"), [syncValues]("GI.Gst.Objects.Object#g:method:syncValues"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unlink]("GI.Gst.Objects.Element#g:method:unlink"), [unlinkPads]("GI.Gst.Objects.Element#g:method:unlinkPads"), [unparent]("GI.Gst.Objects.Object#g:method:unparent"), [unref]("GI.Gst.Objects.Object#g:method:unref"), [updateSegment]("GI.GstBase.Objects.Aggregator#g:method:updateSegment"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getAllocator]("GI.GstBase.Objects.Aggregator#g:method:getAllocator"), [getBaseTime]("GI.Gst.Objects.Element#g:method:getBaseTime"), [getBufferPool]("GI.GstBase.Objects.Aggregator#g:method:getBufferPool"), [getBus]("GI.Gst.Objects.Element#g:method:getBus"), [getClock]("GI.Gst.Objects.Element#g:method:getClock"), [getCompatiblePad]("GI.Gst.Objects.Element#g:method:getCompatiblePad"), [getCompatiblePadTemplate]("GI.Gst.Objects.Element#g:method:getCompatiblePadTemplate"), [getContext]("GI.Gst.Objects.Element#g:method:getContext"), [getContextUnlocked]("GI.Gst.Objects.Element#g:method:getContextUnlocked"), [getContexts]("GI.Gst.Objects.Element#g:method:getContexts"), [getControlBinding]("GI.Gst.Objects.Object#g:method:getControlBinding"), [getControlRate]("GI.Gst.Objects.Object#g:method:getControlRate"), [getCurrentClockTime]("GI.Gst.Objects.Element#g:method:getCurrentClockTime"), [getCurrentRunningTime]("GI.Gst.Objects.Element#g:method:getCurrentRunningTime"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getExecutionTaskPool]("GI.GstVideo.Objects.VideoAggregator#g:method:getExecutionTaskPool"), [getFactory]("GI.Gst.Objects.Element#g:method:getFactory"), [getGValueArray]("GI.Gst.Objects.Object#g:method:getGValueArray"), [getLatency]("GI.GstBase.Objects.Aggregator#g:method:getLatency"), [getMetadata]("GI.Gst.Objects.Element#g:method:getMetadata"), [getName]("GI.Gst.Objects.Object#g:method:getName"), [getPadTemplate]("GI.Gst.Objects.Element#g:method:getPadTemplate"), [getPadTemplateList]("GI.Gst.Objects.Element#g:method:getPadTemplateList"), [getParent]("GI.Gst.Objects.Object#g:method:getParent"), [getPathString]("GI.Gst.Objects.Object#g:method:getPathString"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getRequestPad]("GI.Gst.Objects.Element#g:method:getRequestPad"), [getStartTime]("GI.Gst.Objects.Element#g:method:getStartTime"), [getState]("GI.Gst.Objects.Element#g:method:getState"), [getStaticPad]("GI.Gst.Objects.Element#g:method:getStaticPad"), [getValue]("GI.Gst.Objects.Object#g:method:getValue").
-- 
-- ==== Setters
-- [setBaseTime]("GI.Gst.Objects.Element#g:method:setBaseTime"), [setBus]("GI.Gst.Objects.Element#g:method:setBus"), [setClock]("GI.Gst.Objects.Element#g:method:setClock"), [setContext]("GI.Gst.Objects.Element#g:method:setContext"), [setControlBindingDisabled]("GI.Gst.Objects.Object#g:method:setControlBindingDisabled"), [setControlBindingsDisabled]("GI.Gst.Objects.Object#g:method:setControlBindingsDisabled"), [setControlRate]("GI.Gst.Objects.Object#g:method:setControlRate"), [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setLatency]("GI.GstBase.Objects.Aggregator#g:method:setLatency"), [setLockedState]("GI.Gst.Objects.Element#g:method:setLockedState"), [setName]("GI.Gst.Objects.Object#g:method:setName"), [setParent]("GI.Gst.Objects.Object#g:method:setParent"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty"), [setSrcCaps]("GI.GstBase.Objects.Aggregator#g:method:setSrcCaps"), [setStartTime]("GI.Gst.Objects.Element#g:method:setStartTime"), [setState]("GI.Gst.Objects.Element#g:method:setState").

#if defined(ENABLE_OVERLOADING)
    ResolveVideoAggregatorMethod            ,
#endif

-- ** getExecutionTaskPool #method:getExecutionTaskPool#

#if defined(ENABLE_OVERLOADING)
    VideoAggregatorGetExecutionTaskPoolMethodInfo,
#endif
    videoAggregatorGetExecutionTaskPool     ,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
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 GHC.Records as R

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gst.Objects.Element as Gst.Element
import qualified GI.Gst.Objects.Object as Gst.Object
import qualified GI.Gst.Objects.TaskPool as Gst.TaskPool
import qualified GI.GstBase.Objects.Aggregator as GstBase.Aggregator

-- | Memory-managed wrapper type.
newtype VideoAggregator = VideoAggregator (SP.ManagedPtr VideoAggregator)
    deriving (VideoAggregator -> VideoAggregator -> Bool
(VideoAggregator -> VideoAggregator -> Bool)
-> (VideoAggregator -> VideoAggregator -> Bool)
-> Eq VideoAggregator
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VideoAggregator -> VideoAggregator -> Bool
$c/= :: VideoAggregator -> VideoAggregator -> Bool
== :: VideoAggregator -> VideoAggregator -> Bool
$c== :: VideoAggregator -> VideoAggregator -> Bool
Eq)

instance SP.ManagedPtrNewtype VideoAggregator where
    toManagedPtr :: VideoAggregator -> ManagedPtr VideoAggregator
toManagedPtr (VideoAggregator ManagedPtr VideoAggregator
p) = ManagedPtr VideoAggregator
p

foreign import ccall "gst_video_aggregator_get_type"
    c_gst_video_aggregator_get_type :: IO B.Types.GType

instance B.Types.TypedObject VideoAggregator where
    glibType :: IO GType
glibType = IO GType
c_gst_video_aggregator_get_type

instance B.Types.GObject VideoAggregator

-- | Type class for types which can be safely cast to `VideoAggregator`, for instance with `toVideoAggregator`.
class (SP.GObject o, O.IsDescendantOf VideoAggregator o) => IsVideoAggregator o
instance (SP.GObject o, O.IsDescendantOf VideoAggregator o) => IsVideoAggregator o

instance O.HasParentTypes VideoAggregator
type instance O.ParentTypes VideoAggregator = '[GstBase.Aggregator.Aggregator, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]

-- | Cast to `VideoAggregator`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toVideoAggregator :: (MIO.MonadIO m, IsVideoAggregator o) => o -> m VideoAggregator
toVideoAggregator :: forall (m :: * -> *) o.
(MonadIO m, IsVideoAggregator o) =>
o -> m VideoAggregator
toVideoAggregator = IO VideoAggregator -> m VideoAggregator
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO VideoAggregator -> m VideoAggregator)
-> (o -> IO VideoAggregator) -> o -> m VideoAggregator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr VideoAggregator -> VideoAggregator)
-> o -> IO VideoAggregator
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr VideoAggregator -> VideoAggregator
VideoAggregator

-- | Convert 'VideoAggregator' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe VideoAggregator) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gst_video_aggregator_get_type
    gvalueSet_ :: Ptr GValue -> Maybe VideoAggregator -> IO ()
gvalueSet_ Ptr GValue
gv Maybe VideoAggregator
P.Nothing = Ptr GValue -> Ptr VideoAggregator -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr VideoAggregator
forall a. Ptr a
FP.nullPtr :: FP.Ptr VideoAggregator)
    gvalueSet_ Ptr GValue
gv (P.Just VideoAggregator
obj) = VideoAggregator -> (Ptr VideoAggregator -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr VideoAggregator
obj (Ptr GValue -> Ptr VideoAggregator -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe VideoAggregator)
gvalueGet_ Ptr GValue
gv = do
        Ptr VideoAggregator
ptr <- Ptr GValue -> IO (Ptr VideoAggregator)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr VideoAggregator)
        if Ptr VideoAggregator
ptr Ptr VideoAggregator -> Ptr VideoAggregator -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr VideoAggregator
forall a. Ptr a
FP.nullPtr
        then VideoAggregator -> Maybe VideoAggregator
forall a. a -> Maybe a
P.Just (VideoAggregator -> Maybe VideoAggregator)
-> IO VideoAggregator -> IO (Maybe VideoAggregator)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr VideoAggregator -> VideoAggregator)
-> Ptr VideoAggregator -> IO VideoAggregator
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr VideoAggregator -> VideoAggregator
VideoAggregator Ptr VideoAggregator
ptr
        else Maybe VideoAggregator -> IO (Maybe VideoAggregator)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe VideoAggregator
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveVideoAggregatorMethod (t :: Symbol) (o :: *) :: * where
    ResolveVideoAggregatorMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
    ResolveVideoAggregatorMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
    ResolveVideoAggregatorMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
    ResolveVideoAggregatorMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
    ResolveVideoAggregatorMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
    ResolveVideoAggregatorMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveVideoAggregatorMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveVideoAggregatorMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
    ResolveVideoAggregatorMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
    ResolveVideoAggregatorMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
    ResolveVideoAggregatorMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
    ResolveVideoAggregatorMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
    ResolveVideoAggregatorMethod "finishBuffer" o = GstBase.Aggregator.AggregatorFinishBufferMethodInfo
    ResolveVideoAggregatorMethod "finishBufferList" o = GstBase.Aggregator.AggregatorFinishBufferListMethodInfo
    ResolveVideoAggregatorMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveVideoAggregatorMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
    ResolveVideoAggregatorMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
    ResolveVideoAggregatorMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
    ResolveVideoAggregatorMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveVideoAggregatorMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveVideoAggregatorMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
    ResolveVideoAggregatorMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
    ResolveVideoAggregatorMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
    ResolveVideoAggregatorMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
    ResolveVideoAggregatorMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveVideoAggregatorMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
    ResolveVideoAggregatorMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
    ResolveVideoAggregatorMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
    ResolveVideoAggregatorMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
    ResolveVideoAggregatorMethod "link" o = Gst.Element.ElementLinkMethodInfo
    ResolveVideoAggregatorMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
    ResolveVideoAggregatorMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
    ResolveVideoAggregatorMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
    ResolveVideoAggregatorMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
    ResolveVideoAggregatorMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
    ResolveVideoAggregatorMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
    ResolveVideoAggregatorMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
    ResolveVideoAggregatorMethod "negotiate" o = GstBase.Aggregator.AggregatorNegotiateMethodInfo
    ResolveVideoAggregatorMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
    ResolveVideoAggregatorMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveVideoAggregatorMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveVideoAggregatorMethod "peekNextSample" o = GstBase.Aggregator.AggregatorPeekNextSampleMethodInfo
    ResolveVideoAggregatorMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
    ResolveVideoAggregatorMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
    ResolveVideoAggregatorMethod "query" o = Gst.Element.ElementQueryMethodInfo
    ResolveVideoAggregatorMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
    ResolveVideoAggregatorMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
    ResolveVideoAggregatorMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
    ResolveVideoAggregatorMethod "ref" o = Gst.Object.ObjectRefMethodInfo
    ResolveVideoAggregatorMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveVideoAggregatorMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
    ResolveVideoAggregatorMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
    ResolveVideoAggregatorMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
    ResolveVideoAggregatorMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
    ResolveVideoAggregatorMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
    ResolveVideoAggregatorMethod "requestPadSimple" o = Gst.Element.ElementRequestPadSimpleMethodInfo
    ResolveVideoAggregatorMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveVideoAggregatorMethod "seek" o = Gst.Element.ElementSeekMethodInfo
    ResolveVideoAggregatorMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
    ResolveVideoAggregatorMethod "selectedSamples" o = GstBase.Aggregator.AggregatorSelectedSamplesMethodInfo
    ResolveVideoAggregatorMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
    ResolveVideoAggregatorMethod "simpleGetNextTime" o = GstBase.Aggregator.AggregatorSimpleGetNextTimeMethodInfo
    ResolveVideoAggregatorMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveVideoAggregatorMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveVideoAggregatorMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
    ResolveVideoAggregatorMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
    ResolveVideoAggregatorMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
    ResolveVideoAggregatorMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveVideoAggregatorMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
    ResolveVideoAggregatorMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
    ResolveVideoAggregatorMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
    ResolveVideoAggregatorMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
    ResolveVideoAggregatorMethod "updateSegment" o = GstBase.Aggregator.AggregatorUpdateSegmentMethodInfo
    ResolveVideoAggregatorMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveVideoAggregatorMethod "getAllocator" o = GstBase.Aggregator.AggregatorGetAllocatorMethodInfo
    ResolveVideoAggregatorMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
    ResolveVideoAggregatorMethod "getBufferPool" o = GstBase.Aggregator.AggregatorGetBufferPoolMethodInfo
    ResolveVideoAggregatorMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
    ResolveVideoAggregatorMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
    ResolveVideoAggregatorMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
    ResolveVideoAggregatorMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
    ResolveVideoAggregatorMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
    ResolveVideoAggregatorMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
    ResolveVideoAggregatorMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
    ResolveVideoAggregatorMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
    ResolveVideoAggregatorMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
    ResolveVideoAggregatorMethod "getCurrentClockTime" o = Gst.Element.ElementGetCurrentClockTimeMethodInfo
    ResolveVideoAggregatorMethod "getCurrentRunningTime" o = Gst.Element.ElementGetCurrentRunningTimeMethodInfo
    ResolveVideoAggregatorMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveVideoAggregatorMethod "getExecutionTaskPool" o = VideoAggregatorGetExecutionTaskPoolMethodInfo
    ResolveVideoAggregatorMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
    ResolveVideoAggregatorMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
    ResolveVideoAggregatorMethod "getLatency" o = GstBase.Aggregator.AggregatorGetLatencyMethodInfo
    ResolveVideoAggregatorMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
    ResolveVideoAggregatorMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
    ResolveVideoAggregatorMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
    ResolveVideoAggregatorMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
    ResolveVideoAggregatorMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
    ResolveVideoAggregatorMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
    ResolveVideoAggregatorMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveVideoAggregatorMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveVideoAggregatorMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
    ResolveVideoAggregatorMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
    ResolveVideoAggregatorMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
    ResolveVideoAggregatorMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
    ResolveVideoAggregatorMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
    ResolveVideoAggregatorMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
    ResolveVideoAggregatorMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
    ResolveVideoAggregatorMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
    ResolveVideoAggregatorMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
    ResolveVideoAggregatorMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
    ResolveVideoAggregatorMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
    ResolveVideoAggregatorMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
    ResolveVideoAggregatorMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveVideoAggregatorMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveVideoAggregatorMethod "setLatency" o = GstBase.Aggregator.AggregatorSetLatencyMethodInfo
    ResolveVideoAggregatorMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
    ResolveVideoAggregatorMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
    ResolveVideoAggregatorMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
    ResolveVideoAggregatorMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveVideoAggregatorMethod "setSrcCaps" o = GstBase.Aggregator.AggregatorSetSrcCapsMethodInfo
    ResolveVideoAggregatorMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
    ResolveVideoAggregatorMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
    ResolveVideoAggregatorMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveVideoAggregatorMethod t VideoAggregator, O.OverloadedMethod info VideoAggregator p) => OL.IsLabel t (VideoAggregator -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveVideoAggregatorMethod t VideoAggregator, O.OverloadedMethod info VideoAggregator p, R.HasField t VideoAggregator p) => R.HasField t VideoAggregator p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveVideoAggregatorMethod t VideoAggregator, O.OverloadedMethodInfo info VideoAggregator) => OL.IsLabel t (O.MethodProxy info VideoAggregator) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList VideoAggregator
type instance O.AttributeList VideoAggregator = VideoAggregatorAttributeList
type VideoAggregatorAttributeList = ('[ '("emitSignals", GstBase.Aggregator.AggregatorEmitSignalsPropertyInfo), '("latency", GstBase.Aggregator.AggregatorLatencyPropertyInfo), '("minUpstreamLatency", GstBase.Aggregator.AggregatorMinUpstreamLatencyPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("startTime", GstBase.Aggregator.AggregatorStartTimePropertyInfo), '("startTimeSelection", GstBase.Aggregator.AggregatorStartTimeSelectionPropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList VideoAggregator = VideoAggregatorSignalList
type VideoAggregatorSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo), '("samplesSelected", GstBase.Aggregator.AggregatorSamplesSelectedSignalInfo)] :: [(Symbol, *)])

#endif

-- method VideoAggregator::get_execution_task_pool
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "vagg"
--           , argType =
--               TInterface
--                 Name { namespace = "GstVideo" , name = "VideoAggregator" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the #GstVideoAggregator"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TInterface Name { namespace = "Gst" , name = "TaskPool" })
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_aggregator_get_execution_task_pool" gst_video_aggregator_get_execution_task_pool :: 
    Ptr VideoAggregator ->                  -- vagg : TInterface (Name {namespace = "GstVideo", name = "VideoAggregator"})
    IO (Ptr Gst.TaskPool.TaskPool)

-- | The returned t'GI.Gst.Objects.TaskPool.TaskPool' is used internally for performing parallel
-- video format conversions\/scaling\/etc during the
-- t'GI.GstVideo.Structs.VideoAggregatorPadClass.VideoAggregatorPadClass'::@/prepare_frame_start/@() process.
-- Subclasses can add their own operation to perform using the returned
-- t'GI.Gst.Objects.TaskPool.TaskPool' during t'GI.GstVideo.Structs.VideoAggregatorClass.VideoAggregatorClass'::@/aggregate_frames/@().
-- 
-- /Since: 1.20/
videoAggregatorGetExecutionTaskPool ::
    (B.CallStack.HasCallStack, MonadIO m, IsVideoAggregator a) =>
    a
    -- ^ /@vagg@/: the t'GI.GstVideo.Objects.VideoAggregator.VideoAggregator'
    -> m Gst.TaskPool.TaskPool
    -- ^ __Returns:__ the t'GI.Gst.Objects.TaskPool.TaskPool' that can be used by subclasses
    --     for performing concurrent operations
videoAggregatorGetExecutionTaskPool :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsVideoAggregator a) =>
a -> m TaskPool
videoAggregatorGetExecutionTaskPool a
vagg = IO TaskPool -> m TaskPool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO TaskPool -> m TaskPool) -> IO TaskPool -> m TaskPool
forall a b. (a -> b) -> a -> b
$ do
    Ptr VideoAggregator
vagg' <- a -> IO (Ptr VideoAggregator)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
vagg
    Ptr TaskPool
result <- Ptr VideoAggregator -> IO (Ptr TaskPool)
gst_video_aggregator_get_execution_task_pool Ptr VideoAggregator
vagg'
    Text -> Ptr TaskPool -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"videoAggregatorGetExecutionTaskPool" Ptr TaskPool
result
    TaskPool
result' <- ((ManagedPtr TaskPool -> TaskPool) -> Ptr TaskPool -> IO TaskPool
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
wrapObject ManagedPtr TaskPool -> TaskPool
Gst.TaskPool.TaskPool) Ptr TaskPool
result
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
vagg
    TaskPool -> IO TaskPool
forall (m :: * -> *) a. Monad m => a -> m a
return TaskPool
result'

#if defined(ENABLE_OVERLOADING)
data VideoAggregatorGetExecutionTaskPoolMethodInfo
instance (signature ~ (m Gst.TaskPool.TaskPool), MonadIO m, IsVideoAggregator a) => O.OverloadedMethod VideoAggregatorGetExecutionTaskPoolMethodInfo a signature where
    overloadedMethod = videoAggregatorGetExecutionTaskPool

instance O.OverloadedMethodInfo VideoAggregatorGetExecutionTaskPoolMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstVideo.Objects.VideoAggregator.videoAggregatorGetExecutionTaskPool",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstvideo-1.0.25/docs/GI-GstVideo-Objects-VideoAggregator.html#v:videoAggregatorGetExecutionTaskPool"
        })


#endif