On Fri, Oct 12, 2018 at 5:19 PM Carl Eugen Hoyos <ceffm...@gmail.com> wrote:
> 2018-10-12 4:37 GMT+02:00, Jun Zhao <mypopy...@gmail.com>: > > case 1: > > use the hexdump -C SMM0005.rcv get: > > size skip (size - 4) > > | | > > V V > > 00000000 18 00 00 c5 05 00 00 00 4d f1 0a 11 00 e0 01 00 > > 00000010 00 d0 02 00 00 0c 00 00 00 88 13 00 00 c0 65 52 > > ^ > > | > > size + 16 > > case 2: > > same the command for SMM0015.rcv get: > > size > > | > > V > > 00000000 19 00 00 c5 04 00 00 00 41 f3 80 01 40 02 00 00 > > 00000010 d0 02 00 00 0c 00 00 00 00 00 00 10 00 00 00 00 > > ^ > > | > > size + 16 > > > > There are different the RCV file format for VC-1, vc1test > > just handle the case 2 now, this fix will support the case 1. > > (Both of test clips come from: RP 228:2008 - SMPTE > > Recommended Practice - VC-1 Decoder and Bitstream Conformance). > > > > Signed-off-by: Jun Zhao <jun.z...@intel.com> > > Signed-off-by: Yan, FengX <fengx....@intel.com> > > --- > > libavformat/vc1test.c | 13 +++++++++++-- > > 1 files changed, 11 insertions(+), 2 deletions(-) > > > > diff --git a/libavformat/vc1test.c b/libavformat/vc1test.c > > index a801f4b..38eb1a4 100644 > > --- a/libavformat/vc1test.c > > +++ b/libavformat/vc1test.c > > @@ -34,9 +34,13 @@ > > > > static int vc1t_probe(AVProbeData *p) > > { > > + int size; > > + > > if (p->buf_size < 24) > > return 0; > > - if (p->buf[3] != 0xC5 || AV_RL32(&p->buf[4]) != 4 || > > AV_RL32(&p->buf[20]) != 0xC) > > + > > + size = AV_RL32(&p->buf[4]); > > + if (p->buf[3] != 0xC5 || AV_RL32(&p->buf[size+16]) != 0xC) > > return 0; > > > > return AVPROBE_SCORE_EXTENSION; > > @@ -48,10 +52,12 @@ static int vc1t_read_header(AVFormatContext *s) > > AVStream *st; > > int frames; > > uint32_t fps; > > + int size; > > > > frames = avio_rl24(pb); > > - if(avio_r8(pb) != 0xC5 || avio_rl32(pb) != 4) > > (Maybe it is enough to only change the "!= 4" here?) > > Maybe avio_rl32(pb) >= 4 ? > > + if (avio_r8(pb) != 0xC5) > > return AVERROR_INVALIDDATA; > > > + size = avio_rl32(pb); > > > > /* init video codec */ > > st = avformat_new_stream(s, NULL); > > @@ -63,6 +69,8 @@ static int vc1t_read_header(AVFormatContext *s) > > > > if (ff_get_extradata(s, st->codecpar, pb, VC1_EXTRADATA_SIZE) < 0) > > return AVERROR(ENOMEM); > > + > > + avio_skip(pb, size - 4); > > I may miss something but this looks as if you pass an unchecked > value to avio_skip. > > Will add a check before the avio_skip. > > st->codecpar->height = avio_rl32(pb); > > st->codecpar->width = avio_rl32(pb); > > if(avio_rl32(pb) != 0xC) > > > @@ -114,5 +122,6 @@ AVInputFormat ff_vc1t_demuxer = { > > .read_probe = vc1t_probe, > > .read_header = vc1t_read_header, > > .read_packet = vc1t_read_packet, > > + .extensions = "rcv", > > This is an unrelated change that should not be part of this patch. > Will split to the other patch for this change. > > Carl Eugen > _______________________________________________ > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel