Add variables to prepare to the AMV decoder patch.
authorVladimir Voroshilov <voroshil@gmail.com>
Sat, 29 Sep 2007 12:52:56 +0000 (12:52 +0000)
committerVitor Sessak <vitor1001@gmail.com>
Sat, 29 Sep 2007 12:52:56 +0000 (12:52 +0000)
Patch by Vladimir Voroshilov (voroshil - gmail - com)

Originally committed as revision 10614 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/mjpegdec.c

index fab30b0..7dc0616 100644 (file)
@@ -660,8 +660,17 @@ static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor, int point
 static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int ss, int se, int Ah, int Al){
     int i, mb_x, mb_y;
     int EOBRUN = 0;
+    uint8_t* data[MAX_COMPONENTS];
+    int linesize[MAX_COMPONENTS];
 
     if(Ah) return 0; /* TODO decode refinement planes too */
+
+    for(i=0; i < nb_components; i++) {
+        int c = s->comp_index[i];
+        data[c] = s->picture.data[c];
+        linesize[c]=s->linesize[c];
+    }
+
     for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
         for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
             if (s->restart_interval && !s->restart_count)
@@ -691,16 +700,16 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int ss, i
                         return -1;
                     }
 //                    av_log(s->avctx, AV_LOG_DEBUG, "mb: %d %d processed\n", mb_y, mb_x);
-                    ptr = s->picture.data[c] +
-                        (((s->linesize[c] * (v * mb_y + y) * 8) +
+                    ptr = data[c] +
+                        (((linesize[c] * (v * mb_y + y) * 8) +
                         (h * mb_x + x) * 8) >> s->avctx->lowres);
                     if (s->interlaced && s->bottom_field)
-                        ptr += s->linesize[c] >> 1;
+                        ptr += linesize[c] >> 1;
 //av_log(NULL, AV_LOG_DEBUG, "%d %d %d %d %d %d %d %d \n", mb_x, mb_y, x, y, c, s->bottom_field, (v * mb_y + y) * 8, (h * mb_x + x) * 8);
                     if(!s->progressive)
-                        s->dsp.idct_put(ptr, s->linesize[c], s->block);
+                        s->dsp.idct_put(ptr, linesize[c], s->block);
                     else
-                        s->dsp.idct_add(ptr, s->linesize[c], s->block);
+                        s->dsp.idct_add(ptr, linesize[c], s->block);
                     if (++x == h) {
                         x = 0;
                         y++;