gstreamer/docs/design/draft-tagreading.txt
Stefan Kost d5669b316a docs/design/draft-tagreading.txt: Added open issues/thoughts to draft.
Original commit message from CVS:
* docs/design/draft-tagreading.txt:
Added open issues/thoughts to draft.
2007-04-20 08:21:19 +00:00

64 lines
2.2 KiB
Plaintext

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