{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Provides a base class for adding tags at the beginning or end of a
-- stream.
-- 
-- == Deriving from GstTagMux
-- 
-- Subclasses have to do the following things:
-- 
--  * In their base init function, they must add pad templates for the sink
--    pad and the source pad to the element class, describing the media type
--    they accept and output in the caps of the pad template.
--  * In their class init function, they must override the
--    GST_TAG_MUX_CLASS(mux_klass)->render_start_tag and\/or
--    GST_TAG_MUX_CLASS(mux_klass)->render_end_tag vfuncs and set up a render
--    function.

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

module GI.GstTag.Objects.TagMux
    ( 

-- * Exported types
    TagMux(..)                              ,
    IsTagMux                                ,
    toTagMux                                ,


 -- * 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"), [addTagValue]("GI.Gst.Interfaces.TagSetter#g:method:addTagValue"), [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"), [mergeTags]("GI.Gst.Interfaces.TagSetter#g:method:mergeTags"), [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"), [resetTags]("GI.Gst.Interfaces.TagSetter#g:method:resetTags"), [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"), [getTagList]("GI.Gst.Interfaces.TagSetter#g:method:getTagList"), [getTagMergeMode]("GI.Gst.Interfaces.TagSetter#g:method:getTagMergeMode"), [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"), [setTagMergeMode]("GI.Gst.Interfaces.TagSetter#g:method:setTagMergeMode").

#if defined(ENABLE_OVERLOADING)
    ResolveTagMuxMethod                     ,
#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.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.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.Interfaces.TagSetter as Gst.TagSetter
import qualified GI.Gst.Objects.Element as Gst.Element
import qualified GI.Gst.Objects.Object as Gst.Object

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

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

foreign import ccall "gst_tag_mux_get_type"
    c_gst_tag_mux_get_type :: IO B.Types.GType

instance B.Types.TypedObject TagMux where
    glibType :: IO GType
glibType = IO GType
c_gst_tag_mux_get_type

instance B.Types.GObject TagMux

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

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

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

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

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

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

#endif

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

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList TagMux
type instance O.AttributeList TagMux = TagMuxAttributeList
type TagMuxAttributeList = ('[ '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

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

#endif