ref: 58ba880b941ee263e434db2ec609c33f0424e17d
parent: 8e7c5a3c8db28b5367ae4431b5f2bf22b072b0b0
author: Jerome Jiang <jianj@google.com>
date: Fri Mar 31 10:24:03 EDT 2017
Refactor: Clean memory allocation for copy partition. Move the memory allocation from setting speed features. Change-Id: I2e89dfaeb46daee63effe5a5df62feed732aa990
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -1445,6 +1445,33 @@
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;
@@ -3196,6 +3223,8 @@
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 &&
--- a/vp9/encoder/vp9_speed_features.c
+++ b/vp9/encoder/vp9_speed_features.c
@@ -525,28 +525,9 @@
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)