From 67768d253061973e65246dd9d22da850533ac4e6 Mon Sep 17 00:00:00 2001 From: Torsten Jager Date: Fri, 3 Oct 2014 15:05:25 +0200 Subject: 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. --- src/demuxers/demux_mpgaudio.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src') 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; -- cgit v1.2.3