mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 08:46:40 +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>
|
||||
|
||||
* gst/base/gstbasesink.c: (gst_base_sink_preroll_queue_empty),
|
||||
|
|
|
@ -3,7 +3,7 @@ Ghostpads
|
|||
|
||||
Status:
|
||||
|
||||
DRAFT.
|
||||
DRAFT. DEPRECATED by better current implementation.
|
||||
|
||||
|
||||
Purpose:
|
||||
|
|
|
@ -3,7 +3,7 @@ DRAFT push-pull scheduling
|
|||
|
||||
Status
|
||||
|
||||
DRAFT
|
||||
DRAFT. DEPRECATED by better current implementation.
|
||||
|
||||
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
|
||||
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
|
||||
PLAYING again.
|
||||
|
||||
|
@ -14,17 +11,11 @@
|
|||
done by making the event contain a GstStructure with input/output values, similar
|
||||
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.
|
||||
|
||||
- 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
|
||||
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
|
||||
|
||||
|
|
|
@ -1,69 +1,93 @@
|
|||
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
|
||||
DRAFT Query
|
||||
-----------
|
||||
|
||||
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.
|
||||
This query can be used to retrieve how much data is queued in a
|
||||
queue or in a hardware device such as an audio sink.
|
||||
- get length of stream
|
||||
- get position in stream
|
||||
- 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
|
||||
time a buffer is captured or played.
|
||||
The current implementation of query requires pads to implement the
|
||||
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
|
||||
configured. When a seek was performed to play a stream from A to B,
|
||||
this query will return A.
|
||||
Most of these functions are not very extensible in particular,
|
||||
the queryfunction can only return one value.
|
||||
|
||||
GST_QUERY_SEGMENT_END:
|
||||
|
||||
Query the position in the stream where the last end position was
|
||||
configured. When a seek was performed to play a stream from A to B,
|
||||
this query will return B.
|
||||
Requirements
|
||||
|
||||
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);
|
||||
|
||||
/* hmm */
|
||||
#define GST_QUERY_POSITION_GET_FORMAT(q) \
|
||||
(gst_structure_get_int ((q)->structure, "format"))
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_QUERY_H__ */
|
||||
|
|
Loading…
Reference in a new issue