{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Provides a base class for demuxing tags at the beginning or end of a
-- stream and handles things like typefinding, querying, seeking, and
-- different modes of operation (chain-based, pull_range-based, and providing
-- downstream elements with random access if upstream supports that). The tag
-- is stripped from the output, and all offsets are adjusted for the tag
-- sizes, so that to the downstream element the stream will appear as if
-- there was no tag at all. Also, once the tag has been parsed, GstTagDemux
-- will try to determine the media type of the resulting stream and add a
-- source pad with the appropriate caps in order to facilitate auto-plugging.
-- 
-- == Deriving from GstTagDemux
-- 
-- Subclasses have to do four things:
-- 
--  * In their base init function, they must add a pad template for the sink
--    pad to the element class, describing the media type they can parse in
--    the caps of the pad template.
--  * In their class init function, they must override
--    GST_TAG_DEMUX_CLASS(demux_klass)->identify_tag with their own identify
--    function.
--  * In their class init function, they must override
--  GST_TAG_DEMUX_CLASS(demux_klass)->parse_tag with their own parse
--  function.
--  * In their class init function, they must also set
--    GST_TAG_DEMUX_CLASS(demux_klass)->min_start_size and\/or
--  GST_TAG_DEMUX_CLASS(demux_klass)->min_end_size to the minimum size required
--  for the identify function to decide whether the stream has a supported tag
--  or not. A class parsing ID3v1 tags, for example, would set min_end_size to
--  128 bytes.

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

module GI.GstTag.Objects.TagDemux
    ( 

-- * Exported types
    TagDemux(..)                            ,
    IsTagDemux                              ,
    toTagDemux                              ,


 -- * 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"), [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"), [noMorePads]("GI.Gst.Objects.Element#g:method:noMorePads"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [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"), [sendEvent]("GI.Gst.Objects.Element#g:method:sendEvent"), [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"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getBaseTime]("GI.Gst.Objects.Element#g:method:getBaseTime"), [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"), [getFactory]("GI.Gst.Objects.Element#g:method:getFactory"), [getGValueArray]("GI.Gst.Objects.Object#g:method:getGValueArray"), [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"), [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"), [setStartTime]("GI.Gst.Objects.Element#g:method:setStartTime"), [setState]("GI.Gst.Objects.Element#g:method:setState").

#if defined(ENABLE_OVERLOADING)
    ResolveTagDemuxMethod                   ,
#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.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.GHashTable as B.GHT
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.Kind as DK
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

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

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

foreign import ccall "gst_tag_demux_get_type"
    c_gst_tag_demux_get_type :: IO B.Types.GType

instance B.Types.TypedObject TagDemux where
    glibType :: IO GType
glibType = IO GType
c_gst_tag_demux_get_type

instance B.Types.GObject TagDemux

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

instance O.HasParentTypes TagDemux
type instance O.ParentTypes TagDemux = '[Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]

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

-- | Convert 'TagDemux' 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 TagDemux) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gst_tag_demux_get_type
    gvalueSet_ :: Ptr GValue -> Maybe TagDemux -> IO ()
gvalueSet_ Ptr GValue
gv Maybe TagDemux
P.Nothing = Ptr GValue -> Ptr TagDemux -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr TagDemux
forall a. Ptr a
FP.nullPtr :: FP.Ptr TagDemux)
    gvalueSet_ Ptr GValue
gv (P.Just TagDemux
obj) = TagDemux -> (Ptr TagDemux -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr TagDemux
obj (Ptr GValue -> Ptr TagDemux -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe TagDemux)
gvalueGet_ Ptr GValue
gv = do
        Ptr TagDemux
ptr <- Ptr GValue -> IO (Ptr TagDemux)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr TagDemux)
        if Ptr TagDemux
ptr Ptr TagDemux -> Ptr TagDemux -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr TagDemux
forall a. Ptr a
FP.nullPtr
        then TagDemux -> Maybe TagDemux
forall a. a -> Maybe a
P.Just (TagDemux -> Maybe TagDemux) -> IO TagDemux -> IO (Maybe TagDemux)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr TagDemux -> TagDemux) -> Ptr TagDemux -> IO TagDemux
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr TagDemux -> TagDemux
TagDemux Ptr TagDemux
ptr
        else Maybe TagDemux -> IO (Maybe TagDemux)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe TagDemux
forall a. Maybe a
P.Nothing
        
    

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

instance (info ~ ResolveTagDemuxMethod t TagDemux, O.OverloadedMethod info TagDemux p) => OL.IsLabel t (TagDemux -> 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 ~ ResolveTagDemuxMethod t TagDemux, O.OverloadedMethod info TagDemux p, R.HasField t TagDemux p) => R.HasField t TagDemux p where
    getField = O.overloadedMethod @info

#endif

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

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList TagDemux
type instance O.AttributeList TagDemux = TagDemuxAttributeList
type TagDemuxAttributeList = ('[ '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo)] :: [(Symbol, DK.Type)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList TagDemux = TagDemuxSignalList
type TagDemuxSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, DK.Type)])

#endif