]> granicus.if.org Git - libvpx/commitdiff
Modify vp9_setup_interp_filters function
authorYunqing Wang <yunqingwang@google.com>
Wed, 3 Apr 2013 19:22:50 +0000 (12:22 -0700)
committerYunqing Wang <yunqingwang@google.com>
Wed, 3 Apr 2013 20:49:55 +0000 (13:49 -0700)
Took vp9_setup_scale_factors_for_frame() out from
vp9_setup_interp_filters(), so that it is only called once per
frame instead of per macroblock. Decoder tests showed a 1.5%
performance gain.

Change-Id: I770cb09eb2140ab85132f82aed388ac0bdd3a0aa

vp9/common/vp9_reconinter.c
vp9/decoder/vp9_decodframe.c
vp9/encoder/vp9_onyx_if.c

index 30a16d1a94adda8b6f75f3014b8371e832b2a155..75b4e7caef2234836b0f734ce86b550a144f57b1 100644 (file)
@@ -206,20 +206,6 @@ void vp9_setup_scale_factors_for_frame(struct scale_factors *scale,
 void vp9_setup_interp_filters(MACROBLOCKD *xd,
                               INTERPOLATIONFILTERTYPE mcomp_filter_type,
                               VP9_COMMON *cm) {
-  int i;
-
-  /* Calculate scaling factors for each of the 3 available references */
-  for (i = 0; i < 3; ++i) {
-    if (cm->active_ref_idx[i] >= NUM_YV12_BUFFERS) {
-      memset(&cm->active_ref_scale[i], 0, sizeof(cm->active_ref_scale[i]));
-      continue;
-    }
-
-    vp9_setup_scale_factors_for_frame(&cm->active_ref_scale[i],
-                                      &cm->yv12_fb[cm->active_ref_idx[i]],
-                                      cm->width, cm->height);
-  }
-
   if (xd->mode_info_context) {
     MB_MODE_INFO *mbmi = &xd->mode_info_context->mbmi;
 
@@ -229,7 +215,6 @@ void vp9_setup_interp_filters(MACROBLOCKD *xd,
                       cm->active_ref_scale);
   }
 
-
   switch (mcomp_filter_type) {
     case EIGHTTAP:
     case SWITCHABLE:
index 90dcdecfa93336cfc8a6576ec4724c559d93da03..f0b85fec872e1b13e2dd371c2451dacb50957826 100644 (file)
@@ -1103,13 +1103,6 @@ static void init_frame(VP9D_COMP *pbi) {
     vp9_setup_past_independence(pc, xd);
   }
 
-  if (pc->frame_type != KEY_FRAME) {
-    pc->mcomp_filter_type = pc->use_bilinear_mc_filter ? BILINEAR : EIGHTTAP;
-
-    // To enable choice of different interpolation filters
-    vp9_setup_interp_filters(xd, pc->mcomp_filter_type, pc);
-  }
-
   xd->mode_info_context = pc->mi;
   xd->prev_mode_info_context = pc->prev_mi;
   xd->frame_type = pc->frame_type;
@@ -1767,6 +1760,19 @@ int vp9_decode_frame(VP9D_COMP *pbi, const uint8_t **p_data_end) {
 #if CONFIG_COMP_INTERINTRA_PRED
     pc->use_interintra = vp9_read_bit(&header_bc);
 #endif
+
+    /* Calculate scaling factors for each of the 3 available references */
+    for (i = 0; i < 3; ++i) {
+      if (pc->active_ref_idx[i] >= NUM_YV12_BUFFERS) {
+        memset(&pc->active_ref_scale[i], 0, sizeof(pc->active_ref_scale[i]));
+        continue;
+      }
+
+      vp9_setup_scale_factors_for_frame(&pc->active_ref_scale[i],
+                                        &pc->yv12_fb[pc->active_ref_idx[i]],
+                                        pc->width, pc->height);
+    }
+
     // To enable choice of different interploation filters
     vp9_setup_interp_filters(xd, pc->mcomp_filter_type, pc);
   }
index 7052c0e87ad167fbaafdedf278281222c08d42ef..f742730860ae485622279857a82f5b8eda499d45 100644 (file)
@@ -3640,6 +3640,7 @@ int vp9_get_compressed_data(VP9_PTR ptr, unsigned int *frame_flags,
   VP9_COMMON *cm = &cpi->common;
   struct vpx_usec_timer  cmptimer;
   YV12_BUFFER_CONFIG    *force_src_buffer = NULL;
+  int i;
 
   if (!cpi)
     return -1;
@@ -3784,7 +3785,20 @@ int vp9_get_compressed_data(VP9_PTR ptr, unsigned int *frame_flags,
                                 cm->width, cm->height,
                                 VP9BORDERINPIXELS);
 
+  /* Calculate scaling factors for each of the 3 available references */
+  for (i = 0; i < 3; ++i) {
+    if (cm->active_ref_idx[i] >= NUM_YV12_BUFFERS) {
+      memset(&cm->active_ref_scale[i], 0, sizeof(cm->active_ref_scale[i]));
+      continue;
+    }
+
+    vp9_setup_scale_factors_for_frame(&cm->active_ref_scale[i],
+                                      &cm->yv12_fb[cm->active_ref_idx[i]],
+                                      cm->width, cm->height);
+  }
+
   vp9_setup_interp_filters(&cpi->mb.e_mbd, DEFAULT_INTERP_FILTER, cm);
+
   if (cpi->pass == 1) {
     Pass1Encode(cpi, size, dest, frame_flags);
   } else if (cpi->pass == 2) {