X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Frawdec.c;h=a9156dedab68a50efccfbbca046ebfcaf4d1060c;hb=18d0a16fc9d189b1d5593f9a42bb2316e9a66ca9;hp=acaa0ea7327b934aff005b2e0b57e43511b881e5;hpb=964912aba56a29acf25c9e216255ea44190f419a;p=ffmpeg diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c index acaa0ea7327..a9156dedab6 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; @@ -119,6 +119,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx) avctx->coded_frame= &context->pic; if((avctx->extradata_size >= 9 && !memcmp(avctx->extradata + avctx->extradata_size - 9, "BottomUp", 9)) || + avctx->codec_tag == MKTAG('c','y','u','v') || avctx->codec_tag == MKTAG(3, 0, 0, 0) || avctx->codec_tag == MKTAG('W','R','A','W')) context->flip=1; @@ -136,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; @@ -163,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; } @@ -199,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);