[gst-cvs] gst-plugins-ugly: mp3parse: Don't reject valid Xing tables of contents

Jan Schmidt thaytan at kemper.freedesktop.org
Wed May 6 07:47:46 PDT 2009


Module: gst-plugins-ugly
Branch: master
Commit: b18371c1ca480bbf1df17d3cf01bc0139137daf6
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-ugly/commit/?id=b18371c1ca480bbf1df17d3cf01bc0139137daf6

Author: Jan Schmidt <thaytan at noraisin.net>
Date:   Wed May  6 15:37:44 2009 +0100

mp3parse: Don't reject valid Xing tables of contents

Some Xing headers apparently start the TOC at byte 1 instead of 0. Don't
reject them because of it, just subtract the initial offset when reading
the table.

---

 gst/mpegaudioparse/gstmpegaudioparse.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/gst/mpegaudioparse/gstmpegaudioparse.c b/gst/mpegaudioparse/gstmpegaudioparse.c
index bcdd1e8..7b86fee 100644
--- a/gst/mpegaudioparse/gstmpegaudioparse.c
+++ b/gst/mpegaudioparse/gstmpegaudioparse.c
@@ -978,22 +978,22 @@ gst_mp3parse_handle_first_frame (GstMPEGAudioParse * mp3parse)
     if (xing_flags & XING_TOC_FLAG) {
       int i, percent = 0;
       guchar *table = mp3parse->xing_seek_table;
-      guchar old = 0;
+      guchar old = 0, new;
+      guint first;
 
-      if (data[0] != 0) {
-        GST_WARNING_OBJECT (mp3parse, "Skipping broken Xing TOC");
-        mp3parse->xing_flags &= ~XING_TOC_FLAG;
-        goto skip_toc;
-      }
+      first = data[0];
+      GST_DEBUG_OBJECT (mp3parse,
+          "Subtracting initial offset of %d bytes from Xing TOC", first);
 
       /* xing seek table: percent time -> 1/256 bytepos */
       for (i = 0; i < 100; i++) {
-        mp3parse->xing_seek_table[i] = data[i];
-        if (old > data[i]) {
+        new = data[i] - first;
+        if (old > new) {
           GST_WARNING_OBJECT (mp3parse, "Skipping broken Xing TOC");
           mp3parse->xing_flags &= ~XING_TOC_FLAG;
           goto skip_toc;
         }
+        mp3parse->xing_seek_table[i] = old = new;
       }
 
       /* build inverse table: 1/256 bytepos -> 1/100 percent time */





More information about the Gstreamer-commits mailing list