summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_picklpf.c
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2019-05-28 10:40:48 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-05-28 10:40:48 +0000
commitbaa2fa7fe7a5ce6f3fc7fc5e0fdd755d53c3b2b1 (patch)
tree59283acdeb084138536e0b0c9b90410f3761a7c8 /vp9/encoder/vp9_picklpf.c
parent73ab008d26a0b61920267b6d24b31101bbfde2f3 (diff)
parent4dce2d0f7d9991337d830e595ed8588e082dc9a2 (diff)
downloadlibvpx-baa2fa7fe7a5ce6f3fc7fc5e0fdd755d53c3b2b1.tar
libvpx-baa2fa7fe7a5ce6f3fc7fc5e0fdd755d53c3b2b1.tar.gz
libvpx-baa2fa7fe7a5ce6f3fc7fc5e0fdd755d53c3b2b1.tar.bz2
libvpx-baa2fa7fe7a5ce6f3fc7fc5e0fdd755d53c3b2b1.zip
Merge "Fix section intra rating for first ARF interval"
Diffstat (limited to 'vp9/encoder/vp9_picklpf.c')
-rw-r--r--vp9/encoder/vp9_picklpf.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/vp9/encoder/vp9_picklpf.c b/vp9/encoder/vp9_picklpf.c
index a81e52719..3a620df69 100644
--- a/vp9/encoder/vp9_picklpf.c
+++ b/vp9/encoder/vp9_picklpf.c
@@ -24,10 +24,20 @@
#include "vp9/encoder/vp9_picklpf.h"
#include "vp9/encoder/vp9_quantize.h"
+static unsigned int get_section_intra_rating(const VP9_COMP *cpi) {
+ unsigned int section_intra_rating;
+
+ section_intra_rating = (cpi->common.frame_type == KEY_FRAME)
+ ? cpi->twopass.key_frame_section_intra_rating
+ : cpi->twopass.section_intra_rating;
+
+ return section_intra_rating;
+}
+
static int get_max_filter_level(const VP9_COMP *cpi) {
if (cpi->oxcf.pass == 2) {
- return cpi->twopass.section_intra_rating > 8 ? MAX_LOOP_FILTER * 3 / 4
- : MAX_LOOP_FILTER;
+ unsigned int section_intra_rating = get_section_intra_rating(cpi);
+ return section_intra_rating > 8 ? MAX_LOOP_FILTER * 3 / 4 : MAX_LOOP_FILTER;
} else {
return MAX_LOOP_FILTER;
}
@@ -81,6 +91,7 @@ static int search_filter_level(const YV12_BUFFER_CONFIG *sd, VP9_COMP *cpi,
int filter_step = filt_mid < 16 ? 4 : filt_mid / 4;
// Sum squared error at each filter level
int64_t ss_err[MAX_LOOP_FILTER + 1];
+ unsigned int section_intra_rating = get_section_intra_rating(cpi);
// Set each entry to -1
memset(ss_err, 0xFF, sizeof(ss_err));
@@ -99,8 +110,8 @@ static int search_filter_level(const YV12_BUFFER_CONFIG *sd, VP9_COMP *cpi,
// Bias against raising loop filter in favor of lowering it.
int64_t bias = (best_err >> (15 - (filt_mid / 8))) * filter_step;
- if ((cpi->oxcf.pass == 2) && (cpi->twopass.section_intra_rating < 20))
- bias = (bias * cpi->twopass.section_intra_rating) / 20;
+ if ((cpi->oxcf.pass == 2) && (section_intra_rating < 20))
+ bias = (bias * section_intra_rating) / 20;
// yx, bias less for large block size
if (cm->tx_mode != ONLY_4X4) bias >>= 1;