From 592bc87dc95d88e52fda9eec2d61828c2d6c6ec0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 23 Jan 2010 22:03:18 +0100 Subject: [PATCH] oggdemux: Extract tags from OGM text streams and don't push them downstream --- ext/ogg/gstoggdemux.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index 25cf128..7713fd9 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -41,6 +41,7 @@ #endif #include #include +#include #include "gstoggdemux.h" @@ -501,6 +502,32 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet) /* We don't push header packets for OGM */ cret = gst_ogg_demux_combine_flows (ogg, pad, GST_FLOW_OK); goto done; + } else if (data[0] & 3 && pad->map.is_ogm_text) { + GstTagList *tags; + + /* We don't push comment packets either for text streams, + * other streams will handle the comment packets in the + * decoder */ + buf = gst_buffer_new (); + + GST_BUFFER_DATA (buf) = (guint8 *) data; + GST_BUFFER_SIZE (buf) = bytes; + + tags = gst_tag_list_from_vorbiscomment_buffer (buf, + (guint8 *) "\003vorbis", 7, NULL); + gst_buffer_unref (buf); + buf = NULL; + + if (tags) { + GST_DEBUG_OBJECT (ogg, "tags = %" GST_PTR_FORMAT, tags); + gst_element_found_tags_for_pad (GST_ELEMENT (ogg), GST_PAD_CAST (pad), + tags); + } else { + GST_DEBUG_OBJECT (ogg, "failed to extract tags from vorbis comment"); + } + + cret = gst_ogg_demux_combine_flows (ogg, pad, GST_FLOW_OK); + goto done; } offset = 1 + (((data[0] & 0xc0) >> 6) | ((data[0] & 0x02) << 1)); -- 2.7.4