diff options
author | Torsten Jager <t.jager@gmx.de> | 2014-10-03 15:05:25 +0200 |
---|---|---|
committer | Torsten Jager <t.jager@gmx.de> | 2014-10-03 15:05:25 +0200 |
commit | 67768d253061973e65246dd9d22da850533ac4e6 (patch) | |
tree | d051761ce761fc75b9472485d734a397a9a12be0 | |
parent | 2390d870ff4735918d4630d4078b7eae2d117148 (diff) | |
download | xine-lib-67768d253061973e65246dd9d22da850533ac4e6.tar.gz xine-lib-67768d253061973e65246dd9d22da850533ac4e6.tar.bz2 |
Detect mp3 files with large id3v2 tags.
At least when input is seekable.
AVformat demux used to hit in such cases, but that one is still very unstable.
-rw-r--r-- | src/demuxers/demux_mpgaudio.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/demuxers/demux_mpgaudio.c b/src/demuxers/demux_mpgaudio.c index 5bff17858..affed543d 100644 --- a/src/demuxers/demux_mpgaudio.c +++ b/src/demuxers/demux_mpgaudio.c @@ -872,6 +872,20 @@ static int detect_mpgaudio_file(input_plugin_t *input, */ int tag_size = _X_BE_32_synchsafe(&buf[6]); lprintf("try to skip id3v2 tag (%d bytes)\n", tag_size); + /* id3v2 tags may be larger than preview size (album artwork JPG or something). + * try to skip by seeking. + */ + if (INPUT_IS_SEEKABLE (input)) { + input->seek (input, 10 + tag_size, SEEK_SET); + preview_len = input->read (input, buf, MAX_PREVIEW_SIZE); + if (!sniff_buffer_looks_like_mp3 (buf, preview_len, version, layer)) { + lprintf ("sniff_buffer_looks_like_mp3 failed\n"); + return 0; + } else { + lprintf ("a valid mp3 frame follows the id3v2 tag\n"); + return 1; + } + } if ((10 + tag_size) >= preview_len) { lprintf("cannot skip id3v2 tag\n"); return 0; |