From: Marco Paniconi Date: Thu, 3 Jan 2013 23:47:34 +0000 (-0800) Subject: Use seg/ref/mode offsets in loop_filter_partial. X-Git-Tag: v1.3.0~1216 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bdca030cafc31446afc1685906f7c44e1850ed84;p=libvpx Use seg/ref/mode offsets in loop_filter_partial. Use the proper seg/mode/ref filter offsets when selecting the frame loop filter level for fast mode (pick_filter_level_fast). Change-Id: I2473e2131c800ad19755cb6211ad735fecfe2ac0 --- diff --git a/vp8/common/loopfilter.c b/vp8/common/loopfilter.c index 2b1ee851b..8681b7a6a 100644 --- a/vp8/common/loopfilter.c +++ b/vp8/common/loopfilter.c @@ -567,46 +567,28 @@ void vp8_loop_filter_partial_frame int mb_cols = post->y_width >> 4; int mb_rows = post->y_height >> 4; - int linestocopy, i; + int linestocopy; loop_filter_info_n *lfi_n = &cm->lf_info; loop_filter_info lfi; int filter_level; - int alt_flt_enabled = mbd->segmentation_enabled; FRAME_TYPE frame_type = cm->frame_type; const MODE_INFO *mode_info_context; - int lvl_seg[MAX_MB_SEGMENTS]; +#if 0 + if(default_filt_lvl == 0) /* no filter applied */ + return; +#endif + + /* Initialize the loop filter for this frame. */ + vp8_loop_filter_frame_init( cm, mbd, default_filt_lvl); /* number of MB rows to use in partial filtering */ linestocopy = mb_rows / PARTIAL_FRAME_FRACTION; linestocopy = linestocopy ? linestocopy << 4 : 16; /* 16 lines per MB */ - /* Note the baseline filter values for each segment */ - /* See vp8_loop_filter_frame_init. Rather than call that for each change - * to default_filt_lvl, copy the relevant calculation here. - */ - if (alt_flt_enabled) - { - for (i = 0; i < MAX_MB_SEGMENTS; i++) - { /* Abs value */ - if (mbd->mb_segement_abs_delta == SEGMENT_ABSDATA) - { - lvl_seg[i] = mbd->segment_feature_data[MB_LVL_ALT_LF][i]; - } - /* Delta Value */ - else - { - lvl_seg[i] = default_filt_lvl - + mbd->segment_feature_data[MB_LVL_ALT_LF][i]; - lvl_seg[i] = (lvl_seg[i] > 0) ? - ((lvl_seg[i] > 63) ? 63: lvl_seg[i]) : 0; - } - } - } - /* Set up the buffer pointers; partial image starts at ~middle of frame */ y_ptr = post->y_buffer + ((post->y_height >> 5) * 16) * post->y_stride; mode_info_context = cm->mi + (post->y_height >> 5) * (mb_cols + 1); @@ -620,10 +602,12 @@ void vp8_loop_filter_partial_frame mode_info_context->mbmi.mode != SPLITMV && mode_info_context->mbmi.mb_skip_coeff); - if (alt_flt_enabled) - filter_level = lvl_seg[mode_info_context->mbmi.segment_id]; - else - filter_level = default_filt_lvl; + const int mode_index = + lfi_n->mode_lf_lut[mode_info_context->mbmi.mode]; + const int seg = mode_info_context->mbmi.segment_id; + const int ref_frame = mode_info_context->mbmi.ref_frame; + + filter_level = lfi_n->lvl[seg][ref_frame][mode_index]; if (filter_level) {