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>
* gst/base/gstbasesink.c: (gst_base_sink_preroll_queue_empty),

View file

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

View file

@ -3,7 +3,7 @@ DRAFT push-pull scheduling
Status
DRAFT
DRAFT. DEPRECATED by better current implementation.
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
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

View file

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

View file

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