ref: 5efd9609e30eb4220d100a8f32991f8e8b7b63a3
parent: 90ebfe621fccf231c25f4d55aa93da2df90f2d00
author: John Koleszar <jkoleszar@google.com>
date: Tue Jul 16 06:20:56 EDT 2013
Fix above context pointers In the prior code, the above context pointers used for entropy decoding were initialized on the first frame, and not updated when the frame size changed. The per-frame code which initializes the contexts assumes that the contexts are contiguous, leading to an incomplete initialization when the frame is smaller. This commit updates the pointers so that the context is contigous whenever the frame size changes. Change-Id: I08b53e3a30c8289491212311682ff1b8028cff6c
--- a/vp9/common/vp9_alloccommon.c
+++ b/vp9/common/vp9_alloccommon.c
@@ -158,10 +158,6 @@
if (!oci->above_context[0])
goto fail;
- for (i = 1; i < MAX_MB_PLANE; i++)
- oci->above_context[i] =
- oci->above_context[0] + i * sizeof(ENTROPY_CONTEXT) * 2 * mi_cols;
-
oci->above_seg_context = vpx_calloc(sizeof(PARTITION_CONTEXT) * mi_cols, 1);
if (!oci->above_seg_context)
goto fail;
@@ -197,9 +193,15 @@
}
void vp9_update_frame_size(VP9_COMMON *cm) {
+ int i, mi_cols;
const int aligned_width = ALIGN_POWER_OF_TWO(cm->width, LOG2_MI_SIZE);
const int aligned_height = ALIGN_POWER_OF_TWO(cm->height, LOG2_MI_SIZE);
set_mb_mi(cm, aligned_width, aligned_height);
setup_mi(cm);
+
+ mi_cols = mi_cols_aligned_to_sb(cm->mi_cols);
+ for (i = 1; i < MAX_MB_PLANE; i++)
+ cm->above_context[i] =
+ cm->above_context[0] + i * sizeof(ENTROPY_CONTEXT) * 2 * mi_cols;
}
--
⑨