From 6c0011a2559ca56bc03fb06abf998b0b0ab90169 Mon Sep 17 00:00:00 2001 From: Marco Date: Thu, 9 Nov 2017 15:24:10 -0800 Subject: [PATCH] vp9-svc: Avoid minmax variance for non-reference frames. For choose_partitioning (speed >= 6): avoid computation of minmax variance for non-reference frames in SVC. Existing condition only avoided this for speed >= 8. Combine that existing logic with non-reference condition. Small speedup (~0.5-1%) for 3 layer SVC, neutral change on avgPSNR/SSIM metrics. Change-Id: I3e9f3a1af0647b15e475cf170d9402908d672ee5 --- vp9/encoder/vp9_encodeframe.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index e47608631..9574c097a 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1202,6 +1202,7 @@ static int choose_partitioning(VP9_COMP *cpi, const TileInfo *const tile, const uint8_t *d; int sp; int dp; + int compute_minmax_variance = 1; unsigned int y_sad = UINT_MAX; BLOCK_SIZE bsize = BLOCK_64X64; // Ref frame used in partitioning. @@ -1226,6 +1227,9 @@ static int choose_partitioning(VP9_COMP *cpi, const TileInfo *const tile, set_offsets(cpi, tile, x, mi_row, mi_col, BLOCK_64X64); segment_id = xd->mi[0]->segment_id; + if (cpi->oxcf.speed >= 8 || (cpi->use_svc && cpi->svc.non_reference_frame)) + compute_minmax_variance = 0; + if (cpi->sf.use_source_sad && !is_key_frame) { int sb_offset2 = ((cm->mi_cols + 7) >> 3) * (mi_row >> 3) + (mi_col >> 3); content_state = x->content_state_sb; @@ -1448,7 +1452,7 @@ static int choose_partitioning(VP9_COMP *cpi, const TileInfo *const tile, force_split[split_index] = 1; force_split[i + 1] = 1; force_split[0] = 1; - } else if (cpi->oxcf.speed < 8 && + } else if (compute_minmax_variance && vt.split[i].split[j].part_variances.none.variance > thresholds[1] && !cyclic_refresh_segment_id_boosted(segment_id)) { -- 2.40.0