mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
Added CHANGES-0.9 doc, updated status of other docs.
Original commit message from CVS: * CHANGES-0.9: * docs/design/draft-ghostpads.txt: * docs/design/draft-push-pull.txt: * docs/design/draft-query.txt: * docs/design/part-TODO.txt: * docs/design/part-query.txt: Added CHANGES-0.9 doc, updated status of other docs. * gst/gstquery.h: Remove "hmm" macro
This commit is contained in:
parent
6a6a717235
commit
4dd878f93b
8 changed files with 134 additions and 161 deletions
42
CHANGES-0.9
Normal file
42
CHANGES-0.9
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
Changes in the 0.9 version
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
- Refcounting and API revised for thread safety, see rules in
|
||||||
|
docs/design/part-MT-refcounting.txt
|
||||||
|
|
||||||
|
- Scheduling is now done by the elements, they start/stop
|
||||||
|
processing threads themselves. This removes the need for
|
||||||
|
a separate scheduler.
|
||||||
|
|
||||||
|
- State changes now happen from sink to source. This makes sure
|
||||||
|
that downstream elements are ready to process data when upstream
|
||||||
|
starts producing.
|
||||||
|
|
||||||
|
- EOS/ERROR/... does not change the state of elements anymore. This
|
||||||
|
means that when the application sets the state on an element, it
|
||||||
|
remains in this state.
|
||||||
|
|
||||||
|
- GMainLoop integration. Information on the state of the pipeline
|
||||||
|
is now received in the mainloop.
|
||||||
|
|
||||||
|
- Events move separate from the datastream, this allows for both
|
||||||
|
in and out of sync delivery of events.
|
||||||
|
|
||||||
|
- Generic _pull() replaced by _pull_region() so that random access
|
||||||
|
can be made faster.
|
||||||
|
|
||||||
|
- data passing happens from PAUSED, called the preroll phase. In this
|
||||||
|
state no data is rendered but it is queued in the sinks.
|
||||||
|
|
||||||
|
- negotiation simplified. Caps are now attached to buffers and travel
|
||||||
|
along with the datastream.
|
||||||
|
|
||||||
|
- GstBuffer is now subclassable.
|
||||||
|
|
||||||
|
- Ghostpads now look and feel like real pads.
|
||||||
|
|
||||||
|
- New Seeking/flushing policy.
|
||||||
|
|
||||||
|
- Addition of base classes and helper functions in the core to abstract
|
||||||
|
away the harder parts of plugin development.
|
||||||
|
|
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2005-06-30 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* CHANGES-0.9:
|
||||||
|
* docs/design/draft-ghostpads.txt:
|
||||||
|
* docs/design/draft-push-pull.txt:
|
||||||
|
* docs/design/draft-query.txt:
|
||||||
|
* docs/design/part-TODO.txt:
|
||||||
|
* docs/design/part-query.txt:
|
||||||
|
Added CHANGES-0.9 doc, updated status of other docs.
|
||||||
|
|
||||||
|
* gst/gstquery.h:
|
||||||
|
Remove "hmm" macro
|
||||||
|
|
||||||
2005-06-30 Wim Taymans <wim@fluendo.com>
|
2005-06-30 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* gst/base/gstbasesink.c: (gst_base_sink_preroll_queue_empty),
|
* gst/base/gstbasesink.c: (gst_base_sink_preroll_queue_empty),
|
||||||
|
|
|
@ -3,7 +3,7 @@ Ghostpads
|
||||||
|
|
||||||
Status:
|
Status:
|
||||||
|
|
||||||
DRAFT.
|
DRAFT. DEPRECATED by better current implementation.
|
||||||
|
|
||||||
|
|
||||||
Purpose:
|
Purpose:
|
||||||
|
|
|
@ -3,7 +3,7 @@ DRAFT push-pull scheduling
|
||||||
|
|
||||||
Status
|
Status
|
||||||
|
|
||||||
DRAFT
|
DRAFT. DEPRECATED by better current implementation.
|
||||||
|
|
||||||
Observations:
|
Observations:
|
||||||
|
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
DRAFT Query
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Status
|
|
||||||
|
|
||||||
Implemented, move me to design...
|
|
||||||
|
|
||||||
Purpose
|
|
||||||
|
|
||||||
Queries are used to get information about the stream.
|
|
||||||
A query is started on a specific pad and travels up or downstream.
|
|
||||||
|
|
||||||
Types of queries
|
|
||||||
|
|
||||||
- get length of stream
|
|
||||||
- get position in stream
|
|
||||||
- get seeking capabilities
|
|
||||||
- get latency
|
|
||||||
- convert one value to another
|
|
||||||
- query supported formats
|
|
||||||
- query internal links.
|
|
||||||
|
|
||||||
Current implementation
|
|
||||||
|
|
||||||
The current implementation of query requires pads to implement the
|
|
||||||
following functions:
|
|
||||||
|
|
||||||
gboolean (*GstPadConvertFunction) (GstPad *pad,
|
|
||||||
GstFormat src_format, gint64 src_value,
|
|
||||||
GstFormat *dest_format, gint64 *dest_value);
|
|
||||||
gboolean (*GstPadQueryFunction) (GstPad *pad, GstQueryType type,
|
|
||||||
GstFormat *format, gint64 *value);
|
|
||||||
GList* (*GstPadIntLinkFunction) (GstPad *pad);
|
|
||||||
const GstFormat* (*GstPadFormatsFunction) (GstPad *pad);
|
|
||||||
const GstEventMask* (*GstPadEventMaskFunction) (GstPad *pad);
|
|
||||||
const GstQueryType* (*GstPadQueryTypeFunction) (GstPad *pad);
|
|
||||||
|
|
||||||
Most of these functions are not very extensible in particular,
|
|
||||||
the queryfunction can only return one value.
|
|
||||||
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
|
|
||||||
- multiple return values, grouped together when they make sense.
|
|
||||||
- one pad function to perform the query
|
|
||||||
- extensible queries.
|
|
||||||
|
|
||||||
Proposition
|
|
||||||
|
|
||||||
- define GstQuery extending GstData and containing a GstStructure (see GstMessage)
|
|
||||||
- define standard query types (see proposed types)
|
|
||||||
- define methods to create a parse the results in the GstQuery.
|
|
||||||
- define pad method:
|
|
||||||
|
|
||||||
gboolean (*GstPadQueryFunction) (GstPad *pad, GstQuery *query);
|
|
||||||
|
|
||||||
pad returns result in query structure and TRUE as result or FALSE when
|
|
||||||
query is not supported.
|
|
||||||
|
|
||||||
Proposed types
|
|
||||||
|
|
||||||
- GST_QUERY_SEEKING:
|
|
||||||
|
|
||||||
- get info on how seeking can be done
|
|
||||||
- getrange, with/without offset/size
|
|
||||||
- ranges where seeking is efficient (for caching network sources)
|
|
||||||
- flags describing seeking behaviour (forward, backward, segments,
|
|
||||||
play backwards, ...)
|
|
||||||
|
|
||||||
- GST_QUERY_POSITION:
|
|
||||||
|
|
||||||
- get info on current position of the stream
|
|
||||||
- start position
|
|
||||||
- current position
|
|
||||||
- end position
|
|
||||||
- length
|
|
||||||
|
|
||||||
- GST_QUERY_LATENCY:
|
|
||||||
|
|
||||||
- get amount of buffering
|
|
||||||
|
|
||||||
- GST_QUERY_CONVERT:
|
|
||||||
|
|
||||||
- convert format/value to another format/value pair.
|
|
||||||
|
|
||||||
- GST_QUERY_FORMATS:
|
|
||||||
|
|
||||||
- return list of supported formats.
|
|
||||||
|
|
||||||
Also????
|
|
||||||
|
|
||||||
- GST_QUERY_CAPS:
|
|
||||||
|
|
|
@ -4,9 +4,6 @@
|
||||||
to a duplicate name after adding it is therefore allowed and voids internal
|
to a duplicate name after adding it is therefore allowed and voids internal
|
||||||
consistency.
|
consistency.
|
||||||
|
|
||||||
- check for race in _task_pause()/_stop() since the TASK_LOCK is not held by the
|
|
||||||
calling thread and the STREAM_LOCK not by the task code.
|
|
||||||
|
|
||||||
- only emit EOS in PLAYING. Make sure elements reemit the EOS message when going to
|
- only emit EOS in PLAYING. Make sure elements reemit the EOS message when going to
|
||||||
PLAYING again.
|
PLAYING again.
|
||||||
|
|
||||||
|
@ -14,17 +11,11 @@
|
||||||
done by making the event contain a GstStructure with input/output values, similar
|
done by making the event contain a GstStructure with input/output values, similar
|
||||||
to GstMessage.
|
to GstMessage.
|
||||||
|
|
||||||
- implement state change order on get<->loop-get<->loop elements. This probably
|
|
||||||
requires a backtracking algorithm.
|
|
||||||
|
|
||||||
- implement iterators for traversing elements upstream or dowstream.
|
- implement iterators for traversing elements upstream or dowstream.
|
||||||
|
|
||||||
- unlinking pads in the PAUSED state needs to make sure the stream thread is not
|
- unlinking pads in the PAUSED state needs to make sure the stream thread is not
|
||||||
executing code. Can this be done with a flush to unlock all downstream chain
|
executing code. Can this be done with a flush to unlock all downstream chain
|
||||||
functions?
|
functions?
|
||||||
|
|
||||||
- make the seek event return the time where the seek will happen so that GstPipeline
|
|
||||||
can update the stream time. This is linked with making the events return values.
|
|
||||||
|
|
||||||
- implement clock selection as explained in part-gstpipeline.txt
|
- implement clock selection as explained in part-gstpipeline.txt
|
||||||
|
|
||||||
|
|
|
@ -1,69 +1,93 @@
|
||||||
Query
|
DRAFT Query
|
||||||
-----
|
|
||||||
|
|
||||||
Queries are used to get information about the state of the stream.
|
|
||||||
Various queries exist such as get the total length and the position
|
|
||||||
|
|
||||||
A query can be performed on a pad or on an element. Both the element
|
|
||||||
and the pad query have default behaviour unless a custom query handler
|
|
||||||
is installed.
|
|
||||||
|
|
||||||
The default pad query handler will forward the query to an internally
|
|
||||||
linked pad. This internally linked pad is either obtained by calling
|
|
||||||
the internal_links function of the pad or by using the default
|
|
||||||
function (which selects the pads with oposite directions from the parent
|
|
||||||
element).
|
|
||||||
|
|
||||||
The default element query function will select a random source pad to
|
|
||||||
send the event to.
|
|
||||||
|
|
||||||
The pad query function has the following prototype:
|
|
||||||
|
|
||||||
gboolean (*GstPadQueryFunction) (GstPad *pad, GstQueryType type,
|
|
||||||
GstFormat *format, gint64 *value);
|
|
||||||
|
|
||||||
The query function can return a single value in one of the defined
|
|
||||||
formats.
|
|
||||||
|
|
||||||
The function returns TRUE if the query could be performed. The returned
|
|
||||||
values are undefined when this function returns FALSE.
|
|
||||||
|
|
||||||
|
|
||||||
Query types
|
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
GST_QUERY_TOTAL:
|
Status
|
||||||
|
|
||||||
get the total length of the stream in the given format.
|
Implemented, move me to design...
|
||||||
|
|
||||||
GST_QUERY_POSITION:
|
Purpose
|
||||||
|
|
||||||
get the current position in the stream in the given format.
|
Queries are used to get information about the stream.
|
||||||
|
A query is started on a specific pad and travels up or downstream.
|
||||||
|
|
||||||
GST_QUERY_LATENCY:
|
Types of queries
|
||||||
|
|
||||||
get the latency introduced in the stream in the given format.
|
- get length of stream
|
||||||
This query can be used to retrieve how much data is queued in a
|
- get position in stream
|
||||||
queue or in a hardware device such as an audio sink.
|
- get seeking capabilities
|
||||||
|
- get latency
|
||||||
|
- convert one value to another
|
||||||
|
- query supported formats
|
||||||
|
- query internal links.
|
||||||
|
|
||||||
GST_QUERY_JITTER:
|
Current implementation
|
||||||
|
|
||||||
Get the jitter, this is the difference between the expected and real
|
The current implementation of query requires pads to implement the
|
||||||
time a buffer is captured or played.
|
following functions:
|
||||||
|
|
||||||
GST_QUERY_START:
|
gboolean (*GstPadConvertFunction) (GstPad *pad,
|
||||||
|
GstFormat src_format, gint64 src_value,
|
||||||
|
GstFormat *dest_format, gint64 *dest_value);
|
||||||
|
gboolean (*GstPadQueryFunction) (GstPad *pad, GstQueryType type,
|
||||||
|
GstFormat *format, gint64 *value);
|
||||||
|
GList* (*GstPadIntLinkFunction) (GstPad *pad);
|
||||||
|
const GstFormat* (*GstPadFormatsFunction) (GstPad *pad);
|
||||||
|
const GstEventMask* (*GstPadEventMaskFunction) (GstPad *pad);
|
||||||
|
const GstQueryType* (*GstPadQueryTypeFunction) (GstPad *pad);
|
||||||
|
|
||||||
Query the position in the stream where the last start position was
|
Most of these functions are not very extensible in particular,
|
||||||
configured. When a seek was performed to play a stream from A to B,
|
the queryfunction can only return one value.
|
||||||
this query will return A.
|
|
||||||
|
|
||||||
GST_QUERY_SEGMENT_END:
|
|
||||||
|
|
||||||
Query the position in the stream where the last end position was
|
Requirements
|
||||||
configured. When a seek was performed to play a stream from A to B,
|
|
||||||
this query will return B.
|
|
||||||
|
|
||||||
GST_QUERY_RATE:
|
- multiple return values, grouped together when they make sense.
|
||||||
|
- one pad function to perform the query
|
||||||
|
- extensible queries.
|
||||||
|
|
||||||
Query the current playback rate of the stream.
|
Proposition
|
||||||
|
|
||||||
|
- define GstQuery extending GstData and containing a GstStructure (see GstMessage)
|
||||||
|
- define standard query types (see proposed types)
|
||||||
|
- define methods to create a parse the results in the GstQuery.
|
||||||
|
- define pad method:
|
||||||
|
|
||||||
|
gboolean (*GstPadQueryFunction) (GstPad *pad, GstQuery *query);
|
||||||
|
|
||||||
|
pad returns result in query structure and TRUE as result or FALSE when
|
||||||
|
query is not supported.
|
||||||
|
|
||||||
|
Proposed types
|
||||||
|
|
||||||
|
- GST_QUERY_SEEKING:
|
||||||
|
|
||||||
|
- get info on how seeking can be done
|
||||||
|
- getrange, with/without offset/size
|
||||||
|
- ranges where seeking is efficient (for caching network sources)
|
||||||
|
- flags describing seeking behaviour (forward, backward, segments,
|
||||||
|
play backwards, ...)
|
||||||
|
|
||||||
|
- GST_QUERY_POSITION:
|
||||||
|
|
||||||
|
- get info on current position of the stream
|
||||||
|
- start position
|
||||||
|
- current position
|
||||||
|
- end position
|
||||||
|
- length
|
||||||
|
|
||||||
|
- GST_QUERY_LATENCY:
|
||||||
|
|
||||||
|
- get amount of buffering
|
||||||
|
|
||||||
|
- GST_QUERY_CONVERT:
|
||||||
|
|
||||||
|
- convert format/value to another format/value pair.
|
||||||
|
|
||||||
|
- GST_QUERY_FORMATS:
|
||||||
|
|
||||||
|
- return list of supported formats.
|
||||||
|
|
||||||
|
Also????
|
||||||
|
|
||||||
|
- GST_QUERY_CAPS:
|
||||||
|
|
||||||
|
|
|
@ -156,10 +156,6 @@ GstQuery * gst_query_new_application (GstQueryType type,
|
||||||
|
|
||||||
GstStructure * gst_query_get_structure (GstQuery *query);
|
GstStructure * gst_query_get_structure (GstQuery *query);
|
||||||
|
|
||||||
/* hmm */
|
|
||||||
#define GST_QUERY_POSITION_GET_FORMAT(q) \
|
|
||||||
(gst_structure_get_int ((q)->structure, "format"))
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GST_QUERY_H__ */
|
#endif /* __GST_QUERY_H__ */
|
||||||
|
|
Loading…
Reference in a new issue