| Index: source/libvpx/vp9/common/vp9_alloccommon.c
|
| ===================================================================
|
| --- source/libvpx/vp9/common/vp9_alloccommon.c (revision 281795)
|
| +++ source/libvpx/vp9/common/vp9_alloccommon.c (working copy)
|
| @@ -109,7 +109,9 @@
|
| }
|
|
|
| vp9_free_frame_buffer(&cm->post_proc_buffer);
|
| +}
|
|
|
| +void vp9_free_context_buffers(VP9_COMMON *cm) {
|
| free_mi(cm);
|
|
|
| vpx_free(cm->last_frame_seg_map);
|
| @@ -125,12 +127,15 @@
|
| 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;
|
|
|
| + // 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
|
|
|
| set_mb_mi(cm, aligned_width, aligned_height);
|
|
|
| @@ -165,37 +170,57 @@
|
|
|
| fail:
|
| vp9_free_frame_buffers(cm);
|
| + vp9_free_context_buffers(cm);
|
| return 1;
|
| }
|
|
|
| +static void init_frame_bufs(VP9_COMMON *cm) {
|
| + int i;
|
| +
|
| + cm->new_fb_idx = FRAME_BUFFERS - 1;
|
| + cm->frame_bufs[cm->new_fb_idx].ref_count = 1;
|
| +
|
| + for (i = 0; i < REF_FRAMES; ++i) {
|
| + cm->ref_frame_map[i] = i;
|
| + cm->frame_bufs[i].ref_count = 1;
|
| + }
|
| +}
|
| +
|
| int vp9_alloc_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);
|
| + int i;
|
| const int ss_x = cm->subsampling_x;
|
| const int ss_y = cm->subsampling_y;
|
| - int i;
|
|
|
| vp9_free_frame_buffers(cm);
|
|
|
| - for (i = 0; i < FRAME_BUFFERS; i++) {
|
| + for (i = 0; i < FRAME_BUFFERS; ++i) {
|
| cm->frame_bufs[i].ref_count = 0;
|
| if (vp9_alloc_frame_buffer(&cm->frame_bufs[i].buf, width, height,
|
| ss_x, ss_y, VP9_ENC_BORDER_IN_PIXELS) < 0)
|
| goto fail;
|
| }
|
|
|
| - cm->new_fb_idx = FRAME_BUFFERS - 1;
|
| - cm->frame_bufs[cm->new_fb_idx].ref_count = 1;
|
| + init_frame_bufs(cm);
|
|
|
| - for (i = 0; i < REF_FRAMES; i++) {
|
| - cm->ref_frame_map[i] = i;
|
| - cm->frame_bufs[i].ref_count = 1;
|
| - }
|
| -
|
| +#if CONFIG_INTERNAL_STATS || CONFIG_VP9_POSTPROC
|
| if (vp9_alloc_frame_buffer(&cm->post_proc_buffer, width, height, ss_x, ss_y,
|
| VP9_ENC_BORDER_IN_PIXELS) < 0)
|
| goto fail;
|
| +#endif
|
|
|
| + return 0;
|
| +
|
| + fail:
|
| + vp9_free_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)))
|
| @@ -224,12 +249,13 @@
|
| return 0;
|
|
|
| fail:
|
| - vp9_free_frame_buffers(cm);
|
| + vp9_free_context_buffers(cm);
|
| return 1;
|
| }
|
|
|
| void vp9_remove_common(VP9_COMMON *cm) {
|
| vp9_free_frame_buffers(cm);
|
| + vp9_free_context_buffers(cm);
|
| vp9_free_internal_frame_buffers(&cm->int_frame_buffers);
|
| }
|
|
|
|
|