Task is used by Element and
Pad to provide the data passing threads in a
Pipeline.
A Pad will typically start a Task to push or pull data
to/from the peer pads. Most source elements start a Task to push data. In some cases a demuxer element can start a
Task to pull data from a peer element. This is typically done when the demuxer can perform random access on the
upstream peer element for improved performance.
Although convenience functions exist on Pad to start/pause/stop tasks, it might
sometimes be needed to create a Task manually if it is not related to a
Pad.
Before the Task can be run, it needs a StaticRecMutex
that can be set with set_lock.
The task can be started, paused and stopped with start,
pause and stop
respectively or with the set_state function.
A Task will repeatedly call the TaskFunction with
the user data that was provided when creating the task with create.
While calling the function it will acquire the provided lock. The provided lock is released when the task pauses or stops.
Stopping a task with stop will not immediately make sure the task is not
running anymore. Use join to make sure the task is completely stopped and the
thread is stopped.
After creating a Task, use unref to free its
resources. This can only be done it the task is not running anymore.
Task functions can send a Message to send out-of-band data to the application. The
application can receive messages from the Bus in its mainloop.
For debugging perposes, the task will configure its object name as the thread name on Linux. Please note that the object name should be
configured before the task is started; changing the object name after the task has been started, has no effect on the thread name.
Last reviewed on 2010-03-15 (0.10.29)