changeset 12228:9c63566f623f libavcodec

Eliminate some repeated dereferences in VP8 inter_predict
author darkshikari
date Thu, 22 Jul 2010 21:05:30 +0000
parents d07e6037846d
children cf675a4d5195
files vp8.c
diffstat 1 files changed, 22 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/vp8.c	Thu Jul 22 19:59:34 2010 +0000
+++ b/vp8.c	Thu Jul 22 21:05:30 2010 +0000
@@ -1102,11 +1102,13 @@
 {
     int x_off = mb_x << 4, y_off = mb_y << 4;
     int width = 16*s->mb_width, height = 16*s->mb_height;
+    AVFrame *ref = s->framep[mb->ref_frame];
+    VP56mv *bmv = mb->bmv;
 
     prefetch_motion(s, mb, mb_x, mb_y, x_off, y_off, VP56_FRAME_PREVIOUS);
 
     if (mb->mode < VP8_MVMODE_SPLIT) {
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
+        vp8_mc_part(s, dst, ref, x_off, y_off,
                     0, 0, 16, 16, width, height, &mb->mv);
     } else switch (mb->partitioning) {
     case VP8_SPLITMVMODE_4x4: {
@@ -1117,7 +1119,7 @@
         for (y = 0; y < 4; y++) {
             for (x = 0; x < 4; x++) {
                 vp8_mc(s, 1, dst[0] + 4*y*s->linesize + x*4,
-                       s->framep[mb->ref_frame]->data[0], &mb->bmv[4*y + x],
+                       ref->data[0], &bmv[4*y + x],
                        4*x + x_off, 4*y + y_off, 4, 4,
                        width, height, s->linesize,
                        s->put_pixels_tab[2]);
@@ -1143,12 +1145,12 @@
                     uvmv.y &= ~7;
                 }
                 vp8_mc(s, 0, dst[1] + 4*y*s->uvlinesize + x*4,
-                       s->framep[mb->ref_frame]->data[1], &uvmv,
+                       ref->data[1], &uvmv,
                        4*x + x_off, 4*y + y_off, 4, 4,
                        width, height, s->uvlinesize,
                        s->put_pixels_tab[2]);
                 vp8_mc(s, 0, dst[2] + 4*y*s->uvlinesize + x*4,
-                       s->framep[mb->ref_frame]->data[2], &uvmv,
+                       ref->data[2], &uvmv,
                        4*x + x_off, 4*y + y_off, 4, 4,
                        width, height, s->uvlinesize,
                        s->put_pixels_tab[2]);
@@ -1157,26 +1159,26 @@
         break;
     }
     case VP8_SPLITMVMODE_16x8:
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
-                    0, 0, 16, 8, width, height, &mb->bmv[0]);
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
-                    0, 8, 16, 8, width, height, &mb->bmv[1]);
+        vp8_mc_part(s, dst, ref, x_off, y_off,
+                    0, 0, 16, 8, width, height, &bmv[0]);
+        vp8_mc_part(s, dst, ref, x_off, y_off,
+                    0, 8, 16, 8, width, height, &bmv[1]);
         break;
     case VP8_SPLITMVMODE_8x16:
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
-                    0, 0, 8, 16, width, height, &mb->bmv[0]);
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
-                    8, 0, 8, 16, width, height, &mb->bmv[1]);
+        vp8_mc_part(s, dst, ref, x_off, y_off,
+                    0, 0, 8, 16, width, height, &bmv[0]);
+        vp8_mc_part(s, dst, ref, x_off, y_off,
+                    8, 0, 8, 16, width, height, &bmv[1]);
         break;
     case VP8_SPLITMVMODE_8x8:
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
-                    0, 0, 8, 8, width, height, &mb->bmv[0]);
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
-                    8, 0, 8, 8, width, height, &mb->bmv[1]);
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
-                    0, 8, 8, 8, width, height, &mb->bmv[2]);
-        vp8_mc_part(s, dst, s->framep[mb->ref_frame], x_off, y_off,
-                    8, 8, 8, 8, width, height, &mb->bmv[3]);
+        vp8_mc_part(s, dst, ref, x_off, y_off,
+                    0, 0, 8, 8, width, height, &bmv[0]);
+        vp8_mc_part(s, dst, ref, x_off, y_off,
+                    8, 0, 8, 8, width, height, &bmv[1]);
+        vp8_mc_part(s, dst, ref, x_off, y_off,
+                    0, 8, 8, 8, width, height, &bmv[2]);
+        vp8_mc_part(s, dst, ref, x_off, y_off,
+                    8, 8, 8, 8, width, height, &bmv[3]);
         break;
     }