summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2019-03-01 15:37:58 +0000
committerPaul Wilkins <paulwilkins@google.com>2019-03-28 13:30:11 +0000
commitd6cd3b7ec001620922f52544a81ae84a694cafbb (patch)
treece3cf926f36e3d5510f1177fe698825237caed94
parentdc6e6fbdcc7aee0d2ff7984e974ae045bd9805c9 (diff)
downloadlibvpx-d6cd3b7ec001620922f52544a81ae84a694cafbb.tar
libvpx-d6cd3b7ec001620922f52544a81ae84a694cafbb.tar.gz
libvpx-d6cd3b7ec001620922f52544a81ae84a694cafbb.tar.bz2
libvpx-d6cd3b7ec001620922f52544a81ae84a694cafbb.zip
Adjustment to low variance block bias in rd_variance_adjustment()
Adjust the extra bias applied for very low variance blocks to focus mainly on DC_PRED. Change-Id: I8f1c1a29932f319535807046846b604b5b8827c1
-rw-r--r--vp9/encoder/vp9_rdopt.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c
index 27c580107..a01cf964d 100644
--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -3131,7 +3131,8 @@ static unsigned int max_var_adjust[VP9E_CONTENT_INVALID] = { 16, 16, 250 };
static void rd_variance_adjustment(VP9_COMP *cpi, MACROBLOCK *x,
BLOCK_SIZE bsize, int64_t *this_rd,
struct buf_2d *recon,
- MV_REFERENCE_FRAME ref_frame) {
+ MV_REFERENCE_FRAME ref_frame,
+ PREDICTION_MODE this_mode) {
MACROBLOCKD *const xd = &x->e_mbd;
unsigned int rec_variance;
unsigned int src_variance;
@@ -3183,8 +3184,12 @@ static void rd_variance_adjustment(VP9_COMP *cpi, MACROBLOCK *x,
if (content_type == VP9E_CONTENT_FILM) {
if (src_rec_min <= LOW_VAR_THRESH / 2) {
- if (ref_frame == INTRA_FRAME) *this_rd *= 2;
- if (bsize > BLOCK_16X16) *this_rd *= 2;
+ if (ref_frame == INTRA_FRAME) {
+ if (this_mode == DC_PRED)
+ *this_rd *= 2;
+ else
+ *this_rd += (*this_rd / 4);
+ }
}
}
@@ -3726,7 +3731,8 @@ void vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, TileDataEnc *tile_data,
// Apply an adjustment to the rd value based on the similarity of the
// source variance and reconstructed variance.
if (recon) {
- rd_variance_adjustment(cpi, x, bsize, &this_rd, recon, ref_frame);
+ rd_variance_adjustment(cpi, x, bsize, &this_rd, recon, ref_frame,
+ this_mode);
}
if (ref_frame == INTRA_FRAME) {