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:
Wim Taymans 2005-06-30 12:18:19 +00:00
parent 6a6a717235
commit 4dd878f93b
8 changed files with 134 additions and 161 deletions

42
CHANGES-0.9 Normal file
View 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.

View file

@ -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),

View file

@ -3,7 +3,7 @@ Ghostpads
Status: Status:
DRAFT. DRAFT. DEPRECATED by better current implementation.
Purpose: Purpose:

View file

@ -3,7 +3,7 @@ DRAFT push-pull scheduling
Status Status
DRAFT DRAFT. DEPRECATED by better current implementation.
Observations: Observations:

View file

@ -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:

View file

@ -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

View file

@ -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:

View file

@ -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__ */