# HG changeset patch # User pacman # Date 1154384785 0 # Node ID c41d4672c675c5bc46147bb814e5ab07edfa5f7c # Parent 3f910f7b0e533b1a7a146b37ef2f5302cdfca404 Fix SVQ3 extradata handling so it works correctly with demux_lavf diff -r 3f910f7b0e53 -r c41d4672c675 libmpcodecs/vd_ffmpeg.c --- a/libmpcodecs/vd_ffmpeg.c Mon Jul 31 22:19:48 2006 +0000 +++ b/libmpcodecs/vd_ffmpeg.c Mon Jul 31 22:26:25 2006 +0000 @@ -264,6 +264,18 @@ avctx->skip_frame = str2AVDiscard(lavc_param_skip_frame_str); mp_dbg(MSGT_DECVIDEO,MSGL_DBG2,"libavcodec.size: %d x %d\n",avctx->width,avctx->height); switch (sh->format) { + case mmioFOURCC('S','V','Q','3'): + /* SVQ3 extradata can show up as sh->ImageDesc if demux_mov is used, or + in the phony AVI header if demux_lavf is used. The first case is + handled here; the second case falls through to the next section. */ + if (sh->ImageDesc) { + avctx->extradata_size = (*(int*)sh->ImageDesc) - sizeof(int); + avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); + memcpy(avctx->extradata, ((int*)sh->ImageDesc)+1, avctx->extradata_size); + break; + } + /* fallthrough */ + case mmioFOURCC('A','V','R','n'): case mmioFOURCC('M','J','P','G'): /* AVRn stores huffman table in AVI header */ @@ -312,14 +324,6 @@ // printf("%X %X %d %d\n", extrahdr[0], extrahdr[1]); break; - case mmioFOURCC('S','V','Q','3'): - if (!sh->ImageDesc) - break; - avctx->extradata_size = (*(int*)sh->ImageDesc) - sizeof(int); - avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); - memcpy(avctx->extradata, ((int*)sh->ImageDesc)+1, avctx->extradata_size); - break; - default: if (!sh->bih || sh->bih->biSize <= sizeof(BITMAPINFOHEADER)) break;