public class Pipeline extends Bin
Pipeline
is a special Bin
used as the toplevel container for
the filter graph. The Pipeline will manage the selection and
distribution of a global Clock
as well as provide a Bus
to
the application. It will also implement a default behavour for managing
seek events (see seek
).
Elements are added and removed from the pipeline using the Bin
methods like add
and remove
.
Before changing the state of the Pipeline (see Element
) a
Bus
can be retrieved with getBus
. This bus can then
be used to receive Message
s from the elements in the pipeline.
By default, a Pipeline will automatically flush the pending Bus
messages when going to the NULL state to ensure that no circular
references exist when no messages are read from the Bus. This
behaviour can be changed with setAutoFlushBus
When the Pipeline performs the PAUSED to PLAYING state change it will
select a clock for the elements. The clock selection algorithm will by
default select a clock provided by an element that is most upstream
(closest to the source). For live pipelines (ones that return
StateChangeReturn.NO_PREROLL
from the
setState
call) this will select the clock provided
by the live source. For normal pipelines this will select a clock provided
by the sinks (most likely the audio sink). If no element provides a clock,
a default SystemClock is used.
The clock selection can be controlled with the gst_pipeline_use_clock() method, which will enforce a given clock on the pipeline. With gst_pipeline_auto_clock() the default clock selection algorithm can be restored.
A Pipeline maintains a stream time for the elements. The stream
time is defined as the difference between the current clock time and
the base time. When the pipeline goes to READY or a flushing seek is
performed on it, the stream time is reset to 0. When the pipeline is
set from PLAYING to PAUSED, the current clock time is sampled and used to
configure the base time for the elements when the pipeline is set
to PLAYING again. This default behaviour can be changed with the
gst_pipeline_set_new_stream_time() method.
When sending a flushing seek event to a GstPipeline (see
seek
), it will make sure that the pipeline is properly
PAUSED and resumed as well as set the new stream time to 0 when the
seek succeeded.
Bin.DO_LATENCY, Bin.ELEMENT_ADDED, Bin.ELEMENT_REMOVED
Element.NO_MORE_PADS, Element.PAD_ADDED, Element.PAD_REMOVED
GObject.GCallback
NativeObject.Initializer
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
GST_NAME |
DEBUG_GRAPH_SHOW_ALL, DEBUG_GRAPH_SHOW_CAPS_DETAILS, DEBUG_GRAPH_SHOW_MEDIA_TYPE, DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS, DEBUG_GRAPH_SHOW_STATES
defaultInit, ownsHandle
Constructor and Description |
---|
Pipeline()
Creates a new instance of Pipeline with a unique name.
|
Pipeline(NativeObject.Initializer init) |
Pipeline(java.lang.String name)
Creates a new instance of Pipeline with the given name.
|
Modifier and Type | Method and Description |
---|---|
boolean |
getAutoFlushBus()
Checks if the pipeline will automatically flush messages when going to the NULL state.
|
Bus |
getBus()
Gets the
Bus this pipeline uses for messages. |
Clock |
getClock()
Return the current
Clock used by the pipeline. |
static Pipeline |
launch(java.lang.String... pipelineDecription)
Creates a pipeline from a text pipeline description.
|
static Pipeline |
launch(java.lang.String pipelineDecription)
Creates a pipeline from a text pipeline description.
|
ClockTime |
queryDuration()
Gets the time duration of the current media stream.
|
long |
queryDuration(Format format)
Gets the duration of the current media stream in terms of the specified
Format . |
long |
queryDuration(java.util.concurrent.TimeUnit unit)
Gets the time duration of the current media stream.
|
ClockTime |
queryPosition()
Gets the current position in the media stream in units of time.
|
long |
queryPosition(Format format)
Gets the current position in terms of the specified
Format . |
long |
queryPosition(java.util.concurrent.TimeUnit unit)
Gets the current position in the media stream.
|
Segment |
querySegment()
|
Segment |
querySegment(Format format)
|
boolean |
seek(ClockTime time)
Sets the position in the media stream to time.
|
boolean |
seek(double rate,
Format format,
int flags,
SeekType startType,
long start,
SeekType stopType,
long stop)
Seeks to a new position in the media stream.
|
boolean |
seek(long time,
java.util.concurrent.TimeUnit unit)
Sets the current position in the media stream.
|
void |
setAutoFlushBus(boolean flush)
Sets this pipeline to automatically flush
Bus messages or not. |
boolean |
setClock(Clock clock)
Set the clock for pipeline.
|
void |
useClock(Clock clock)
Force the Pipeline to use the a specific clock.
|
add, addMany, connect, connect, connect, debugToDotFile, debugToDotFile, disconnect, disconnect, disconnect, getElementByInterface, getElementByName, getElementByNameRecurseUp, getElements, getElementsRecursive, getElementsSorted, getSinks, getSources, launch, remove, removeMany
addPad, connect, connect, connect, disconnect, disconnect, disconnect, getBaseTime, getFactory, getPad, getPads, getRequestPad, getSinkPads, getSrcPads, getStartTime, getState, getState, getState, getState, getStaticPad, isPlaying, link, link, linkMany, linkPads, linkPadsFiltered, makeRawElement, pause, play, postMessage, ready, releaseRequestPad, removePad, sendEvent, setBaseTime, setCaps, setLockedState, setStartTime, setState, stop, syncStateWithParent, unlink, unlinkMany, unlinkPads
addListenerProxy, getName, getParent, initializer, initializer, ref, removeListenerProxy, setName, steal, toString, unref
addCallback, connect, connect, connect, disconnect, disconnect, disposeNativeHandle, emit, emit, g_signal_connect, get, getPointer, getPropertyDefaultValue, getPropertyMaximumValue, getPropertyMinimumValue, getType, invalidate, objectForX, removeCallback, set
classFor, disown, dispose, equals, finalize, getNativeAddress, handle, hashCode, initializer, instanceFor, isDisposed, nativeValue, objectFor, objectFor, objectFor, objectFor
public static final java.lang.String GST_NAME
public Pipeline(NativeObject.Initializer init)
public Pipeline()
public Pipeline(java.lang.String name)
name
- The name used to identify this pipeline.public static Pipeline launch(java.lang.String pipelineDecription)
pipelineDecription
- the command line describing the pipelinepublic static Pipeline launch(java.lang.String... pipelineDecription)
pipelineDecription
- An array of strings containing the command line describing the pipeline.public void setAutoFlushBus(boolean flush)
Bus
messages or not.flush
- true if automatic flushing is desired, else false.public boolean getAutoFlushBus()
public boolean setClock(Clock clock)
MT safe
clock
- The Clock
to usepublic void useClock(Clock clock)
MT safe
clock
- The Clock
to use. If clock is null, all clocking is
disabled, and the pipeline will run as fast as possible.public boolean seek(ClockTime time)
time
- The time to change the position to.public boolean seek(long time, java.util.concurrent.TimeUnit unit)
time
- the time to change the position to.unit
- the TimeUnit
the time is expressed in.public boolean seek(double rate, Format format, int flags, SeekType startType, long start, SeekType stopType, long stop)
The start and stop values are expressed in format.
A rate of 1.0 means normal playback rate, 2.0 means double speed. Negative values means backwards playback. A value of 0.0 for the rate is not allowed and should be accomplished instead by PAUSING the pipeline.
A pipeline has a default playback segment configured with a start position of 0, a stop position of -1 and a rate of 1.0. The currently configured playback segment can be queried with #GST_QUERY_SEGMENT.
When the rate is positive and start has been updated, playback will start
from the newly configured start position.
For negative rates, playback will start from the newly configured stop
position (if any). If the stop position if updated, it must be different from
-1 for negative rates.
It is not possible to seek relative to the current playback position, to do
this, PAUSE the pipeline, query the current playback position with
SeekType.NONE
means
that the position should not be updated.
queryPosition
and update the playback segment
current position with a SeekType.SET
to the desired position.
rate
- the new playback rateformat
- the format of the seek valuesflags
- the optional seek flagsstartType
- the type and flags for the new start positionstart
- the value of the new start positionstopType
- the type and flags for the new stop positionstop
- the value of the new stop positionpublic ClockTime queryPosition()
public long queryPosition(java.util.concurrent.TimeUnit unit)
unit
- the TimeUnit
to return the position in terms of.public long queryPosition(Format format)
Format
.format
- The Format
to return the position in.public ClockTime queryDuration()
public long queryDuration(java.util.concurrent.TimeUnit unit)
unit
- the TimeUnit
to return the position in.public long queryDuration(Format format)
Format
.format
- the Format
to return the duration in.public Segment querySegment()
Segment
.