Browse Source

avformat/wtvdec: ignore mpeg2 extradata

Files produced by windows media center contain meaningless mpeg1 sequence
header. The mpeg2 decoder detects the presence mpeg1 sequence header start
codes and attempts to decode the stream as mpeg1. (This problem introduced
in 73a2d16b.)

Fixes ticket #3601.

Signed-off-by: Peter Ross <pross@xvid.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.3
Peter Ross Michael Niedermayer 11 years ago
parent
commit
be098f6237
1 changed files with 1 additions and 13 deletions
  1. +1
    -13
      libavformat/wtvdec.c

+ 1
- 13
libavformat/wtvdec.c View File

@@ -694,19 +694,7 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid,
avio_skip(pb, FFMAX(size - consumed, 0)); avio_skip(pb, FFMAX(size - consumed, 0));
} else if (!ff_guidcmp(formattype, ff_format_mpeg2_video)) { } else if (!ff_guidcmp(formattype, ff_format_mpeg2_video)) {
uint64_t consumed = parse_videoinfoheader2(s, st); uint64_t consumed = parse_videoinfoheader2(s, st);
if (size - consumed >= 20) {
uint32_t count;
consumed += 20;
avio_skip(pb, 4);
count = avio_rl32(pb);
count = FFMIN(count, size - consumed);
avio_skip(pb, 12);
if (count && ff_get_extradata(st->codec, pb, count) < 0) {
ff_free_stream(s, st);
return NULL;
}
consumed += count;
}
/* ignore extradata; files produced by windows media center contain meaningless mpeg1 sequence header */
avio_skip(pb, FFMAX(size - consumed, 0)); avio_skip(pb, FFMAX(size - consumed, 0));
} else { } else {
if (ff_guidcmp(formattype, ff_format_none)) if (ff_guidcmp(formattype, ff_format_none))


Loading…
Cancel
Save