ref: 7e1137a5dca47f28565caee2c14ac507ad6fdf5c
parent: 247c5a117a0851af4fcb505960d4efea113fc192
parent: f774e0d54060a0af82a8b3ec94b5cf4c96c1960d
author: Jingning Han <jingning@google.com>
date: Tue Aug 21 22:47:57 EDT 2018
Merge "Allow codec to skip temporal filter for intermediate ARFs"
--- a/vp9/encoder/vp9_temporal_filter.c
+++ b/vp9/encoder/vp9_temporal_filter.c
@@ -786,6 +786,7 @@
static void adjust_arnr_filter(VP9_COMP *cpi, int distance, int group_boost,
int *arnr_frames, int *arnr_strength) {
const VP9EncoderConfig *const oxcf = &cpi->oxcf;
+ const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
const int frames_after_arf =
vp9_lookahead_depth(cpi->lookahead) - distance - 1;
int frames_fwd = (cpi->oxcf.arnr_max_frames - 1) >> 1;
@@ -839,12 +840,15 @@
}
// Adjustments for second level arf in multi arf case.
- if (cpi->oxcf.pass == 2 && cpi->multi_arf_allowed) {
- const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
- if (gf_group->rf_level[gf_group->index] != GF_ARF_STD) {
- strength >>= 1;
- }
- }
+ if (cpi->oxcf.pass == 2 && cpi->multi_arf_allowed)
+ if (gf_group->rf_level[gf_group->index] != GF_ARF_STD) strength >>= 1;
+
+ // TODO(jingning): Skip temporal filtering for intermediate frames that will
+ // be used as show_existing_frame. Need to further explore the possibility to
+ // apply certain filter.
+ if (gf_group->arf_src_offset[gf_group->index] <
+ cpi->rc.baseline_gf_interval - 1)
+ frames = 1;
*arnr_frames = frames;
*arnr_strength = strength;