diff options
Diffstat (limited to 'vp9/common/vp9_alloccommon.c')
-rw-r--r-- | vp9/common/vp9_alloccommon.c | 37 |
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 |