From 4dd878f93bd372ecc621c5ec835a9180f17af5ee Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 30 Jun 2005 12:18:19 +0000 Subject: [PATCH] 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 --- CHANGES-0.9 | 42 +++++++++++ ChangeLog | 13 ++++ docs/design/draft-ghostpads.txt | 2 +- docs/design/draft-push-pull.txt | 2 +- docs/design/draft-query.txt | 93 ----------------------- docs/design/part-TODO.txt | 9 --- docs/design/part-query.txt | 130 +++++++++++++++++++------------- gst/gstquery.h | 4 - 8 files changed, 134 insertions(+), 161 deletions(-) create mode 100644 CHANGES-0.9 delete mode 100644 docs/design/draft-query.txt diff --git a/CHANGES-0.9 b/CHANGES-0.9 new file mode 100644 index 0000000000..67acb54e07 --- /dev/null +++ b/CHANGES-0.9 @@ -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. + diff --git a/ChangeLog b/ChangeLog index 6e7caa8948..1496111dbf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2005-06-30 Wim Taymans + + * 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 * gst/base/gstbasesink.c: (gst_base_sink_preroll_queue_empty), diff --git a/docs/design/draft-ghostpads.txt b/docs/design/draft-ghostpads.txt index 3794392c9c..0bde945fea 100644 --- a/docs/design/draft-ghostpads.txt +++ b/docs/design/draft-ghostpads.txt @@ -3,7 +3,7 @@ Ghostpads Status: - DRAFT. + DRAFT. DEPRECATED by better current implementation. Purpose: diff --git a/docs/design/draft-push-pull.txt b/docs/design/draft-push-pull.txt index 739373c913..1fbd2679b3 100644 --- a/docs/design/draft-push-pull.txt +++ b/docs/design/draft-push-pull.txt @@ -3,7 +3,7 @@ DRAFT push-pull scheduling Status - DRAFT + DRAFT. DEPRECATED by better current implementation. Observations: diff --git a/docs/design/draft-query.txt b/docs/design/draft-query.txt deleted file mode 100644 index 2e6b445de7..0000000000 --- a/docs/design/draft-query.txt +++ /dev/null @@ -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: - diff --git a/docs/design/part-TODO.txt b/docs/design/part-TODO.txt index 3e8be671a0..af73ca13b0 100644 --- a/docs/design/part-TODO.txt +++ b/docs/design/part-TODO.txt @@ -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 diff --git a/docs/design/part-query.txt b/docs/design/part-query.txt index c957b91d91..2e6b445de7 100644 --- a/docs/design/part-query.txt +++ b/docs/design/part-query.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: diff --git a/gst/gstquery.h b/gst/gstquery.h index 8fe3d32f3a..8e5ef410d3 100644 --- a/gst/gstquery.h +++ b/gst/gstquery.h @@ -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__ */