Copyright | Will Thompson and Iñaki García Etxebarria |
---|---|
License | LGPL-2.1 |
Maintainer | Iñaki García Etxebarria |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Manages a set of pads that operate in collect mode. This means that control is given to the manager of this object when all pads have data.
- Collectpads are created with
collectPadsNew
. A callback should then be installed with gst_collect_pads_set_function (). - Pads are added to the collection with
collectPadsAddPad
/collectPadsRemovePad
. The pad has to be a sinkpad. When added, the chain, event and query functions of the pad are overridden. The element_private of the pad is used to store private information for the collectpads. - For each pad, data is queued in the _chain function or by performing a pull_range.
- When data is queued on all pads in waiting mode, the callback function is called.
- Data can be dequeued from the pad with the
collectPadsPop
method. One can peek at the data with thecollectPadsPeek
function. These functions will returnNothing
if the pad received an EOS event. When all pads returnNothing
from acollectPadsPeek
, the element can emit an EOS event itself. - Data can also be dequeued in byte units using the
collectPadsAvailable
,collectPadsReadBuffer
andcollectPadsFlush
calls. - Elements should call
collectPadsStart
andcollectPadsStop
in their state change functions to start and stop the processing of the collectpads. ThecollectPadsStop
call should be called before calling the parent element state change function in the PAUSED_TO_READY state change to ensure no pad is blocked and the element can finish streaming. collectPadsSetWaiting
sets a pad to waiting or non-waiting mode. CollectPads element is not waiting for data to be collected on non-waiting pads. Thus these pads may but need not have data when the callback is called. All pads are in waiting mode by default.
Synopsis
- newtype CollectPads = CollectPads (ManagedPtr CollectPads)
- class (GObject o, IsDescendantOf CollectPads o) => IsCollectPads o
- toCollectPads :: (MonadIO m, IsCollectPads o) => o -> m CollectPads
- collectPadsAddPad :: (HasCallStack, MonadIO m, IsCollectPads a, IsPad b) => a -> b -> Word32 -> CollectDataDestroyNotify -> Bool -> m (Maybe CollectData)
- collectPadsAvailable :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> m Word32
- collectPadsClipRunningTime :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> Buffer -> Ptr () -> m (FlowReturn, Maybe Buffer)
- collectPadsEventDefault :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> Event -> Bool -> m Bool
- collectPadsFlush :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> Word32 -> m Word32
- collectPadsNew :: (HasCallStack, MonadIO m) => m CollectPads
- collectPadsPeek :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> m (Maybe Buffer)
- collectPadsPop :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> m (Maybe Buffer)
- collectPadsQueryDefault :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> Query -> Bool -> m Bool
- collectPadsReadBuffer :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> Word32 -> m (Maybe Buffer)
- collectPadsRemovePad :: (HasCallStack, MonadIO m, IsCollectPads a, IsPad b) => a -> b -> m Bool
- collectPadsSetBufferFunction :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectPadsBufferFunction -> m ()
- collectPadsSetClipFunction :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectPadsClipFunction -> m ()
- collectPadsSetCompareFunction :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectPadsCompareFunction -> m ()
- collectPadsSetEventFunction :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectPadsEventFunction -> m ()
- collectPadsSetFlushFunction :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectPadsFlushFunction -> m ()
- collectPadsSetFlushing :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> Bool -> m ()
- collectPadsSetFunction :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectPadsFunction -> m ()
- collectPadsSetQueryFunction :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectPadsQueryFunction -> m ()
- collectPadsSetWaiting :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> Bool -> m ()
- collectPadsSrcEventDefault :: (HasCallStack, MonadIO m, IsCollectPads a, IsPad b) => a -> b -> Event -> m Bool
- collectPadsStart :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> m ()
- collectPadsStop :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> m ()
- collectPadsTakeBuffer :: (HasCallStack, MonadIO m, IsCollectPads a) => a -> CollectData -> Word32 -> m (Maybe Buffer)
Exported types
newtype CollectPads Source #
Memory-managed wrapper type.
Instances
Eq CollectPads Source # | |
Defined in GI.GstBase.Objects.CollectPads (==) :: CollectPads -> CollectPads -> Bool # (/=) :: CollectPads -> CollectPads -> Bool # | |
GObject CollectPads Source # | |
Defined in GI.GstBase.Objects.CollectPads | |
ManagedPtrNewtype CollectPads Source # | |
Defined in GI.GstBase.Objects.CollectPads | |
TypedObject CollectPads Source # | |
Defined in GI.GstBase.Objects.CollectPads | |
HasParentTypes CollectPads Source # | |
Defined in GI.GstBase.Objects.CollectPads | |
IsGValue (Maybe CollectPads) Source # | Convert |
Defined in GI.GstBase.Objects.CollectPads gvalueGType_ :: IO GType # gvalueSet_ :: Ptr GValue -> Maybe CollectPads -> IO () # gvalueGet_ :: Ptr GValue -> IO (Maybe CollectPads) # | |
type ParentTypes CollectPads Source # | |
Defined in GI.GstBase.Objects.CollectPads |
class (GObject o, IsDescendantOf CollectPads o) => IsCollectPads o Source #
Type class for types which can be safely cast to CollectPads
, for instance with toCollectPads
.
Instances
(GObject o, IsDescendantOf CollectPads o) => IsCollectPads o Source # | |
Defined in GI.GstBase.Objects.CollectPads |
toCollectPads :: (MonadIO m, IsCollectPads o) => o -> m CollectPads Source #
Cast to CollectPads
, for types for which this is known to be safe. For general casts, use castTo
.
Methods
Click to display all available methods, including inherited ones
Methods
addControlBinding, addPad, available, bindProperty, bindPropertyFull, clipRunningTime, defaultError, eventDefault, flush, forceFloating, freezeNotify, getv, hasActiveControlBindings, hasAncestor, hasAsAncestor, hasAsParent, isFloating, notify, notifyByPspec, peek, pop, queryDefault, readBuffer, ref, refSink, removeControlBinding, removePad, runDispose, srcEventDefault, start, stealData, stealQdata, stop, suggestNextSync, syncValues, takeBuffer, thawNotify, unparent, unref, watchClosure.
Getters
getControlBinding, getControlRate, getData, getGValueArray, getName, getParent, getPathString, getProperty, getQdata, getValue.
Setters
setBufferFunction, setClipFunction, setCompareFunction, setControlBindingDisabled, setControlBindingsDisabled, setControlRate, setData, setDataFull, setEventFunction, setFlushFunction, setFlushing, setFunction, setName, setParent, setProperty, setQueryFunction, setWaiting.
addPad
:: (HasCallStack, MonadIO m, IsCollectPads a, IsPad b) | |
=> a |
|
-> b |
|
-> Word32 |
|
-> CollectDataDestroyNotify |
|
-> Bool |
|
-> m (Maybe CollectData) | Returns: a new |
Add a pad to the collection of collect pads. The pad has to be
a sinkpad. The refcount of the pad is incremented. Use
collectPadsRemovePad
to remove the pad from the collection
again.
You specify a size for the returned CollectData
structure
so that you can use it to store additional information.
You can also specify a CollectDataDestroyNotify
that will be called
just before the CollectData
structure is freed. It is passed the
pointer to the structure and should free any custom memory and resources
allocated for it.
Keeping a pad locked in waiting state is only relevant when using the default collection algorithm (providing the oldest buffer). It ensures a buffer must be available on this pad for a collection to take place. This is of typical use to a muxer element where non-subtitle streams should always be in waiting state, e.g. to assure that caps information is available on all these streams when initial headers have to be written.
The pad will be automatically activated in push mode when pads
is
started.
MT safe.
available
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> m Word32 | Returns: The maximum number of bytes queued on all pads. This function returns 0 if a pad has no queued buffer. |
Query how much bytes can be read from each queued buffer. This means that the result of this call is the maximum number of bytes that can be read from each of the pads.
This function should be called with pads
STREAM_LOCK held, such as
in the callback.
MT safe.
clipRunningTime
collectPadsClipRunningTime Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> Buffer |
|
-> Ptr () |
|
-> m (FlowReturn, Maybe Buffer) |
Convenience clipping function that converts incoming buffer's timestamp to running time, or clips the buffer if outside configured segment.
Since 1.6, this clipping function also sets the DTS parameter of the GstCollectData structure. This version of the running time DTS can be negative. G_MININT64 is used to indicate invalid value.
eventDefault
collectPadsEventDefault Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> Event |
|
-> Bool |
|
-> m Bool |
Default CollectPads
event handling that elements should always
chain up to to ensure proper operation. Element might however indicate
event should not be forwarded downstream.
flush
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> Word32 |
|
-> m Word32 | Returns: The number of bytes flushed This can be less than |
Flush size
bytes from the pad data
.
This function should be called with pads
STREAM_LOCK held, such as
in the callback.
MT safe.
new
:: (HasCallStack, MonadIO m) | |
=> m CollectPads | Returns: a new |
Create a new instance of CollectPads
.
MT safe.
peek
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> m (Maybe Buffer) | Returns: The buffer in |
Peek at the buffer currently queued in data
. This function
should be called with the pads
STREAM_LOCK held, such as in the callback
handler.
MT safe.
pop
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> m (Maybe Buffer) | Returns: The buffer in |
Pop the buffer currently queued in data
. This function
should be called with the pads
STREAM_LOCK held, such as in the callback
handler.
MT safe.
queryDefault
collectPadsQueryDefault Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> Query |
|
-> Bool |
|
-> m Bool |
Default CollectPads
query handling that elements should always
chain up to to ensure proper operation. Element might however indicate
query should not be forwarded downstream.
readBuffer
collectPadsReadBuffer Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> Word32 |
|
-> m (Maybe Buffer) | Returns: A sub buffer. The size of the buffer can
be less that requested. A return of |
Get a subbuffer of size
bytes from the given pad data
.
This function should be called with pads
STREAM_LOCK held, such as in the
callback.
MT safe.
removePad
:: (HasCallStack, MonadIO m, IsCollectPads a, IsPad b) | |
=> a |
|
-> b |
|
-> m Bool | Returns: |
Remove a pad from the collection of collect pads. This function will also
free the CollectData
and all the resources that were allocated with
collectPadsAddPad
.
The pad will be deactivated automatically when pads
is stopped.
MT safe.
setBufferFunction
collectPadsSetBufferFunction Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectPadsBufferFunction |
|
-> m () |
Set the callback function and user data that will be called with
the oldest buffer when all pads have been collected, or Nothing
on EOS.
If a buffer is passed, the callback owns a reference and must unref
it.
MT safe.
setClipFunction
collectPadsSetClipFunction Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectPadsClipFunction |
|
-> m () |
Install a clipping function that is called right after a buffer is received
on a pad managed by pads
. See CollectPadsClipFunction
for more info.
setCompareFunction
collectPadsSetCompareFunction Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectPadsCompareFunction |
|
-> m () |
Set the timestamp comparison function.
MT safe.
setEventFunction
collectPadsSetEventFunction Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectPadsEventFunction |
|
-> m () |
Set the event callback function and user data that will be called when
collectpads has received an event originating from one of the collected
pads. If the event being processed is a serialized one, this callback is
called with pads
STREAM_LOCK held, otherwise not. As this lock should be
held when calling a number of CollectPads functions, it should be acquired
if so (unusually) needed.
MT safe.
setFlushFunction
collectPadsSetFlushFunction Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectPadsFlushFunction |
|
-> m () |
Install a flush function that is called when the internal
state of all pads should be flushed as part of flushing seek
handling. See CollectPadsFlushFunction
for more info.
Since: 1.4
setFlushing
collectPadsSetFlushing Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> Bool |
|
-> m () |
Change the flushing state of all the pads in the collection. No pad
is able to accept anymore data when flushing
is True
. Calling this
function with flushing
False
makes pads
accept data again.
Caller must ensure that downstream streaming (thread) is not blocked,
e.g. by sending a FLUSH_START downstream.
MT safe.
setFunction
collectPadsSetFunction Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectPadsFunction |
|
-> m () |
CollectPads provides a default collection algorithm that will determine
the oldest buffer available on all of its pads, and then delegate
to a configured callback.
However, if circumstances are more complicated and/or more control
is desired, this sets a callback that will be invoked instead when
all the pads added to the collection have buffers queued.
Evidently, this callback is not compatible with
collectPadsSetBufferFunction
callback.
If this callback is set, the former will be unset.
MT safe.
setQueryFunction
collectPadsSetQueryFunction Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectPadsQueryFunction |
|
-> m () |
Set the query callback function and user data that will be called after
collectpads has received a query originating from one of the collected
pads. If the query being processed is a serialized one, this callback is
called with pads
STREAM_LOCK held, otherwise not. As this lock should be
held when calling a number of CollectPads functions, it should be acquired
if so (unusually) needed.
MT safe.
setWaiting
collectPadsSetWaiting Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> Bool |
|
-> m () |
Sets a pad to waiting or non-waiting mode, if at least this pad has not been created with locked waiting state, in which case nothing happens.
This function should be called with pads
STREAM_LOCK held, such as
in the callback.
MT safe.
srcEventDefault
collectPadsSrcEventDefault Source #
:: (HasCallStack, MonadIO m, IsCollectPads a, IsPad b) | |
=> a |
|
-> b |
|
-> Event |
|
-> m Bool |
Default CollectPads
event handling for the src pad of elements.
Elements can chain up to this to let flushing seek event handling
be done by CollectPads
.
Since: 1.4
start
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> m () |
Starts the processing of data in the collect_pads.
MT safe.
stop
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> m () |
Stops the processing of data in the collect_pads. this function will also unblock any blocking operations.
MT safe.
takeBuffer
collectPadsTakeBuffer Source #
:: (HasCallStack, MonadIO m, IsCollectPads a) | |
=> a |
|
-> CollectData |
|
-> Word32 |
|
-> m (Maybe Buffer) | Returns: A sub buffer. The size of the buffer can
be less that requested. A return of |
Get a subbuffer of size
bytes from the given pad data
. Flushes the amount
of read bytes.
This function should be called with pads
STREAM_LOCK held, such as in the
callback.
MT safe.