[Ffmpeg-devel] non-avc h264 stream problems

Ronald S. Bultje rbultje
Thu Jun 9 18:19:36 CEST 2005


Hi,

Decoding an AVI containing h264 (e.g. from VSoft [1]) doesn't work with
current CVS (June 9, 2005) of libavcodec/ffmpeg:
* in avienc.c, add VSSH as a fourcc for h264. As extradata, parse the
extra bytes from the BITMAPINFOHEADER (ffmpeg does that already).
* in h264:7346 (decode_frame()), there's "if (0 < decode_nal_header(..))
...". That should be "if (decode_nal_header(..) < 0) ...", I think,
because a value < 0 means an error; any other value is a valid buffer
index (right?).
* doing this makes the first I-frame display correctly (in a checkout of
a few weeks ago).
* Next frames will not decode correctly, because of (in a checkout of a
few weeks ago) an assert in h264.c:2567 (in mc_dir_part()) or (in a
checkout of today) all sort of warnings like this "[h264 @
0x833f294]illegal short term buffer state detected
" and "[h264 @ 0x833f294]concealing 0 DC, 0 AC, 0 MV errors". I didn't
look closer into this yet.

Attached is the first two. Doesn't fix it, but maybe it's a start...

Ronald

[1] http://www.vsofts.com/h264/videoclips.html

-- 
Ronald S. Bultje <rbultje at ronald.bitfreak.net>
-------------- next part --------------
? .deps
? NEWS
? aclocal.m4
? autom4te.cache
? compile
? config.guess
? config.h.in
? config.status
? config.sub
? depcomp
? ffmpeg-0.4.8.tar.gz
? install-sh
? libtool
? ltmain.sh
? missing
? patches
? stamp-h1
? libavcodec/.deps
? libavcodec/.libs
? libavcodec/4xm.lo
? libavcodec/8bps.lo
? libavcodec/aasc.lo
? libavcodec/ac3enc.lo
? libavcodec/adpcm.lo
? libavcodec/adx.lo
? libavcodec/alac.lo
? libavcodec/allcodecs.lo
? libavcodec/asv1.lo
? libavcodec/avcodec.lo
? libavcodec/bitstream.lo
? libavcodec/cabac.lo
? libavcodec/cinepak.lo
? libavcodec/cljr.lo
? libavcodec/common.lo
? libavcodec/cyuv.lo
? libavcodec/dpcm.lo
? libavcodec/dsputil.lo
? libavcodec/dv.lo
? libavcodec/error_resilience.lo
? libavcodec/eval.lo
? libavcodec/faandct.lo
? libavcodec/fft.lo
? libavcodec/ffv1.lo
? libavcodec/flac.lo
? libavcodec/flicvideo.lo
? libavcodec/g726.lo
? libavcodec/golomb.lo
? libavcodec/h261.lo
? libavcodec/h263.lo
? libavcodec/h263dec.lo
? libavcodec/h264.lo
? libavcodec/h264idct.lo
? libavcodec/huffyuv.lo
? libavcodec/idcinvideo.lo
? libavcodec/imgconvert.lo
? libavcodec/imgresample.lo
? libavcodec/indeo2.lo
? libavcodec/indeo3.lo
? libavcodec/integer.lo
? libavcodec/interplayvideo.lo
? libavcodec/jfdctfst.lo
? libavcodec/jfdctint.lo
? libavcodec/jrevdct.lo
? libavcodec/lcl.lo
? libavcodec/libavcodec.la
? libavcodec/loco.lo
? libavcodec/mace.lo
? libavcodec/mdct.lo
? libavcodec/mem.lo
? libavcodec/mjpeg.lo
? libavcodec/motion_est.lo
? libavcodec/mpeg12.lo
? libavcodec/mpegaudio.lo
? libavcodec/mpegaudiodec.lo
? libavcodec/mpegvideo.lo
? libavcodec/msmpeg4.lo
? libavcodec/msrle.lo
? libavcodec/msvideo1.lo
? libavcodec/opts.lo
? libavcodec/parser.lo
? libavcodec/pcm.lo
? libavcodec/png.lo
? libavcodec/pnm.lo
? libavcodec/qdrw.lo
? libavcodec/qpeg.lo
? libavcodec/qtrle.lo
? libavcodec/ra144.lo
? libavcodec/ra288.lo
? libavcodec/rangecoder.lo
? libavcodec/ratecontrol.lo
? libavcodec/rational.lo
? libavcodec/raw.lo
? libavcodec/resample.lo
? libavcodec/resample2.lo
? libavcodec/roqvideo.lo
? libavcodec/rpza.lo
? libavcodec/rv10.lo
? libavcodec/shorten.lo
? libavcodec/simple_idct.lo
? libavcodec/smc.lo
? libavcodec/snow.lo
? libavcodec/sonic.lo
? libavcodec/svq1.lo
? libavcodec/truemotion1.lo
? libavcodec/tscc.lo
? libavcodec/ulti.lo
? libavcodec/utils.lo
? libavcodec/vc1.lo
? libavcodec/vc9.lo
? libavcodec/vcr1.lo
? libavcodec/vmdav.lo
? libavcodec/vp3.lo
? libavcodec/vp3dsp.lo
? libavcodec/vqavideo.lo
? libavcodec/wmadec.lo
? libavcodec/wnv1.lo
? libavcodec/ws-snd1.lo
? libavcodec/xan.lo
? libavcodec/xl.lo
? libavcodec/alpha/.deps
? libavcodec/armv4l/.deps
? libavcodec/i386/.deps
? libavcodec/i386/.libs
? libavcodec/i386/cputest
? libavcodec/i386/libmmxsse.la
? libavcodec/i386/libmmxsse_la-cputest.lo
? libavcodec/i386/libmmxsse_la-dsputil_mmx.lo
? libavcodec/i386/libmmxsse_la-fdct_mmx.lo
? libavcodec/i386/libmmxsse_la-fft_sse.lo
? libavcodec/i386/libmmxsse_la-idct_mmx.lo
? libavcodec/i386/libmmxsse_la-motion_est_mmx.lo
? libavcodec/i386/libmmxsse_la-mpegvideo_mmx.lo
? libavcodec/i386/libmmxsse_la-simple_idct_mmx.lo
? libavcodec/i386/libmmxsse_la-vp3dsp_mmx.lo
? libavcodec/i386/libmmxsse_la-vp3dsp_sse2.lo
? libavcodec/liba52/.deps
? libavcodec/libpostproc/.deps
? libavcodec/mlib/.deps
? libavcodec/ppc/.deps
? libavcodec/ps2/.deps
? libavcodec/sh4/.deps
? libavcodec/sparc/.deps
? libavformat/.deps
? libavformat/.libs
? libavformat/4xm.lo
? libavformat/allformats.lo
? libavformat/asf-enc.lo
? libavformat/asf.lo
? libavformat/au.lo
? libavformat/audio.lo
? libavformat/avidec.lo
? libavformat/avienc.lo
? libavformat/avio.lo
? libavformat/aviobuf.lo
? libavformat/crc.lo
? libavformat/cutils.lo
? libavformat/dv.lo
? libavformat/dv1394.lo
? libavformat/electronicarts.lo
? libavformat/ffm.lo
? libavformat/file.lo
? libavformat/flic.lo
? libavformat/flvdec.lo
? libavformat/flvenc.lo
? libavformat/framehook.lo
? libavformat/gif.lo
? libavformat/gifdec.lo
? libavformat/grab.lo
? libavformat/http.lo
? libavformat/idcin.lo
? libavformat/idroq.lo
? libavformat/img.lo
? libavformat/img2.lo
? libavformat/ipmovie.lo
? libavformat/jpeg.lo
? libavformat/libavformat.la
? libavformat/matroska.lo
? libavformat/mov.lo
? libavformat/movenc.lo
? libavformat/mp3.lo
? libavformat/mpeg.lo
? libavformat/mpegts.lo
? libavformat/mpegtsenc.lo
? libavformat/mpjpeg.lo
? libavformat/nsvdec.lo
? libavformat/nut.lo
? libavformat/ogg2.lo
? libavformat/oggparsevorbis.lo
? libavformat/os_support.lo
? libavformat/png.lo
? libavformat/pnm.lo
? libavformat/psxstr.lo
? libavformat/raw.lo
? libavformat/rm.lo
? libavformat/rtp.lo
? libavformat/rtpproto.lo
? libavformat/rtsp.lo
? libavformat/segafilm.lo
? libavformat/sgi.lo
? libavformat/sierravmd.lo
? libavformat/sol.lo
? libavformat/stlBqAY1
? libavformat/swf.lo
? libavformat/tcp.lo
? libavformat/udp.lo
? libavformat/utils.lo
? libavformat/wav.lo
? libavformat/wc3movie.lo
? libavformat/westwood.lo
? libavformat/yuv.lo
? libavformat/yuv4mpeg.lo
? tests/.deps
? tests/.libs
? vhook/.deps
Index: libavcodec/h264.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/h264.c,v
retrieving revision 1.135
diff -u -r1.135 h264.c
--- libavcodec/h264.c	5 Jun 2005 15:51:20 -0000	1.135
+++ libavcodec/h264.c	9 Jun 2005 16:16:05 -0000
@@ -7343,7 +7343,7 @@
     }
 
     if(!h->is_avc && s->avctx->extradata_size && s->picture_number==0){
-        if(0 < decode_nal_units(h, s->avctx->extradata, s->avctx->extradata_size) ) 
+        if(decode_nal_units(h, s->avctx->extradata, s->avctx->extradata_size) < 0) 
             return -1;
     }
 
Index: libavformat/avienc.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/avienc.c,v
retrieving revision 1.107
diff -u -r1.107 avienc.c
--- libavformat/avienc.c	3 Jun 2005 08:50:46 -0000	1.107
+++ libavformat/avienc.c	9 Jun 2005 16:16:07 -0000
@@ -77,6 +77,7 @@
    important if multiple tags possible for a given codec. */
 const CodecTag codec_bmp_tags[] = {
     { CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
+    { CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') },
 
     { CODEC_ID_H263, MKTAG('H', '2', '6', '3') },
     { CODEC_ID_H263P, MKTAG('H', '2', '6', '3') },



More information about the ffmpeg-devel mailing list