Skip to content
Snippets Groups Projects
Commit 4235c98e authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos
Browse files

Support decoding raw 2bpp in mov, fixes issue 1528.

Originally committed as revision 21027 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 0a1e1510
No related branches found
No related tags found
No related merge requests found
......@@ -47,6 +47,7 @@ static const PixelFormatTag pixelFormatBpsAVI[] = {
static const PixelFormatTag pixelFormatBpsMOV[] = {
{ PIX_FMT_MONOWHITE, 1 },
{ PIX_FMT_PAL8, 2 },
{ PIX_FMT_PAL8, 4 },
{ PIX_FMT_PAL8, 8 },
// FIXME swscale does not support 16 bit in .mov, sample 16bit.mov
......@@ -115,15 +116,24 @@ static int raw_decode(AVCodecContext *avctx,
frame->top_field_first = avctx->coded_frame->top_field_first;
//4bpp raw in avi and mov (yes this is ugly ...)
if(avctx->bits_per_coded_sample == 4 && avctx->pix_fmt==PIX_FMT_PAL8 &&
if((avctx->bits_per_coded_sample == 4 || avctx->bits_per_coded_sample == 2) &&
avctx->pix_fmt==PIX_FMT_PAL8 &&
(!avctx->codec_tag || avctx->codec_tag == MKTAG('r','a','w',' '))){
int i;
uint8_t *dst = context->buffer + 256*4;
buf_size = context->length - 256*4;
if (avctx->bits_per_coded_sample == 4){
for(i=0; 2*i+1 < buf_size; i++){
dst[2*i+0]= buf[i]>>4;
dst[2*i+1]= buf[i]&15;
}
} else
for(i=0; 4*i+3 < buf_size; i++){
dst[4*i+0]= buf[i]>>6;
dst[4*i+1]= buf[i]>>4&3;
dst[4*i+2]= buf[i]>>2&3;
dst[4*i+3]= buf[i] &3;
}
buf= dst;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment