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); |
} |