2007-03-13 14:53:21 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
|
2007-04-20 08:21:19 +00:00
|
|
|
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);
|
|
|
|
|
|
|
|
|
2007-03-13 14:53:21 +00:00
|
|
|
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
|
|
|
|
|