AV1 RT: Dynamically allocate space for 64x64 blocks Change-Id: I24d261c446eaede0fdc32effff235f58cc5542a9
diff --git a/av1/encoder/var_based_part.c b/av1/encoder/var_based_part.c index 2202d37..dddc21f 100644 --- a/av1/encoder/var_based_part.c +++ b/av1/encoder/var_based_part.c
@@ -79,7 +79,7 @@ typedef struct { partition_variance part_variances; - v64x64 split[4]; + v64x64 *split; } v128x128; typedef struct { @@ -642,11 +642,14 @@ unsigned int y_sad = UINT_MAX; unsigned int y_sad_g = UINT_MAX; BLOCK_SIZE bsize = is_small_sb ? BLOCK_64X64 : BLOCK_128X128; + v64x64 *vt64x64 = NULL; // Ref frame used in partitioning. MV_REFERENCE_FRAME ref_frame_partition = LAST_FRAME; + CHECK_MEM_ERROR(cm, vt64x64, aom_malloc(sizeof(*vt64x64) * num_64x64_blocks)); CHECK_MEM_ERROR(cm, vt, aom_malloc(sizeof(*vt))); + vt->split = vt64x64; int64_t thresholds[5] = { cpi->vbp_thresholds[0], cpi->vbp_thresholds[1], cpi->vbp_thresholds[2], cpi->vbp_thresholds[3], @@ -1012,6 +1015,7 @@ } chroma_check(cpi, x, bsize, y_sad, is_key_frame); + if (vt64x64) aom_free(vt64x64); if (vt2) aom_free(vt2); if (vt) aom_free(vt); return 0;