ref: 1ff68ec035e104c238e49cb4ab001651f38b3c1d
parent: 10cb17aec0c9dac4ac3d250d026baa9c014df35a
parent: 6c0011a2559ca56bc03fb06abf998b0b0ab90169
author: Marco Paniconi <marpan@google.com>
date: Thu Nov 9 19:30:04 EST 2017
Merge "vp9-svc: Avoid minmax variance for non-reference frames."
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -1202,6 +1202,7 @@
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 @@
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 @@
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)) {