From 515f33bd3bc1f4e6bd1ccad5f6d55fb592a534ec Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Wed, 27 Oct 2010 10:59:03 +0200 Subject: [PATCH] oggstream: streamline tag extraction and prevent some leaks --- ext/ogg/gstoggstream.c | 30 ++++++++++++++++++------------ ext/ogg/gstoggstream.h | 6 +++--- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ext/ogg/gstoggstream.c b/ext/ogg/gstoggstream.c index eecde0c552..c8bd577af2 100644 --- a/ext/ogg/gstoggstream.c +++ b/ext/ogg/gstoggstream.c @@ -605,6 +605,9 @@ is_header_vp8 (GstOggStream * pad, ogg_packet * packet) GST_BUFFER_DATA (buf) = (guint8 *) packet->packet; GST_BUFFER_SIZE (buf) = packet->bytes; + if (pad->taglist) + gst_tag_list_free (pad->taglist); + pad->taglist = gst_tag_list_from_vorbiscomment_buffer (buf, (const guint8 *) "OVP80\2 ", 7, &encoder); if (!pad->taglist) { @@ -655,18 +658,14 @@ setup_vorbis_mapper (GstOggStream * pad, ogg_packet * packet) data += 4; pad->bitrate_lower = GST_READ_UINT32_LE (data); - if (pad->bitrate_nominal > 0 && pad->bitrate_nominal <= 0x7FFFFFFF) + if (pad->bitrate_nominal > 0) pad->bitrate = pad->bitrate_nominal; - if (pad->bitrate_upper > 0 && pad->bitrate_upper <= 0x7FFFFFFF) - if (!pad->bitrate) - pad->bitrate = pad->bitrate_upper; + if (pad->bitrate_upper > 0 && !pad->bitrate) + pad->bitrate = pad->bitrate_upper; - if (pad->bitrate_lower > 0 && pad->bitrate_lower <= 0x7FFFFFFF) - if (!pad->bitrate) - pad->bitrate = pad->bitrate_lower; - - pad->taglist = NULL; + if (pad->bitrate_lower > 0 && !pad->bitrate) + pad->bitrate = pad->bitrate_lower; GST_LOG ("bit rate: %d", pad->bitrate); @@ -693,10 +692,14 @@ is_header_vorbis (GstOggStream * pad, ogg_packet * packet) if (((guint8 *) (packet->packet))[0] == 0x03) { GstBuffer *buf = NULL; gchar *encoder = NULL; + buf = gst_buffer_new (); GST_BUFFER_DATA (buf) = (guint8 *) packet->packet; GST_BUFFER_SIZE (buf) = packet->bytes; + if (pad->taglist) + gst_tag_list_free (pad->taglist); + pad->taglist = gst_tag_list_from_vorbiscomment_buffer (buf, (const guint8 *) "\003vorbis", 7, &encoder); @@ -716,15 +719,15 @@ is_header_vorbis (GstOggStream * pad, ogg_packet * packet) gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER_VERSION, pad->version, NULL); - if (pad->bitrate_nominal > 0 && pad->bitrate_nominal <= 0x7FFFFFFF) + if (pad->bitrate_nominal > 0) gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE, GST_TAG_NOMINAL_BITRATE, (guint) pad->bitrate_nominal, NULL); - if (pad->bitrate_upper > 0 && pad->bitrate_upper <= 0x7FFFFFFF) + if (pad->bitrate_upper > 0) gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE, GST_TAG_MAXIMUM_BITRATE, (guint) pad->bitrate_upper, NULL); - if (pad->bitrate_lower > 0 && pad->bitrate_lower <= 0x7FFFFFFF) + if (pad->bitrate_lower > 0) gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE, GST_TAG_MINIMUM_BITRATE, (guint) pad->bitrate_lower, NULL); @@ -1301,6 +1304,9 @@ is_header_ogm (GstOggStream * pad, ogg_packet * packet) GST_BUFFER_DATA (buf) = (guint8 *) packet->packet; GST_BUFFER_SIZE (buf) = packet->bytes;; + if (pad->taglist) + gst_tag_list_free (pad->taglist); + pad->taglist = gst_tag_list_from_vorbiscomment_buffer (buf, (const guint8 *) "\003vorbis", 7, &encoder); diff --git a/ext/ogg/gstoggstream.h b/ext/ogg/gstoggstream.h index 00c4527379..0bed3aa060 100644 --- a/ext/ogg/gstoggstream.h +++ b/ext/ogg/gstoggstream.h @@ -81,9 +81,9 @@ struct _GstOggStream int vorbis_mode_sizes[256]; int last_size; int version; - long bitrate_upper; - long bitrate_nominal; - long bitrate_lower; + gint bitrate_upper; + gint bitrate_nominal; + gint bitrate_lower; GstTagList *taglist; /* theora stuff */ gboolean theora_has_zero_keyoffset;