| Index: source/libvpx/vp9/common/vp9_alloccommon.c
|
| ===================================================================
|
| --- source/libvpx/vp9/common/vp9_alloccommon.c (revision 293081)
|
| +++ source/libvpx/vp9/common/vp9_alloccommon.c (working copy)
|
| @@ -17,17 +17,6 @@
|
| #include "vp9/common/vp9_onyxc_int.h"
|
| #include "vp9/common/vp9_systemdependent.h"
|
|
|
| -static void clear_mi_border(const VP9_COMMON *cm, MODE_INFO *mi) {
|
| - int i;
|
| -
|
| - // Top border row
|
| - vpx_memset(mi, 0, sizeof(*mi) * cm->mi_stride);
|
| -
|
| - // Left border column
|
| - for (i = 1; i < cm->mi_rows + 1; ++i)
|
| - vpx_memset(&mi[i * cm->mi_stride], 0, sizeof(*mi));
|
| -}
|
| -
|
| void vp9_set_mb_mi(VP9_COMMON *cm, int width, int height) {
|
| const int aligned_width = ALIGN_POWER_OF_TWO(width, MI_SIZE_LOG2);
|
| const int aligned_height = ALIGN_POWER_OF_TWO(height, MI_SIZE_LOG2);
|
| @@ -41,59 +30,18 @@
|
| cm->MBs = cm->mb_rows * cm->mb_cols;
|
| }
|
|
|
| -static void setup_mi(VP9_COMMON *cm) {
|
| - cm->mi = cm->mip + cm->mi_stride + 1;
|
| - cm->prev_mi = cm->prev_mip + cm->mi_stride + 1;
|
| -
|
| - vpx_memset(cm->mip, 0, cm->mi_stride * (cm->mi_rows + 1) * sizeof(*cm->mip));
|
| - clear_mi_border(cm, cm->prev_mip);
|
| -}
|
| -
|
| -static int alloc_mi(VP9_COMMON *cm, int mi_size) {
|
| - int i;
|
| -
|
| - for (i = 0; i < 2; ++i) {
|
| - cm->mip_array[i] =
|
| - (MODE_INFO *)vpx_calloc(mi_size, sizeof(MODE_INFO));
|
| - if (cm->mip_array[i] == NULL)
|
| - return 1;
|
| - }
|
| -
|
| - cm->mi_alloc_size = mi_size;
|
| -
|
| - // Init the index.
|
| - cm->mi_idx = 0;
|
| - cm->prev_mi_idx = 1;
|
| -
|
| - cm->mip = cm->mip_array[cm->mi_idx];
|
| - cm->prev_mip = cm->mip_array[cm->prev_mi_idx];
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -static void free_mi(VP9_COMMON *cm) {
|
| - int i;
|
| -
|
| - for (i = 0; i < 2; ++i) {
|
| - vpx_free(cm->mip_array[i]);
|
| - cm->mip_array[i] = NULL;
|
| - }
|
| -
|
| - cm->mip = NULL;
|
| - cm->prev_mip = NULL;
|
| -}
|
| -
|
| void vp9_free_ref_frame_buffers(VP9_COMMON *cm) {
|
| int i;
|
|
|
| for (i = 0; i < FRAME_BUFFERS; ++i) {
|
| - vp9_free_frame_buffer(&cm->frame_bufs[i].buf);
|
| -
|
| if (cm->frame_bufs[i].ref_count > 0 &&
|
| cm->frame_bufs[i].raw_frame_buffer.data != NULL) {
|
| cm->release_fb_cb(cm->cb_priv, &cm->frame_bufs[i].raw_frame_buffer);
|
| cm->frame_bufs[i].ref_count = 0;
|
| }
|
| + vpx_free(cm->frame_bufs[i].mvs);
|
| + cm->frame_bufs[i].mvs = NULL;
|
| + vp9_free_frame_buffer(&cm->frame_bufs[i].buf);
|
| }
|
|
|
| vp9_free_frame_buffer(&cm->post_proc_buffer);
|
| @@ -100,14 +48,11 @@
|
| }
|
|
|
| void vp9_free_context_buffers(VP9_COMMON *cm) {
|
| - free_mi(cm);
|
| -
|
| + cm->free_mi(cm);
|
| vpx_free(cm->last_frame_seg_map);
|
| cm->last_frame_seg_map = NULL;
|
| -
|
| vpx_free(cm->above_context);
|
| cm->above_context = NULL;
|
| -
|
| vpx_free(cm->above_seg_context);
|
| cm->above_seg_context = NULL;
|
| }
|
| @@ -116,7 +61,7 @@
|
| vp9_free_context_buffers(cm);
|
|
|
| vp9_set_mb_mi(cm, width, height);
|
| - if (alloc_mi(cm, cm->mi_stride * calc_mi_size(cm->mi_rows)))
|
| + if (cm->alloc_mi(cm, cm->mi_stride * calc_mi_size(cm->mi_rows)))
|
| goto fail;
|
|
|
| cm->last_frame_seg_map = (uint8_t *)vpx_calloc(cm->mi_rows * cm->mi_cols, 1);
|
| @@ -166,6 +111,16 @@
|
| #endif
|
| VP9_ENC_BORDER_IN_PIXELS) < 0)
|
| goto fail;
|
| + if (cm->frame_bufs[i].mvs == NULL) {
|
| + cm->frame_bufs[i].mvs =
|
| + (MV_REF *)vpx_calloc(cm->mi_rows * cm->mi_cols,
|
| + sizeof(*cm->frame_bufs[i].mvs));
|
| + if (cm->frame_bufs[i].mvs == NULL)
|
| + goto fail;
|
| +
|
| + cm->frame_bufs[i].mi_rows = cm->mi_rows;
|
| + cm->frame_bufs[i].mi_cols = cm->mi_cols;
|
| + }
|
| }
|
|
|
| init_frame_bufs(cm);
|
| @@ -190,25 +145,15 @@
|
| vp9_free_ref_frame_buffers(cm);
|
| vp9_free_context_buffers(cm);
|
| vp9_free_internal_frame_buffers(&cm->int_frame_buffers);
|
| +
|
| + vpx_free(cm->fc);
|
| + cm->fc = NULL;
|
| + vpx_free(cm->frame_contexts);
|
| + cm->frame_contexts = NULL;
|
| }
|
|
|
| void vp9_init_context_buffers(VP9_COMMON *cm) {
|
| - setup_mi(cm);
|
| + cm->setup_mi(cm);
|
| if (cm->last_frame_seg_map)
|
| vpx_memset(cm->last_frame_seg_map, 0, cm->mi_rows * cm->mi_cols);
|
| }
|
| -
|
| -void vp9_swap_mi_and_prev_mi(VP9_COMMON *cm) {
|
| - // Swap indices.
|
| - const int tmp = cm->mi_idx;
|
| - cm->mi_idx = cm->prev_mi_idx;
|
| - cm->prev_mi_idx = tmp;
|
| -
|
| - // Current mip will be the prev_mip for the next frame.
|
| - cm->mip = cm->mip_array[cm->mi_idx];
|
| - cm->prev_mip = cm->mip_array[cm->prev_mi_idx];
|
| -
|
| - // Update the upper left visible macroblock ptrs.
|
| - cm->mi = cm->mip + cm->mi_stride + 1;
|
| - cm->prev_mi = cm->prev_mip + cm->mi_stride + 1;
|
| -}
|
|
|