int sb_pickmode_part;
+ int zero_temp_sad_source;
+
// For each superblock: saves the content value (e.g., low/high sad/sumdiff)
// based on source sad, prior to encoding the frame.
uint8_t content_state_sb;
cpi->content_state_sb_fd[sb_offset] = 0;
}
}
+ if (tmp_sad == 0) x->zero_temp_sad_source = 1;
return tmp_sad;
}
x->skip_low_source_sad = 0;
x->lowvar_highsumdiff = 0;
x->content_state_sb = 0;
+ x->zero_temp_sad_source = 0;
x->sb_use_mv_part = 0;
x->sb_mvcol_part = 0;
x->sb_mvrow_part = 0;
struct macroblockd_plane *const pd = &xd->plane[0];
const uint32_t dc_quant = pd->dequant[0];
const uint32_t ac_quant = pd->dequant[1];
- const int64_t dc_thr = dc_quant * dc_quant >> 6;
+ int64_t dc_thr = dc_quant * dc_quant >> 6;
int64_t ac_thr = ac_quant * ac_quant >> 6;
unsigned int var;
int sum;
assert(tx_size >= TX_8X8);
xd->mi[0]->tx_size = tx_size;
+ if (cpi->oxcf.content == VP9E_CONTENT_SCREEN && x->zero_temp_sad_source &&
+ x->source_variance == 0)
+ dc_thr = dc_thr << 1;
+
// Evaluate if the partition block is a skippable block in Y plane.
{
unsigned int sse16x16[16] = { 0 };
#endif // CONFIG_VP9_HIGHBITDEPTH
x->source_variance =
vp9_get_sby_perpixel_variance(cpi, &x->plane[0].src, bsize);
+
+ if (cpi->oxcf.content == VP9E_CONTENT_SCREEN && mi->segment_id > 0 &&
+ x->zero_temp_sad_source && x->source_variance == 0) {
+ mi->segment_id = 0;
+ vp9_init_plane_quantizers(cpi, x);
+ }
}
#if CONFIG_VP9_TEMPORAL_DENOISING