OUTDATED
--------


problem 
-------

Since gstreamer uses a hierarchical pipeline layout individual elements
can be inside N levels of containers (bins). Elements can also produce
interesting information for the user app or for its parent.

Consider the mp3parse element that could detect id3 tags in the stream.
One way to let the app know about those tags is by emitting a signal. The
problem with this signal is that the app has to perform a g_signal_connect
on this element. This might not always be possible/feasable because
the APP might not know about the mp3parse element (eg. an autoplugged
pipeline or a compound object). The app could instrospect each element
in the pipeline and look for known properties/signals to connect to,
but that looks a bit ugly IMO.

Signal proxying is also not very feasable because signals are tied to
class instances.

let's take the following use case:

 - the user autoplugs an mpeg1 pipeline

 - the autoplugged pipeline most likely contains an mpegdemuxer, an mp3
   decoder, mpegdecoder etc.

 - the mpegdemuxer knows the (average) bitrate of the stream.

 - the mpegdecoder knows the framerate of the stream

 - the mp3 decoder has some neat stuff too (bitrate, layer etc..)

how are we going to get all those properties to the app? each element
could fire a signal with the data. It the app were able to connect to
every signal in each element this would work somewhat.


Requirements 
------------

The application can listen to an abritrary bin in the pipeline to collect
information about that bins children. The app can listen on the top
level bin to collect all of the elements messages.

The data sent out by the elements must not be limited to a fixed set of
messages; it must be extensible.


proposed solution 
-----------------

We propose another way of propagating these element messages to the
application.

An element can send a message to its parent using a
gst_element_send_message (element, message). The message would be of type
GstMessage and would be similar to a GstEvent type (maybe even the same).

The message would contain GstProps, which can be anything (a string, an
int, a range etc..). It would also contain the originator of the message.

The parent would just simply accept the message (and do something with it)
or the default handler would just forward the message to its parent etc..

The message would bubble up the pipeline. When an element doesn't have
a parent, the message is converted to a GSignal. The signal ("message")
would just forward the message to any listening apps.

The app can then use the originator field of the message to find out
where it came from, possibly using the elementfactories klass field to
find out what type of plugin created this message.

For an autoplugged mpeg1 pipeline the following messages could be
signalled to the app:

element klass        element      property      value
                     name

stream/mpeg/demuxer: (mpegdemux) "bitrate",   GST_PROPS_INT (1000000)
stream/mpeg/demuxer: (mpegdemux) "type",      GST_PROPS_STRING ("mpeg1") 
video/mpeg/decoder:  (mpeg2dec)  "type",      GST_PROPS_STRING ("mpeg1") 
video/mpeg/decoder:  (mpeg2dec)  "frame_rate",GST_PROPS_INT (25) 
video/mpeg/decoder:  (mpeg2dec)  "size",      GST_PROPS_LIST (
                                                 GST_PROPS_INT (320), 
					         GST_PROPS_INT (200)
					       ) 
audio/mp3/decoder:   (mad)	 "layer",     GST_PROPS_INT (2) 
audio/mp3/decoder:   (mad)	 "bitrate",   GST_PROPS_INT (128000) 
audio/mp3/decoder:   (mad)	 "channels",  GST_PROPS_INT (2)

other possibilities:

video/render/X:     (xvideosink) "frames_dropped", GST_PROPS_INT (4)
video/render/X:     (xvideosink) "frames_shown",   GST_PROPS_INT (254) 
video/mpeg/decoder: (mpeg2dec)	 "frames_dropped", GST_PROPS_INT (2) 
video/avi/demuxer:  (avidemux)   "codec",          GST_PROPS_FOURCC ("DIVX")

or

video/mpeg/decoder: (mpeg2dec)  "state_changed", GST_PROPS_INT (GST_STATE_PAUSED)

or even

audio/render/oss:    (osssink)	"master_clock", GST_PROPS_OBJECT (osssink_clock)
....

or even even:

input/file/filesrc:  (filesrc)	"here_i_am", GST_PROPS_STRING ("alive and kicking")


With standard naming conventions for the element klass type and the
messages ids, the player can easily create an info dialog to show various
properties of the stream.

The benefits are that we don't need to define N-thousand methods on
elements, the messages can be anything and we don't have to use the
heavyweight GObject signals in the core library.


what about?  
-----------

- Threads? do we queue events and let the top half collect the messages
  or do we send them to the app in the thread context?

- do we need a similar system for core functionalities (clocks, states,
  ...) or do we define methods for those?



