From 441e2eab1b86ca77521a084abfc2fbbf96c4abb9 Mon Sep 17 00:00:00 2001 From: John Koleszar Date: Wed, 20 Mar 2013 10:22:20 -0700 Subject: Add an in-loop deringing experiment Adds a per-frame, strength adjustable, in loop deringing filter. Uses the existing vp9_post_proc_down_and_across 5 tap thresholded blur code, with a brute force search for the threshold. Results almost strictly positive on the YT HD set, either having no effect or helping PSNR in the range of 1-3% (overall average 0.8%). Results more mixed for the CIF set, (-0.5 min, 1.4 max, 0.1 avg). This has an almost strictly negative impact to SSIM, so examining a different filter or a more balanced search heuristic is in order. Other test set results pending. Change-Id: I5ca6ee8fe292dfa3f2eab7f65332423fa1710b58 --- vp9/decoder/vp9_decodframe.c | 6 ++++++ vp9/decoder/vp9_onyxd_if.c | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'vp9/decoder') diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c index 16ed9a737..cb6421f63 100644 --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@ -1508,6 +1508,12 @@ int vp9_decode_frame(VP9D_COMP *pbi, const unsigned char **p_data_end) { pc->filter_type = (LOOPFILTERTYPE) vp9_read_bit(&header_bc); pc->filter_level = vp9_read_literal(&header_bc, 6); pc->sharpness_level = vp9_read_literal(&header_bc, 3); +#if CONFIG_LOOP_DERING + if (vp9_read_bit(&header_bc)) + pc->dering_enabled = 1 + vp9_read_literal(&header_bc, 4); + else + pc->dering_enabled = 0; +#endif /* Read in loop filter deltas applied at the MB level based on mode or ref frame. */ xd->mode_ref_lf_delta_update = 0; diff --git a/vp9/decoder/vp9_onyxd_if.c b/vp9/decoder/vp9_onyxd_if.c index a243f41fd..bcb5897e6 100644 --- a/vp9/decoder/vp9_onyxd_if.c +++ b/vp9/decoder/vp9_onyxd_if.c @@ -356,7 +356,8 @@ int vp9_receive_compressed_data(VP9D_PTR ptr, unsigned long size, if (cm->filter_level) { /* Apply the loop filter if appropriate. */ - vp9_loop_filter_frame(cm, &pbi->mb, cm->filter_level, 0); + vp9_loop_filter_frame(cm, &pbi->mb, cm->filter_level, 0, + cm->dering_enabled); } vp8_yv12_extend_frame_borders(cm->frame_to_show); } -- cgit v1.2.3