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

This is the most simple base class for audio sinks that only requires
subclasses to implement a set of simple functions:

\<variablelist>
  \<varlistentry>
    \<term>@/open()/@\<\/term>
    \<listitem>\<para>Open the device.\<\/para>\<\/listitem>
  \<\/varlistentry>
  \<varlistentry>
    \<term>@/prepare()/@\<\/term>
    \<listitem>\<para>Configure the device with the specified format.\<\/para>\<\/listitem>
  \<\/varlistentry>
  \<varlistentry>
    \<term>@/write()/@\<\/term>
    \<listitem>\<para>Write samples to the device.\<\/para>\<\/listitem>
  \<\/varlistentry>
  \<varlistentry>
    \<term>@/reset()/@\<\/term>
    \<listitem>\<para>Unblock writes and flush the device.\<\/para>\<\/listitem>
  \<\/varlistentry>
  \<varlistentry>
    \<term>@/delay()/@\<\/term>
    \<listitem>\<para>Get the number of samples written but not yet played
    by the device.\<\/para>\<\/listitem>
  \<\/varlistentry>
  \<varlistentry>
    \<term>@/unprepare()/@\<\/term>
    \<listitem>\<para>Undo operations done by prepare.\<\/para>\<\/listitem>
  \<\/varlistentry>
  \<varlistentry>
    \<term>@/close()/@\<\/term>
    \<listitem>\<para>Close the device.\<\/para>\<\/listitem>
  \<\/varlistentry>
\<\/variablelist>

All scheduling of samples and timestamps is done in this base class
together with 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' using a default implementation of a
'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' that uses threads.
-}

module GI.GstAudio.Objects.AudioSink
    ( 

-- * Exported types
    AudioSink(..)                           ,
    IsAudioSink                             ,
    toAudioSink                             ,
    noAudioSink                             ,


    ) where

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

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

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gst.Objects.Element as Gst.Element
import qualified GI.Gst.Objects.Object as Gst.Object
import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioBaseSink as GstAudio.AudioBaseSink
import qualified GI.GstBase.Objects.BaseSink as GstBase.BaseSink

newtype AudioSink = AudioSink (ManagedPtr AudioSink)
foreign import ccall "gst_audio_sink_get_type"
    c_gst_audio_sink_get_type :: IO GType

instance GObject AudioSink where
    gobjectType _ = c_gst_audio_sink_get_type
    

class GObject o => IsAudioSink o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError AudioSink a) =>
    IsAudioSink a
#endif
instance IsAudioSink AudioSink
instance GstAudio.AudioBaseSink.IsAudioBaseSink AudioSink
instance GstBase.BaseSink.IsBaseSink AudioSink
instance Gst.Element.IsElement AudioSink
instance Gst.Object.IsObject AudioSink
instance GObject.Object.IsObject AudioSink

toAudioSink :: IsAudioSink o => o -> IO AudioSink
toAudioSink = unsafeCastTo AudioSink

noAudioSink :: Maybe AudioSink
noAudioSink = Nothing

type family ResolveAudioSinkMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioSinkMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
    ResolveAudioSinkMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
    ResolveAudioSinkMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
    ResolveAudioSinkMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
    ResolveAudioSinkMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
    ResolveAudioSinkMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveAudioSinkMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveAudioSinkMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
    ResolveAudioSinkMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
    ResolveAudioSinkMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
    ResolveAudioSinkMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
    ResolveAudioSinkMethod "createRingbuffer" o = GstAudio.AudioBaseSink.AudioBaseSinkCreateRingbufferMethodInfo
    ResolveAudioSinkMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
    ResolveAudioSinkMethod "doPreroll" o = GstBase.BaseSink.BaseSinkDoPrerollMethodInfo
    ResolveAudioSinkMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveAudioSinkMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveAudioSinkMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
    ResolveAudioSinkMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
    ResolveAudioSinkMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
    ResolveAudioSinkMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
    ResolveAudioSinkMethod "isAsyncEnabled" o = GstBase.BaseSink.BaseSinkIsAsyncEnabledMethodInfo
    ResolveAudioSinkMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveAudioSinkMethod "isLastSampleEnabled" o = GstBase.BaseSink.BaseSinkIsLastSampleEnabledMethodInfo
    ResolveAudioSinkMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
    ResolveAudioSinkMethod "isQosEnabled" o = GstBase.BaseSink.BaseSinkIsQosEnabledMethodInfo
    ResolveAudioSinkMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
    ResolveAudioSinkMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
    ResolveAudioSinkMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
    ResolveAudioSinkMethod "link" o = Gst.Element.ElementLinkMethodInfo
    ResolveAudioSinkMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
    ResolveAudioSinkMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
    ResolveAudioSinkMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
    ResolveAudioSinkMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
    ResolveAudioSinkMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
    ResolveAudioSinkMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
    ResolveAudioSinkMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
    ResolveAudioSinkMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
    ResolveAudioSinkMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveAudioSinkMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveAudioSinkMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
    ResolveAudioSinkMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
    ResolveAudioSinkMethod "query" o = Gst.Element.ElementQueryMethodInfo
    ResolveAudioSinkMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
    ResolveAudioSinkMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
    ResolveAudioSinkMethod "queryLatency" o = GstBase.BaseSink.BaseSinkQueryLatencyMethodInfo
    ResolveAudioSinkMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
    ResolveAudioSinkMethod "ref" o = Gst.Object.ObjectRefMethodInfo
    ResolveAudioSinkMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveAudioSinkMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
    ResolveAudioSinkMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
    ResolveAudioSinkMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
    ResolveAudioSinkMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
    ResolveAudioSinkMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveAudioSinkMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveAudioSinkMethod "reportDeviceFailure" o = GstAudio.AudioBaseSink.AudioBaseSinkReportDeviceFailureMethodInfo
    ResolveAudioSinkMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
    ResolveAudioSinkMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveAudioSinkMethod "seek" o = Gst.Element.ElementSeekMethodInfo
    ResolveAudioSinkMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
    ResolveAudioSinkMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
    ResolveAudioSinkMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveAudioSinkMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveAudioSinkMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
    ResolveAudioSinkMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
    ResolveAudioSinkMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
    ResolveAudioSinkMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveAudioSinkMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
    ResolveAudioSinkMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
    ResolveAudioSinkMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
    ResolveAudioSinkMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
    ResolveAudioSinkMethod "wait" o = GstBase.BaseSink.BaseSinkWaitMethodInfo
    ResolveAudioSinkMethod "waitClock" o = GstBase.BaseSink.BaseSinkWaitClockMethodInfo
    ResolveAudioSinkMethod "waitPreroll" o = GstBase.BaseSink.BaseSinkWaitPrerollMethodInfo
    ResolveAudioSinkMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveAudioSinkMethod "getAlignmentThreshold" o = GstAudio.AudioBaseSink.AudioBaseSinkGetAlignmentThresholdMethodInfo
    ResolveAudioSinkMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
    ResolveAudioSinkMethod "getBlocksize" o = GstBase.BaseSink.BaseSinkGetBlocksizeMethodInfo
    ResolveAudioSinkMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
    ResolveAudioSinkMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
    ResolveAudioSinkMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
    ResolveAudioSinkMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
    ResolveAudioSinkMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
    ResolveAudioSinkMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
    ResolveAudioSinkMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
    ResolveAudioSinkMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
    ResolveAudioSinkMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
    ResolveAudioSinkMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveAudioSinkMethod "getDiscontWait" o = GstAudio.AudioBaseSink.AudioBaseSinkGetDiscontWaitMethodInfo
    ResolveAudioSinkMethod "getDriftTolerance" o = GstAudio.AudioBaseSink.AudioBaseSinkGetDriftToleranceMethodInfo
    ResolveAudioSinkMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
    ResolveAudioSinkMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
    ResolveAudioSinkMethod "getLastSample" o = GstBase.BaseSink.BaseSinkGetLastSampleMethodInfo
    ResolveAudioSinkMethod "getLatency" o = GstBase.BaseSink.BaseSinkGetLatencyMethodInfo
    ResolveAudioSinkMethod "getMaxBitrate" o = GstBase.BaseSink.BaseSinkGetMaxBitrateMethodInfo
    ResolveAudioSinkMethod "getMaxLateness" o = GstBase.BaseSink.BaseSinkGetMaxLatenessMethodInfo
    ResolveAudioSinkMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
    ResolveAudioSinkMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
    ResolveAudioSinkMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
    ResolveAudioSinkMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveAudioSinkMethod "getProvideClock" o = GstAudio.AudioBaseSink.AudioBaseSinkGetProvideClockMethodInfo
    ResolveAudioSinkMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveAudioSinkMethod "getRenderDelay" o = GstBase.BaseSink.BaseSinkGetRenderDelayMethodInfo
    ResolveAudioSinkMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
    ResolveAudioSinkMethod "getSlaveMethod" o = GstAudio.AudioBaseSink.AudioBaseSinkGetSlaveMethodMethodInfo
    ResolveAudioSinkMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
    ResolveAudioSinkMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
    ResolveAudioSinkMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
    ResolveAudioSinkMethod "getSync" o = GstBase.BaseSink.BaseSinkGetSyncMethodInfo
    ResolveAudioSinkMethod "getThrottleTime" o = GstBase.BaseSink.BaseSinkGetThrottleTimeMethodInfo
    ResolveAudioSinkMethod "getTsOffset" o = GstBase.BaseSink.BaseSinkGetTsOffsetMethodInfo
    ResolveAudioSinkMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
    ResolveAudioSinkMethod "getValueArray" o = Gst.Object.ObjectGetValueArrayMethodInfo
    ResolveAudioSinkMethod "setAlignmentThreshold" o = GstAudio.AudioBaseSink.AudioBaseSinkSetAlignmentThresholdMethodInfo
    ResolveAudioSinkMethod "setAsyncEnabled" o = GstBase.BaseSink.BaseSinkSetAsyncEnabledMethodInfo
    ResolveAudioSinkMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
    ResolveAudioSinkMethod "setBlocksize" o = GstBase.BaseSink.BaseSinkSetBlocksizeMethodInfo
    ResolveAudioSinkMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
    ResolveAudioSinkMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
    ResolveAudioSinkMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
    ResolveAudioSinkMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
    ResolveAudioSinkMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
    ResolveAudioSinkMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
    ResolveAudioSinkMethod "setCustomSlavingCallback" o = GstAudio.AudioBaseSink.AudioBaseSinkSetCustomSlavingCallbackMethodInfo
    ResolveAudioSinkMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveAudioSinkMethod "setDiscontWait" o = GstAudio.AudioBaseSink.AudioBaseSinkSetDiscontWaitMethodInfo
    ResolveAudioSinkMethod "setDriftTolerance" o = GstAudio.AudioBaseSink.AudioBaseSinkSetDriftToleranceMethodInfo
    ResolveAudioSinkMethod "setLastSampleEnabled" o = GstBase.BaseSink.BaseSinkSetLastSampleEnabledMethodInfo
    ResolveAudioSinkMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
    ResolveAudioSinkMethod "setMaxBitrate" o = GstBase.BaseSink.BaseSinkSetMaxBitrateMethodInfo
    ResolveAudioSinkMethod "setMaxLateness" o = GstBase.BaseSink.BaseSinkSetMaxLatenessMethodInfo
    ResolveAudioSinkMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
    ResolveAudioSinkMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
    ResolveAudioSinkMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveAudioSinkMethod "setProvideClock" o = GstAudio.AudioBaseSink.AudioBaseSinkSetProvideClockMethodInfo
    ResolveAudioSinkMethod "setQosEnabled" o = GstBase.BaseSink.BaseSinkSetQosEnabledMethodInfo
    ResolveAudioSinkMethod "setRenderDelay" o = GstBase.BaseSink.BaseSinkSetRenderDelayMethodInfo
    ResolveAudioSinkMethod "setSlaveMethod" o = GstAudio.AudioBaseSink.AudioBaseSinkSetSlaveMethodMethodInfo
    ResolveAudioSinkMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
    ResolveAudioSinkMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
    ResolveAudioSinkMethod "setSync" o = GstBase.BaseSink.BaseSinkSetSyncMethodInfo
    ResolveAudioSinkMethod "setThrottleTime" o = GstBase.BaseSink.BaseSinkSetThrottleTimeMethodInfo
    ResolveAudioSinkMethod "setTsOffset" o = GstBase.BaseSink.BaseSinkSetTsOffsetMethodInfo
    ResolveAudioSinkMethod l o = O.MethodResolutionFailed l o

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

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

instance O.HasAttributeList AudioSink
type instance O.AttributeList AudioSink = AudioSinkAttributeList
type AudioSinkAttributeList = ('[ '("alignmentThreshold", GstAudio.AudioBaseSink.AudioBaseSinkAlignmentThresholdPropertyInfo), '("async", GstBase.BaseSink.BaseSinkAsyncPropertyInfo), '("blocksize", GstBase.BaseSink.BaseSinkBlocksizePropertyInfo), '("bufferTime", GstAudio.AudioBaseSink.AudioBaseSinkBufferTimePropertyInfo), '("canActivatePull", GstAudio.AudioBaseSink.AudioBaseSinkCanActivatePullPropertyInfo), '("discontWait", GstAudio.AudioBaseSink.AudioBaseSinkDiscontWaitPropertyInfo), '("driftTolerance", GstAudio.AudioBaseSink.AudioBaseSinkDriftTolerancePropertyInfo), '("enableLastSample", GstBase.BaseSink.BaseSinkEnableLastSamplePropertyInfo), '("lastSample", GstBase.BaseSink.BaseSinkLastSamplePropertyInfo), '("latencyTime", GstAudio.AudioBaseSink.AudioBaseSinkLatencyTimePropertyInfo), '("maxBitrate", GstBase.BaseSink.BaseSinkMaxBitratePropertyInfo), '("maxLateness", GstBase.BaseSink.BaseSinkMaxLatenessPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("provideClock", GstAudio.AudioBaseSink.AudioBaseSinkProvideClockPropertyInfo), '("qos", GstBase.BaseSink.BaseSinkQosPropertyInfo), '("renderDelay", GstBase.BaseSink.BaseSinkRenderDelayPropertyInfo), '("slaveMethod", GstAudio.AudioBaseSink.AudioBaseSinkSlaveMethodPropertyInfo), '("sync", GstBase.BaseSink.BaseSinkSyncPropertyInfo), '("throttleTime", GstBase.BaseSink.BaseSinkThrottleTimePropertyInfo), '("tsOffset", GstBase.BaseSink.BaseSinkTsOffsetPropertyInfo)] :: [(Symbol, *)])

type instance O.SignalList AudioSink = AudioSinkSignalList
type AudioSinkSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])