diff --git a/vp9/common/vp9_entropymode.c b/vp9/common/vp9_entropymode.c index f4182443a67f83665cb3eec15d288200f8823561..865034913fd0f9f7009fa15fb0d5686d92d62e01 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 a57f766db5c97cd41eca41cd1a9b399a7f1ae0c1..4943e42afd647d543f2050536d931cb22b89ec2b 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); } } }