mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-29 05:01:23 +00:00
docs, gst: typo fixes
https://bugzilla.gnome.org/show_bug.cgi?id=658449
This commit is contained in:
parent
92ad7f0d6b
commit
14f5518f3d
114 changed files with 189 additions and 189 deletions
2
README
2
README
|
@ -140,7 +140,7 @@ PLATFORMS
|
||||||
- MacOSX is reported to work; specific audio and video sinks have been written
|
- MacOSX is reported to work; specific audio and video sinks have been written
|
||||||
- Windows support is experimental but improving. Output sinks have been
|
- Windows support is experimental but improving. Output sinks have been
|
||||||
written but are not yet included in the code. We support
|
written but are not yet included in the code. We support
|
||||||
- MSys/MingW builds
|
- MSys/MinGW builds
|
||||||
- Microsoft Visual Studio 6 builds (see win32/README.txt)
|
- Microsoft Visual Studio 6 builds (see win32/README.txt)
|
||||||
|
|
||||||
INSTALLING FROM PACKAGES
|
INSTALLING FROM PACKAGES
|
||||||
|
|
|
@ -120,7 +120,7 @@ GTK-DOC NOTES
|
||||||
- add all documented symbols to gstreamer-sections.txt in the proper section
|
- add all documented symbols to gstreamer-sections.txt in the proper section
|
||||||
(default),<SUBSECTION Standard>,<SUBSECTION Private>
|
(default),<SUBSECTION Standard>,<SUBSECTION Private>
|
||||||
- document at least the Short_Description in tmpl/.sgml
|
- document at least the Short_Description in tmpl/.sgml
|
||||||
- document symbols where they are definied, so that when one changes the
|
- document symbols where they are defined, so that when one changes the
|
||||||
definition, the chaces are good that docs are updated.
|
definition, the chaces are good that docs are updated.
|
||||||
- document functions, signals in the .c files
|
- document functions, signals in the .c files
|
||||||
- document structs, typedefs, enums in the .h files
|
- document structs, typedefs, enums in the .h files
|
||||||
|
|
|
@ -5,7 +5,7 @@ This draft document describes a possible design for arbitrary per-buffer
|
||||||
metadata.
|
metadata.
|
||||||
|
|
||||||
The proposed changes in this document are not ABI/API compatible with the 0.10
|
The proposed changes in this document are not ABI/API compatible with the 0.10
|
||||||
version of GStreamer and should thus only be considered for upcomming unstable
|
version of GStreamer and should thus only be considered for upcoming unstable
|
||||||
versions.
|
versions.
|
||||||
|
|
||||||
Buffer metadata typically includes properties that give more information about
|
Buffer metadata typically includes properties that give more information about
|
||||||
|
|
|
@ -39,7 +39,7 @@ for wild (application specific) customisation.
|
||||||
|
|
||||||
Categories are base on _intended usage_ of the element. Some elements
|
Categories are base on _intended usage_ of the element. Some elements
|
||||||
might have other side-effects (especially for filers/effects). The purpose
|
might have other side-effects (especially for filers/effects). The purpose
|
||||||
is to list enough keywords so that applications can do meaningfull filtering,
|
is to list enough keywords so that applications can do meaningful filtering,
|
||||||
not to completely describe the functionality, that is expressed in caps etc..
|
not to completely describe the functionality, that is expressed in caps etc..
|
||||||
|
|
||||||
* Source : produces data
|
* Source : produces data
|
||||||
|
|
|
@ -45,7 +45,7 @@ Shared data structures and writability:
|
||||||
_get_writable() function call. This function will check the refcount of the
|
_get_writable() function call. This function will check the refcount of the
|
||||||
object and if the object is referenced by more than one instance, a copy is
|
object and if the object is referenced by more than one instance, a copy is
|
||||||
made of the object that is then by definition only referenced from the calling
|
made of the object that is then by definition only referenced from the calling
|
||||||
thread. This new copy is then modifyable without being visible to other
|
thread. This new copy is then modifiable without being visible to other
|
||||||
refcount holders.
|
refcount holders.
|
||||||
|
|
||||||
This technique is used for information objects that, once created, never
|
This technique is used for information objects that, once created, never
|
||||||
|
|
|
@ -27,7 +27,7 @@ API/ABI
|
||||||
- Optimize negotiation. We currently do a get_caps() call when we link pads,
|
- Optimize negotiation. We currently do a get_caps() call when we link pads,
|
||||||
which could potentially generate a huge list of caps and all their
|
which could potentially generate a huge list of caps and all their
|
||||||
combinations, we need to avoid generating these huge lists by generating them
|
combinations, we need to avoid generating these huge lists by generating them
|
||||||
incrementaly when needed. We can do this with a gst_pad_iterate_caps() call.
|
incrementally when needed. We can do this with a gst_pad_iterate_caps() call.
|
||||||
We also need to incrementally return intersections etc, for this.
|
We also need to incrementally return intersections etc, for this.
|
||||||
|
|
||||||
- Elements in a bin have no clue about the final state of the parent element
|
- Elements in a bin have no clue about the final state of the parent element
|
||||||
|
|
|
@ -63,7 +63,7 @@ fakesrc:src's activation function is then called.
|
||||||
|
|
||||||
Note that it does not make sense to set an activation function on a
|
Note that it does not make sense to set an activation function on a
|
||||||
source pad. The peer of a source pad is downstream, meaning it should
|
source pad. The peer of a source pad is downstream, meaning it should
|
||||||
have been activated first. If it was activated in PULL mode, the the
|
have been activated first. If it was activated in PULL mode, the
|
||||||
source pad should have already had activate_pull() called on it, and
|
source pad should have already had activate_pull() called on it, and
|
||||||
thus needs no further activation. Otherwise it should be in PUSH mode,
|
thus needs no further activation. Otherwise it should be in PUSH mode,
|
||||||
which is the choice of the default activation function.
|
which is the choice of the default activation function.
|
||||||
|
|
|
@ -163,7 +163,7 @@ Issues
|
||||||
|
|
||||||
When an EOS event has passed a pad and the pad is set to blocked, the block will
|
When an EOS event has passed a pad and the pad is set to blocked, the block will
|
||||||
never happen because no data is going to flow anymore. One possibility is to
|
never happen because no data is going to flow anymore. One possibility is to
|
||||||
keep track of the pad's EOS state and make the block succeed immediatly. This is
|
keep track of the pad's EOS state and make the block succeed immediately. This is
|
||||||
not yet implemenented.
|
not yet implemenented.
|
||||||
|
|
||||||
When dynamically reconnecting pads, some events (like NEWSEGMENT, EOS,
|
When dynamically reconnecting pads, some events (like NEWSEGMENT, EOS,
|
||||||
|
|
|
@ -11,7 +11,7 @@ live sources.
|
||||||
|
|
||||||
We want to be able to implement the following features:
|
We want to be able to implement the following features:
|
||||||
|
|
||||||
- buffering up to a specifc amount of data, in memory, before starting playback
|
- buffering up to a specific amount of data, in memory, before starting playback
|
||||||
so that network fluctuations are minimized.
|
so that network fluctuations are minimized.
|
||||||
- download of the network file to a local disk with fast seeking in the
|
- download of the network file to a local disk with fast seeking in the
|
||||||
downloaded data. This is similar to the quicktime/youtube players.
|
downloaded data. This is similar to the quicktime/youtube players.
|
||||||
|
@ -79,7 +79,7 @@ Some use cases:
|
||||||
|
|
||||||
The application can use the BUFFERING query to get the estimated download time
|
The application can use the BUFFERING query to get the estimated download time
|
||||||
and match this time to the current/remaining playback time to control when
|
and match this time to the current/remaining playback time to control when
|
||||||
playback should start to have a non-interupted playback experience.
|
playback should start to have a non-interrupted playback experience.
|
||||||
|
|
||||||
|
|
||||||
* Timeshifting
|
* Timeshifting
|
||||||
|
|
|
@ -81,7 +81,7 @@ group.
|
||||||
Metadata
|
Metadata
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
Each of the buffers inside the bufferlist can have metadata assiociated with it.
|
Each of the buffers inside the bufferlist can have metadata associated with it.
|
||||||
|
|
||||||
The metadata of the bufferlist is always the metadata of the first buffer of the
|
The metadata of the bufferlist is always the metadata of the first buffer of the
|
||||||
first group in the bufferlist. This means that:
|
first group in the bufferlist. This means that:
|
||||||
|
|
|
@ -15,6 +15,6 @@ produce (see part-pads.txt and part-negotiation.txt).
|
||||||
Caps are also attached to buffers to describe to content of the data
|
Caps are also attached to buffers to describe to content of the data
|
||||||
pointed to be the buffer.
|
pointed to be the buffer.
|
||||||
|
|
||||||
Various methods exist to work with the media types such as substracting
|
Various methods exist to work with the media types such as subtracting
|
||||||
or intersecting.
|
or intersecting.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ Clocks
|
||||||
|
|
||||||
The GstClock returns a monotonically increasing time with the method
|
The GstClock returns a monotonically increasing time with the method
|
||||||
_get_time(). Its accuracy and base time depends on the specific clock
|
_get_time(). Its accuracy and base time depends on the specific clock
|
||||||
implementation but time is always expessed in nanoseconds. Since the
|
implementation but time is always expressed in nanoseconds. Since the
|
||||||
baseline of the clock is undefined, the clock time returned is not
|
baseline of the clock is undefined, the clock time returned is not
|
||||||
meaningful in itself, what matters are the deltas between two clock
|
meaningful in itself, what matters are the deltas between two clock
|
||||||
times.
|
times.
|
||||||
|
|
|
@ -179,7 +179,7 @@ sink overview
|
||||||
STREAM_UNLOCK
|
STREAM_UNLOCK
|
||||||
break
|
break
|
||||||
NEWSEGMENT:
|
NEWSEGMENT:
|
||||||
# the newsegment must be used to clip incomming
|
# the newsegment must be used to clip incoming
|
||||||
# buffers. Then then go into the queue as non-prerollable
|
# buffers. Then then go into the queue as non-prerollable
|
||||||
# items used for syncing the buffers
|
# items used for syncing the buffers
|
||||||
STREAM_LOCK
|
STREAM_LOCK
|
||||||
|
|
|
@ -25,7 +25,7 @@ the following things:
|
||||||
Some transform elements can operate in different modes:
|
Some transform elements can operate in different modes:
|
||||||
|
|
||||||
- passthrough (no changes are done on the input buffers)
|
- passthrough (no changes are done on the input buffers)
|
||||||
- in-place (changes made directly to the incomming buffers without requiring a
|
- in-place (changes made directly to the incoming buffers without requiring a
|
||||||
copy or new buffer allocation)
|
copy or new buffer allocation)
|
||||||
- metadata changes only
|
- metadata changes only
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ state. We can identify these steady states:
|
||||||
input buffer is transformed into the output buffer. The flow is exactly
|
input buffer is transformed into the output buffer. The flow is exactly
|
||||||
the same as the case with the same-caps negotiation. (DCC)
|
the same as the case with the same-caps negotiation. (DCC)
|
||||||
|
|
||||||
We can immeditatly observe that the copy transform states will need to
|
We can immediately observe that the copy transform states will need to
|
||||||
allocate a buffer from a downstream element using pad-alloc. When the transform
|
allocate a buffer from a downstream element using pad-alloc. When the transform
|
||||||
element is receiving a non-writable buffer in the in-place state, it will also
|
element is receiving a non-writable buffer in the in-place state, it will also
|
||||||
need to perform a pad-alloc. There is no reason why the passthrough state would
|
need to perform a pad-alloc. There is no reason why the passthrough state would
|
||||||
|
@ -300,7 +300,7 @@ generated in the chain function is handled above in the copy-transform and the
|
||||||
in-place transform when the input buffer is not writable or the input buffer
|
in-place transform when the input buffer is not writable or the input buffer
|
||||||
size is smaller than the output size.
|
size is smaller than the output size.
|
||||||
|
|
||||||
We are left with the last case (proxy an incomming pad-alloc or not). We have 2
|
We are left with the last case (proxy an incoming pad-alloc or not). We have 2
|
||||||
possibilities here:
|
possibilities here:
|
||||||
|
|
||||||
- pad-alloc is called with the same caps as are currently being handled by
|
- pad-alloc is called with the same caps as are currently being handled by
|
||||||
|
@ -413,7 +413,7 @@ retrieve the size. There are two functions:
|
||||||
|
|
||||||
Given a caps and a size on one pad, and a caps on the other pad, calculate
|
Given a caps and a size on one pad, and a caps on the other pad, calculate
|
||||||
the size of the other buffer. This function is able to perform all size
|
the size of the other buffer. This function is able to perform all size
|
||||||
transforms and is the prefered method of transforming a size.
|
transforms and is the preferred method of transforming a size.
|
||||||
|
|
||||||
- get_unit_size()
|
- get_unit_size()
|
||||||
|
|
||||||
|
|
|
@ -121,11 +121,11 @@ Before sending buffers, an element must send a NEWSEGMENT event. An element is
|
||||||
free to refuse buffers if they were not preceeded by a NEWSEGMENT event.
|
free to refuse buffers if they were not preceeded by a NEWSEGMENT event.
|
||||||
|
|
||||||
Elements that sync to the clock should store the NEWSEGMENT start and end values
|
Elements that sync to the clock should store the NEWSEGMENT start and end values
|
||||||
and substract the start value from the buffer timestamp before comparing
|
and subtract the start value from the buffer timestamp before comparing
|
||||||
it against the stream time (see part-clocks.txt).
|
it against the stream time (see part-clocks.txt).
|
||||||
|
|
||||||
An element is allowed to send out buffers with the NEWSEGMENT start time already
|
An element is allowed to send out buffers with the NEWSEGMENT start time already
|
||||||
substracted from the timestamp. If it does so, it needs to send a corrected
|
subtracted from the timestamp. If it does so, it needs to send a corrected
|
||||||
NEWSEGMENT downstream, ie, one with start time 0.
|
NEWSEGMENT downstream, ie, one with start time 0.
|
||||||
|
|
||||||
A NEWSEGMENT event should be generated as soon as possible in the pipeline and
|
A NEWSEGMENT event should be generated as soon as possible in the pipeline and
|
||||||
|
|
|
@ -113,7 +113,7 @@ The step event is created with the following fields in the structure:
|
||||||
direction.
|
direction.
|
||||||
|
|
||||||
"flush", G_TYPE_BOOLEAN
|
"flush", G_TYPE_BOOLEAN
|
||||||
when flushing is TRUE, the step is performed immediatly:
|
when flushing is TRUE, the step is performed immediately:
|
||||||
|
|
||||||
- In the PAUSED state the pipeline loses the PAUSED state, the requested
|
- In the PAUSED state the pipeline loses the PAUSED state, the requested
|
||||||
amount of data is skipped and the pipeline prerolls again when a
|
amount of data is skipped and the pipeline prerolls again when a
|
||||||
|
@ -140,7 +140,7 @@ The step event is created with the following fields in the structure:
|
||||||
Signal that this step operation is an intermediate step, part of a series
|
Signal that this step operation is an intermediate step, part of a series
|
||||||
of step operations. It is mostly interesting for stepping in the PAUSED state
|
of step operations. It is mostly interesting for stepping in the PAUSED state
|
||||||
because the sink will only perform a preroll after a non-intermediate step
|
because the sink will only perform a preroll after a non-intermediate step
|
||||||
operation completes. Intermediate steps are usefull to flush out data from
|
operation completes. Intermediate steps are useful to flush out data from
|
||||||
other sinks in order to not cause excessive queueing. In the PLAYING state
|
other sinks in order to not cause excessive queueing. In the PLAYING state
|
||||||
the intermediate flag has no visual effect. In all states, the intermediate
|
the intermediate flag has no visual effect. In all states, the intermediate
|
||||||
flag is passed to the corresponding GST_MESSAGE_STEP_DONE.
|
flag is passed to the corresponding GST_MESSAGE_STEP_DONE.
|
||||||
|
|
|
@ -51,7 +51,7 @@ gst_element_add_pad(element,pads):
|
||||||
Fails if either the element or pad are either NULL or not what they
|
Fails if either the element or pad are either NULL or not what they
|
||||||
claim to be. Should fail if the pad already has a parent. Should fail
|
claim to be. Should fail if the pad already has a parent. Should fail
|
||||||
if the pad is already owned by the element. Should fail if there's
|
if the pad is already owned by the element. Should fail if there's
|
||||||
already a pad by that name in the the list of pads.
|
already a pad by that name in the list of pads.
|
||||||
|
|
||||||
pad = gst_element_get_pad(element,"padname"):
|
pad = gst_element_get_pad(element,"padname"):
|
||||||
Searches through the list of pads
|
Searches through the list of pads
|
||||||
|
|
|
@ -406,7 +406,7 @@ are already active, so it ignores them.
|
||||||
Similarly in (4), activating D will cause the activation of all of the
|
Similarly in (4), activating D will cause the activation of all of the
|
||||||
rest of the pads, in this order: C d c b a B A. Then when the state
|
rest of the pads, in this order: C d c b a B A. Then when the state
|
||||||
change gets to the other elements they are already active, and in fact
|
change gets to the other elements they are already active, and in fact
|
||||||
data flow is already occuring.
|
data flow is already occurring.
|
||||||
|
|
||||||
So, from these scenarios, we can distill how ghost pad activation
|
So, from these scenarios, we can distill how ghost pad activation
|
||||||
functions should work:
|
functions should work:
|
||||||
|
|
|
@ -95,7 +95,7 @@ capture pipelines.
|
||||||
* the sink will receive the buffer with timestamp 0 at time >= D. At this
|
* the sink will receive the buffer with timestamp 0 at time >= D. At this
|
||||||
point the buffer is too late already and might be dropped. This state of
|
point the buffer is too late already and might be dropped. This state of
|
||||||
constantly dropping data will not change unless a constant latency
|
constantly dropping data will not change unless a constant latency
|
||||||
correction is added to the incomming buffer timestamps.
|
correction is added to the incoming buffer timestamps.
|
||||||
|
|
||||||
The problem is due to the fact that the sink is set to (pending) PLAYING
|
The problem is due to the fact that the sink is set to (pending) PLAYING
|
||||||
without being prerolled, which only happens in live pipelines.
|
without being prerolled, which only happens in live pipelines.
|
||||||
|
|
|
@ -103,7 +103,7 @@ GST_MESSAGE_ELEMENT:
|
||||||
GST_MESSAGE_SEGMENT_START:
|
GST_MESSAGE_SEGMENT_START:
|
||||||
|
|
||||||
An element started playback of a new segment. This message is not forwarded
|
An element started playback of a new segment. This message is not forwarded
|
||||||
the the application but is used internally to schedule SEGMENT_DONE messages.
|
the application but is used internally to schedule SEGMENT_DONE messages.
|
||||||
|
|
||||||
GST_MESSAGE_SEGMENT_DONE:
|
GST_MESSAGE_SEGMENT_DONE:
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ A three step process:
|
||||||
There is not much useful information we can give about how to resolve this
|
There is not much useful information we can give about how to resolve this
|
||||||
issue. It is possible to use the first N bytes of the data to determine the
|
issue. It is possible to use the first N bytes of the data to determine the
|
||||||
type (and needed plugin) on the server. We don't explore this option in this
|
type (and needed plugin) on the server. We don't explore this option in this
|
||||||
document yet, but the proposal is flexible enough to accomodate this in the
|
document yet, but the proposal is flexible enough to accommodate this in the
|
||||||
future should the need arise.
|
future should the need arise.
|
||||||
|
|
||||||
- missing demuxer
|
- missing demuxer
|
||||||
|
|
|
@ -42,12 +42,12 @@ The basics of negotiation are as follows:
|
||||||
The core will automatically call the set_caps function for this purpose
|
The core will automatically call the set_caps function for this purpose
|
||||||
when it is installed on the sink or source pad.
|
when it is installed on the sink or source pad.
|
||||||
|
|
||||||
- When requesting a buffer from a bufferpool, the prefered type should
|
- When requesting a buffer from a bufferpool, the preferred type should
|
||||||
be passed to the buffer allocation function. After receiving a buffer
|
be passed to the buffer allocation function. After receiving a buffer
|
||||||
from a bufferpool, the datatype should be checked again.
|
from a bufferpool, the datatype should be checked again.
|
||||||
|
|
||||||
- A bufferpool allocation function should try to allocate a buffer of the
|
- A bufferpool allocation function should try to allocate a buffer of the
|
||||||
prefered type. If there is a good reason to choose another type, the
|
preferred type. If there is a good reason to choose another type, the
|
||||||
alloc function should see if that other type is accepted by the other
|
alloc function should see if that other type is accepted by the other
|
||||||
element, then allocate a buffer of that type and attach the type to the
|
element, then allocate a buffer of that type and attach the type to the
|
||||||
buffer before returning it.
|
buffer before returning it.
|
||||||
|
|
|
@ -9,7 +9,7 @@ clock and typically happens in the sinks when they synchronize buffers
|
||||||
against the clock.
|
against the clock.
|
||||||
|
|
||||||
The measurements result in QOS events that aim to adjust the datarate
|
The measurements result in QOS events that aim to adjust the datarate
|
||||||
in one or more upstream elements. Two types of adjustements can be
|
in one or more upstream elements. Two types of adjustments can be
|
||||||
made:
|
made:
|
||||||
|
|
||||||
- short time "emergency" corrections based on latest observation
|
- short time "emergency" corrections based on latest observation
|
||||||
|
@ -350,7 +350,7 @@ in audio are more disturbing than dropping video frames. Also video requires in
|
||||||
general more processing than audio.
|
general more processing than audio.
|
||||||
|
|
||||||
Normally there is a threshold for when buffers get dropped in a video sink. Frames
|
Normally there is a threshold for when buffers get dropped in a video sink. Frames
|
||||||
that arrive 20 milliseconds late are still rendered as it is not noticable for
|
that arrive 20 milliseconds late are still rendered as it is not noticeable for
|
||||||
the human eye.
|
the human eye.
|
||||||
|
|
||||||
A QoS message is posted whenever a (part of a) buffer is dropped.
|
A QoS message is posted whenever a (part of a) buffer is dropped.
|
||||||
|
|
|
@ -8,7 +8,7 @@ Pushing
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
A pad can produce data and push it to the next pad. A pad that behaves this way
|
A pad can produce data and push it to the next pad. A pad that behaves this way
|
||||||
exposes a loop function that will be called repeadedly until it returns false.
|
exposes a loop function that will be called repeatedly until it returns false.
|
||||||
The loop function is allowed to block whenever it wants. When the pad is deactivated
|
The loop function is allowed to block whenever it wants. When the pad is deactivated
|
||||||
the loop function should unblock though.
|
the loop function should unblock though.
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ Pulling
|
||||||
|
|
||||||
Pads that operate in pulling mode can only pull data from a pad that exposes the
|
Pads that operate in pulling mode can only pull data from a pad that exposes the
|
||||||
pull_range function. In this case, the sink pad exposes a loop function that will be
|
pull_range function. In this case, the sink pad exposes a loop function that will be
|
||||||
called repeadedly until the task is stopped.
|
called repeatedly until the task is stopped.
|
||||||
|
|
||||||
After pulling data from the peer pad, the loop function will typically call the
|
After pulling data from the peer pad, the loop function will typically call the
|
||||||
push function to push the result to the peer sinkpad.
|
push function to push the result to the peer sinkpad.
|
||||||
|
|
|
@ -178,12 +178,12 @@ Summary:
|
||||||
|
|
||||||
- if the KEY_UNIT flag is *not* specified, the demuxer/parser should
|
- if the KEY_UNIT flag is *not* specified, the demuxer/parser should
|
||||||
start pushing data from a key unit preceding the seek position
|
start pushing data from a key unit preceding the seek position
|
||||||
(or from the the seek position if that falls on a key unit), and
|
(or from the seek position if that falls on a key unit), and
|
||||||
the start of the new segment should be the requested seek position.
|
the start of the new segment should be the requested seek position.
|
||||||
|
|
||||||
- if the KEY_UNIT flag is specified, the demuxer/parser should start
|
- if the KEY_UNIT flag is specified, the demuxer/parser should start
|
||||||
pushing data from the key unit nearest the seek position (or from
|
pushing data from the key unit nearest the seek position (or from
|
||||||
the the seek position if that falls on a key unit), and
|
the seek position if that falls on a key unit), and
|
||||||
the start of the new segment should be adjusted to the position of
|
the start of the new segment should be adjusted to the position of
|
||||||
that key unit which was nearest the requested seek position (ie.
|
that key unit which was nearest the requested seek position (ie.
|
||||||
the new segment start should be the position from which data is
|
the new segment start should be the position from which data is
|
||||||
|
|
|
@ -179,7 +179,7 @@ function returns a GstElementStateReturn.
|
||||||
|
|
||||||
* If the element aborts the ASYNC state change due to an error within the
|
* If the element aborts the ASYNC state change due to an error within the
|
||||||
specified timeout, this function returns FAILURE with the state set to last
|
specified timeout, this function returns FAILURE with the state set to last
|
||||||
successfull state and pending set to the last attempt. The element should
|
successful state and pending set to the last attempt. The element should
|
||||||
also post an error message on the bus with more information about the problem.
|
also post an error message on the bus with more information about the problem.
|
||||||
|
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ error.
|
||||||
If all the children return SUCCESS, the function returns SUCCESS as well.
|
If all the children return SUCCESS, the function returns SUCCESS as well.
|
||||||
|
|
||||||
If one of the children returns FAILURE, the function returns FAILURE as well. In
|
If one of the children returns FAILURE, the function returns FAILURE as well. In
|
||||||
this state it is possible that some elements successfuly changed state. The
|
this state it is possible that some elements successfully changed state. The
|
||||||
application can check which elements have a changed state, which were in error
|
application can check which elements have a changed state, which were in error
|
||||||
and which were not affected by iterating the elements and calling _get_state()
|
and which were not affected by iterating the elements and calling _get_state()
|
||||||
on the elements.
|
on the elements.
|
||||||
|
|
|
@ -9,7 +9,7 @@ thread changes. The purpose of this message is to allow the application to
|
||||||
interact with the streaming thread properties, such as the thread priority or
|
interact with the streaming thread properties, such as the thread priority or
|
||||||
the threadpool to use.
|
the threadpool to use.
|
||||||
|
|
||||||
We accomodate for the following requirements:
|
We accommodate for the following requirements:
|
||||||
|
|
||||||
- Application is informed when a streaming thread is about to be created. It
|
- Application is informed when a streaming thread is about to be created. It
|
||||||
should be possible for the application to suggest a custom GstTask.
|
should be possible for the application to suggest a custom GstTask.
|
||||||
|
|
|
@ -19,7 +19,7 @@ FIG_SRC = $(notdir $(wildcard $(srcdir)/*.fig))
|
||||||
# extra sources to copy in build directory
|
# extra sources to copy in build directory
|
||||||
EXTRA_SRC =
|
EXTRA_SRC =
|
||||||
|
|
||||||
### this is the generic bit and you shouln't need to change this
|
### this is the generic bit and you shouldn't need to change this
|
||||||
|
|
||||||
# get the generic docbuilding Makefile stuff
|
# get the generic docbuilding Makefile stuff
|
||||||
include $(srcdir)/../manuals.mak
|
include $(srcdir)/../manuals.mak
|
||||||
|
|
|
@ -57,7 +57,7 @@ Does GStreamer offer support for DVD decoder cards like dxr2/3 ?
|
||||||
<answer>
|
<answer>
|
||||||
<para>
|
<para>
|
||||||
We do have support for the dxr3, although dxr2 support is unknown.
|
We do have support for the dxr3, although dxr2 support is unknown.
|
||||||
GStreamer can easily accomodate hardware acceleration by writing new
|
GStreamer can easily accommodate hardware acceleration by writing new
|
||||||
device-specific elements.
|
device-specific elements.
|
||||||
</para>
|
</para>
|
||||||
</answer>
|
</answer>
|
||||||
|
|
|
@ -80,7 +80,7 @@ application doesn't play back your files, you can help us solve that problem
|
||||||
by <ulink url="http://bugzilla.gnome.org">filing an enhancement request
|
by <ulink url="http://bugzilla.gnome.org">filing an enhancement request
|
||||||
bug</ulink> for that format. If you have it, please provide:
|
bug</ulink> for that format. If you have it, please provide:
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem><para>links to other players, preferrably Open Source and working
|
<listitem><para>links to other players, preferably Open Source and working
|
||||||
on Unix</para></listitem>
|
on Unix</para></listitem>
|
||||||
<listitem><para>links to explanations of the format.</para></listitem>
|
<listitem><para>links to explanations of the format.</para></listitem>
|
||||||
<listitem><para>ways to obtain mediafiles in that format to test.
|
<listitem><para>ways to obtain mediafiles in that format to test.
|
||||||
|
|
|
@ -22,7 +22,7 @@ FIG_SRC = $(notdir $(wildcard $(srcdir)/*.fig))
|
||||||
# extra sources to copy in build directory
|
# extra sources to copy in build directory
|
||||||
EXTRA_SRC =
|
EXTRA_SRC =
|
||||||
|
|
||||||
### this is the generic bit and you shouln't need to change this
|
### this is the generic bit and you shouldn't need to change this
|
||||||
|
|
||||||
# get the generic docbuilding Makefile stuff
|
# get the generic docbuilding Makefile stuff
|
||||||
include $(srcdir)/../manuals.mak
|
include $(srcdir)/../manuals.mak
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
<function>gst_clock_get_time ()</function>. The clock-time does not
|
<function>gst_clock_get_time ()</function>. The clock-time does not
|
||||||
need to start at 0. The pipeline, which contains the global clock that
|
need to start at 0. The pipeline, which contains the global clock that
|
||||||
all elements in the pipeline will use, in addition has a <quote>base
|
all elements in the pipeline will use, in addition has a <quote>base
|
||||||
time</quote>, which is the clock time at the the point where the
|
time</quote>, which is the clock time at the point where the
|
||||||
pipeline went to the PLAYING state. Each element can subtract the
|
pipeline went to the PLAYING state. Each element can subtract the
|
||||||
<quote>base time</quote> from the clock-time to know the current
|
<quote>base time</quote> from the clock-time to know the current
|
||||||
running time.
|
running time.
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
The controller subsystem offers a lightweight way to adjust gobject
|
The controller subsystem offers a lightweight way to adjust gobject
|
||||||
properties over stream-time. Normaly these properties are changed using
|
properties over stream-time. Normaly these properties are changed using
|
||||||
<function>g_object_set()</function>. Timing those calls reliably so that
|
<function>g_object_set()</function>. Timing those calls reliably so that
|
||||||
the changes affect certain stream times is close to imposible. The
|
the changes affect certain stream times is close to impossible. The
|
||||||
controller takes time into account. It works by attaching control-sources
|
controller takes time into account. It works by attaching control-sources
|
||||||
to properties. Control-sources can provide new values for the properties
|
to properties. Control-sources can provide new values for the properties
|
||||||
for a given timestamp. At run-time the elements continously pull values
|
for a given timestamp. At run-time the elements continously pull values
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The <filename>gstreamer-controller</filename> library needs to be initialized
|
The <filename>gstreamer-controller</filename> library needs to be initialized
|
||||||
when your application is run. This can be done after the the GStreamer
|
when your application is run. This can be done after the GStreamer
|
||||||
library has been initialized.
|
library has been initialized.
|
||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
|
@ -525,7 +525,7 @@ main (int argc,
|
||||||
video sinks can already play the first frame (since this does
|
video sinks can already play the first frame (since this does
|
||||||
not affect the clock yet). Autopluggers could use this same
|
not affect the clock yet). Autopluggers could use this same
|
||||||
state transition to already plug together a pipeline. Most other
|
state transition to already plug together a pipeline. Most other
|
||||||
elements, such as codecs or filters, do not need to explicitely
|
elements, such as codecs or filters, do not need to explicitly
|
||||||
do anything in this state, however.
|
do anything in this state, however.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<para>
|
<para>
|
||||||
When writing a &GStreamer; application, you can simply include
|
When writing a &GStreamer; application, you can simply include
|
||||||
<filename>gst/gst.h</filename> to get access to the library
|
<filename>gst/gst.h</filename> to get access to the library
|
||||||
functions. Besides that, you will also need to intialize the
|
functions. Besides that, you will also need to initialize the
|
||||||
&GStreamer; library.
|
&GStreamer; library.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
request. The meaning of those three types is exactly as it says:
|
request. The meaning of those three types is exactly as it says:
|
||||||
always pads always exist, sometimes pad exist only in certain
|
always pads always exist, sometimes pad exist only in certain
|
||||||
cases (and can disappear randomly), and on-request pads appear
|
cases (and can disappear randomly), and on-request pads appear
|
||||||
only if explicitely requested by applications.
|
only if explicitly requested by applications.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<sect2 id="section-pads-dynamic">
|
<sect2 id="section-pads-dynamic">
|
||||||
|
|
|
@ -12581,7 +12581,7 @@
|
||||||
style="font-size:12px"
|
style="font-size:12px"
|
||||||
y="-434.5477"
|
y="-434.5477"
|
||||||
x="554.7406"
|
x="554.7406"
|
||||||
sodipodi:role="line">- effetcs</tspan><tspan
|
sodipodi:role="line">- effects</tspan><tspan
|
||||||
id="tspan4637"
|
id="tspan4637"
|
||||||
style="font-size:12px"
|
style="font-size:12px"
|
||||||
y="-419.5477"
|
y="-419.5477"
|
||||||
|
@ -14283,7 +14283,7 @@
|
||||||
style="font-size:12px"
|
style="font-size:12px"
|
||||||
y="-1005.6619"
|
y="-1005.6619"
|
||||||
x="499.47424"
|
x="499.47424"
|
||||||
sodipodi:role="line">- effetcs</tspan><tspan
|
sodipodi:role="line">- effects</tspan><tspan
|
||||||
id="tspan6117"
|
id="tspan6117"
|
||||||
style="font-size:12px"
|
style="font-size:12px"
|
||||||
y="-990.66187"
|
y="-990.66187"
|
||||||
|
|
Before Width: | Height: | Size: 664 KiB After Width: | Height: | Size: 664 KiB |
|
@ -163,7 +163,7 @@ main (gint argc,
|
||||||
<para>
|
<para>
|
||||||
Supports stream selection and disabling. If your media has
|
Supports stream selection and disabling. If your media has
|
||||||
multiple audio or subtitle tracks, you can dynamically choose
|
multiple audio or subtitle tracks, you can dynamically choose
|
||||||
which one to play back, or decide to turn it off alltogther
|
which one to play back, or decide to turn it off altogether
|
||||||
(which is especially useful to turn off subtitles). For each
|
(which is especially useful to turn off subtitles). For each
|
||||||
of those, use the <quote>current-text</quote> and other related
|
of those, use the <quote>current-text</quote> and other related
|
||||||
properties.
|
properties.
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
One of the the most obvious uses of &GStreamer; is using it to build
|
One of the most obvious uses of &GStreamer; is using it to build
|
||||||
a media player. &GStreamer; already includes components for building a
|
a media player. &GStreamer; already includes components for building a
|
||||||
media player that can support a very wide variety of formats, including
|
media player that can support a very wide variety of formats, including
|
||||||
MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod, and more. &GStreamer;,
|
MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod, and more. &GStreamer;,
|
||||||
|
|
|
@ -19,7 +19,7 @@ FIG_SRC = $(notdir $(wildcard $(srcdir)/*.fig))
|
||||||
# extra sources to copy in build directory
|
# extra sources to copy in build directory
|
||||||
EXTRA_SRC =
|
EXTRA_SRC =
|
||||||
|
|
||||||
### this is the generic bit and you shouln't need to change this
|
### this is the generic bit and you shouldn't need to change this
|
||||||
|
|
||||||
# get the generic docbuilding Makefile stuff
|
# get the generic docbuilding Makefile stuff
|
||||||
include $(srcdir)/../manuals.mak
|
include $(srcdir)/../manuals.mak
|
||||||
|
|
|
@ -81,7 +81,7 @@
|
||||||
element, it might be a good idea to add it to <filename>gsttag.c</filename>
|
element, it might be a good idea to add it to <filename>gsttag.c</filename>
|
||||||
instead. That's up to you to decide. If you want to do it in your own
|
instead. That's up to you to decide. If you want to do it in your own
|
||||||
element, it's easiest to register the tag in one of your class init
|
element, it's easiest to register the tag in one of your class init
|
||||||
functions, preferrably <function>_class_init ()</function>.
|
functions, preferably <function>_class_init ()</function>.
|
||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
|
|
|
@ -272,7 +272,7 @@
|
||||||
<title>The Basic Types</title>
|
<title>The Basic Types</title>
|
||||||
<para>
|
<para>
|
||||||
&GStreamer; already supports many basic media types. Following is a
|
&GStreamer; already supports many basic media types. Following is a
|
||||||
table of a few of the the basic types used for buffers in
|
table of a few of the basic types used for buffers in
|
||||||
&GStreamer;. The table contains the name ("mime type") and a
|
&GStreamer;. The table contains the name ("mime type") and a
|
||||||
description of the type, the properties associated with the type, and
|
description of the type, the properties associated with the type, and
|
||||||
the meaning of each property. A full list of supported types is
|
the meaning of each property. A full list of supported types is
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
One of the the most obvious uses of &GStreamer; is using it to build
|
One of the most obvious uses of &GStreamer; is using it to build
|
||||||
a media player. &GStreamer; already includes components for building a
|
a media player. &GStreamer; already includes components for building a
|
||||||
media player that can support a very wide variety of formats, including
|
media player that can support a very wide variety of formats, including
|
||||||
MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod, and more. &GStreamer;,
|
MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod, and more. &GStreamer;,
|
||||||
|
|
|
@ -151,7 +151,7 @@ gst_my_sink_class_init (GstMySinkClass * klass)
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Features can be added to all audiosinks by making a change in the
|
Features can be added to all audiosinks by making a change in the
|
||||||
base class, which makes maintainance easy.
|
base class, which makes maintenance easy.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -192,7 +192,7 @@ gst_my_sink_class_init (GstMySinkClass * klass)
|
||||||
<para>
|
<para>
|
||||||
By adding new features to <classname>GstVideoSink</classname>, it
|
By adding new features to <classname>GstVideoSink</classname>, it
|
||||||
will be possible to add extensions to videosinks that affect all of
|
will be possible to add extensions to videosinks that affect all of
|
||||||
them, but only need to be coded once, which is a huge maintainance
|
them, but only need to be coded once, which is a huge maintenance
|
||||||
benefit.
|
benefit.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
|
@ -58,7 +58,7 @@ gst_my_source_get (GstPad *pad)
|
||||||
Those will continuously describe the current state of the stream.
|
Those will continuously describe the current state of the stream.
|
||||||
Query functions can be used to get stream properties such as current
|
Query functions can be used to get stream properties such as current
|
||||||
position and length. This can be used by fellow elements to convert
|
position and length. This can be used by fellow elements to convert
|
||||||
this same value into a different unit, or by appliations to provide
|
this same value into a different unit, or by applications to provide
|
||||||
information about the length/position of the stream to the user.
|
information about the length/position of the stream to the user.
|
||||||
Conversion functions are used to convert such values from one unit
|
Conversion functions are used to convert such values from one unit
|
||||||
to another. Lastly, events are mostly used to seek to positions
|
to another. Lastly, events are mostly used to seek to positions
|
||||||
|
|
|
@ -43,7 +43,7 @@ provided by various plugins.
|
||||||
|
|
||||||
We will create a little pipeline to detect the media type by connecting
|
We will create a little pipeline to detect the media type by connecting
|
||||||
a disksrc element to a typefind element. The typefind element will
|
a disksrc element to a typefind element. The typefind element will
|
||||||
repeadedly call all registered typefind functions with the buffer it
|
repeatedly call all registered typefind functions with the buffer it
|
||||||
receives on its sink pad. when a typefind function returns a non NULL
|
receives on its sink pad. when a typefind function returns a non NULL
|
||||||
GstCaps*, that caps is set to the sink pad of the typefind element and
|
GstCaps*, that caps is set to the sink pad of the typefind element and
|
||||||
a signal is emitted to notify the app.
|
a signal is emitted to notify the app.
|
||||||
|
@ -195,7 +195,7 @@ for the second sink the following is needed:
|
||||||
|
|
||||||
Note that for the audio connection the element list "mpeg1parse, mp3parse,
|
Note that for the audio connection the element list "mpeg1parse, mp3parse,
|
||||||
mpg123" would also connect the srccaps to the audiosink caps. Since the
|
mpg123" would also connect the srccaps to the audiosink caps. Since the
|
||||||
"mpeg1parse, mad" list is shorter, it it always prefered by the autoplugger.
|
"mpeg1parse, mad" list is shorter, it it always preferred by the autoplugger.
|
||||||
|
|
||||||
We now have two lists of elementfactories.
|
We now have two lists of elementfactories.
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ aligned video) and pixel-aspect-ratio (default value being 1/1). Adding p-a-r
|
||||||
was in this case an example of 2bII, whereas stride is 2bI. The reason for
|
was in this case an example of 2bII, whereas stride is 2bI. The reason for
|
||||||
this is simple: adding pixel-aspect-ratio to some element and not to others
|
this is simple: adding pixel-aspect-ratio to some element and not to others
|
||||||
could lead to misunderstanding size. However, this is not a regression,
|
could lead to misunderstanding size. However, this is not a regression,
|
||||||
because not adding it alltogether would lead to the same misunderstanding.
|
because not adding it altogether would lead to the same misunderstanding.
|
||||||
In both cases, the result would be wrongly sized video. Therefore, there
|
In both cases, the result would be wrongly sized video. Therefore, there
|
||||||
is no regression and there is a bugfix, so this is fine. Obviously, the
|
is no regression and there is a bugfix, so this is fine. Obviously, the
|
||||||
optional property is in this case very specifically a temporary solution.
|
optional property is in this case very specifically a temporary solution.
|
||||||
|
|
|
@ -4,13 +4,13 @@ Stream selection
|
||||||
1. Problem
|
1. Problem
|
||||||
URIs (that being either a media stream or a media stream plus subtitle) can
|
URIs (that being either a media stream or a media stream plus subtitle) can
|
||||||
contain multiple streams of a type (audio, subtitle). A user has to be given
|
contain multiple streams of a type (audio, subtitle). A user has to be given
|
||||||
the option of selecting one of those streams (or none alltogether).
|
the option of selecting one of those streams (or none altogether).
|
||||||
|
|
||||||
2. Implementation ideas
|
2. Implementation ideas
|
||||||
Stream selection, in GStreamer, has to be integrated at the player plugging
|
Stream selection, in GStreamer, has to be integrated at the player plugging
|
||||||
level, which is (in the case of Totem) playbin. Playbin offers a feature to
|
level, which is (in the case of Totem) playbin. Playbin offers a feature to
|
||||||
'mute' a stream (which means that no processing is done on that stream
|
'mute' a stream (which means that no processing is done on that stream
|
||||||
alltogether, saving the decoding step). Currently, playbin will select the
|
altogether, saving the decoding step). Currently, playbin will select the
|
||||||
first occurrence of a stream type and mute all others. A queue is connected
|
first occurrence of a stream type and mute all others. A queue is connected
|
||||||
(for pre-roll) to the active stream. What is missing here is a way to change
|
(for pre-roll) to the active stream. What is missing here is a way to change
|
||||||
the active stream.
|
the active stream.
|
||||||
|
@ -30,7 +30,7 @@ stream was linked. Alternatively, a switch-like element is used, which
|
||||||
requires no replugging. Pad disabling/enabling is then enough. This also
|
requires no replugging. Pad disabling/enabling is then enough. This also
|
||||||
makes relinking less painful. The switch-like element needs to proxy the
|
makes relinking less painful. The switch-like element needs to proxy the
|
||||||
active pads' caps. However, since those caps are (in practice) always the
|
active pads' caps. However, since those caps are (in practice) always the
|
||||||
same accross streams, caps setting will (inside the core) immediately
|
same across streams, caps setting will (inside the core) immediately
|
||||||
return success.
|
return success.
|
||||||
The switch-like element simply works like this:
|
The switch-like element simply works like this:
|
||||||
=
|
=
|
||||||
|
|
|
@ -162,7 +162,7 @@ As with option2, a global plan will be built. At runtime the src pads
|
||||||
will actually specify the capabilities they need for any element that
|
will actually specify the capabilities they need for any element that
|
||||||
wants to be connected to its source pads.
|
wants to be connected to its source pads.
|
||||||
|
|
||||||
In this case we specifiy the capabilities for all the sink pads of an
|
In this case we specify the capabilities for all the sink pads of an
|
||||||
element at create time. The capabilities of the src pads would only
|
element at create time. The capabilities of the src pads would only
|
||||||
become available when data has been processed by the element.
|
become available when data has been processed by the element.
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ for themselves - most of the time depending on caps on other pads in the
|
||||||
element. The core then takes those, intersects them and if the intersection
|
element. The core then takes those, intersects them and if the intersection
|
||||||
isn't empty fixates them. Fixation is a process that selects the best possible
|
isn't empty fixates them. Fixation is a process that selects the best possible
|
||||||
fixed caps from a caps. A fixed caps is a caps that describes only one format
|
fixed caps from a caps. A fixed caps is a caps that describes only one format
|
||||||
and cannot be reduced further. After both pads acdepted the fixed caps, its
|
and cannot be reduced further. After both pads accepted the fixed caps, its
|
||||||
format is then used to describe the contents of the buffers that are passed on
|
format is then used to describe the contents of the buffers that are passed on
|
||||||
this link. Caps can be serialized and deserialized to a string representation.
|
this link. Caps can be serialized and deserialized to a string representation.
|
||||||
[Add: a medium complex caps description (audioconvert?)]
|
[Add: a medium complex caps description (audioconvert?)]
|
||||||
|
|
|
@ -39,7 +39,7 @@ What is needed
|
||||||
|
|
||||||
Elements that sink raw data buffers of usualy constant size would like to
|
Elements that sink raw data buffers of usualy constant size would like to
|
||||||
maintain a bufferpool. These could be sinks or encoders. We need mechanims to
|
maintain a bufferpool. These could be sinks or encoders. We need mechanims to
|
||||||
select and dynamicaly update:
|
select and dynamically update:
|
||||||
|
|
||||||
- the bufferpool owners in a pipeline
|
- the bufferpool owners in a pipeline
|
||||||
- the bufferpool sizes
|
- the bufferpool sizes
|
||||||
|
|
|
@ -21,7 +21,7 @@ encapsulated in the indexer strategy.
|
||||||
Autopluggers like playbin and decodebin use the element caps plus static ranks
|
Autopluggers like playbin and decodebin use the element caps plus static ranks
|
||||||
to create piplines.
|
to create piplines.
|
||||||
The rank of an elemnt right now refers to the quality/maturity of the element.
|
The rank of an elemnt right now refers to the quality/maturity of the element.
|
||||||
Elements with higher rank should be functionaly more complete. If we have
|
Elements with higher rank should be functionally more complete. If we have
|
||||||
multiple elements that are feature complete there is a draw.
|
multiple elements that are feature complete there is a draw.
|
||||||
|
|
||||||
There are more decission criteria thinkable:
|
There are more decission criteria thinkable:
|
||||||
|
|
|
@ -38,5 +38,5 @@ components
|
||||||
channelstrip
|
channelstrip
|
||||||
- state-control (play, pause/mute)
|
- state-control (play, pause/mute)
|
||||||
- it would be useful if one app could pause/mute others
|
- it would be useful if one app could pause/mute others
|
||||||
- think of a voip-client, if there is an incomming call, if pauses your
|
- think of a voip-client, if there is an incoming call, if pauses your
|
||||||
media-player, or mutes the monitoring of your recording app
|
media-player, or mutes the monitoring of your recording app
|
||||||
|
|
|
@ -33,7 +33,7 @@ Details
|
||||||
------------------
|
------------------
|
||||||
- read data from inspect/plugin-<pluginname>.xml
|
- read data from inspect/plugin-<pluginname>.xml
|
||||||
- insert/overwrite "Short Description" and "Long Description" in tmpl/
|
- insert/overwrite "Short Description" and "Long Description" in tmpl/
|
||||||
- the "Long Description" contains a <xi:inlcude> for xml/element-<name>-details.xml
|
- the "Long Description" contains a <xi:include> for xml/element-<name>-details.xml
|
||||||
|
|
||||||
3.) common/plugins.xsl
|
3.) common/plugins.xsl
|
||||||
----------------------
|
----------------------
|
||||||
|
|
|
@ -89,7 +89,7 @@ $Id$
|
||||||
|
|
||||||
= PerformanceMonitor =
|
= PerformanceMonitor =
|
||||||
Write a ld-preload lib that can gather data from gstreamer and logs it to files.
|
Write a ld-preload lib that can gather data from gstreamer and logs it to files.
|
||||||
The idea is not avoid adding API for performance meassurement to gstreamer.
|
The idea is not avoid adding API for performance measurement to gstreamer.
|
||||||
|
|
||||||
== Services ==
|
== Services ==
|
||||||
library provides some common services used by the sensor modules.
|
library provides some common services used by the sensor modules.
|
||||||
|
@ -97,7 +97,7 @@ library provides some common services used by the sensor modules.
|
||||||
* timestamps
|
* timestamps
|
||||||
|
|
||||||
== Sensors ==
|
== Sensors ==
|
||||||
Sensors do meassurements and deliver timestampe performance data.
|
Sensors do measurements and deliver timestampe performance data.
|
||||||
* bitrates and latency via gst_pad_push/pull per link
|
* bitrates and latency via gst_pad_push/pull per link
|
||||||
* qos ratio via gst_event_new_qos(), gst_pad_send_event()
|
* qos ratio via gst_event_new_qos(), gst_pad_send_event()
|
||||||
* cpu/mem via get_rusage
|
* cpu/mem via get_rusage
|
||||||
|
@ -125,7 +125,7 @@ timestamp [qos-ratio] [cpu-load={sum,17284,17285}]
|
||||||
** should we have the log config in the header or in some separate config?
|
** should we have the log config in the header or in some separate config?
|
||||||
- if config, we just specify the config when capturing put that
|
- if config, we just specify the config when capturing put that
|
||||||
in the first log line
|
in the first log line
|
||||||
- otheriwse the analyzer ui has to parse it from the first line
|
- otherwise the analyzer ui has to parse it from the first line
|
||||||
|
|
||||||
== Running ==
|
== Running ==
|
||||||
LD_PRELOAD=libgstperfmon.so GST_PERFMON_DETAILS="qos-ratio,cpu-load=all" <application>
|
LD_PRELOAD=libgstperfmon.so GST_PERFMON_DETAILS="qos-ratio,cpu-load=all" <application>
|
||||||
|
|
|
@ -82,12 +82,12 @@ case 3)
|
||||||
the eos handler returns false because both queues return false on the
|
the eos handler returns false because both queues return false on the
|
||||||
eos request. the parent removes fakesrc as an EOS provider.
|
eos request. the parent removes fakesrc as an EOS provider.
|
||||||
|
|
||||||
queue1 and queue2 were responisble for the EOS delay and so they get
|
queue1 and queue2 were responsible for the EOS delay and so they get
|
||||||
added to the bin as possible EOS providers.
|
added to the bin as possible EOS providers.
|
||||||
|
|
||||||
after the queues have sent out their last buffer, they calls eos on their
|
after the queues have sent out their last buffer, they calls eos on their
|
||||||
src pads.
|
src pads.
|
||||||
the parent allready has the two queues in the EOS provider list so they dont
|
the parent already has the two queues in the EOS provider list so they dont
|
||||||
get added twice.
|
get added twice.
|
||||||
the two queues perform gst_pad_eos () on their pads when the queue is empty,
|
the two queues perform gst_pad_eos () on their pads when the queue is empty,
|
||||||
the parent removes the EOS providers from its list, when the list is empty,
|
the parent removes the EOS providers from its list, when the list is empty,
|
||||||
|
@ -122,12 +122,12 @@ case 4)
|
||||||
the eos handler returns false because queue2 returns false on the
|
the eos handler returns false because queue2 returns false on the
|
||||||
eos request. the parent removes fakesrc as an EOS provider.
|
eos request. the parent removes fakesrc as an EOS provider.
|
||||||
|
|
||||||
queue2 was responisble for the EOS delay and so it gets added to the bin
|
queue2 was responsible for the EOS delay and so it gets added to the bin
|
||||||
as a possible EOS provider.
|
as a possible EOS provider.
|
||||||
|
|
||||||
after the queue2 has sent its last buffer, it performs gst_pad_eos on its
|
after the queue2 has sent its last buffer, it performs gst_pad_eos on its
|
||||||
src pad.
|
src pad.
|
||||||
the parent allready has the queue2 in the list of EOS providers so it does not
|
the parent already has the queue2 in the list of EOS providers so it does not
|
||||||
get added twice.
|
get added twice.
|
||||||
queue2 finally fires the EOS signal and the parent removes the EOS provider
|
queue2 finally fires the EOS signal and the parent removes the EOS provider
|
||||||
from its list, when the list is empty, the parent fires EOS.
|
from its list, when the list is empty, the parent fires EOS.
|
||||||
|
|
|
@ -12,7 +12,7 @@ better layout for it now. Some things to consider:
|
||||||
- The plugins can be grouped together by the media type they
|
- The plugins can be grouped together by the media type they
|
||||||
operate on or by the way they work (decoder/encoder)
|
operate on or by the way they work (decoder/encoder)
|
||||||
|
|
||||||
In GStreamer all plugins are techically filters, the only way they
|
In GStreamer all plugins are technically filters, the only way they
|
||||||
can be considered sources or sinks (input/output) elements is
|
can be considered sources or sinks (input/output) elements is
|
||||||
by the absence of src/sink pads. At first sight the source/filter/
|
by the absence of src/sink pads. At first sight the source/filter/
|
||||||
sink distinction is quite useless because most of the plugins
|
sink distinction is quite useless because most of the plugins
|
||||||
|
|
|
@ -10,7 +10,7 @@ Internationalization notes
|
||||||
- should only use bindtextdomain to tie a domain to a locale dir
|
- should only use bindtextdomain to tie a domain to a locale dir
|
||||||
- use dgettext (possibly disguised as _) to translate from a set domain
|
- use dgettext (possibly disguised as _) to translate from a set domain
|
||||||
|
|
||||||
- How to make your plug-in code translateable:
|
- How to make your plug-in code translatable:
|
||||||
- include <gst/gst-i18n-plugin.h> in all files that mark strings for
|
- include <gst/gst-i18n-plugin.h> in all files that mark strings for
|
||||||
translation, or do the bindtextdomain call
|
translation, or do the bindtextdomain call
|
||||||
- in plugin_init, add a block like this:
|
- in plugin_init, add a block like this:
|
||||||
|
|
|
@ -311,7 +311,7 @@ That's all! It would look similar for FB & co.
|
||||||
4c) user input
|
4c) user input
|
||||||
--------------
|
--------------
|
||||||
And yes, user input could be an interface too. Even better, it
|
And yes, user input could be an interface too. Even better, it
|
||||||
should definately be. And wasn't this one of our key issues for
|
should definitely be. And wasn't this one of our key issues for
|
||||||
0.8.0?
|
0.8.0?
|
||||||
|
|
||||||
No code here. Go implement it, lazy ass!
|
No code here. Go implement it, lazy ass!
|
||||||
|
|
|
@ -155,7 +155,7 @@ Notes for converters:
|
||||||
structure, perform whatever other setup is necessary for your
|
structure, perform whatever other setup is necessary for your
|
||||||
element, and return GST_PAD_LINK_OK.
|
element, and return GST_PAD_LINK_OK.
|
||||||
|
|
||||||
- Otherwise, you're not not using passthrough, and may need to
|
- Otherwise, you're not using passthrough, and may need to
|
||||||
change the caps on the otherpad to match the given format.
|
change the caps on the otherpad to match the given format.
|
||||||
|
|
||||||
- If the otherpad is not negotiated (!gst_pad_is_negotiated()),
|
- If the otherpad is not negotiated (!gst_pad_is_negotiated()),
|
||||||
|
|
|
@ -71,7 +71,7 @@ both entries is hard, because the idea at this point is that there's only a sing
|
||||||
Does this mean that we should make mix a DECOUPLED element? That would fix it to some extent, giving us three chains
|
Does this mean that we should make mix a DECOUPLED element? That would fix it to some extent, giving us three chains
|
||||||
in the above case. Each eq chain would be driven by the eq element, pulling from the queue and pushing into the mixer.
|
in the above case. Each eq chain would be driven by the eq element, pulling from the queue and pushing into the mixer.
|
||||||
The mixer -> queue chain is problematic, because there is no possibly entry. The mixer side has no _get function
|
The mixer -> queue chain is problematic, because there is no possibly entry. The mixer side has no _get function
|
||||||
(since the push always happens upon the receipt of a buffer from the second sink pad), which means that that those two
|
(since the push always happens upon the receipt of a buffer from the second sink pad), which means that those two
|
||||||
pads have no possible entrance.
|
pads have no possible entrance.
|
||||||
|
|
||||||
Cothreads make this case much easier, since the mix element would drive things, forcing the eq elements to pull and
|
Cothreads make this case much easier, since the mix element would drive things, forcing the eq elements to pull and
|
||||||
|
|
|
@ -26,7 +26,7 @@ preconditions:
|
||||||
nothing
|
nothing
|
||||||
action:
|
action:
|
||||||
curparent = gst_element_get_parent(object);
|
curparent = gst_element_get_parent(object);
|
||||||
validaton:
|
validation:
|
||||||
curparent == object->parent
|
curparent == object->parent
|
||||||
curparent == parent
|
curparent == parent
|
||||||
cleanup:
|
cleanup:
|
||||||
|
|
|
@ -65,7 +65,7 @@ We will have the following methods for (implicitly) loading plugins:
|
||||||
|
|
||||||
gst_plugin_load (name)
|
gst_plugin_load (name)
|
||||||
|
|
||||||
The plugin will be located in the tree and if it allready loaded, the
|
The plugin will be located in the tree and if it already loaded, the
|
||||||
function returns. If it is not loaded, the XML entry is removed and
|
function returns. If it is not loaded, the XML entry is removed and
|
||||||
the plugin is loaded. The plugin_init is called so that the XML tree
|
the plugin is loaded. The plugin_init is called so that the XML tree
|
||||||
is reconstructed.
|
is reconstructed.
|
||||||
|
@ -73,7 +73,7 @@ We will have the following methods for (implicitly) loading plugins:
|
||||||
gst_elementfactory_create (factory, name);
|
gst_elementfactory_create (factory, name);
|
||||||
|
|
||||||
The plugin providing the element will be located, if the plugin is
|
The plugin providing the element will be located, if the plugin is
|
||||||
allready loaded, an element with the given name is created.
|
already loaded, an element with the given name is created.
|
||||||
if the plugin is not loaded, gst_plugin_load is called.
|
if the plugin is not loaded, gst_plugin_load is called.
|
||||||
the loaded factory is located again and the element is created.
|
the loaded factory is located again and the element is created.
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ A brief description of the RTP protocol.
|
||||||
|
|
||||||
The RTP protocol uses two connections: one for passing data and another for control. The control connection is used for starting, finishing, and passing statistics of lost packets. On the data connection, packets are transmitted containing the media. These packets have a 7 bit field that says what codec is the data transmitted with. This codec is variable. However data cannot change from audio to video in packets of the same connection. All the packets belong to the same logical stream, that is, for instanace, to the same speech, or to the same song. Different codecs in the same stream is used, for instance, to insert comfort noise.
|
The RTP protocol uses two connections: one for passing data and another for control. The control connection is used for starting, finishing, and passing statistics of lost packets. On the data connection, packets are transmitted containing the media. These packets have a 7 bit field that says what codec is the data transmitted with. This codec is variable. However data cannot change from audio to video in packets of the same connection. All the packets belong to the same logical stream, that is, for instanace, to the same speech, or to the same song. Different codecs in the same stream is used, for instance, to insert comfort noise.
|
||||||
|
|
||||||
Each codec is packeted in a specific way in RTP packets. This is necessary to minimize the damage produced by lost packets. Therefore, packets should be arranged so that each packet can be decoded independently. If a packet is lost, that shoudn't preclude the decoding of following packets.
|
Each codec is packeted in a specific way in RTP packets. This is necessary to minimize the damage produced by lost packets. Therefore, packets should be arranged so that each packet can be decoded independently. If a packet is lost, that shouldn't preclude the decoding of following packets.
|
||||||
|
|
||||||
|
|
||||||
Suggested implementation:
|
Suggested implementation:
|
||||||
|
@ -38,7 +38,7 @@ Ronald suggested to use inheritance. Thus the user should insert a codec specifi
|
||||||
|
|
||||||
udpsrc ! rtp-mp3 ! mp3decode ! osssink
|
udpsrc ! rtp-mp3 ! mp3decode ! osssink
|
||||||
|
|
||||||
Reuse of RTP logic would be achived through inhertiance.
|
Reuse of RTP logic would be achieved through inheritance.
|
||||||
|
|
||||||
This looks more logical, because inheritance reflects the fact that rtp-mp3 "is an" specialization of rtp. However, there are several issues. As stated above, it is posible in RTP to switch the encoding of the media at any time. If this happens, some state must be kept, such as statistics of packets received and sent.
|
This looks more logical, because inheritance reflects the fact that rtp-mp3 "is an" specialization of rtp. However, there are several issues. As stated above, it is posible in RTP to switch the encoding of the media at any time. If this happens, some state must be kept, such as statistics of packets received and sent.
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ Implementation:
|
||||||
|
|
||||||
Ideas and plans:
|
Ideas and plans:
|
||||||
- Deprecate control-rate property and add a control-period property
|
- Deprecate control-rate property and add a control-period property
|
||||||
that does the same and is named appropiately. Damn confusing names.
|
that does the same and is named appropriately. Damn confusing names.
|
||||||
|
|
||||||
- gst_object_suggest_next_sync() will not be used at all anymore.
|
- gst_object_suggest_next_sync() will not be used at all anymore.
|
||||||
Note this in the docs and explain correct usage in elements.
|
Note this in the docs and explain correct usage in elements.
|
||||||
|
|
|
@ -266,7 +266,7 @@ Chained:
|
||||||
-
|
-
|
||||||
|
|
||||||
As usual, is likely to be an entry into a Bin. The Bin iterate code must
|
As usual, is likely to be an entry into a Bin. The Bin iterate code must
|
||||||
explicitely pull a buffer and pass it on to the peer.
|
explicitly pull a buffer and pass it on to the peer.
|
||||||
|
|
||||||
Cothreaded:
|
Cothreaded:
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ A lot of data streams need a few initial buffers to make sense of the
|
||||||
data stream. With these initial buffers, it can pick up at any point in
|
data stream. With these initial buffers, it can pick up at any point in
|
||||||
the rest of the data stream.
|
the rest of the data stream.
|
||||||
|
|
||||||
Exampes:
|
Examples:
|
||||||
- Vorbis and Theora have three initial Ogg packets
|
- Vorbis and Theora have three initial Ogg packets
|
||||||
- MPEG4 has codec data
|
- MPEG4 has codec data
|
||||||
- GDP protocol serializes the initial new_segment event and the initial caps
|
- GDP protocol serializes the initial new_segment event and the initial caps
|
||||||
|
|
|
@ -22,7 +22,7 @@ tcS: id2, element, signalname
|
||||||
...
|
...
|
||||||
tcI: the number of iterations on the top bin
|
tcI: the number of iterations on the top bin
|
||||||
tcT: a timeout value in mSecs
|
tcT: a timeout value in mSecs
|
||||||
tcR: id1,1,id2,1,.. (the pattern of signals trigered)
|
tcR: id1,1,id2,1,.. (the pattern of signals triggered)
|
||||||
or
|
or
|
||||||
tcR: id1==id2,... (denote an equal number of signals)
|
tcR: id1==id2,... (denote an equal number of signals)
|
||||||
/n
|
/n
|
||||||
|
|
|
@ -97,7 +97,7 @@ the equivalence of both types, even it they have a different mime type.
|
||||||
5. type hierarchy
|
5. type hierarchy
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
some plugins can ouput a specific subset of an allready existing type.
|
some plugins can ouput a specific subset of an already existing type.
|
||||||
|
|
||||||
example:
|
example:
|
||||||
|
|
||||||
|
|
|
@ -234,7 +234,7 @@ otherwise it can stay in individial projects.
|
||||||
On using dparams for MIDI
|
On using dparams for MIDI
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
You might might want to look into using dparams if:
|
You might want to look into using dparams if:
|
||||||
|
|
||||||
- you wanted your control parameters to change at a higher rate thanyour buffer
|
- you wanted your control parameters to change at a higher rate thanyour buffer
|
||||||
rate (think zipper noise and sample-granularity-interpolation)
|
rate (think zipper noise and sample-granularity-interpolation)
|
||||||
|
|
|
@ -26,7 +26,7 @@ unless they're 1/2^n, and even then it's significantly heavier (you'd have
|
||||||
to mask the top n bits of each color out).
|
to mask the top n bits of each color out).
|
||||||
|
|
||||||
This SCREAMS for MMX, in case you haven't figured it out yet.
|
This SCREAMS for MMX, in case you haven't figured it out yet.
|
||||||
Unfortunatley, MMX is only directly useful for the scalar matrix, unless
|
Unfortunately, MMX is only directly useful for the scalar matrix, unless
|
||||||
you do a trick where all the pixels in that fit in 64 bits (8 8bit, 4
|
you do a trick where all the pixels in that fit in 64 bits (8 8bit, 4
|
||||||
16bit, or 2 32bit) are always moved in a group. This is very possible,
|
16bit, or 2 32bit) are always moved in a group. This is very possible,
|
||||||
and might be a significant perf increase by being able to use MMX all the
|
and might be a significant perf increase by being able to use MMX all the
|
||||||
|
|
|
@ -193,7 +193,7 @@ of the pads negotiation functions returns the caps unmodified.
|
||||||
|
|
||||||
The element can also return a NULL pointer if it has run out of
|
The element can also return a NULL pointer if it has run out of
|
||||||
options for the caps structure. When this happens, both pads are set
|
options for the caps structure. When this happens, both pads are set
|
||||||
the the NULL caps again and the pad connnection is broken.
|
the NULL caps again and the pad connnection is broken.
|
||||||
|
|
||||||
The negotiation process is stopped after a fixed number of tries,
|
The negotiation process is stopped after a fixed number of tries,
|
||||||
when the counter has reached some limit. This limit is typically
|
when the counter has reached some limit. This limit is typically
|
||||||
|
|
|
@ -323,7 +323,7 @@ Fixing Threading
|
||||||
|
|
||||||
When performing a state change on an element that returns ASYNC on one of
|
When performing a state change on an element that returns ASYNC on one of
|
||||||
the state changes, ASYNC is returned and you can only proceed to the next
|
the state changes, ASYNC is returned and you can only proceed to the next
|
||||||
state change change when this ASYNC state change completed. Use the
|
state change when this ASYNC state change completed. Use the
|
||||||
gst_element_get_state function to know when the state change completed.
|
gst_element_get_state function to know when the state change completed.
|
||||||
An example of this behaviour is setting a videosink to PLAYING, it will
|
An example of this behaviour is setting a videosink to PLAYING, it will
|
||||||
return ASYNC in the state change from READY->PAUSED. You can only set
|
return ASYNC in the state change from READY->PAUSED. You can only set
|
||||||
|
|
|
@ -168,5 +168,5 @@ TODO
|
||||||
----
|
----
|
||||||
|
|
||||||
- review
|
- review
|
||||||
- figure all all state change scenarios occuring in code marked with (*)
|
- figure all state change scenarios occuring in code marked with (*)
|
||||||
|
|
||||||
|
|
|
@ -1859,7 +1859,7 @@ clear_queue (GQueue * queue)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set all degrees to 0. Elements marked as a sink are
|
/* set all degrees to 0. Elements marked as a sink are
|
||||||
* added to the queue immediatly. Since we only look at the SINK flag of the
|
* added to the queue immediately. Since we only look at the SINK flag of the
|
||||||
* element, it is possible that we add non-sinks to the queue. These will be
|
* element, it is possible that we add non-sinks to the queue. These will be
|
||||||
* removed from the queue again when we can prove that it provides data for some
|
* removed from the queue again when we can prove that it provides data for some
|
||||||
* other element. */
|
* other element. */
|
||||||
|
@ -2481,7 +2481,7 @@ gst_bin_change_state_func (GstElement * element, GstStateChange transition)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this flag is used to make the async state changes return immediatly. We
|
/* this flag is used to make the async state changes return immediately. We
|
||||||
* don't want them to interfere with this state change */
|
* don't want them to interfere with this state change */
|
||||||
GST_OBJECT_LOCK (bin);
|
GST_OBJECT_LOCK (bin);
|
||||||
bin->polling = TRUE;
|
bin->polling = TRUE;
|
||||||
|
@ -2633,7 +2633,7 @@ done:
|
||||||
/* nothing found, remove all old ASYNC_DONE messages. This can happen when
|
/* nothing found, remove all old ASYNC_DONE messages. This can happen when
|
||||||
* all the elements commited their state while we were doing the state
|
* all the elements commited their state while we were doing the state
|
||||||
* change. We will still return ASYNC for consistency but we commit the
|
* change. We will still return ASYNC for consistency but we commit the
|
||||||
* state already so that a _get_state() will return immediatly. */
|
* state already so that a _get_state() will return immediately. */
|
||||||
bin_remove_messages (bin, NULL, GST_MESSAGE_ASYNC_DONE);
|
bin_remove_messages (bin, NULL, GST_MESSAGE_ASYNC_DONE);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (bin, "async elements commited");
|
GST_DEBUG_OBJECT (bin, "async elements commited");
|
||||||
|
@ -2741,7 +2741,7 @@ gst_bin_continue_func (BinContinueData * data)
|
||||||
GST_OBJECT_LOCK (bin);
|
GST_OBJECT_LOCK (bin);
|
||||||
|
|
||||||
/* if a new state change happened after this thread was scheduled, we return
|
/* if a new state change happened after this thread was scheduled, we return
|
||||||
* immediatly. */
|
* immediately. */
|
||||||
if (data->cookie != GST_ELEMENT_CAST (bin)->state_cookie)
|
if (data->cookie != GST_ELEMENT_CAST (bin)->state_cookie)
|
||||||
goto interrupted;
|
goto interrupted;
|
||||||
|
|
||||||
|
|
|
@ -419,7 +419,7 @@ gst_caps_ref (GstCaps * caps)
|
||||||
* gst_caps_unref:
|
* gst_caps_unref:
|
||||||
* @caps: (transfer full): the #GstCaps to unref
|
* @caps: (transfer full): the #GstCaps to unref
|
||||||
*
|
*
|
||||||
* Unref a #GstCaps and and free all its structures and the
|
* Unref a #GstCaps and free all its structures and the
|
||||||
* structures' values when the refcount reaches 0.
|
* structures' values when the refcount reaches 0.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
@ -707,7 +707,7 @@ gst_caps_remove_structure (GstCaps * caps, guint idx)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_caps_merge_structure:
|
* gst_caps_merge_structure:
|
||||||
* @caps: the #GstCaps that will the the new structure
|
* @caps: the #GstCaps that will the new structure
|
||||||
* @structure: (transfer full): the #GstStructure to merge
|
* @structure: (transfer full): the #GstStructure to merge
|
||||||
*
|
*
|
||||||
* Appends @structure to @caps if its not already expressed by @caps. The
|
* Appends @structure to @caps if its not already expressed by @caps. The
|
||||||
|
@ -1497,8 +1497,8 @@ gst_caps_structure_subtract (GSList ** into, const GstStructure * minuend,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_caps_subtract:
|
* gst_caps_subtract:
|
||||||
* @minuend: #GstCaps to substract from
|
* @minuend: #GstCaps to subtract from
|
||||||
* @subtrahend: #GstCaps to substract
|
* @subtrahend: #GstCaps to subtract
|
||||||
*
|
*
|
||||||
* Subtracts the @subtrahend from the @minuend.
|
* Subtracts the @subtrahend from the @minuend.
|
||||||
* <note>This function does not work reliably if optional properties for caps
|
* <note>This function does not work reliably if optional properties for caps
|
||||||
|
|
|
@ -229,7 +229,7 @@ gst_child_proxy_lookup (GstObject * object, const gchar * name,
|
||||||
* @value: (out caller-allocates): a #GValue that should take the result.
|
* @value: (out caller-allocates): a #GValue that should take the result.
|
||||||
*
|
*
|
||||||
* Gets a single property using the GstChildProxy mechanism.
|
* Gets a single property using the GstChildProxy mechanism.
|
||||||
* You are responsible for for freeing it by calling g_value_unset()
|
* You are responsible for freeing it by calling g_value_unset()
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_child_proxy_get_property (GstObject * object, const gchar * name,
|
gst_child_proxy_get_property (GstObject * object, const gchar * name,
|
||||||
|
|
|
@ -2128,7 +2128,7 @@ gst_element_get_state_func (GstElement * element,
|
||||||
if (ret == GST_STATE_CHANGE_FAILURE)
|
if (ret == GST_STATE_CHANGE_FAILURE)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
/* we got no_preroll, report immediatly */
|
/* we got no_preroll, report immediately */
|
||||||
if (ret == GST_STATE_CHANGE_NO_PREROLL)
|
if (ret == GST_STATE_CHANGE_NO_PREROLL)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
* Most of the event API is used inside plugins. Applications usually only
|
* Most of the event API is used inside plugins. Applications usually only
|
||||||
* construct and use seek events.
|
* construct and use seek events.
|
||||||
* To do that gst_event_new_seek() is used to create a seek event. It takes
|
* To do that gst_event_new_seek() is used to create a seek event. It takes
|
||||||
* the needed parameters to specity seeking time and mode.
|
* the needed parameters to specify seeking time and mode.
|
||||||
* <example>
|
* <example>
|
||||||
* <title>performing a seek on a pipeline</title>
|
* <title>performing a seek on a pipeline</title>
|
||||||
* <programlisting>
|
* <programlisting>
|
||||||
|
@ -729,7 +729,7 @@ gst_event_parse_tag (GstEvent * event, GstTagList ** taglist)
|
||||||
* Create a new buffersize event. The event is sent downstream and notifies
|
* Create a new buffersize event. The event is sent downstream and notifies
|
||||||
* elements that they should provide a buffer of the specified dimensions.
|
* elements that they should provide a buffer of the specified dimensions.
|
||||||
*
|
*
|
||||||
* When the @async flag is set, a thread boundary is prefered.
|
* When the @async flag is set, a thread boundary is preferred.
|
||||||
*
|
*
|
||||||
* Returns: (transfer full): a new #GstEvent
|
* Returns: (transfer full): a new #GstEvent
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -292,7 +292,7 @@ typedef enum {
|
||||||
* no EOS will be emmited by the element that performed the seek, but a
|
* no EOS will be emmited by the element that performed the seek, but a
|
||||||
* #GST_MESSAGE_SEGMENT_DONE message will be posted on the bus by the element.
|
* #GST_MESSAGE_SEGMENT_DONE message will be posted on the bus by the element.
|
||||||
* When this message is posted, it is possible to send a new seek event to
|
* When this message is posted, it is possible to send a new seek event to
|
||||||
* continue playback. With this seek method it is possible to perform seemless
|
* continue playback. With this seek method it is possible to perform seamless
|
||||||
* looping or simple linear editing.
|
* looping or simple linear editing.
|
||||||
*
|
*
|
||||||
* When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode
|
* When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode
|
||||||
|
|
|
@ -615,7 +615,7 @@ gst_proxy_pad_unlink_default (GstPad * pad)
|
||||||
|
|
||||||
/* don't do anything if this unlink resulted from retargeting the pad
|
/* don't do anything if this unlink resulted from retargeting the pad
|
||||||
* controlled by the ghostpad. We only want to invalidate the target pad when
|
* controlled by the ghostpad. We only want to invalidate the target pad when
|
||||||
* the element suddently unlinked with our internal pad. */
|
* the element suddenly unlinked with our internal pad. */
|
||||||
if (GST_PROXY_PAD_RETARGET (pad))
|
if (GST_PROXY_PAD_RETARGET (pad))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -845,7 +845,7 @@ gst_ghost_pad_internal_activate_pull_default (GstPad * pad, gboolean active)
|
||||||
if (GST_PAD_DIRECTION (pad) == GST_PAD_SRC) {
|
if (GST_PAD_DIRECTION (pad) == GST_PAD_SRC) {
|
||||||
/* we are activated in pull mode by our peer element, which is a sinkpad
|
/* we are activated in pull mode by our peer element, which is a sinkpad
|
||||||
* that wants to operate in pull mode. This activation has to propagate
|
* that wants to operate in pull mode. This activation has to propagate
|
||||||
* upstream throught the pipeline. We call the internal activation function,
|
* upstream through the pipeline. We call the internal activation function,
|
||||||
* which will trigger gst_ghost_pad_activate_pull_default, which propagates even
|
* which will trigger gst_ghost_pad_activate_pull_default, which propagates even
|
||||||
* further upstream */
|
* further upstream */
|
||||||
GST_LOG_OBJECT (pad, "pad is src, activate internal");
|
GST_LOG_OBJECT (pad, "pad is src, activate internal");
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
/**
|
/**
|
||||||
* SECTION:gstimplementsinterface
|
* SECTION:gstimplementsinterface
|
||||||
* @short_description: Core interface implemented by #GstElement instances that
|
* @short_description: Core interface implemented by #GstElement instances that
|
||||||
* allows runtime querying of interface availabillity
|
* allows runtime querying of interface availability
|
||||||
* @see_also: #GstElement
|
* @see_also: #GstElement
|
||||||
*
|
*
|
||||||
* Provides interface functionality on per instance basis and not per class
|
* Provides interface functionality on per instance basis and not per class
|
||||||
|
|
16
gst/gstpad.c
16
gst/gstpad.c
|
@ -2289,7 +2289,7 @@ done:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME-0.11: what about making this the default and using
|
/* FIXME-0.11: what about making this the default and using
|
||||||
* gst_caps_make_writable() explicitely where needed
|
* gst_caps_make_writable() explicitly where needed
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* gst_pad_get_caps_reffed:
|
* gst_pad_get_caps_reffed:
|
||||||
|
@ -2348,7 +2348,7 @@ gst_pad_get_caps (GstPad * pad)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME-0.11: what about making this the default and using
|
/* FIXME-0.11: what about making this the default and using
|
||||||
* gst_caps_make_writable() explicitely where needed
|
* gst_caps_make_writable() explicitly where needed
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* gst_pad_peer_get_caps_reffed:
|
* gst_pad_peer_get_caps_reffed:
|
||||||
|
@ -3423,7 +3423,7 @@ gst_pad_get_internal_links_default (GstPad * pad)
|
||||||
|
|
||||||
it = gst_pad_iterate_internal_links (pad);
|
it = gst_pad_iterate_internal_links (pad);
|
||||||
/* loop over the iterator and put all elements into a list, we also
|
/* loop over the iterator and put all elements into a list, we also
|
||||||
* immediatly unref them, which is bad. */
|
* immediately unref them, which is bad. */
|
||||||
do {
|
do {
|
||||||
ires = gst_iterator_foreach (it, (GFunc) add_unref_pad_to_list, &res);
|
ires = gst_iterator_foreach (it, (GFunc) add_unref_pad_to_list, &res);
|
||||||
switch (ires) {
|
switch (ires) {
|
||||||
|
@ -3616,7 +3616,7 @@ no_iter:
|
||||||
* pads that are internally linked to @pad, only one will be sent an event.
|
* pads that are internally linked to @pad, only one will be sent an event.
|
||||||
* Multi-sinkpad elements should implement custom event handlers.
|
* Multi-sinkpad elements should implement custom event handlers.
|
||||||
*
|
*
|
||||||
* Returns: TRUE if the event was sent succesfully.
|
* Returns: TRUE if the event was sent successfully.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_pad_event_default (GstPad * pad, GstEvent * event)
|
gst_pad_event_default (GstPad * pad, GstEvent * event)
|
||||||
|
@ -3810,7 +3810,7 @@ no_peer:
|
||||||
* @pad, only one will be sent the query.
|
* @pad, only one will be sent the query.
|
||||||
* Multi-sinkpad elements should implement custom query handlers.
|
* Multi-sinkpad elements should implement custom query handlers.
|
||||||
*
|
*
|
||||||
* Returns: TRUE if the query was performed succesfully.
|
* Returns: TRUE if the query was performed successfully.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_pad_query_default (GstPad * pad, GstQuery * query)
|
gst_pad_query_default (GstPad * pad, GstQuery * query)
|
||||||
|
@ -4043,7 +4043,7 @@ handle_pad_block (GstPad * pad)
|
||||||
pad->abidata.ABI.block_callback_called = TRUE;
|
pad->abidata.ABI.block_callback_called = TRUE;
|
||||||
if (callback) {
|
if (callback) {
|
||||||
/* there is a callback installed, call it. We release the
|
/* there is a callback installed, call it. We release the
|
||||||
* lock so that the callback can do something usefull with the
|
* lock so that the callback can do something useful with the
|
||||||
* pad */
|
* pad */
|
||||||
user_data = pad->block_data;
|
user_data = pad->block_data;
|
||||||
GST_OBJECT_UNLOCK (pad);
|
GST_OBJECT_UNLOCK (pad);
|
||||||
|
@ -5015,7 +5015,7 @@ not_negotiated:
|
||||||
* returns #GST_FLOW_ERROR if %NULL.
|
* returns #GST_FLOW_ERROR if %NULL.
|
||||||
*
|
*
|
||||||
* When @pad is flushing this function returns #GST_FLOW_WRONG_STATE
|
* When @pad is flushing this function returns #GST_FLOW_WRONG_STATE
|
||||||
* immediatly and @buffer is %NULL.
|
* immediately and @buffer is %NULL.
|
||||||
*
|
*
|
||||||
* Calls the getrange function of @pad, see #GstPadGetRangeFunction for a
|
* Calls the getrange function of @pad, see #GstPadGetRangeFunction for a
|
||||||
* description of a getrange function. If @pad has no getrange function
|
* description of a getrange function. If @pad has no getrange function
|
||||||
|
@ -5376,7 +5376,7 @@ gst_pad_send_event (GstPad * pad, GstEvent * event)
|
||||||
GST_EVENT_TYPE_NAME (event));
|
GST_EVENT_TYPE_NAME (event));
|
||||||
|
|
||||||
/* make this a little faster, no point in grabbing the lock
|
/* make this a little faster, no point in grabbing the lock
|
||||||
* if the pad is allready flushing. */
|
* if the pad is already flushing. */
|
||||||
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
|
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
|
||||||
goto flushing;
|
goto flushing;
|
||||||
|
|
||||||
|
|
|
@ -171,9 +171,9 @@ typedef enum {
|
||||||
* @ret: a #GstFlowReturn value
|
* @ret: a #GstFlowReturn value
|
||||||
*
|
*
|
||||||
* Macro to test if the given #GstFlowReturn value indicates a
|
* Macro to test if the given #GstFlowReturn value indicates a
|
||||||
* successfull result
|
* successful result
|
||||||
* This macro is mainly used in elements to decide if the processing
|
* This macro is mainly used in elements to decide if the processing
|
||||||
* of a buffer was successfull.
|
* of a buffer was successful.
|
||||||
*
|
*
|
||||||
* Since: 0.10.7
|
* Since: 0.10.7
|
||||||
*
|
*
|
||||||
|
@ -510,7 +510,7 @@ typedef gboolean (*GstPadAcceptCapsFunction) (GstPad *pad, GstCaps *caps);
|
||||||
* @pad: a #GstPad
|
* @pad: a #GstPad
|
||||||
* @caps: the #GstCaps to fixate
|
* @caps: the #GstCaps to fixate
|
||||||
*
|
*
|
||||||
* Given possibly unfixed caps @caps, let @pad use its default prefered
|
* Given possibly unfixed caps @caps, let @pad use its default preferred
|
||||||
* format to make a fixed caps. @caps should be writable. By default this
|
* format to make a fixed caps. @caps should be writable. By default this
|
||||||
* function will pick the first value of any ranges or lists in the caps but
|
* function will pick the first value of any ranges or lists in the caps but
|
||||||
* elements can override this function to perform other behaviour.
|
* elements can override this function to perform other behaviour.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* GStreamer - GParamSpecs for for some of our types
|
/* GStreamer - GParamSpecs for some of our types
|
||||||
* Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
|
* Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
*
|
*
|
||||||
* Please note that these functions take several measures to create
|
* Please note that these functions take several measures to create
|
||||||
* somewhat dynamic pipelines. Due to that such pipelines are not always
|
* somewhat dynamic pipelines. Due to that such pipelines are not always
|
||||||
* reuseable (set the state to NULL and back to PLAYING).
|
* reusable (set the state to NULL and back to PLAYING).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gst_private.h"
|
#include "gst_private.h"
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* A #GstPipeline is a special #GstBin used as the toplevel container for
|
* A #GstPipeline is a special #GstBin used as the toplevel container for
|
||||||
* the filter graph. The #GstPipeline will manage the selection and
|
* the filter graph. The #GstPipeline will manage the selection and
|
||||||
* distribution of a global #GstClock as well as provide a #GstBus to the
|
* distribution of a global #GstClock as well as provide a #GstBus to the
|
||||||
* application. It will also implement a default behavour for managing
|
* application. It will also implement a default behaviour for managing
|
||||||
* seek events (see gst_element_seek()).
|
* seek events (see gst_element_seek()).
|
||||||
*
|
*
|
||||||
* gst_pipeline_new() is used to create a pipeline. when you are done with
|
* gst_pipeline_new() is used to create a pipeline. when you are done with
|
||||||
|
|
|
@ -1764,7 +1764,7 @@ gst_plugin_ext_dep_equals (GstPluginDep * dep, const gchar ** env_vars,
|
||||||
/**
|
/**
|
||||||
* gst_plugin_add_dependency:
|
* gst_plugin_add_dependency:
|
||||||
* @plugin: a #GstPlugin
|
* @plugin: a #GstPlugin
|
||||||
* @env_vars: NULL-terminated array of environent variables affecting the
|
* @env_vars: NULL-terminated array of environment variables affecting the
|
||||||
* feature set of the plugin (e.g. an environment variable containing
|
* feature set of the plugin (e.g. an environment variable containing
|
||||||
* paths where to look for additional modules/plugins of a library),
|
* paths where to look for additional modules/plugins of a library),
|
||||||
* or NULL. Environment variable names may be followed by a path component
|
* or NULL. Environment variable names may be followed by a path component
|
||||||
|
@ -1837,7 +1837,7 @@ gst_plugin_add_dependency (GstPlugin * plugin, const gchar ** env_vars,
|
||||||
/**
|
/**
|
||||||
* gst_plugin_add_dependency_simple:
|
* gst_plugin_add_dependency_simple:
|
||||||
* @plugin: the #GstPlugin
|
* @plugin: the #GstPlugin
|
||||||
* @env_vars: one or more environent variables (separated by ':', ';' or ','),
|
* @env_vars: one or more environment variables (separated by ':', ';' or ','),
|
||||||
* or NULL. Environment variable names may be followed by a path component
|
* or NULL. Environment variable names may be followed by a path component
|
||||||
* which will be added to the content of the environment variable, e.g.
|
* which will be added to the content of the environment variable, e.g.
|
||||||
* "HOME/.mystuff/plugins:MYSTUFF_PLUGINS_PATH"
|
* "HOME/.mystuff/plugins:MYSTUFF_PLUGINS_PATH"
|
||||||
|
|
|
@ -372,7 +372,7 @@ gst_plugin_feature_check_version (GstPluginFeature * feature,
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
else if (micro > min_micro)
|
else if (micro > min_micro)
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
/* micro is 1 smaller but we have a nano version, this is the upcomming
|
/* micro is 1 smaller but we have a nano version, this is the upcoming
|
||||||
* release of the requested version and we're ok then */
|
* release of the requested version and we're ok then */
|
||||||
else if (nscan == 4 && nano > 0 && (micro + 1 == min_micro))
|
else if (nscan == 4 && nano > 0 && (micro + 1 == min_micro))
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
|
|
|
@ -52,7 +52,7 @@ typedef struct _GstPluginFeatureClass GstPluginFeatureClass;
|
||||||
/**
|
/**
|
||||||
* GstRank:
|
* GstRank:
|
||||||
* @GST_RANK_NONE: will be chosen last or not at all
|
* @GST_RANK_NONE: will be chosen last or not at all
|
||||||
* @GST_RANK_MARGINAL: unlikly to be chosen
|
* @GST_RANK_MARGINAL: unlikely to be chosen
|
||||||
* @GST_RANK_SECONDARY: likely to be chosen
|
* @GST_RANK_SECONDARY: likely to be chosen
|
||||||
* @GST_RANK_PRIMARY: will be chosen first
|
* @GST_RANK_PRIMARY: will be chosen first
|
||||||
*
|
*
|
||||||
|
|
|
@ -1232,7 +1232,7 @@ gst_poll_wait (GstPoll * set, GstClockTime timeout)
|
||||||
if (G_UNLIKELY (old_waiting > 0 && !is_timer))
|
if (G_UNLIKELY (old_waiting > 0 && !is_timer))
|
||||||
goto already_waiting;
|
goto already_waiting;
|
||||||
|
|
||||||
/* flushing, exit immediatly */
|
/* flushing, exit immediately */
|
||||||
if (G_UNLIKELY (IS_FLUSHING (set)))
|
if (G_UNLIKELY (IS_FLUSHING (set)))
|
||||||
goto flushing;
|
goto flushing;
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
* different sets of plugins. For various reasons, at init time, the cache is
|
* different sets of plugins. For various reasons, at init time, the cache is
|
||||||
* stored in the default registry, and plugins not relevant to the current
|
* stored in the default registry, and plugins not relevant to the current
|
||||||
* process are marked with the %GST_PLUGIN_FLAG_CACHED bit. These plugins are
|
* process are marked with the %GST_PLUGIN_FLAG_CACHED bit. These plugins are
|
||||||
* removed at the end of intitialization.
|
* removed at the end of initialization.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
|
|
|
@ -2842,7 +2842,7 @@ wrong_type:
|
||||||
* For refcounted (mini)objects you will acquire your own reference which
|
* For refcounted (mini)objects you will acquire your own reference which
|
||||||
* you must release with a suitable _unref() when no longer needed. For
|
* you must release with a suitable _unref() when no longer needed. For
|
||||||
* strings and boxed types you will acquire a copy which you will need to
|
* strings and boxed types you will acquire a copy which you will need to
|
||||||
* release with either g_free() or the suiteable function for the boxed type.
|
* release with either g_free() or the suitable function for the boxed type.
|
||||||
*
|
*
|
||||||
* Returns: FALSE if there was a problem reading any of the fields (e.g.
|
* Returns: FALSE if there was a problem reading any of the fields (e.g.
|
||||||
* because the field requested did not exist, or was of a type other
|
* because the field requested did not exist, or was of a type other
|
||||||
|
@ -2887,7 +2887,7 @@ gst_structure_get (const GstStructure * structure, const char *first_fieldname,
|
||||||
* For refcounted (mini)objects you will acquire your own reference which
|
* For refcounted (mini)objects you will acquire your own reference which
|
||||||
* you must release with a suitable _unref() when no longer needed. For
|
* you must release with a suitable _unref() when no longer needed. For
|
||||||
* strings and boxed types you will acquire a copy which you will need to
|
* strings and boxed types you will acquire a copy which you will need to
|
||||||
* release with either g_free() or the suiteable function for the boxed type.
|
* release with either g_free() or the suitable function for the boxed type.
|
||||||
*
|
*
|
||||||
* Returns: FALSE if there was a problem reading any of the fields (e.g.
|
* Returns: FALSE if there was a problem reading any of the fields (e.g.
|
||||||
* because the field requested did not exist, or was of a type other
|
* because the field requested did not exist, or was of a type other
|
||||||
|
@ -3075,7 +3075,7 @@ gst_caps_structure_can_intersect_field (GQuark id, const GValue * val1,
|
||||||
* @struct1: a #GstStructure
|
* @struct1: a #GstStructure
|
||||||
* @struct2: a #GstStructure
|
* @struct2: a #GstStructure
|
||||||
*
|
*
|
||||||
* Tries interesecting @struct1 and @struct2 and reports whether the result
|
* Tries intersecting @struct1 and @struct2 and reports whether the result
|
||||||
* would not be empty.
|
* would not be empty.
|
||||||
*
|
*
|
||||||
* Returns: %TRUE if intersection would not be empty
|
* Returns: %TRUE if intersection would not be empty
|
||||||
|
|
|
@ -485,7 +485,7 @@ _gst_util_uint64_scale (guint64 val, guint64 num, guint64 denom,
|
||||||
if (G_UNLIKELY (num == denom))
|
if (G_UNLIKELY (num == denom))
|
||||||
return val;
|
return val;
|
||||||
|
|
||||||
/* on 64bits we always use a full 128bits multipy/division */
|
/* on 64bits we always use a full 128bits multiply/division */
|
||||||
#if !defined (__x86_64__) && !defined (HAVE_UINT128_T)
|
#if !defined (__x86_64__) && !defined (HAVE_UINT128_T)
|
||||||
/* denom is low --> try to use 96 bit muldiv */
|
/* denom is low --> try to use 96 bit muldiv */
|
||||||
if (G_LIKELY (denom <= G_MAXUINT32)) {
|
if (G_LIKELY (denom <= G_MAXUINT32)) {
|
||||||
|
@ -829,7 +829,7 @@ gst_print_element_args (GString * buf, gint indent, GstElement * element)
|
||||||
* @element: (transfer none): a #GstElement to create pads for
|
* @element: (transfer none): a #GstElement to create pads for
|
||||||
*
|
*
|
||||||
* Creates a pad for each pad template that is always available.
|
* Creates a pad for each pad template that is always available.
|
||||||
* This function is only useful during object intialization of
|
* This function is only useful during object initialization of
|
||||||
* subclasses of #GstElement.
|
* subclasses of #GstElement.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
@ -2045,7 +2045,7 @@ gst_element_link_pads_filtered (GstElement * src, const gchar * srcpadname,
|
||||||
* Links @src to @dest. The link must be from source to
|
* Links @src to @dest. The link must be from source to
|
||||||
* destination; the other direction will not be tried. The function looks for
|
* destination; the other direction will not be tried. The function looks for
|
||||||
* existing pads that aren't linked yet. It will request new pads if necessary.
|
* existing pads that aren't linked yet. It will request new pads if necessary.
|
||||||
* Such pads need to be released manualy when unlinking.
|
* Such pads need to be released manually when unlinking.
|
||||||
* If multiple links are possible, only one is established.
|
* If multiple links are possible, only one is established.
|
||||||
*
|
*
|
||||||
* Make sure you have added your elements to a bin or pipeline with
|
* Make sure you have added your elements to a bin or pipeline with
|
||||||
|
@ -2166,7 +2166,7 @@ gst_element_unlink_pads (GstElement * src, const gchar * srcpadname,
|
||||||
goto free_src;
|
goto free_src;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we're satisified they can be unlinked, let's do it */
|
/* we're satisfied they can be unlinked, let's do it */
|
||||||
gst_pad_unlink (srcpad, destpad);
|
gst_pad_unlink (srcpad, destpad);
|
||||||
|
|
||||||
if (destrequest)
|
if (destrequest)
|
||||||
|
@ -2956,7 +2956,7 @@ setcaps_fold_func (GstPad * pad, GValue * ret, SetCapsFoldData * data)
|
||||||
* same element as @pad. If gst_pad_set_caps() fails on any pad,
|
* same element as @pad. If gst_pad_set_caps() fails on any pad,
|
||||||
* the proxy setcaps fails. May be used only during negotiation.
|
* the proxy setcaps fails. May be used only during negotiation.
|
||||||
*
|
*
|
||||||
* Returns: TRUE if sucessful
|
* Returns: TRUE if successful
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_pad_proxy_setcaps (GstPad * pad, GstCaps * caps)
|
gst_pad_proxy_setcaps (GstPad * pad, GstCaps * caps)
|
||||||
|
@ -3854,7 +3854,7 @@ gst_parse_bin_from_description_full (const gchar * bin_description,
|
||||||
* @base_init: Location of the base initialization function (optional).
|
* @base_init: Location of the base initialization function (optional).
|
||||||
* @base_finalize: Location of the base finalization function (optional).
|
* @base_finalize: Location of the base finalization function (optional).
|
||||||
* @class_init: Location of the class initialization function for class types
|
* @class_init: Location of the class initialization function for class types
|
||||||
* Location of the default vtable inititalization function for interface
|
* Location of the default vtable initialization function for interface
|
||||||
* types. (optional)
|
* types. (optional)
|
||||||
* @class_finalize: Location of the class finalization function for class types.
|
* @class_finalize: Location of the class finalization function for class types.
|
||||||
* Location of the default vtable finalization function for interface types.
|
* Location of the default vtable finalization function for interface types.
|
||||||
|
@ -3918,7 +3918,7 @@ gst_type_register_static_full (GType parent_type,
|
||||||
/**
|
/**
|
||||||
* gst_util_get_timestamp:
|
* gst_util_get_timestamp:
|
||||||
*
|
*
|
||||||
* Get a timestamp as GstClockTime to be used for interval meassurements.
|
* Get a timestamp as GstClockTime to be used for interval measurements.
|
||||||
* The timestamp should not be interpreted in any other way.
|
* The timestamp should not be interpreted in any other way.
|
||||||
*
|
*
|
||||||
* Returns: the timestamp
|
* Returns: the timestamp
|
||||||
|
|
|
@ -505,7 +505,7 @@ GST_BOILERPLATE_FULL (type, type_as_function, parent_type, \
|
||||||
_GST_PUT (data, 0, 8, 0, num); \
|
_GST_PUT (data, 0, 8, 0, num); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/* Float endianess conversion macros */
|
/* Float endianness conversion macros */
|
||||||
|
|
||||||
/* FIXME: Remove this once we depend on a GLib version with this */
|
/* FIXME: Remove this once we depend on a GLib version with this */
|
||||||
#ifndef GFLOAT_FROM_LE
|
#ifndef GFLOAT_FROM_LE
|
||||||
|
|
|
@ -2295,7 +2295,7 @@ gst_string_unwrap (const gchar * s)
|
||||||
|
|
||||||
read += 3;
|
read += 3;
|
||||||
} else {
|
} else {
|
||||||
/* if we run into a \0 here, we definately won't get a quote later */
|
/* if we run into a \0 here, we definitely won't get a quote later */
|
||||||
if (*read == 0)
|
if (*read == 0)
|
||||||
goto beach;
|
goto beach;
|
||||||
|
|
||||||
|
@ -3542,7 +3542,7 @@ gst_value_union (GValue * dest, const GValue * value1, const GValue * value2)
|
||||||
* gst_value_register_union_func:
|
* gst_value_register_union_func:
|
||||||
* @type1: a type to union
|
* @type1: a type to union
|
||||||
* @type2: another type to union
|
* @type2: another type to union
|
||||||
* @func: a function that implments creating a union between the two types
|
* @func: a function that implements creating a union between the two types
|
||||||
*
|
*
|
||||||
* Registers a union function that can create a union between #GValue items
|
* Registers a union function that can create a union between #GValue items
|
||||||
* of the type @type1 and @type2.
|
* of the type @type1 and @type2.
|
||||||
|
@ -4374,7 +4374,7 @@ gst_value_compare_fraction (const GValue * value1, const GValue * value2)
|
||||||
* @value: a GValue initialized to GST_TYPE_DATE
|
* @value: a GValue initialized to GST_TYPE_DATE
|
||||||
* @date: the date to set the value to
|
* @date: the date to set the value to
|
||||||
*
|
*
|
||||||
* Sets the contents of @value to coorespond to @date. The actual
|
* Sets the contents of @value to correspond to @date. The actual
|
||||||
* #GDate structure is copied before it is used.
|
* #GDate structure is copied before it is used.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
|
|
@ -739,7 +739,7 @@ gst_base_sink_finalize (GObject * object)
|
||||||
* @sync: the new sync value.
|
* @sync: the new sync value.
|
||||||
*
|
*
|
||||||
* Configures @sink to synchronize on the clock or not. When
|
* Configures @sink to synchronize on the clock or not. When
|
||||||
* @sync is FALSE, incomming samples will be played as fast as
|
* @sync is FALSE, incoming samples will be played as fast as
|
||||||
* possible. If @sync is TRUE, the timestamps of the incomming
|
* possible. If @sync is TRUE, the timestamps of the incomming
|
||||||
* buffers will be used to schedule the exact render time of its
|
* buffers will be used to schedule the exact render time of its
|
||||||
* contents.
|
* contents.
|
||||||
|
@ -876,8 +876,8 @@ gst_base_sink_is_qos_enabled (GstBaseSink * sink)
|
||||||
* @enabled: the new async value.
|
* @enabled: the new async value.
|
||||||
*
|
*
|
||||||
* Configures @sink to perform all state changes asynchronusly. When async is
|
* Configures @sink to perform all state changes asynchronusly. When async is
|
||||||
* disabled, the sink will immediatly go to PAUSED instead of waiting for a
|
* disabled, the sink will immediately go to PAUSED instead of waiting for a
|
||||||
* preroll buffer. This feature is usefull if the sink does not synchronize
|
* preroll buffer. This feature is useful if the sink does not synchronize
|
||||||
* against the clock or when it is dealing with sparse streams.
|
* against the clock or when it is dealing with sparse streams.
|
||||||
*
|
*
|
||||||
* Since: 0.10.15
|
* Since: 0.10.15
|
||||||
|
@ -2444,10 +2444,10 @@ flushing:
|
||||||
* if needed and then block if we still are not PLAYING.
|
* if needed and then block if we still are not PLAYING.
|
||||||
*
|
*
|
||||||
* We start waiting on the clock in PLAYING. If we got interrupted, we
|
* We start waiting on the clock in PLAYING. If we got interrupted, we
|
||||||
* immediatly try to re-preroll.
|
* immediately try to re-preroll.
|
||||||
*
|
*
|
||||||
* Some objects do not need synchronisation (most events) and so this function
|
* Some objects do not need synchronisation (most events) and so this function
|
||||||
* immediatly returns GST_FLOW_OK.
|
* immediately returns GST_FLOW_OK.
|
||||||
*
|
*
|
||||||
* for objects that arrive later than max-lateness to be synchronized to the
|
* for objects that arrive later than max-lateness to be synchronized to the
|
||||||
* clock have the @late boolean set to TRUE.
|
* clock have the @late boolean set to TRUE.
|
||||||
|
@ -2567,7 +2567,7 @@ again:
|
||||||
GST_TIME_FORMAT ", adjusted %" GST_TIME_FORMAT,
|
GST_TIME_FORMAT ", adjusted %" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (rstart), GST_TIME_ARGS (stime));
|
GST_TIME_ARGS (rstart), GST_TIME_ARGS (stime));
|
||||||
|
|
||||||
/* This function will return immediatly if start == -1, no clock
|
/* This function will return immediately if start == -1, no clock
|
||||||
* or sync is disabled with GST_CLOCK_BADTIME. */
|
* or sync is disabled with GST_CLOCK_BADTIME. */
|
||||||
status = gst_base_sink_wait_clock (basesink, stime, &jitter);
|
status = gst_base_sink_wait_clock (basesink, stime, &jitter);
|
||||||
|
|
||||||
|
@ -2974,7 +2974,7 @@ again:
|
||||||
step_end = FALSE;
|
step_end = FALSE;
|
||||||
|
|
||||||
/* synchronize this object, non syncable objects return OK
|
/* synchronize this object, non syncable objects return OK
|
||||||
* immediatly. */
|
* immediately. */
|
||||||
ret =
|
ret =
|
||||||
gst_base_sink_do_sync (basesink, pad, sync_obj, &late, &step_end,
|
gst_base_sink_do_sync (basesink, pad, sync_obj, &late, &step_end,
|
||||||
obj_type);
|
obj_type);
|
||||||
|
@ -3264,7 +3264,7 @@ gst_base_sink_queue_object_unlocked (GstBaseSink * basesink, GstPad * pad,
|
||||||
if (G_UNLIKELY (ret != GST_FLOW_OK))
|
if (G_UNLIKELY (ret != GST_FLOW_OK))
|
||||||
goto preroll_failed;
|
goto preroll_failed;
|
||||||
}
|
}
|
||||||
/* need to recheck if we need preroll, commmit state during preroll
|
/* need to recheck if we need preroll, commit state during preroll
|
||||||
* could have made us not need more preroll. */
|
* could have made us not need more preroll. */
|
||||||
if (G_UNLIKELY (basesink->need_preroll)) {
|
if (G_UNLIKELY (basesink->need_preroll)) {
|
||||||
/* see if we can render now, if we can't add the object to the preroll
|
/* see if we can render now, if we can't add the object to the preroll
|
||||||
|
@ -3910,7 +3910,7 @@ gst_base_sink_perform_seek (GstBaseSink * sink, GstPad * pad, GstEvent * event)
|
||||||
|
|
||||||
/* If we configured the seeksegment above, don't overwrite it now. Otherwise
|
/* If we configured the seeksegment above, don't overwrite it now. Otherwise
|
||||||
* copy the current segment info into the temp segment that we can actually
|
* copy the current segment info into the temp segment that we can actually
|
||||||
* attempt the seek with. We only update the real segment if the seek suceeds. */
|
* attempt the seek with. We only update the real segment if the seek succeeds. */
|
||||||
if (!seekseg_configured) {
|
if (!seekseg_configured) {
|
||||||
memcpy (&seeksegment, &sink->segment, sizeof (GstSegment));
|
memcpy (&seeksegment, &sink->segment, sizeof (GstSegment));
|
||||||
|
|
||||||
|
@ -3966,7 +3966,7 @@ gst_base_sink_perform_seek (GstBaseSink * sink, GstPad * pad, GstEvent * event)
|
||||||
res = FALSE;
|
res = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if successfull seek, we update our real segment and push
|
/* if successful seek, we update our real segment and push
|
||||||
* out the new segment. */
|
* out the new segment. */
|
||||||
if (res) {
|
if (res) {
|
||||||
memcpy (&sink->segment, &seeksegment, sizeof (GstSegment));
|
memcpy (&sink->segment, &seeksegment, sizeof (GstSegment));
|
||||||
|
@ -4346,7 +4346,7 @@ gst_base_sink_negotiate_pull (GstBaseSink * basesink)
|
||||||
GST_DEBUG_OBJECT (basesink, "allowed caps: %" GST_PTR_FORMAT, caps);
|
GST_DEBUG_OBJECT (basesink, "allowed caps: %" GST_PTR_FORMAT, caps);
|
||||||
|
|
||||||
caps = gst_caps_make_writable (caps);
|
caps = gst_caps_make_writable (caps);
|
||||||
/* get the first (prefered) format */
|
/* get the first (preferred) format */
|
||||||
gst_caps_truncate (caps);
|
gst_caps_truncate (caps);
|
||||||
/* try to fixate */
|
/* try to fixate */
|
||||||
gst_pad_fixate_caps (GST_BASE_SINK_PAD (basesink), caps);
|
gst_pad_fixate_caps (GST_BASE_SINK_PAD (basesink), caps);
|
||||||
|
@ -5111,7 +5111,7 @@ gst_base_sink_change_state (GstElement * element, GstStateChange transition)
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
GST_PAD_PREROLL_LOCK (basesink->sinkpad);
|
GST_PAD_PREROLL_LOCK (basesink->sinkpad);
|
||||||
/* start by reseting our position state with the object lock so that the
|
/* start by resetting our position state with the object lock so that the
|
||||||
* position query gets the right idea. We do this before we post the
|
* position query gets the right idea. We do this before we post the
|
||||||
* messages so that the message handlers pick this up. */
|
* messages so that the message handlers pick this up. */
|
||||||
GST_OBJECT_LOCK (basesink);
|
GST_OBJECT_LOCK (basesink);
|
||||||
|
|
|
@ -1066,7 +1066,7 @@ gst_base_src_default_query (GstBaseSrc * src, GstQuery * query)
|
||||||
GstClockTime min, max;
|
GstClockTime min, max;
|
||||||
gboolean live;
|
gboolean live;
|
||||||
|
|
||||||
/* Subclasses should override and implement something usefull */
|
/* Subclasses should override and implement something useful */
|
||||||
res = gst_base_src_query_latency (src, &live, &min, &max);
|
res = gst_base_src_query_latency (src, &live, &min, &max);
|
||||||
|
|
||||||
GST_LOG_OBJECT (src, "report latency: live %d, min %" GST_TIME_FORMAT
|
GST_LOG_OBJECT (src, "report latency: live %d, min %" GST_TIME_FORMAT
|
||||||
|
@ -1398,7 +1398,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock)
|
||||||
|
|
||||||
/* If we configured the seeksegment above, don't overwrite it now. Otherwise
|
/* If we configured the seeksegment above, don't overwrite it now. Otherwise
|
||||||
* copy the current segment info into the temp segment that we can actually
|
* copy the current segment info into the temp segment that we can actually
|
||||||
* attempt the seek with. We only update the real segment if the seek suceeds. */
|
* attempt the seek with. We only update the real segment if the seek succeeds. */
|
||||||
if (!seekseg_configured) {
|
if (!seekseg_configured) {
|
||||||
memcpy (&seeksegment, &src->segment, sizeof (GstSegment));
|
memcpy (&seeksegment, &src->segment, sizeof (GstSegment));
|
||||||
|
|
||||||
|
@ -1587,7 +1587,7 @@ gst_base_src_send_event (GstElement * element, GstEvent * event)
|
||||||
* first and do EOS instead of entering it.
|
* first and do EOS instead of entering it.
|
||||||
* - If we are in the _create function or we did not manage to set the
|
* - If we are in the _create function or we did not manage to set the
|
||||||
* flag fast enough and we are about to enter the _create function,
|
* flag fast enough and we are about to enter the _create function,
|
||||||
* we unlock it so that we exit with WRONG_STATE immediatly. We then
|
* we unlock it so that we exit with WRONG_STATE immediately. We then
|
||||||
* check the EOS flag and do the EOS logic.
|
* check the EOS flag and do the EOS logic.
|
||||||
*/
|
*/
|
||||||
g_atomic_int_set (&src->priv->pending_eos, TRUE);
|
g_atomic_int_set (&src->priv->pending_eos, TRUE);
|
||||||
|
@ -3152,7 +3152,7 @@ gst_base_src_change_state (GstElement * element, GstStateChange transition)
|
||||||
* already did this */
|
* already did this */
|
||||||
|
|
||||||
/* FIXME, deprecate this behaviour, it is very dangerous.
|
/* FIXME, deprecate this behaviour, it is very dangerous.
|
||||||
* the prefered way of sending EOS downstream is by sending
|
* the preferred way of sending EOS downstream is by sending
|
||||||
* the EOS event to the element */
|
* the EOS event to the element */
|
||||||
if (!basesrc->priv->last_sent_eos) {
|
if (!basesrc->priv->last_sent_eos) {
|
||||||
GST_DEBUG_OBJECT (basesrc, "Sending EOS event");
|
GST_DEBUG_OBJECT (basesrc, "Sending EOS event");
|
||||||
|
|
|
@ -1546,7 +1546,7 @@ gst_base_transform_prepare_output_buffer (GstBaseTransform * trans,
|
||||||
* it needs to revisit the decision about whether to proxy or not: */
|
* it needs to revisit the decision about whether to proxy or not: */
|
||||||
gst_caps_replace (&priv->sink_alloc, NULL);
|
gst_caps_replace (&priv->sink_alloc, NULL);
|
||||||
/* if we got a buffer of the wrong size, discard it now and make sure we
|
/* if we got a buffer of the wrong size, discard it now and make sure we
|
||||||
* allocate a propertly sized buffer later. */
|
* allocate a properly sized buffer later. */
|
||||||
if (newsize != expsize) {
|
if (newsize != expsize) {
|
||||||
if (in_buf != *out_buf)
|
if (in_buf != *out_buf)
|
||||||
gst_buffer_unref (*out_buf);
|
gst_buffer_unref (*out_buf);
|
||||||
|
|
|
@ -150,7 +150,7 @@ helper_find_peek (gpointer data, gint64 offset, guint size)
|
||||||
buf_size = GST_BUFFER_SIZE (buffer);
|
buf_size = GST_BUFFER_SIZE (buffer);
|
||||||
|
|
||||||
if ((buf_offset != -1 && buf_offset != offset) || buf_size < size) {
|
if ((buf_offset != -1 && buf_offset != offset) || buf_size < size) {
|
||||||
GST_DEBUG ("droping short buffer: %" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT
|
GST_DEBUG ("dropping short buffer: %" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT
|
||||||
" instead of %" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT,
|
" instead of %" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT,
|
||||||
buf_offset, buf_offset + buf_size - 1, offset, offset + size - 1);
|
buf_offset, buf_offset + buf_size - 1, offset, offset + size - 1);
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
|
@ -191,7 +191,7 @@ helper_find_suggest (gpointer data, GstTypeFindProbability probability,
|
||||||
GstTypeFindHelper *helper = (GstTypeFindHelper *) data;
|
GstTypeFindHelper *helper = (GstTypeFindHelper *) data;
|
||||||
|
|
||||||
GST_LOG_OBJECT (helper->obj,
|
GST_LOG_OBJECT (helper->obj,
|
||||||
"'%s' called called suggest (%u, %" GST_PTR_FORMAT ")",
|
"'%s' called suggest (%u, %" GST_PTR_FORMAT ")",
|
||||||
GST_PLUGIN_FEATURE_NAME (helper->factory), probability, caps);
|
GST_PLUGIN_FEATURE_NAME (helper->factory), probability, caps);
|
||||||
|
|
||||||
if (probability > helper->best_probability) {
|
if (probability > helper->best_probability) {
|
||||||
|
@ -208,7 +208,7 @@ helper_find_get_length (gpointer data)
|
||||||
{
|
{
|
||||||
GstTypeFindHelper *helper = (GstTypeFindHelper *) data;
|
GstTypeFindHelper *helper = (GstTypeFindHelper *) data;
|
||||||
|
|
||||||
GST_LOG_OBJECT (helper->obj, "'%s' called called get_length, returning %"
|
GST_LOG_OBJECT (helper->obj, "'%s' called get_length, returning %"
|
||||||
G_GUINT64_FORMAT, GST_PLUGIN_FEATURE_NAME (helper->factory),
|
G_GUINT64_FORMAT, GST_PLUGIN_FEATURE_NAME (helper->factory),
|
||||||
helper->size);
|
helper->size);
|
||||||
|
|
||||||
|
@ -465,7 +465,7 @@ buf_helper_find_suggest (gpointer data, GstTypeFindProbability probability,
|
||||||
GstTypeFindBufHelper *helper = (GstTypeFindBufHelper *) data;
|
GstTypeFindBufHelper *helper = (GstTypeFindBufHelper *) data;
|
||||||
|
|
||||||
GST_LOG_OBJECT (helper->obj,
|
GST_LOG_OBJECT (helper->obj,
|
||||||
"'%s' called called suggest (%u, %" GST_PTR_FORMAT ")",
|
"'%s' called suggest (%u, %" GST_PTR_FORMAT ")",
|
||||||
GST_PLUGIN_FEATURE_NAME (helper->factory), probability, caps);
|
GST_PLUGIN_FEATURE_NAME (helper->factory), probability, caps);
|
||||||
|
|
||||||
/* Note: not >= as we call typefinders in order of rank, highest first */
|
/* Note: not >= as we call typefinders in order of rank, highest first */
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue