ref: 54de084155c3ed2be1c173855cfc0bada2235bf6
parent: 3ba985779c73a883b9b78a0c78c651cadc6cef0c
parent: 5c5582242db56aad21ad70ce4f13dc37255f87f3
author: Dmitry Kovalev <[email protected]>
date: Wed May 15 12:50:33 EDT 2013
Merge "Moving the same code to new function vp9_setup_scale_factors." into experimental
--- a/vp9/common/vp9_reconinter.c
+++ b/vp9/common/vp9_reconinter.c
@@ -492,3 +492,18 @@
vp9_build_inter_predictors_sbuv(xd, mb_row, mb_col,
BLOCK_SIZE_MB16X16);
}
+
+// TODO(dkovalev: find better place for this function)
+void vp9_setup_scale_factors(VP9_COMMON *cm, int i) {
+ const int ref = cm->active_ref_idx[i];
+ struct scale_factors *const sf = &cm->active_ref_scale[i];
+ if (ref >= NUM_YV12_BUFFERS) {
+ memset(sf, 0, sizeof(*sf));
+ } else {
+ YV12_BUFFER_CONFIG *const fb = &cm->yv12_fb[ref];
+ vp9_setup_scale_factors_for_frame(sf,
+ fb->y_crop_width, fb->y_crop_height,
+ cm->width, cm->height);
+ }
+}
+
--- a/vp9/common/vp9_reconinter.h
+++ b/vp9/common/vp9_reconinter.h
@@ -122,4 +122,6 @@
xd->scale_factor_uv[1] = xd->scale_factor[1];
}
+void vp9_setup_scale_factors(VP9_COMMON *cm, int i);
+
#endif // VP9_COMMON_VP9_RECONINTER_H_
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -1021,23 +1021,13 @@
// Select active reference frames and calculate scaling factors
for (i = 0; i < ALLOWED_REFS_PER_FRAME; ++i) {
const int ref = vp9_read_literal(&header_bc, NUM_REF_FRAMES_LG2);
- const int mapped_ref = pc->ref_frame_map[ref];
- YV12_BUFFER_CONFIG *const fb = &pc->yv12_fb[mapped_ref];
- struct scale_factors *const sf = &pc->active_ref_scale[i];
-
- pc->active_ref_idx[i] = mapped_ref;
- if (mapped_ref >= NUM_YV12_BUFFERS)
- memset(sf, 0, sizeof(*sf));
- else
- vp9_setup_scale_factors_for_frame(sf,
- fb->y_crop_width, fb->y_crop_height,
- pc->width, pc->height);
+ pc->active_ref_idx[i] = pc->ref_frame_map[ref];
+ vp9_setup_scale_factors(pc, i);
}
// Read the sign bias for each reference frame buffer.
- for (i = 0; i < ALLOWED_REFS_PER_FRAME; ++i) {
+ for (i = 0; i < ALLOWED_REFS_PER_FRAME; ++i)
pc->ref_frame_sign_bias[i + 1] = vp9_read_bit(&header_bc);
- }
xd->allow_high_precision_mv = vp9_read_bit(&header_bc);
pc->mcomp_filter_type = read_mcomp_filter_type(&header_bc);
--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -3860,16 +3860,8 @@
VP9BORDERINPIXELS);
// Calculate scaling factors for each of the 3 available references
- for (i = 0; i < ALLOWED_REFS_PER_FRAME; ++i) {
- if (cm->active_ref_idx[i] >= NUM_YV12_BUFFERS) {
- memset(&cm->active_ref_scale[i], 0, sizeof(cm->active_ref_scale[i]));
- } else {
- YV12_BUFFER_CONFIG *fb = &cm->yv12_fb[cm->active_ref_idx[i]];
- vp9_setup_scale_factors_for_frame(&cm->active_ref_scale[i],
- fb->y_crop_width, fb->y_crop_height,
- cm->width, cm->height);
- }
- }
+ for (i = 0; i < ALLOWED_REFS_PER_FRAME; ++i)
+ vp9_setup_scale_factors(cm, i);
vp9_setup_interp_filters(&cpi->mb.e_mbd, DEFAULT_INTERP_FILTER, cm);