summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorYunqing Wang <yunqingwang@google.com>2013-04-03 12:22:50 -0700
committerYunqing Wang <yunqingwang@google.com>2013-04-03 13:49:55 -0700
commit4ca882f32fb7f45044ccf01db0f4a40c52e5fcca (patch)
tree352ec0b87e2c3bf91466a1a99835793d0c8ef5a7 /vp9
parent8b71b8a6de7a5e9537556f0424f76d41e8a4236d (diff)
downloadlibvpx-4ca882f32fb7f45044ccf01db0f4a40c52e5fcca.tar
libvpx-4ca882f32fb7f45044ccf01db0f4a40c52e5fcca.tar.gz
libvpx-4ca882f32fb7f45044ccf01db0f4a40c52e5fcca.tar.bz2
libvpx-4ca882f32fb7f45044ccf01db0f4a40c52e5fcca.zip
Modify vp9_setup_interp_filters function
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
Diffstat (limited to 'vp9')
-rw-r--r--vp9/common/vp9_reconinter.c15
-rw-r--r--vp9/decoder/vp9_decodframe.c20
-rw-r--r--vp9/encoder/vp9_onyx_if.c14
3 files changed, 27 insertions, 22 deletions
diff --git a/vp9/common/vp9_reconinter.c b/vp9/common/vp9_reconinter.c
index 30a16d1a9..75b4e7cae 100644
--- a/vp9/common/vp9_reconinter.c
+++ b/vp9/common/vp9_reconinter.c
@@ -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:
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
index 90dcdecfa..f0b85fec8 100644
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -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);
}
diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c
index 7052c0e87..f74273086 100644
--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -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) {