rawdec: fix decoding of QT WRAW files

Fix decoding of QT WRAW files.

From some tests it results that:

1. all of the AVI/MOV WRAW files (at least from the link posted
   to the trac ticket #108) need to be flipped
2. mov WRAW files need to use AVI color modes
3. assigning PAL8 mode by default to WRAW codec is not correct

Fix decoding of file CarltonMovie2.mov, fix trac issue #108.
pull/2/head
ami_stuff 14 years ago committed by Stefano Sabatini
parent 09525f7956
commit 040e1c67ed
  1. 1
      libavcodec/raw.c
  2. 4
      libavcodec/rawdec.c

@ -123,7 +123,6 @@ const PixelFormatTag ff_raw_pix_fmt_tags[] = {
{ PIX_FMT_YUYV422, MKTAG('y', 'u', 'v', '2') }, { PIX_FMT_YUYV422, MKTAG('y', 'u', 'v', '2') },
{ PIX_FMT_YUYV422, MKTAG('y', 'u', 'v', 's') }, { PIX_FMT_YUYV422, MKTAG('y', 'u', 'v', 's') },
{ PIX_FMT_YUYV422, MKTAG('D', 'V', 'O', 'O') }, /* Digital Voodoo SD 8 Bit */ { PIX_FMT_YUYV422, MKTAG('D', 'V', 'O', 'O') }, /* Digital Voodoo SD 8 Bit */
{ PIX_FMT_PAL8, MKTAG('W', 'R', 'A', 'W') },
{ PIX_FMT_RGB555LE,MKTAG('L', '5', '5', '5') }, { PIX_FMT_RGB555LE,MKTAG('L', '5', '5', '5') },
{ PIX_FMT_RGB565LE,MKTAG('L', '5', '6', '5') }, { PIX_FMT_RGB565LE,MKTAG('L', '5', '6', '5') },
{ PIX_FMT_RGB565BE,MKTAG('B', '5', '6', '5') }, { PIX_FMT_RGB565BE,MKTAG('B', '5', '6', '5') },

@ -90,6 +90,8 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
if (avctx->codec_tag == MKTAG('r','a','w',' ')) if (avctx->codec_tag == MKTAG('r','a','w',' '))
avctx->pix_fmt = ff_find_pix_fmt(pix_fmt_bps_mov, avctx->bits_per_coded_sample); avctx->pix_fmt = ff_find_pix_fmt(pix_fmt_bps_mov, avctx->bits_per_coded_sample);
else if (avctx->codec_tag == MKTAG('W','R','A','W'))
avctx->pix_fmt = ff_find_pix_fmt(pix_fmt_bps_avi, avctx->bits_per_coded_sample);
else if (avctx->codec_tag) else if (avctx->codec_tag)
avctx->pix_fmt = ff_find_pix_fmt(ff_raw_pix_fmt_tags, avctx->codec_tag); avctx->pix_fmt = ff_find_pix_fmt(ff_raw_pix_fmt_tags, avctx->codec_tag);
else if (avctx->pix_fmt == PIX_FMT_NONE && avctx->bits_per_coded_sample) else if (avctx->pix_fmt == PIX_FMT_NONE && avctx->bits_per_coded_sample)
@ -110,7 +112,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
avctx->coded_frame= &context->pic; avctx->coded_frame= &context->pic;
if((avctx->extradata_size >= 9 && !memcmp(avctx->extradata + avctx->extradata_size - 9, "BottomUp", 9)) || if((avctx->extradata_size >= 9 && !memcmp(avctx->extradata + avctx->extradata_size - 9, "BottomUp", 9)) ||
avctx->codec_tag == MKTAG( 3 , 0 , 0 , 0 )) avctx->codec_tag == MKTAG(3, 0, 0, 0) || avctx->codec_tag == MKTAG('W','R','A','W'))
context->flip=1; context->flip=1;
return 0; return 0;

Loading…
Cancel
Save