From 58ba880b941ee263e434db2ec609c33f0424e17d Mon Sep 17 00:00:00 2001 From: Jerome Jiang Date: Fri, 31 Mar 2017 14:24:03 -0700 Subject: [PATCH] Refactor: Clean memory allocation for copy partition. Move the memory allocation from setting speed features. Change-Id: I2e89dfaeb46daee63effe5a5df62feed732aa990 --- vp9/encoder/vp9_encoder.c | 29 +++++++++++++++++++++++++++++ vp9/encoder/vp9_speed_features.c | 21 +-------------------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 48de1aeb6..5b60c2853 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -1445,6 +1445,33 @@ static void realloc_segmentation_maps(VP9_COMP *cpi) { vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); } +static void alloc_copy_partition_data(VP9_COMP *cpi) { + VP9_COMMON *const cm = &cpi->common; + if (cpi->prev_partition == NULL) { + CHECK_MEM_ERROR(cm, cpi->prev_partition, + (BLOCK_SIZE *)vpx_calloc(cm->mi_stride * cm->mi_rows, + sizeof(*cpi->prev_partition))); + } + if (cpi->prev_segment_id == NULL) { + CHECK_MEM_ERROR( + cm, cpi->prev_segment_id, + (int8_t *)vpx_calloc((cm->mi_stride >> 3) * ((cm->mi_rows >> 3) + 1), + sizeof(*cpi->prev_segment_id))); + } + if (cpi->prev_variance_low == NULL) { + CHECK_MEM_ERROR(cm, cpi->prev_variance_low, + (uint8_t *)vpx_calloc( + (cm->mi_stride >> 3) * ((cm->mi_rows >> 3) + 1) * 25, + sizeof(*cpi->prev_variance_low))); + } + if (cpi->copied_frame_cnt == NULL) { + CHECK_MEM_ERROR( + cm, cpi->copied_frame_cnt, + (uint8_t *)vpx_calloc((cm->mi_stride >> 3) * ((cm->mi_rows >> 3) + 1), + sizeof(*cpi->copied_frame_cnt))); + } +} + void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) { VP9_COMMON *const cm = &cpi->common; RATE_CONTROL *const rc = &cpi->rc; @@ -3197,6 +3224,8 @@ static void encode_without_recode_loop(VP9_COMP *cpi, size_t *size, set_size_independent_vars(cpi); set_size_dependent_vars(cpi, &q, &bottom_index, &top_index); + if (cpi->sf.copy_partition_flag) alloc_copy_partition_data(cpi); + if (cpi->oxcf.speed >= 5 && cpi->oxcf.pass == 0 && cpi->oxcf.rc_mode == VPX_CBR && cpi->oxcf.content != VP9E_CONTENT_SCREEN && diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c index c06ca03d4..08b08b07e 100644 --- a/vp9/encoder/vp9_speed_features.c +++ b/vp9/encoder/vp9_speed_features.c @@ -525,28 +525,9 @@ static void set_rt_speed_feature_framesize_independent( sf->adaptive_rd_thresh = 4; // Enable partition copy if (!cpi->use_svc && !cpi->resize_pending && cpi->resize_state == ORIG && - !cpi->external_resize && cpi->oxcf.resize_mode == RESIZE_NONE) + !cpi->external_resize && cpi->oxcf.resize_mode == RESIZE_NONE) { sf->copy_partition_flag = 1; - - if (sf->copy_partition_flag) { cpi->max_copied_frame = 4; - if (cpi->prev_partition == NULL) { - cpi->prev_partition = (BLOCK_SIZE *)vpx_calloc( - cm->mi_stride * cm->mi_rows, sizeof(BLOCK_SIZE)); - } - if (cpi->prev_segment_id == NULL) { - cpi->prev_segment_id = (int8_t *)vpx_calloc( - (cm->mi_stride >> 3) * ((cm->mi_rows >> 3) + 1), sizeof(int8_t)); - } - if (cpi->prev_variance_low == NULL) { - cpi->prev_variance_low = (uint8_t *)vpx_calloc( - (cm->mi_stride >> 3) * ((cm->mi_rows >> 3) + 1) * 25, - sizeof(uint8_t)); - } - if (cpi->copied_frame_cnt == NULL) { - cpi->copied_frame_cnt = (uint8_t *)vpx_calloc( - (cm->mi_stride >> 3) * ((cm->mi_rows >> 3) + 1), sizeof(uint8_t)); - } } if (cpi->row_mt && cpi->oxcf.max_threads > 1) -- 2.40.0