summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_encoder.c
diff options
context:
space:
mode:
authorJerome Jiang <jianj@google.com>2017-04-06 02:57:07 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-04-06 02:57:08 +0000
commit705fc9f107d769e5d48640c20a7abf96eae297d8 (patch)
treef888adfd5797c51ce06ee79f5230a7ce89a951e9 /vp9/encoder/vp9_encoder.c
parent511a20744491d31e9a4113a47982fbfb209de0dd (diff)
parent58ba880b941ee263e434db2ec609c33f0424e17d (diff)
downloadlibvpx-705fc9f107d769e5d48640c20a7abf96eae297d8.tar
libvpx-705fc9f107d769e5d48640c20a7abf96eae297d8.tar.gz
libvpx-705fc9f107d769e5d48640c20a7abf96eae297d8.tar.bz2
libvpx-705fc9f107d769e5d48640c20a7abf96eae297d8.zip
Merge "Refactor: Clean memory allocation for copy partition."
Diffstat (limited to 'vp9/encoder/vp9_encoder.c')
-rw-r--r--vp9/encoder/vp9_encoder.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c
index 141577ba7..1dc70d2d3 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 &&