summaryrefslogtreecommitdiff
path: root/vp9/common/vp9_alloccommon.c
diff options
context:
space:
mode:
Diffstat (limited to 'vp9/common/vp9_alloccommon.c')
-rw-r--r--vp9/common/vp9_alloccommon.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c
index e89fea8a4..864e27e98 100644
--- a/vp9/common/vp9_alloccommon.c
+++ b/vp9/common/vp9_alloccommon.c
@@ -31,22 +31,6 @@ void vp9_update_mode_info_border(VP9_COMMON *cm, MODE_INFO *mi) {
vpx_memset(&mi[i * stride], 0, sizeof(MODE_INFO));
}
-void vp9_update_mode_info_in_image(VP9_COMMON *cm, MODE_INFO *mi) {
- int i, j;
-
- // For each in image mode_info element set the in image flag to 1
- for (i = 0; i < cm->mi_rows; i++) {
- MODE_INFO *ptr = mi;
- for (j = 0; j < cm->mi_cols; j++) {
- ptr->mbmi.in_image = 1;
- ptr++; // Next element in the row
- }
-
- // Step over border element at start of next row
- mi += cm->mode_info_stride;
- }
-}
-
void vp9_free_frame_buffers(VP9_COMMON *cm) {
int i;
@@ -59,6 +43,8 @@ void vp9_free_frame_buffers(VP9_COMMON *cm) {
vpx_free(cm->prev_mip);
vpx_free(cm->above_seg_context);
vpx_free(cm->last_frame_seg_map);
+ vpx_free(cm->mi_grid_base);
+ vpx_free(cm->prev_mi_grid_base);
vpx_free(cm->above_context[0]);
for (i = 0; i < MAX_MB_PLANE; i++)
@@ -67,6 +53,8 @@ void vp9_free_frame_buffers(VP9_COMMON *cm) {
cm->prev_mip = NULL;
cm->above_seg_context = NULL;
cm->last_frame_seg_map = NULL;
+ cm->mi_grid_base = NULL;
+ cm->prev_mi_grid_base = NULL;
}
static void set_mb_mi(VP9_COMMON *cm, int aligned_width, int aligned_height) {
@@ -82,15 +70,18 @@ static void set_mb_mi(VP9_COMMON *cm, int aligned_width, int aligned_height) {
static void setup_mi(VP9_COMMON *cm) {
cm->mi = cm->mip + cm->mode_info_stride + 1;
cm->prev_mi = cm->prev_mip + cm->mode_info_stride + 1;
+ cm->mi_grid_visible = cm->mi_grid_base + cm->mode_info_stride + 1;
+ cm->prev_mi_grid_visible = cm->prev_mi_grid_base + cm->mode_info_stride + 1;
vpx_memset(cm->mip, 0,
cm->mode_info_stride * (cm->mi_rows + 1) * sizeof(MODE_INFO));
- vp9_update_mode_info_border(cm, cm->mip);
- vp9_update_mode_info_in_image(cm, cm->mi);
+ vpx_memset(cm->mi_grid_base, 0,
+ cm->mode_info_stride * (cm->mi_rows + 1) *
+ sizeof(*cm->mi_grid_base));
+ vp9_update_mode_info_border(cm, cm->mip);
vp9_update_mode_info_border(cm, cm->prev_mip);
- vp9_update_mode_info_in_image(cm, cm->prev_mi);
}
int vp9_alloc_frame_buffers(VP9_COMMON *cm, int width, int height) {
@@ -139,6 +130,14 @@ int vp9_alloc_frame_buffers(VP9_COMMON *cm, int width, int height) {
if (!cm->prev_mip)
goto fail;
+ cm->mi_grid_base = vpx_calloc(mi_size, sizeof(*cm->mi_grid_base));
+ if (!cm->mi_grid_base)
+ goto fail;
+
+ cm->prev_mi_grid_base = vpx_calloc(mi_size, sizeof(*cm->prev_mi_grid_base));
+ if (!cm->prev_mi_grid_base)
+ goto fail;
+
setup_mi(cm);
// FIXME(jkoleszar): allocate subsampled arrays for U/V once subsampling