{- | 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 class is mostly useful for elements that cannot do random access, or at least very slowly. The source usually prefers to push out a fixed size buffer. Subclasses usually operate in a format that is different from the default GST_FORMAT_BYTES format of 'GI.GstBase.Objects.BaseSrc.BaseSrc'. Classes extending this base class will usually be scheduled in a push based mode. If the peer accepts to operate without offsets and within the limits of the allowed block size, this class can operate in getrange based mode automatically. To make this possible, the subclass should implement and override the SCHEDULING query. The subclass should extend the methods from the baseclass in addition to the ::create method. Seeking, flushing, scheduling and sync is all handled by this base class. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.GstBase.Objects.PushSrc ( -- * Exported types PushSrc(..) , IsPushSrc , toPushSrc , noPushSrc , ) 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.GstBase.Objects.BaseSrc as GstBase.BaseSrc -- | Memory-managed wrapper type. newtype PushSrc = PushSrc (ManagedPtr PushSrc) foreign import ccall "gst_push_src_get_type" c_gst_push_src_get_type :: IO GType instance GObject PushSrc where gobjectType = c_gst_push_src_get_type -- | Type class for types which can be safely cast to `PushSrc`, for instance with `toPushSrc`. class (GObject o, O.IsDescendantOf PushSrc o) => IsPushSrc o instance (GObject o, O.IsDescendantOf PushSrc o) => IsPushSrc o instance O.HasParentTypes PushSrc type instance O.ParentTypes PushSrc = '[GstBase.BaseSrc.BaseSrc, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object] -- | Cast to `PushSrc`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`. toPushSrc :: (MonadIO m, IsPushSrc o) => o -> m PushSrc toPushSrc = liftIO . unsafeCastTo PushSrc -- | A convenience alias for `Nothing` :: `Maybe` `PushSrc`. noPushSrc :: Maybe PushSrc noPushSrc = Nothing #if ENABLE_OVERLOADING type family ResolvePushSrcMethod (t :: Symbol) (o :: *) :: * where ResolvePushSrcMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo ResolvePushSrcMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo ResolvePushSrcMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo ResolvePushSrcMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo ResolvePushSrcMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo ResolvePushSrcMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolvePushSrcMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolvePushSrcMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo ResolvePushSrcMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo ResolvePushSrcMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo ResolvePushSrcMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo ResolvePushSrcMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo ResolvePushSrcMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolvePushSrcMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo ResolvePushSrcMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo ResolvePushSrcMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo ResolvePushSrcMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolvePushSrcMethod "getv" o = GObject.Object.ObjectGetvMethodInfo ResolvePushSrcMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo ResolvePushSrcMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo ResolvePushSrcMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo ResolvePushSrcMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo ResolvePushSrcMethod "isAsync" o = GstBase.BaseSrc.BaseSrcIsAsyncMethodInfo ResolvePushSrcMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolvePushSrcMethod "isLive" o = GstBase.BaseSrc.BaseSrcIsLiveMethodInfo ResolvePushSrcMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo ResolvePushSrcMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo ResolvePushSrcMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo ResolvePushSrcMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo ResolvePushSrcMethod "link" o = Gst.Element.ElementLinkMethodInfo ResolvePushSrcMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo ResolvePushSrcMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo ResolvePushSrcMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo ResolvePushSrcMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo ResolvePushSrcMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo ResolvePushSrcMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo ResolvePushSrcMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo ResolvePushSrcMethod "newSeamlessSegment" o = GstBase.BaseSrc.BaseSrcNewSeamlessSegmentMethodInfo ResolvePushSrcMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo ResolvePushSrcMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolvePushSrcMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolvePushSrcMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo ResolvePushSrcMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo ResolvePushSrcMethod "query" o = Gst.Element.ElementQueryMethodInfo ResolvePushSrcMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo ResolvePushSrcMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo ResolvePushSrcMethod "queryLatency" o = GstBase.BaseSrc.BaseSrcQueryLatencyMethodInfo ResolvePushSrcMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo ResolvePushSrcMethod "ref" o = Gst.Object.ObjectRefMethodInfo ResolvePushSrcMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolvePushSrcMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo ResolvePushSrcMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo ResolvePushSrcMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo ResolvePushSrcMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo ResolvePushSrcMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo ResolvePushSrcMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolvePushSrcMethod "seek" o = Gst.Element.ElementSeekMethodInfo ResolvePushSrcMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo ResolvePushSrcMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo ResolvePushSrcMethod "startComplete" o = GstBase.BaseSrc.BaseSrcStartCompleteMethodInfo ResolvePushSrcMethod "startWait" o = GstBase.BaseSrc.BaseSrcStartWaitMethodInfo ResolvePushSrcMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolvePushSrcMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolvePushSrcMethod "submitBufferList" o = GstBase.BaseSrc.BaseSrcSubmitBufferListMethodInfo ResolvePushSrcMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo ResolvePushSrcMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo ResolvePushSrcMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo ResolvePushSrcMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolvePushSrcMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo ResolvePushSrcMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo ResolvePushSrcMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo ResolvePushSrcMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo ResolvePushSrcMethod "waitPlaying" o = GstBase.BaseSrc.BaseSrcWaitPlayingMethodInfo ResolvePushSrcMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolvePushSrcMethod "getAllocator" o = GstBase.BaseSrc.BaseSrcGetAllocatorMethodInfo ResolvePushSrcMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo ResolvePushSrcMethod "getBlocksize" o = GstBase.BaseSrc.BaseSrcGetBlocksizeMethodInfo ResolvePushSrcMethod "getBufferPool" o = GstBase.BaseSrc.BaseSrcGetBufferPoolMethodInfo ResolvePushSrcMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo ResolvePushSrcMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo ResolvePushSrcMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo ResolvePushSrcMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo ResolvePushSrcMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo ResolvePushSrcMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo ResolvePushSrcMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo ResolvePushSrcMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo ResolvePushSrcMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo ResolvePushSrcMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolvePushSrcMethod "getDoTimestamp" o = GstBase.BaseSrc.BaseSrcGetDoTimestampMethodInfo ResolvePushSrcMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo ResolvePushSrcMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo ResolvePushSrcMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo ResolvePushSrcMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo ResolvePushSrcMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo ResolvePushSrcMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo ResolvePushSrcMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo ResolvePushSrcMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo ResolvePushSrcMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolvePushSrcMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolvePushSrcMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo ResolvePushSrcMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo ResolvePushSrcMethod "getState" o = Gst.Element.ElementGetStateMethodInfo ResolvePushSrcMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo ResolvePushSrcMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo ResolvePushSrcMethod "setAsync" o = GstBase.BaseSrc.BaseSrcSetAsyncMethodInfo ResolvePushSrcMethod "setAutomaticEos" o = GstBase.BaseSrc.BaseSrcSetAutomaticEosMethodInfo ResolvePushSrcMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo ResolvePushSrcMethod "setBlocksize" o = GstBase.BaseSrc.BaseSrcSetBlocksizeMethodInfo ResolvePushSrcMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo ResolvePushSrcMethod "setCaps" o = GstBase.BaseSrc.BaseSrcSetCapsMethodInfo ResolvePushSrcMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo ResolvePushSrcMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo ResolvePushSrcMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo ResolvePushSrcMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo ResolvePushSrcMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo ResolvePushSrcMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolvePushSrcMethod "setDoTimestamp" o = GstBase.BaseSrc.BaseSrcSetDoTimestampMethodInfo ResolvePushSrcMethod "setDynamicSize" o = GstBase.BaseSrc.BaseSrcSetDynamicSizeMethodInfo ResolvePushSrcMethod "setFormat" o = GstBase.BaseSrc.BaseSrcSetFormatMethodInfo ResolvePushSrcMethod "setLive" o = GstBase.BaseSrc.BaseSrcSetLiveMethodInfo ResolvePushSrcMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo ResolvePushSrcMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo ResolvePushSrcMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo ResolvePushSrcMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolvePushSrcMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo ResolvePushSrcMethod "setState" o = Gst.Element.ElementSetStateMethodInfo ResolvePushSrcMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolvePushSrcMethod t PushSrc, O.MethodInfo info PushSrc p) => OL.IsLabel t (PushSrc -> 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 PushSrc type instance O.AttributeList PushSrc = PushSrcAttributeList type PushSrcAttributeList = ('[ '("blocksize", GstBase.BaseSrc.BaseSrcBlocksizePropertyInfo), '("doTimestamp", GstBase.BaseSrc.BaseSrcDoTimestampPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrc.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("typefind", GstBase.BaseSrc.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING #endif #if ENABLE_OVERLOADING type instance O.SignalList PushSrc = PushSrcSignalList type PushSrcSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)]) #endif