OUTDATED
--------


1. Introduction
---------------

The type system is used to attach meaning to the bytes in a GstBuffer.
A plugin can decide to add metadata to the GstBuffer, this metadata
will carry an associated typeid.

Types are also used by the plugins to expose the type of their pads to
the type system.

Types are essential for autoplugging. 

We will explain the inner workings of the type system in this document, as
well as the API used in the plugins.


2. Type properties
------------------

a) identification of the type

  Types are identified by one or more MIME types. 

b) detection of types

  The type of any given GstBuffer can be detected using

    - a typefind function: a function that will inspect the bytes
           in the buffer and return a gboolean indicating the
	   buffer is of the given type.

    - a template for the bytes/bits in the data that must be
           satisfied in order for the GstBuffer to be of the given 
	   type.
  
    - other properties that act more like a hint like:
           the extension of the source filename.
	   the URI of the source.


3. Type registration
--------------------

a) the core libraries will create to types:

   video/raw image/raw
   audio/raw

b) all other types will be provided by the plugins

before a type can become available to other plugins, the plugin
has to register the type. 

The system will keep a directed graph of the types and the plugins
that operate on them.

example:

                     video/mpeg
                         ! 
		     mpeg1parse
		      /     \
	      video/mpeg1   audio/mp3 -----\
	      !        !           \        !
	 mpeg_play   mpeg2dec      mpg123   xing  ...
              \        /              \     /		        
              video/raw              audio/raw-----\
	      !      !                   !         !
        videosink   SDLsink           audiosink    alsasink ...
			

The system can find the needed plugins to convert video/mpeg to
audio/raw using this graph.


4. type equivalence
-------------------

some types can have the same meaning for example:

  audio/mp3 and audio/mpeg 

or

  video/raw and image/raw
  

a plugin that exposes its output type as audio/mpeg and another plugins
with input type audio/mp3 can be connected. The system has to know about
the equivalence of both types, even it they have a different mime type.

 
5. type hierarchy
-----------------

some plugins can ouput a specific subset of an already existing type.

example:

  mp3parse inputs audio/mp3 and packs the stream into mp3 audio frames
  with mime type: audio/mp3-frame

  mpg123 only accepts audio/mp3-frame but not audio/mp3.

  another mp3 decoder (libmpg123) can accept audio/mp3 (and thus also 
  audio/mp3-frame)

  it must be possible to connect both libmpg123 and mpg123 to the mp3parse
  element.
  it must not be possible to connect mpg123 to an element that outputs only
  audio/mp3 but not audio/mp3-frame.


We say that audio/mp3-frame is a more specific subset of type audio/mp3.

we can create a type hierarchy:

          audio/mp3
         /        \
  audio/mp3-frame  audio/mp3-layer12
                     /        \
	   audio/mp3-layer1    audio/mp3-layer2


6. multi-type pads
------------------

certain plugins might accept multiple non equivalent types in one of their
input pads. Consequently a plugin might output non equivalent types in
its output pad.

It must therefore be possible to specify multiple types for a pad.

example:

  mpegdemux may be able to demux both MPEG1 and MPEG2 system streams.
  we show the type hierarchy of the video/mpeg as follows:

                          video/mpeg
		         /        \
               video/mpeg1         video/mpeg2 ---------------\
	       /    \                    /    \               !
      mpeg1-system*  mpeg1-video    mpeg2-ts   mpeg2-ps*    mpeg2-video


  the mpegdemux element might specify the type of the input pad as 
  one of video/mpeg1-system and video/mpeg2-ts



7. definition of types
----------------------

A plugin will provide the following information to the type system:

 - a mime type string describing the hierarchy and where the types
   they provide are located in that hierarchy.

 - typefind functions for some of the types.

 - extensions for some of the types

We will propose a syntax to define the type hierarchy

a) equivalent types :

   separated with a | sign

   ( audio/mp3 | audio/mpeg )

b) type hierarchy :

   in braces:

   ( audio/mp3 ( audio/mp3-frame))

c) multi-type pads

  ( mpegdemux ( video/mpeg1-system + video/mpeg2-ps) )

  the pad will have type mpegdemux which is the parent for
  type video/mpeg1-system or video/mpeg2-ps

                  mpegdemux
          	  /       \
 video/mpeg1-system      video/mpeg2-ps
   

   
once the type hierarchy has been registered, the typeid of each
element can be obtained with:

  guint16 gst_type_find_by_mime (gchar *mime)

extra typefind functions and/or extensions can be added to the 
typeid afterwards.


8. type matching
----------------

The more specific typefind functions, the functions associated with
types in the leaf nodes, are tried first.

when a specific type has been found ex. video/mpeg1-system elements
that can handle this type or one of its parents are selected:

  mpegdemux:                     mpeg1parse:                    supermpegdecoder:

    video/mpeg                       video/mpeg                   video/mpeg
     !                                  !
    mpegdemux                        video/mpeg1-system
     !                                 
    video/mpeg1-system         

In the above case, also the super mpeg element is selected because it stated
that it can handle all sorts of video/mpeg data. 


example 2:

   suppose the typefind functions finds an mp3 stream, fillowing elments
   are selected:

       libmpg123              mp3parse:

       audio/mp3              audio/mp3
 
   mpg123 is not selected because its pad type is too specific (audio/mp3-frame):

       mpg123

       audio/mp3
         !
       audio/mp3-frame

   if the typefind would find a mp3-frame type, all three objects would be selected.


8. consideration
----------------

It is clear that clear indications have to be given to the type hierarchy,
especially for the top nodes.

The more specific an element is in its mime type specification, the more flexible 
and extendible the plugin system can be.





























     

