From: Yaowu Xu Date: Thu, 4 Apr 2013 16:00:53 +0000 (-0700) Subject: make lf_deltas dependent on filter_lvl X-Git-Tag: v1.3.0~1106^2~226^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=888d0c82da0fd634aa8a03d6201540f343506d45;p=libvpx make lf_deltas dependent on filter_lvl Change-Id: Idb0d11e3ae9afabe667a9f327bf4d3aa84f63649 --- diff --git a/vp9/common/vp9_entropymode.c b/vp9/common/vp9_entropymode.c index f4182443a..865034913 100644 --- a/vp9/common/vp9_entropymode.c +++ b/vp9/common/vp9_entropymode.c @@ -671,15 +671,15 @@ static void set_default_lf_deltas(MACROBLOCKD *xd) { xd->mode_ref_lf_delta_enabled = 1; xd->mode_ref_lf_delta_update = 1; - xd->ref_lf_deltas[INTRA_FRAME] = 2; + xd->ref_lf_deltas[INTRA_FRAME] = 1; xd->ref_lf_deltas[LAST_FRAME] = 0; - xd->ref_lf_deltas[GOLDEN_FRAME] = -2; - xd->ref_lf_deltas[ALTREF_FRAME] = -2; + xd->ref_lf_deltas[GOLDEN_FRAME] = -1; + xd->ref_lf_deltas[ALTREF_FRAME] = -1; - xd->mode_lf_deltas[0] = 4; // I4X4_PRED - xd->mode_lf_deltas[1] = -2; // Zero - xd->mode_lf_deltas[2] = 2; // New mv - xd->mode_lf_deltas[3] = 4; // Split mv + xd->mode_lf_deltas[0] = 2; // I4X4_PRED + xd->mode_lf_deltas[1] = -1; // Zero + xd->mode_lf_deltas[2] = 1; // New mv + xd->mode_lf_deltas[3] = 2; // Split mv } void vp9_setup_past_independence(VP9_COMMON *cm, MACROBLOCKD *xd) { diff --git a/vp9/common/vp9_loopfilter.c b/vp9/common/vp9_loopfilter.c index a57f766db..4943e42af 100644 --- a/vp9/common/vp9_loopfilter.c +++ b/vp9/common/vp9_loopfilter.c @@ -83,9 +83,13 @@ void vp9_loop_filter_init(VP9_COMMON *cm) { void vp9_loop_filter_frame_init(VP9_COMMON *cm, MACROBLOCKD *xd, int default_filt_lvl) { - int seg, /* segment number */ - ref, /* index in ref_lf_deltas */ - mode; /* index in mode_lf_deltas */ + int seg, // segment number + ref, // index in ref_lf_deltas + mode; // index in mode_lf_deltas + // n_shift is the a multiplier for lf_deltas + // the multiplier is 1 for when filter_lvl is between 0 and 31; + // 2 when filter_lvl is between 32 and 63 + int n_shift = default_filt_lvl >> 5; loop_filter_info_n *lfi = &cm->lf_info; @@ -128,30 +132,29 @@ void vp9_loop_filter_frame_init(VP9_COMMON *cm, ref = INTRA_FRAME; /* Apply delta for reference frame */ - lvl_ref += xd->ref_lf_deltas[ref]; + lvl_ref += xd->ref_lf_deltas[ref] << n_shift; /* Apply delta for Intra modes */ mode = 0; /* I4X4_PRED */ /* Only the split mode I4X4_PRED has a further special case */ - lvl_mode = clamp(lvl_ref + xd->mode_lf_deltas[mode], 0, 63); - - lfi->lvl[seg][ref][mode] = lvl_mode; + lvl_mode = lvl_ref + (xd->mode_lf_deltas[mode] << n_shift); + lfi->lvl[seg][ref][mode] = clamp(lvl_mode, 0, 63); mode = 1; /* all the rest of Intra modes */ - lvl_mode = clamp(lvl_ref, 0, 63); - lfi->lvl[seg][ref][mode] = lvl_mode; + lvl_mode = lvl_ref; + lfi->lvl[seg][ref][mode] = clamp(lvl_mode, 0, 63); /* LAST, GOLDEN, ALT */ for (ref = 1; ref < MAX_REF_FRAMES; ref++) { int lvl_ref = lvl_seg; /* Apply delta for reference frame */ - lvl_ref += xd->ref_lf_deltas[ref]; + lvl_ref += xd->ref_lf_deltas[ref] << n_shift; /* Apply delta for Inter modes */ for (mode = 1; mode < 4; mode++) { - lvl_mode = clamp(lvl_ref + xd->mode_lf_deltas[mode], 0, 63); - lfi->lvl[seg][ref][mode] = lvl_mode; + lvl_mode = lvl_ref + (xd->mode_lf_deltas[mode] << n_shift); + lfi->lvl[seg][ref][mode] = clamp(lvl_mode, 0, 63); } } }