{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) This is the most simple base class for audio sources that only requires subclasses to implement a set of simple functions: * @open()@ :Open the device. * @prepare()@ :Configure the device with the specified format. * @read()@ :Read samples from the device. * @reset()@ :Unblock reads and flush the device. * @delay()@ :Get the number of samples in the device but not yet read. * @unprepare()@ :Undo operations done by prepare. * @close()@ :Close the device. All scheduling of samples and timestamps is done in this base class together with 'GI.GstAudio.Objects.AudioBaseSrc.AudioBaseSrc' using a default implementation of a 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' that uses threads. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.GstAudio.Objects.AudioSrc ( -- * Exported types AudioSrc(..) , IsAudioSrc , toAudioSrc , noAudioSrc , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import qualified GI.GObject.Objects.Object as GObject.Object import qualified GI.Gst.Objects.Element as Gst.Element import qualified GI.Gst.Objects.Object as Gst.Object import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioBaseSrc as GstAudio.AudioBaseSrc import qualified GI.GstBase.Objects.BaseSrc as GstBase.BaseSrc import qualified GI.GstBase.Objects.PushSrc as GstBase.PushSrc -- | Memory-managed wrapper type. newtype AudioSrc = AudioSrc (ManagedPtr AudioSrc) foreign import ccall "gst_audio_src_get_type" c_gst_audio_src_get_type :: IO GType instance GObject AudioSrc where gobjectType = c_gst_audio_src_get_type -- | Type class for types which can be safely cast to `AudioSrc`, for instance with `toAudioSrc`. class (GObject o, O.IsDescendantOf AudioSrc o) => IsAudioSrc o instance (GObject o, O.IsDescendantOf AudioSrc o) => IsAudioSrc o instance O.HasParentTypes AudioSrc type instance O.ParentTypes AudioSrc = '[GstAudio.AudioBaseSrc.AudioBaseSrc, GstBase.PushSrc.PushSrc, GstBase.BaseSrc.BaseSrc, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object] -- | Cast to `AudioSrc`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`. toAudioSrc :: (MonadIO m, IsAudioSrc o) => o -> m AudioSrc toAudioSrc = liftIO . unsafeCastTo AudioSrc -- | A convenience alias for `Nothing` :: `Maybe` `AudioSrc`. noAudioSrc :: Maybe AudioSrc noAudioSrc = Nothing #if ENABLE_OVERLOADING type family ResolveAudioSrcMethod (t :: Symbol) (o :: *) :: * where ResolveAudioSrcMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo ResolveAudioSrcMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo ResolveAudioSrcMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo ResolveAudioSrcMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo ResolveAudioSrcMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo ResolveAudioSrcMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolveAudioSrcMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolveAudioSrcMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo ResolveAudioSrcMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo ResolveAudioSrcMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo ResolveAudioSrcMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo ResolveAudioSrcMethod "createRingbuffer" o = GstAudio.AudioBaseSrc.AudioBaseSrcCreateRingbufferMethodInfo ResolveAudioSrcMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo ResolveAudioSrcMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolveAudioSrcMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo ResolveAudioSrcMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo ResolveAudioSrcMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo ResolveAudioSrcMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolveAudioSrcMethod "getv" o = GObject.Object.ObjectGetvMethodInfo ResolveAudioSrcMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo ResolveAudioSrcMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo ResolveAudioSrcMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo ResolveAudioSrcMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo ResolveAudioSrcMethod "isAsync" o = GstBase.BaseSrc.BaseSrcIsAsyncMethodInfo ResolveAudioSrcMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolveAudioSrcMethod "isLive" o = GstBase.BaseSrc.BaseSrcIsLiveMethodInfo ResolveAudioSrcMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo ResolveAudioSrcMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo ResolveAudioSrcMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo ResolveAudioSrcMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo ResolveAudioSrcMethod "link" o = Gst.Element.ElementLinkMethodInfo ResolveAudioSrcMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo ResolveAudioSrcMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo ResolveAudioSrcMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo ResolveAudioSrcMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo ResolveAudioSrcMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo ResolveAudioSrcMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo ResolveAudioSrcMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo ResolveAudioSrcMethod "newSeamlessSegment" o = GstBase.BaseSrc.BaseSrcNewSeamlessSegmentMethodInfo ResolveAudioSrcMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo ResolveAudioSrcMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolveAudioSrcMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolveAudioSrcMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo ResolveAudioSrcMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo ResolveAudioSrcMethod "query" o = Gst.Element.ElementQueryMethodInfo ResolveAudioSrcMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo ResolveAudioSrcMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo ResolveAudioSrcMethod "queryLatency" o = GstBase.BaseSrc.BaseSrcQueryLatencyMethodInfo ResolveAudioSrcMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo ResolveAudioSrcMethod "ref" o = Gst.Object.ObjectRefMethodInfo ResolveAudioSrcMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolveAudioSrcMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo ResolveAudioSrcMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo ResolveAudioSrcMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo ResolveAudioSrcMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo ResolveAudioSrcMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo ResolveAudioSrcMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolveAudioSrcMethod "seek" o = Gst.Element.ElementSeekMethodInfo ResolveAudioSrcMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo ResolveAudioSrcMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo ResolveAudioSrcMethod "startComplete" o = GstBase.BaseSrc.BaseSrcStartCompleteMethodInfo ResolveAudioSrcMethod "startWait" o = GstBase.BaseSrc.BaseSrcStartWaitMethodInfo ResolveAudioSrcMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolveAudioSrcMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolveAudioSrcMethod "submitBufferList" o = GstBase.BaseSrc.BaseSrcSubmitBufferListMethodInfo ResolveAudioSrcMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo ResolveAudioSrcMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo ResolveAudioSrcMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo ResolveAudioSrcMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolveAudioSrcMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo ResolveAudioSrcMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo ResolveAudioSrcMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo ResolveAudioSrcMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo ResolveAudioSrcMethod "waitPlaying" o = GstBase.BaseSrc.BaseSrcWaitPlayingMethodInfo ResolveAudioSrcMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolveAudioSrcMethod "getAllocator" o = GstBase.BaseSrc.BaseSrcGetAllocatorMethodInfo ResolveAudioSrcMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo ResolveAudioSrcMethod "getBlocksize" o = GstBase.BaseSrc.BaseSrcGetBlocksizeMethodInfo ResolveAudioSrcMethod "getBufferPool" o = GstBase.BaseSrc.BaseSrcGetBufferPoolMethodInfo ResolveAudioSrcMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo ResolveAudioSrcMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo ResolveAudioSrcMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo ResolveAudioSrcMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo ResolveAudioSrcMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo ResolveAudioSrcMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo ResolveAudioSrcMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo ResolveAudioSrcMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo ResolveAudioSrcMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo ResolveAudioSrcMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolveAudioSrcMethod "getDoTimestamp" o = GstBase.BaseSrc.BaseSrcGetDoTimestampMethodInfo ResolveAudioSrcMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo ResolveAudioSrcMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo ResolveAudioSrcMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo ResolveAudioSrcMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo ResolveAudioSrcMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo ResolveAudioSrcMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo ResolveAudioSrcMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo ResolveAudioSrcMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo ResolveAudioSrcMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolveAudioSrcMethod "getProvideClock" o = GstAudio.AudioBaseSrc.AudioBaseSrcGetProvideClockMethodInfo ResolveAudioSrcMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolveAudioSrcMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo ResolveAudioSrcMethod "getSlaveMethod" o = GstAudio.AudioBaseSrc.AudioBaseSrcGetSlaveMethodMethodInfo ResolveAudioSrcMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo ResolveAudioSrcMethod "getState" o = Gst.Element.ElementGetStateMethodInfo ResolveAudioSrcMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo ResolveAudioSrcMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo ResolveAudioSrcMethod "setAsync" o = GstBase.BaseSrc.BaseSrcSetAsyncMethodInfo ResolveAudioSrcMethod "setAutomaticEos" o = GstBase.BaseSrc.BaseSrcSetAutomaticEosMethodInfo ResolveAudioSrcMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo ResolveAudioSrcMethod "setBlocksize" o = GstBase.BaseSrc.BaseSrcSetBlocksizeMethodInfo ResolveAudioSrcMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo ResolveAudioSrcMethod "setCaps" o = GstBase.BaseSrc.BaseSrcSetCapsMethodInfo ResolveAudioSrcMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo ResolveAudioSrcMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo ResolveAudioSrcMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo ResolveAudioSrcMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo ResolveAudioSrcMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo ResolveAudioSrcMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolveAudioSrcMethod "setDoTimestamp" o = GstBase.BaseSrc.BaseSrcSetDoTimestampMethodInfo ResolveAudioSrcMethod "setDynamicSize" o = GstBase.BaseSrc.BaseSrcSetDynamicSizeMethodInfo ResolveAudioSrcMethod "setFormat" o = GstBase.BaseSrc.BaseSrcSetFormatMethodInfo ResolveAudioSrcMethod "setLive" o = GstBase.BaseSrc.BaseSrcSetLiveMethodInfo ResolveAudioSrcMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo ResolveAudioSrcMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo ResolveAudioSrcMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo ResolveAudioSrcMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolveAudioSrcMethod "setProvideClock" o = GstAudio.AudioBaseSrc.AudioBaseSrcSetProvideClockMethodInfo ResolveAudioSrcMethod "setSlaveMethod" o = GstAudio.AudioBaseSrc.AudioBaseSrcSetSlaveMethodMethodInfo ResolveAudioSrcMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo ResolveAudioSrcMethod "setState" o = Gst.Element.ElementSetStateMethodInfo ResolveAudioSrcMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveAudioSrcMethod t AudioSrc, O.MethodInfo info AudioSrc p) => OL.IsLabel t (AudioSrc -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif #if ENABLE_OVERLOADING instance O.HasAttributeList AudioSrc type instance O.AttributeList AudioSrc = AudioSrcAttributeList type AudioSrcAttributeList = ('[ '("actualBufferTime", GstAudio.AudioBaseSrc.AudioBaseSrcActualBufferTimePropertyInfo), '("actualLatencyTime", GstAudio.AudioBaseSrc.AudioBaseSrcActualLatencyTimePropertyInfo), '("blocksize", GstBase.BaseSrc.BaseSrcBlocksizePropertyInfo), '("bufferTime", GstAudio.AudioBaseSrc.AudioBaseSrcBufferTimePropertyInfo), '("doTimestamp", GstBase.BaseSrc.BaseSrcDoTimestampPropertyInfo), '("latencyTime", GstAudio.AudioBaseSrc.AudioBaseSrcLatencyTimePropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrc.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("provideClock", GstAudio.AudioBaseSrc.AudioBaseSrcProvideClockPropertyInfo), '("slaveMethod", GstAudio.AudioBaseSrc.AudioBaseSrcSlaveMethodPropertyInfo), '("typefind", GstBase.BaseSrc.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING #endif #if ENABLE_OVERLOADING type instance O.SignalList AudioSrc = AudioSrcSignalList type AudioSrcSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)]) #endif