--- /dev/null
+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.
+
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),
(gst_base_sink_preroll_queue_flush), (gst_base_sink_handle_object),
(gst_base_sink_change_state):
Status:
- DRAFT.
+ DRAFT. DEPRECATED by better current implementation.
Purpose:
Status
- DRAFT
+ DRAFT. DEPRECATED by better current implementation.
Observations:
+++ /dev/null
-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:
-
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.
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
-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
+Status
-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.
+ Implemented, move me to design...
-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).
+Purpose
-The default element query function will select a random source pad to
-send the event to.
+ Queries are used to get information about the stream.
+ A query is started on a specific pad and travels up or downstream.
-The pad query function has the following prototype:
+Types of queries
- gboolean (*GstPadQueryFunction) (GstPad *pad, GstQueryType type,
- GstFormat *format, gint64 *value);
+ - get length of stream
+ - get position in stream
+ - get seeking capabilities
+ - get latency
+ - convert one value to another
+ - query supported formats
+ - query internal links.
-The query function can return a single value in one of the defined
-formats.
+Current implementation
-The function returns TRUE if the query could be performed. The returned
-values are undefined when this function returns FALSE.
+ 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);
-Query types
------------
+ 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.
- GST_QUERY_TOTAL:
+Proposition
- get the total length of the stream in the given format.
+ - 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:
- GST_QUERY_POSITION:
+ gboolean (*GstPadQueryFunction) (GstPad *pad, GstQuery *query);
- get the current position in the stream in the given format.
+ pad returns result in query structure and TRUE as result or FALSE when
+ query is not supported.
- GST_QUERY_LATENCY:
+Proposed types
- 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.
+ - 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_JITTER:
+ - GST_QUERY_POSITION:
+
+ - get info on current position of the stream
+ - start position
+ - current position
+ - end position
+ - length
+
+ - GST_QUERY_LATENCY:
- Get the jitter, this is the difference between the expected and real
- time a buffer is captured or played.
+ - get amount of buffering
- GST_QUERY_START:
+ - GST_QUERY_CONVERT:
- 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.
+ - convert format/value to another format/value pair.
- GST_QUERY_SEGMENT_END:
+ - GST_QUERY_FORMATS:
- 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.
+ - return list of supported formats.
- GST_QUERY_RATE:
+Also????
- Query the current playback rate of the stream.
+ - GST_QUERY_CAPS:
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__ */