diff options
author | Jan Schmidt <thaytan@noraisin.net> | 2009-05-06 15:37:44 +0100 |
---|---|---|
committer | Jan Schmidt <thaytan@noraisin.net> | 2009-05-06 15:37:44 +0100 |
commit | b18371c1ca480bbf1df17d3cf01bc0139137daf6 (patch) | |
tree | ff0b24731a428500f74a544f9b17bdf31661820c | |
parent | 85a88a0a6499ebc9049c47aed55d24a8358bed50 (diff) |
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.
-rw-r--r-- | 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 bcdd1e8b..7b86feea 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 */ |