Tagreading
----------

The tagreading (metadata reading) use case for mediacenter applications is not
to well supported by the current GStreamer architecture. It uses demuxers on the
files, which generelly said takes too long. what we wan't is secialized elements
that just do the tag-reading.

The idea is to have one plugin 'tagread' simmilar to 'typefind' that provides
elements for the different formats. The advantage of having those in on plugin
would be that when building a metadatabase one only loads this plugin.

Then there would be a tagbin, that similar to decodebin does a typefind and then
plugs the right tagread element. It might plug a demuxer as a fallback solution.

Still it would be nice to reuse code from demuxers/tag-filters.


Design
------

The plan is that applications can do the following:
  pipeline = "filesrc ! tagbin"
  for (file_path in list_of_files) {
    filesrc.location=file_path
    pipeline.set_state(PLAYING)
    // wait for TAGS & EOS
    pipeline.set_state(READY)
  }

* it should have one sinkpad of type ANY
* it should send EOS when all metadata has been read
  (and all tags have been sent)
* it could have a generic element that uses taglib
  http://developer.kde.org/~wheeler/taglib.html
* tagread-elements should have RANK_NONE to be not autoplugged by decodebin


Open Issues
-----------
* would it make sense to have 2-phase tag-reading
  * 1st phase: get tag-data that are directly embedded in the data
  * 2nd phase: get tag-data that has to be generated fetched
    * e.g. album-art via web, video-thumbnails
* what about caching backends
  * it would be good to allow applications to supply tagbin with a tagcache-
    object instance. whenever tagbin gets a uri to tagread, it consults the
    cache first. whenever there is a cache-miss it will tag-read and then store
    in the cache

    GstTagList *gst_tag_cache_load_tag_data (GstTagCache *self, const gchar *uri);
    gst_tag_cache_store_tag_data (GstTagCache *self, const gchar *uri, GstTagList *tags);


Reuse
-----

ogg : gst-plugins-base/ext/ogg
avi : gst-plugins-good/gst/avi
mp3 : gst-plugins-good/gst/id3demux
wav : gst-plugins-good/gst/wavparse
qt  : gst-plugins-bad/gst/qtdemux

