AVRn: fix progressive
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 20 Aug 2012 00:50:59 +0000 (02:50 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 20 Aug 2012 00:50:59 +0000 (02:50 +0200)
Fixes Ticket970

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/avrndec.c

index b173c6d..83180f0 100644 (file)
@@ -76,6 +76,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
     AVFrame *p = &a->frame;
     const uint8_t *buf = avpkt->data;
     int buf_size       = avpkt->size;
+    int true_height    = buf_size / (2*avctx->width);
     int y;
 
     if(a->is_mjpeg)
@@ -97,7 +98,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
     p->key_frame= 1;
 
     if(a->interlace) {
-        int true_height = buf_size / (2*avctx->width);
         buf += (true_height - avctx->height)*avctx->width;
         for(y = 0; y < avctx->height-1; y+=2) {
             memcpy(p->data[0] + (y+ a->tff)*p->linesize[0], buf                             , 2*avctx->width);
@@ -105,6 +105,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
             buf += 2*avctx->width;
         }
     } else {
+        buf += (true_height - avctx->height)*avctx->width*2;
         for(y = 0; y < avctx->height; y++) {
             memcpy(p->data[0] + y*p->linesize[0], buf, 2*avctx->width);
             buf += 2*avctx->width;