diff options
author | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2012-01-12 17:02:13 +0100 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2012-01-12 17:02:13 +0100 |
commit | 01616f12e20cefb387e1f59be23bcf4211ce9bba (patch) | |
tree | b38b36cfe67047bb250e30efdc12a0c9df1b819b | |
parent | ef3a19d5950ebe8a07c4e31b65ecf95e03fd85f5 (diff) | |
download | ffmpeg-01616f12e20cefb387e1f59be23bcf4211ce9bba.tar.gz |
Fix linesize for rawvideo in mov.
Fixes ticket #823.
-rw-r--r-- | libavcodec/rawdec.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c index e48e3850be..a9156dedab 100644 --- a/libavcodec/rawdec.c +++ b/libavcodec/rawdec.c @@ -106,7 +106,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx) 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',' '))){ - context->length = avpicture_get_size(avctx->pix_fmt, (avctx->width+3)&~3, avctx->height); + context->length = avpicture_get_size(avctx->pix_fmt, FFALIGN(avctx->width, 16), avctx->height); context->buffer = av_malloc(context->length); if (!context->buffer) return -1; @@ -137,6 +137,7 @@ static int raw_decode(AVCodecContext *avctx, { const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; + int linesize_align = 4; RawVideoContext *context = avctx->priv_data; AVFrame * frame = (AVFrame *) data; @@ -164,13 +165,16 @@ static int raw_decode(AVCodecContext *avctx, dst[2*i+0]= buf[i]>>4; dst[2*i+1]= buf[i]&15; } - } else + linesize_align = 8; + } 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; } + linesize_align = 16; + } buf= dst; } @@ -200,9 +204,10 @@ static int raw_decode(AVCodecContext *avctx, avctx->pix_fmt==PIX_FMT_RGB555LE || avctx->pix_fmt==PIX_FMT_RGB555BE || avctx->pix_fmt==PIX_FMT_RGB565LE || + avctx->pix_fmt==PIX_FMT_MONOWHITE || avctx->pix_fmt==PIX_FMT_PAL8) && - ((frame->linesize[0]+3)&~3)*avctx->height <= buf_size) - frame->linesize[0] = (frame->linesize[0]+3)&~3; + FFALIGN(frame->linesize[0], linesize_align)*avctx->height <= buf_size) + frame->linesize[0] = FFALIGN(frame->linesize[0], linesize_align); if(context->flip) flip(avctx, picture); |