diff options
Diffstat (limited to 'vp9/common')
-rw-r--r-- | vp9/common/vp9_alloccommon.c | 151 | ||||
-rw-r--r-- | vp9/common/vp9_alloccommon.h | 2 | ||||
-rw-r--r-- | vp9/common/vp9_enums.h | 2 | ||||
-rw-r--r-- | vp9/common/vp9_onyxc_int.h | 5 |
4 files changed, 68 insertions, 92 deletions
diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c index ef14e1ab6..b770d0505 100644 --- a/vp9/common/vp9_alloccommon.c +++ b/vp9/common/vp9_alloccommon.c @@ -10,41 +10,39 @@ #include "./vpx_config.h" -#include "vp9/common/vp9_blockd.h" #include "vpx_mem/vpx_mem.h" -#include "vp9/common/vp9_onyxc_int.h" -#include "vp9/common/vp9_findnearmv.h" +#include "vp9/common/vp9_blockd.h" #include "vp9/common/vp9_entropymode.h" #include "vp9/common/vp9_entropymv.h" +#include "vp9/common/vp9_findnearmv.h" +#include "vp9/common/vp9_onyxc_int.h" #include "vp9/common/vp9_systemdependent.h" - -void vp9_update_mode_info_border(VP9_COMMON *cpi, MODE_INFO *mi) { - const int stride = cpi->mode_info_stride; +void vp9_update_mode_info_border(VP9_COMMON *cm, MODE_INFO *mi) { + const int stride = cm->mode_info_stride; int i; // Clear down top border row vpx_memset(mi, 0, sizeof(MODE_INFO) * stride); // Clear left border column - for (i = 1; i < cpi->mi_rows + 1; i++) + for (i = 1; i < cm->mi_rows + 1; i++) vpx_memset(&mi[i * stride], 0, sizeof(MODE_INFO)); } -void vp9_update_mode_info_in_image(VP9_COMMON *cpi, MODE_INFO *mi) { +void vp9_update_mode_info_in_image(VP9_COMMON *cm, MODE_INFO *mi) { int i, j; - MODE_INFO *ptr; // For each in image mode_info element set the in image flag to 1 - for (i = 0; i < cpi->mi_rows; i++) { - ptr = mi; - for (j = 0; j < cpi->mi_cols; j++) { + for (i = 0; i < cm->mi_rows; i++) { + MODE_INFO *ptr = mi; + for (j = 0; j < cm->mi_cols; j++) { ptr->mbmi.mb_in_image = 1; ptr++; // Next element in the row } // Step over border element at start of next row - mi += cpi->mode_info_stride; + mi += cm->mode_info_stride; } } @@ -69,23 +67,46 @@ void vp9_free_frame_buffers(VP9_COMMON *oci) { oci->above_seg_context = 0; } +static void set_mb_mi(VP9_COMMON *cm, int aligned_width, int aligned_height) { + cm->mb_cols = aligned_width >> 4; + cm->mb_rows = aligned_height >> 4; + cm->MBs = cm->mb_rows * cm->mb_cols; + + cm->mi_cols = aligned_width >> LOG2_MI_SIZE; + cm->mi_rows = aligned_height >> LOG2_MI_SIZE; + cm->mode_info_stride = cm->mi_cols + 1; +} + +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; + + 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); + + 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 *oci, int width, int height) { int i, mi_cols; // Our internal buffers are always multiples of 16 const int aligned_width = multiple16(width); const int aligned_height = multiple16(height); + const int ss_x = oci->subsampling_x; + const int ss_y = oci->subsampling_y; vp9_free_frame_buffers(oci); for (i = 0; i < NUM_YV12_BUFFERS; i++) { oci->fb_idx_ref_cnt[i] = 0; - if (vp9_alloc_frame_buffer(&oci->yv12_fb[i], width, height, - oci->subsampling_x, oci->subsampling_y, - VP9BORDERINPIXELS) < 0) { - vp9_free_frame_buffers(oci); - return 1; - } + if (vp9_alloc_frame_buffer(&oci->yv12_fb[i], width, height, ss_x, ss_y, + VP9BORDERINPIXELS) < 0) + goto fail; } oci->new_fb_idx = NUM_YV12_BUFFERS - 1; @@ -99,47 +120,28 @@ int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) { oci->fb_idx_ref_cnt[i] = 1; } - if (vp9_alloc_frame_buffer(&oci->temp_scale_frame, width, 16, - oci->subsampling_x, oci->subsampling_y, - VP9BORDERINPIXELS) < 0) { - vp9_free_frame_buffers(oci); - return 1; - } + if (vp9_alloc_frame_buffer(&oci->temp_scale_frame, width, 16, ss_x, ss_y, + VP9BORDERINPIXELS) < 0) + goto fail; - if (vp9_alloc_frame_buffer(&oci->post_proc_buffer, width, height, - oci->subsampling_x, oci->subsampling_y, - VP9BORDERINPIXELS) < 0) { - vp9_free_frame_buffers(oci); - return 1; - } + if (vp9_alloc_frame_buffer(&oci->post_proc_buffer, width, height, ss_x, ss_y, + VP9BORDERINPIXELS) < 0) + goto fail; + + set_mb_mi(oci, aligned_width, aligned_height); - oci->mb_rows = aligned_height >> 4; - oci->mi_rows = aligned_height >> LOG2_MI_SIZE; - oci->mb_cols = aligned_width >> 4; - oci->mi_cols = aligned_width >> LOG2_MI_SIZE; - oci->MBs = oci->mb_rows * oci->mb_cols; - oci->mode_info_stride = oci->mi_cols + 1; + // Allocation oci->mip = vpx_calloc(oci->mode_info_stride * (oci->mi_rows + 1), sizeof(MODE_INFO)); - - if (!oci->mip) { - vp9_free_frame_buffers(oci); - return 1; - } - - oci->mi = oci->mip + oci->mode_info_stride + 1; - - /* allocate memory for last frame MODE_INFO array */ + if (!oci->mip) + goto fail; oci->prev_mip = vpx_calloc(oci->mode_info_stride * (oci->mi_rows + 1), sizeof(MODE_INFO)); + if (!oci->prev_mip) + goto fail; - if (!oci->prev_mip) { - vp9_free_frame_buffers(oci); - return 1; - } - - oci->prev_mi = oci->prev_mip + oci->mode_info_stride + 1; + setup_mi(oci); // FIXME(jkoleszar): allocate subsampled arrays for U/V once subsampling // information is exposed at this level @@ -150,26 +152,22 @@ int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) { #else oci->above_context[0] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * 6 * mi_cols, 1); #endif - if (!oci->above_context[0]) { - vp9_free_frame_buffers(oci); - return 1; - } + if (!oci->above_context[0]) + goto fail; + for (i = 1; i < MAX_MB_PLANE; i++) oci->above_context[i] = oci->above_context[0] + i * sizeof(ENTROPY_CONTEXT) * 2 * mi_cols; - oci->above_seg_context = - vpx_calloc(sizeof(PARTITION_CONTEXT) * mi_cols, 1); - - if (!oci->above_seg_context) { - vp9_free_frame_buffers(oci); - return 1; - } - - vp9_update_mode_info_border(oci, oci->mip); - vp9_update_mode_info_in_image(oci, oci->mi); + oci->above_seg_context = vpx_calloc(sizeof(PARTITION_CONTEXT) * mi_cols, 1); + if (!oci->above_seg_context) + goto fail; return 0; + + fail: + vp9_free_frame_buffers(oci); + return 1; } void vp9_setup_version(VP9_COMMON *cm) { @@ -222,27 +220,10 @@ void vp9_initialize_common() { vp9_entropy_mv_init(); } - void vp9_update_frame_size(VP9_COMMON *cm) { const int aligned_width = multiple16(cm->width); const int aligned_height = multiple16(cm->height); - cm->mb_rows = aligned_height >> 4; - cm->mb_cols = aligned_width >> 4; - - cm->mi_rows = aligned_height >> LOG2_MI_SIZE; - cm->mi_cols = aligned_width >> LOG2_MI_SIZE; - - cm->MBs = cm->mb_rows * cm->mb_cols; - cm->mode_info_stride = cm->mi_cols + 1; - cm->mi = cm->mip + cm->mode_info_stride + 1; - cm->prev_mi = cm->prev_mip + cm->mode_info_stride + 1; - - 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); - - vp9_update_mode_info_border(cm, cm->prev_mip); - vp9_update_mode_info_in_image(cm, cm->prev_mi); + set_mb_mi(cm, aligned_width, aligned_height); + setup_mi(cm); } diff --git a/vp9/common/vp9_alloccommon.h b/vp9/common/vp9_alloccommon.h index 814a7607a..fc79f6377 100644 --- a/vp9/common/vp9_alloccommon.h +++ b/vp9/common/vp9_alloccommon.h @@ -14,6 +14,8 @@ #include "vp9/common/vp9_onyxc_int.h" +void vp9_initialize_common(); + void vp9_update_mode_info_border(VP9_COMMON *cpi, MODE_INFO *mi); void vp9_update_mode_info_in_image(VP9_COMMON *cpi, MODE_INFO *mi); diff --git a/vp9/common/vp9_enums.h b/vp9/common/vp9_enums.h index 7fb0d895d..e18d353d3 100644 --- a/vp9/common/vp9_enums.h +++ b/vp9/common/vp9_enums.h @@ -16,8 +16,6 @@ #define LOG2_MI_SIZE 3 #define MI_SIZE (1 << LOG2_MI_SIZE) -#define MI_UV_SIZE (1 << (LOG2_MI_SIZE - 1)) - #define MI_MASK ((64 >> LOG2_MI_SIZE) - 1) typedef enum BLOCK_SIZE_TYPE { diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h index 665f00e91..ddc0c39ab 100644 --- a/vp9/common/vp9_onyxc_int.h +++ b/vp9/common/vp9_onyxc_int.h @@ -26,8 +26,6 @@ /* Create/destroy static data structures. */ -void vp9_initialize_common(void); - // Define the number of candidate reference buffers. #define NUM_REF_FRAMES 8 #define NUM_REF_FRAMES_LG2 3 @@ -248,9 +246,6 @@ typedef struct VP9Common { int near_boffset[3]; int version; -#ifdef PACKET_TESTING - VP9_HEADER oh; -#endif double bitrate; double framerate; |