| Index: source/libvpx/vp9/common/vp9_alloccommon.c
|
| ===================================================================
|
| --- source/libvpx/vp9/common/vp9_alloccommon.c (revision 284462)
|
| +++ source/libvpx/vp9/common/vp9_alloccommon.c (working copy)
|
| @@ -28,7 +28,10 @@
|
| vpx_memset(&mi[i * cm->mi_stride], 0, sizeof(*mi));
|
| }
|
|
|
| -static void set_mb_mi(VP9_COMMON *cm, int aligned_width, int aligned_height) {
|
| +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);
|
| +
|
| cm->mi_cols = aligned_width >> MI_SIZE_LOG2;
|
| cm->mi_rows = aligned_height >> MI_SIZE_LOG2;
|
| cm->mi_stride = cm->mi_cols + MI_BLOCK_SIZE;
|
| @@ -95,7 +98,7 @@
|
| cm->prev_mi_grid_base = NULL;
|
| }
|
|
|
| -void vp9_free_frame_buffers(VP9_COMMON *cm) {
|
| +void vp9_free_ref_frame_buffers(VP9_COMMON *cm) {
|
| int i;
|
|
|
| for (i = 0; i < FRAME_BUFFERS; ++i) {
|
| @@ -124,52 +127,27 @@
|
| cm->above_seg_context = NULL;
|
| }
|
|
|
| -int vp9_resize_frame_buffers(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);
|
| -#if CONFIG_INTERNAL_STATS || CONFIG_VP9_POSTPROC
|
| - const int ss_x = cm->subsampling_x;
|
| - const int ss_y = cm->subsampling_y;
|
| +int vp9_alloc_context_buffers(VP9_COMMON *cm, int width, int height) {
|
| + vp9_free_context_buffers(cm);
|
|
|
| - // TODO(agrange): this should be conditionally allocated.
|
| - if (vp9_realloc_frame_buffer(&cm->post_proc_buffer, width, height, ss_x, ss_y,
|
| - VP9_DEC_BORDER_IN_PIXELS, NULL, NULL, NULL) < 0)
|
| - goto fail;
|
| -#endif
|
| + vp9_set_mb_mi(cm, width, height);
|
| + if (alloc_mi(cm, cm->mi_stride * (cm->mi_rows + MI_BLOCK_SIZE))) goto fail;
|
|
|
| - set_mb_mi(cm, aligned_width, aligned_height);
|
| -
|
| - free_mi(cm);
|
| - if (alloc_mi(cm, cm->mi_stride * (cm->mi_rows + MI_BLOCK_SIZE)))
|
| - goto fail;
|
| -
|
| - setup_mi(cm);
|
| -
|
| - // Create the segmentation map structure and set to 0.
|
| - vpx_free(cm->last_frame_seg_map);
|
| cm->last_frame_seg_map = (uint8_t *)vpx_calloc(cm->mi_rows * cm->mi_cols, 1);
|
| - if (!cm->last_frame_seg_map)
|
| - goto fail;
|
| + if (!cm->last_frame_seg_map) goto fail;
|
|
|
| - vpx_free(cm->above_context);
|
| - cm->above_context =
|
| - (ENTROPY_CONTEXT *)vpx_calloc(2 * mi_cols_aligned_to_sb(cm->mi_cols) *
|
| - MAX_MB_PLANE,
|
| - sizeof(*cm->above_context));
|
| - if (!cm->above_context)
|
| - goto fail;
|
| + cm->above_context = (ENTROPY_CONTEXT *)vpx_calloc(
|
| + 2 * mi_cols_aligned_to_sb(cm->mi_cols) * MAX_MB_PLANE,
|
| + sizeof(*cm->above_context));
|
| + if (!cm->above_context) goto fail;
|
|
|
| - vpx_free(cm->above_seg_context);
|
| - cm->above_seg_context =
|
| - (PARTITION_CONTEXT *)vpx_calloc(mi_cols_aligned_to_sb(cm->mi_cols),
|
| - sizeof(*cm->above_seg_context));
|
| - if (!cm->above_seg_context)
|
| - goto fail;
|
| + cm->above_seg_context = (PARTITION_CONTEXT *)vpx_calloc(
|
| + mi_cols_aligned_to_sb(cm->mi_cols), sizeof(*cm->above_seg_context));
|
| + if (!cm->above_seg_context) goto fail;
|
|
|
| return 0;
|
|
|
| fail:
|
| - vp9_free_frame_buffers(cm);
|
| vp9_free_context_buffers(cm);
|
| return 1;
|
| }
|
| @@ -186,12 +164,12 @@
|
| }
|
| }
|
|
|
| -int vp9_alloc_frame_buffers(VP9_COMMON *cm, int width, int height) {
|
| +int vp9_alloc_ref_frame_buffers(VP9_COMMON *cm, int width, int height) {
|
| int i;
|
| const int ss_x = cm->subsampling_x;
|
| const int ss_y = cm->subsampling_y;
|
|
|
| - vp9_free_frame_buffers(cm);
|
| + vp9_free_ref_frame_buffers(cm);
|
|
|
| for (i = 0; i < FRAME_BUFFERS; ++i) {
|
| cm->frame_bufs[i].ref_count = 0;
|
| @@ -211,62 +189,18 @@
|
| return 0;
|
|
|
| fail:
|
| - vp9_free_frame_buffers(cm);
|
| + vp9_free_ref_frame_buffers(cm);
|
| return 1;
|
| }
|
|
|
| -int vp9_alloc_context_buffers(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);
|
| -
|
| - vp9_free_context_buffers(cm);
|
| -
|
| - set_mb_mi(cm, aligned_width, aligned_height);
|
| -
|
| - if (alloc_mi(cm, cm->mi_stride * (cm->mi_rows + MI_BLOCK_SIZE)))
|
| - goto fail;
|
| -
|
| - setup_mi(cm);
|
| -
|
| - // Create the segmentation map structure and set to 0.
|
| - cm->last_frame_seg_map = (uint8_t *)vpx_calloc(cm->mi_rows * cm->mi_cols, 1);
|
| - if (!cm->last_frame_seg_map)
|
| - goto fail;
|
| -
|
| - cm->above_context =
|
| - (ENTROPY_CONTEXT *)vpx_calloc(2 * mi_cols_aligned_to_sb(cm->mi_cols) *
|
| - MAX_MB_PLANE,
|
| - sizeof(*cm->above_context));
|
| - if (!cm->above_context)
|
| - goto fail;
|
| -
|
| - cm->above_seg_context =
|
| - (PARTITION_CONTEXT *)vpx_calloc(mi_cols_aligned_to_sb(cm->mi_cols),
|
| - sizeof(*cm->above_seg_context));
|
| - if (!cm->above_seg_context)
|
| - goto fail;
|
| -
|
| - return 0;
|
| -
|
| - fail:
|
| - vp9_free_context_buffers(cm);
|
| - return 1;
|
| -}
|
| -
|
| void vp9_remove_common(VP9_COMMON *cm) {
|
| - vp9_free_frame_buffers(cm);
|
| + vp9_free_ref_frame_buffers(cm);
|
| vp9_free_context_buffers(cm);
|
| vp9_free_internal_frame_buffers(&cm->int_frame_buffers);
|
| }
|
|
|
| -void vp9_update_frame_size(VP9_COMMON *cm) {
|
| - const int aligned_width = ALIGN_POWER_OF_TWO(cm->width, MI_SIZE_LOG2);
|
| - const int aligned_height = ALIGN_POWER_OF_TWO(cm->height, MI_SIZE_LOG2);
|
| -
|
| - set_mb_mi(cm, aligned_width, aligned_height);
|
| +void vp9_init_context_buffers(VP9_COMMON *cm) {
|
| setup_mi(cm);
|
| -
|
| - // Initialize the previous frame segment map to 0.
|
| if (cm->last_frame_seg_map)
|
| vpx_memset(cm->last_frame_seg_map, 0, cm->mi_rows * cm->mi_cols);
|
| }
|
|
|