1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Use of this source code is governed by a BSD-style license
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  tree. An additional intellectual property rights grant can be found
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  in the file PATENTS.  All contributing project authors may
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_config.h"
136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h"
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "loopfilter.h"
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "onyxc_int.h"
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_mem/vpx_mem.h"
17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic void lf_init_lut(loop_filter_info_n *lfi)
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int filt_lvl;
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (filt_lvl = 0; filt_lvl <= MAX_LOOP_FILTER; filt_lvl++)
24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        if (filt_lvl >= 40)
26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            lfi->hev_thr_lut[KEY_FRAME][filt_lvl] = 2;
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            lfi->hev_thr_lut[INTER_FRAME][filt_lvl] = 3;
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        else if (filt_lvl >= 20)
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            lfi->hev_thr_lut[KEY_FRAME][filt_lvl] = 1;
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            lfi->hev_thr_lut[INTER_FRAME][filt_lvl] = 2;
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        else if (filt_lvl >= 15)
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            lfi->hev_thr_lut[KEY_FRAME][filt_lvl] = 1;
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            lfi->hev_thr_lut[INTER_FRAME][filt_lvl] = 1;
39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        else
41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            lfi->hev_thr_lut[KEY_FRAME][filt_lvl] = 0;
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            lfi->hev_thr_lut[INTER_FRAME][filt_lvl] = 0;
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[DC_PRED] = 1;
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[V_PRED] = 1;
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[H_PRED] = 1;
50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[TM_PRED] = 1;
51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[B_PRED]  = 0;
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[ZEROMV]  = 1;
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[NEARESTMV] = 2;
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[NEARMV] = 2;
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[NEWMV] = 2;
57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lfi->mode_lf_lut[SPLITMV] = 3;
58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_update_sharpness(loop_filter_info_n *lfi,
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                                      int sharpness_lvl)
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int i;
65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* For each possible value for the loop filter fill out limits */
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (i = 0; i <= MAX_LOOP_FILTER; i++)
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        int filt_lvl = i;
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        int block_inside_limit = 0;
71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        /* Set loop filter paramaeters that control sharpness. */
73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        block_inside_limit = filt_lvl >> (sharpness_lvl > 0);
74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        block_inside_limit = block_inside_limit >> (sharpness_lvl > 4);
75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        if (sharpness_lvl > 0)
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            if (block_inside_limit > (9 - sharpness_lvl))
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                block_inside_limit = (9 - sharpness_lvl);
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        if (block_inside_limit < 1)
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            block_inside_limit = 1;
84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vpx_memset(lfi->lim[i], block_inside_limit, SIMD_WIDTH);
86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vpx_memset(lfi->blim[i], (2 * filt_lvl + block_inside_limit),
87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                SIMD_WIDTH);
88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vpx_memset(lfi->mblim[i], (2 * (filt_lvl + 2) + block_inside_limit),
89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                SIMD_WIDTH);
90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_init(VP8_COMMON *cm)
94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    loop_filter_info_n *lfi = &cm->lf_info;
96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int i;
97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* init limits for given sharpness*/
99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_update_sharpness(lfi, cm->sharpness_level);
100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cm->last_sharpness_level = cm->sharpness_level;
101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* init LUT for lvl  and hev thr picking */
103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    lf_init_lut(lfi);
104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* init hev threshold const vectors */
106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for(i = 0; i < 4 ; i++)
107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vpx_memset(lfi->hev_thr[i], i, SIMD_WIDTH);
109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_frame_init(VP8_COMMON *cm,
113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                                MACROBLOCKD *mbd,
114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                                int default_filt_lvl)
115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int seg,  /* segment number */
117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        ref,  /* index in ref_lf_deltas */
118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mode; /* index in mode_lf_deltas */
119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    loop_filter_info_n *lfi = &cm->lf_info;
121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* update limits if sharpness has changed */
123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if(cm->last_sharpness_level != cm->sharpness_level)
124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_loop_filter_update_sharpness(lfi, cm->sharpness_level);
126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        cm->last_sharpness_level = cm->sharpness_level;
127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for(seg = 0; seg < MAX_MB_SEGMENTS; seg++)
130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        int lvl_seg = default_filt_lvl;
132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        int lvl_ref, lvl_mode;
133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        /* Note the baseline filter values for each segment */
135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        if (mbd->segmentation_enabled)
136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            /* Abs value */
138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            if (mbd->mb_segement_abs_delta == SEGMENT_ABSDATA)
139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            {
140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                lvl_seg = mbd->segment_feature_data[MB_LVL_ALT_LF][seg];
141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            }
142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            else  /* Delta Value */
143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            {
144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                lvl_seg += mbd->segment_feature_data[MB_LVL_ALT_LF][seg];
145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                lvl_seg = (lvl_seg > 0) ? ((lvl_seg > 63) ? 63: lvl_seg) : 0;
146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            }
147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        if (!mbd->mode_ref_lf_delta_enabled)
150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            /* we could get rid of this if we assume that deltas are set to
152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org             * zero when not in use; encoder always uses deltas
153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org             */
154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            vpx_memset(lfi->lvl[seg][0], lvl_seg, 4 * 4 );
155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            continue;
156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        /* INTRA_FRAME */
159474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        ref = INTRA_FRAME;
160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        /* Apply delta for reference frame */
162ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org        lvl_ref = lvl_seg + mbd->ref_lf_deltas[ref];
163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        /* Apply delta for Intra modes */
165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mode = 0; /* B_PRED */
166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        /* Only the split mode BPRED has a further special case */
167ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org        lvl_mode = lvl_ref + mbd->mode_lf_deltas[mode];
168ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org        /* clamp */
169ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org        lvl_mode = (lvl_mode > 0) ? (lvl_mode > 63 ? 63 : lvl_mode) : 0;
170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lfi->lvl[seg][ref][mode] = lvl_mode;
172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mode = 1; /* all the rest of Intra modes */
174ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org        /* clamp */
175ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org        lvl_mode = (lvl_ref > 0) ? (lvl_ref > 63 ? 63 : lvl_ref) : 0;
176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lfi->lvl[seg][ref][mode] = lvl_mode;
177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        /* LAST, GOLDEN, ALT */
179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        for(ref = 1; ref < MAX_REF_FRAMES; ref++)
180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            /* Apply delta for reference frame */
182ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org            lvl_ref = lvl_seg + mbd->ref_lf_deltas[ref];
183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            /* Apply delta for Inter modes */
185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            for (mode = 1; mode < 4; mode++)
186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            {
187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                lvl_mode = lvl_ref + mbd->mode_lf_deltas[mode];
188ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org                /* clamp */
189ab3cb4e3f1f39482ee3bd15c6918af868144d6dejohannkoenig@chromium.org                lvl_mode = (lvl_mode > 0) ? (lvl_mode > 63 ? 63 : lvl_mode) : 0;
190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                lfi->lvl[seg][ref][mode] = lvl_mode;
192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            }
193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
195474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
197ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
198ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_loop_filter_row_normal(VP8_COMMON *cm, MODE_INFO *mode_info_context,
199ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                         int mb_row, int post_ystride, int post_uvstride,
200ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                         unsigned char *y_ptr, unsigned char *u_ptr,
201ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                         unsigned char *v_ptr)
202ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{
203ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    int mb_col;
204ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    int filter_level;
205ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    loop_filter_info_n *lfi_n = &cm->lf_info;
206ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    loop_filter_info lfi;
207ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    FRAME_TYPE frame_type = cm->frame_type;
208ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
209ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    for (mb_col = 0; mb_col < cm->mb_cols; mb_col++)
210ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    {
211ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        int skip_lf = (mode_info_context->mbmi.mode != B_PRED &&
212ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                        mode_info_context->mbmi.mode != SPLITMV &&
213ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                        mode_info_context->mbmi.mb_skip_coeff);
214ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
215ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        const int mode_index = lfi_n->mode_lf_lut[mode_info_context->mbmi.mode];
216ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        const int seg = mode_info_context->mbmi.segment_id;
217ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        const int ref_frame = mode_info_context->mbmi.ref_frame;
218ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
219ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        filter_level = lfi_n->lvl[seg][ref_frame][mode_index];
220ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
221ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        if (filter_level)
222ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        {
223ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            const int hev_index = lfi_n->hev_thr_lut[frame_type][filter_level];
224ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            lfi.mblim = lfi_n->mblim[filter_level];
225ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            lfi.blim = lfi_n->blim[filter_level];
226ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            lfi.lim = lfi_n->lim[filter_level];
227ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            lfi.hev_thr = lfi_n->hev_thr[hev_index];
228ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
229ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if (mb_col > 0)
230ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                vp8_loop_filter_mbv
231ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                (y_ptr, u_ptr, v_ptr, post_ystride, post_uvstride, &lfi);
232ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
233ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if (!skip_lf)
234ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                vp8_loop_filter_bv
235ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                (y_ptr, u_ptr, v_ptr, post_ystride, post_uvstride, &lfi);
236ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
237ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            /* don't apply across umv border */
238ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if (mb_row > 0)
239ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                vp8_loop_filter_mbh
240ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                (y_ptr, u_ptr, v_ptr, post_ystride, post_uvstride, &lfi);
241ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
242ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if (!skip_lf)
243ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                vp8_loop_filter_bh
244ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                (y_ptr, u_ptr, v_ptr, post_ystride, post_uvstride, &lfi);
245ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        }
246ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
247ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        y_ptr += 16;
248ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        u_ptr += 8;
249ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        v_ptr += 8;
250ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
251ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        mode_info_context++;     /* step to next MB */
252ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    }
253ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
254ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}
255ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
256ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_loop_filter_row_simple(VP8_COMMON *cm, MODE_INFO *mode_info_context,
257ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                         int mb_row, int post_ystride, int post_uvstride,
258ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                         unsigned char *y_ptr, unsigned char *u_ptr,
259ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                         unsigned char *v_ptr)
260ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{
261ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    int mb_col;
262ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    int filter_level;
263ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    loop_filter_info_n *lfi_n = &cm->lf_info;
264ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
265ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    for (mb_col = 0; mb_col < cm->mb_cols; mb_col++)
266ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    {
267ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        int skip_lf = (mode_info_context->mbmi.mode != B_PRED &&
268ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                        mode_info_context->mbmi.mode != SPLITMV &&
269ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                        mode_info_context->mbmi.mb_skip_coeff);
270ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
271ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        const int mode_index = lfi_n->mode_lf_lut[mode_info_context->mbmi.mode];
272ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        const int seg = mode_info_context->mbmi.segment_id;
273ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        const int ref_frame = mode_info_context->mbmi.ref_frame;
274ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
275ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        filter_level = lfi_n->lvl[seg][ref_frame][mode_index];
276ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
277ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        if (filter_level)
278ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        {
279ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if (mb_col > 0)
280ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                vp8_loop_filter_simple_mbv
281ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                (y_ptr, post_ystride, lfi_n->mblim[filter_level]);
282ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
283ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if (!skip_lf)
284ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                vp8_loop_filter_simple_bv
285ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                (y_ptr, post_ystride, lfi_n->blim[filter_level]);
286ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
287ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            /* don't apply across umv border */
288ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if (mb_row > 0)
289ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                vp8_loop_filter_simple_mbh
290ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                (y_ptr, post_ystride, lfi_n->mblim[filter_level]);
291ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
292ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org            if (!skip_lf)
293ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                vp8_loop_filter_simple_bh
294ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                (y_ptr, post_ystride, lfi_n->blim[filter_level]);
295ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        }
296ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
297ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        y_ptr += 16;
298ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        u_ptr += 8;
299ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        v_ptr += 8;
300ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
301ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        mode_info_context++;     /* step to next MB */
302ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    }
303ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
304ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}
3055c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgvoid vp8_loop_filter_frame(VP8_COMMON *cm,
3065c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                           MACROBLOCKD *mbd,
3075c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                           int frame_type)
308474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
309474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    YV12_BUFFER_CONFIG *post = cm->frame_to_show;
310474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    loop_filter_info_n *lfi_n = &cm->lf_info;
311474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    loop_filter_info lfi;
312474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
313474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_row;
314474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_col;
3155c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    int mb_rows = cm->mb_rows;
3165c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    int mb_cols = cm->mb_cols;
317474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
318474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int filter_level;
319474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
320474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *y_ptr, *u_ptr, *v_ptr;
321474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
322474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Point at base of Mb MODE_INFO list */
323474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const MODE_INFO *mode_info_context = cm->mi;
3245c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    int post_y_stride = post->y_stride;
3255c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    int post_uv_stride = post->uv_stride;
326474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
327474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Initialize the loop filter for this frame. */
328474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_frame_init(cm, mbd, cm->filter_level);
329474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
330474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Set up the buffer pointers */
331474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    y_ptr = post->y_buffer;
332474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    u_ptr = post->u_buffer;
333474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    v_ptr = post->v_buffer;
334474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
335474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* vp8_filter each macro block */
3365c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    if (cm->filter_type == NORMAL_LOOPFILTER)
337474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
3385c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        for (mb_row = 0; mb_row < mb_rows; mb_row++)
339474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
3405c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            for (mb_col = 0; mb_col < mb_cols; mb_col++)
3415c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            {
3425c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                int skip_lf = (mode_info_context->mbmi.mode != B_PRED &&
3435c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                                mode_info_context->mbmi.mode != SPLITMV &&
3445c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                                mode_info_context->mbmi.mb_skip_coeff);
345474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
3465c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                const int mode_index = lfi_n->mode_lf_lut[mode_info_context->mbmi.mode];
3475c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                const int seg = mode_info_context->mbmi.segment_id;
3485c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                const int ref_frame = mode_info_context->mbmi.ref_frame;
349474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
3505c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                filter_level = lfi_n->lvl[seg][ref_frame][mode_index];
351474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
3525c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                if (filter_level)
353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                {
354474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    const int hev_index = lfi_n->hev_thr_lut[frame_type][filter_level];
355474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.mblim = lfi_n->mblim[filter_level];
356474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.blim = lfi_n->blim[filter_level];
357474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.lim = lfi_n->lim[filter_level];
358474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.hev_thr = lfi_n->hev_thr[hev_index];
359474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
360474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_col > 0)
3615c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_mbv
3625c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        (y_ptr, u_ptr, v_ptr, post_y_stride, post_uv_stride, &lfi);
363474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
364474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
3655c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_bv
3665c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        (y_ptr, u_ptr, v_ptr, post_y_stride, post_uv_stride, &lfi);
367474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
368474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    /* don't apply across umv border */
369474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_row > 0)
3705c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_mbh
3715c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        (y_ptr, u_ptr, v_ptr, post_y_stride, post_uv_stride, &lfi);
372474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
373474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
3745c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_bh
3755c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        (y_ptr, u_ptr, v_ptr, post_y_stride, post_uv_stride, &lfi);
376474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                }
3775c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
3785c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                y_ptr += 16;
3795c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                u_ptr += 8;
3805c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                v_ptr += 8;
3815c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
3825c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                mode_info_context++;     /* step to next MB */
3835c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            }
3845c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            y_ptr += post_y_stride  * 16 - post->y_width;
3855c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            u_ptr += post_uv_stride *  8 - post->uv_width;
3865c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            v_ptr += post_uv_stride *  8 - post->uv_width;
3875c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
3885c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            mode_info_context++;         /* Skip border mb */
3895c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
3905c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        }
3915c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    }
3925c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    else /* SIMPLE_LOOPFILTER */
3935c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    {
3945c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        for (mb_row = 0; mb_row < mb_rows; mb_row++)
3955c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        {
3965c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            for (mb_col = 0; mb_col < mb_cols; mb_col++)
3975c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            {
3985c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                int skip_lf = (mode_info_context->mbmi.mode != B_PRED &&
3995c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                                mode_info_context->mbmi.mode != SPLITMV &&
4005c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                                mode_info_context->mbmi.mb_skip_coeff);
4015c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
4025c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                const int mode_index = lfi_n->mode_lf_lut[mode_info_context->mbmi.mode];
4035c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                const int seg = mode_info_context->mbmi.segment_id;
4045c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                const int ref_frame = mode_info_context->mbmi.ref_frame;
4055c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
4065c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                filter_level = lfi_n->lvl[seg][ref_frame][mode_index];
4075c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                if (filter_level)
408474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                {
4095c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                    const unsigned char * mblim = lfi_n->mblim[filter_level];
4105c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                    const unsigned char * blim = lfi_n->blim[filter_level];
4115c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
412474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_col > 0)
4135c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_mbv
4145c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        (y_ptr, post_y_stride, mblim);
415474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
416474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
4175c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_bv
4185c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        (y_ptr, post_y_stride, blim);
419474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
420474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    /* don't apply across umv border */
421474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_row > 0)
4225c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_mbh
4235c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        (y_ptr, post_y_stride, mblim);
424474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
425474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
4265c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_bh
4275c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        (y_ptr, post_y_stride, blim);
428474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                }
429474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
4305c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                y_ptr += 16;
4315c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                u_ptr += 8;
4325c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                v_ptr += 8;
433474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
4345c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                mode_info_context++;     /* step to next MB */
4355c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            }
4365c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            y_ptr += post_y_stride  * 16 - post->y_width;
4375c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            u_ptr += post_uv_stride *  8 - post->uv_width;
4385c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            v_ptr += post_uv_stride *  8 - post->uv_width;
439474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
4405c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            mode_info_context++;         /* Skip border mb */
441474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
4425c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        }
443474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
444474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
445474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
446474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_frame_yonly
447474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org(
448474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    VP8_COMMON *cm,
449474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MACROBLOCKD *mbd,
450474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int default_filt_lvl
451474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org)
452474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
453474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    YV12_BUFFER_CONFIG *post = cm->frame_to_show;
454474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
455474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *y_ptr;
456474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_row;
457474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_col;
458474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
459474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    loop_filter_info_n *lfi_n = &cm->lf_info;
460474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    loop_filter_info lfi;
461474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
462474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int filter_level;
463474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    FRAME_TYPE frame_type = cm->frame_type;
464474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
465474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Point at base of Mb MODE_INFO list */
466474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const MODE_INFO *mode_info_context = cm->mi;
467474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
468474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if 0
469474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if(default_filt_lvl == 0) /* no filter applied */
470474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        return;
471474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
472474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
473474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Initialize the loop filter for this frame. */
474474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_frame_init( cm, mbd, default_filt_lvl);
475474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
476474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Set up the buffer pointers */
477474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    y_ptr = post->y_buffer;
478474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
479474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* vp8_filter each macro block */
480474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (mb_row = 0; mb_row < cm->mb_rows; mb_row++)
481474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
482474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        for (mb_col = 0; mb_col < cm->mb_cols; mb_col++)
483474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
484474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            int skip_lf = (mode_info_context->mbmi.mode != B_PRED &&
485474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                            mode_info_context->mbmi.mode != SPLITMV &&
486474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                            mode_info_context->mbmi.mb_skip_coeff);
487474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
488474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            const int mode_index = lfi_n->mode_lf_lut[mode_info_context->mbmi.mode];
489474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            const int seg = mode_info_context->mbmi.segment_id;
490474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            const int ref_frame = mode_info_context->mbmi.ref_frame;
491474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
492474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            filter_level = lfi_n->lvl[seg][ref_frame][mode_index];
493474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
494474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            if (filter_level)
495474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            {
496474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                if (cm->filter_type == NORMAL_LOOPFILTER)
497474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                {
498474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    const int hev_index = lfi_n->hev_thr_lut[frame_type][filter_level];
499474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.mblim = lfi_n->mblim[filter_level];
500474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.blim = lfi_n->blim[filter_level];
501474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.lim = lfi_n->lim[filter_level];
502474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.hev_thr = lfi_n->hev_thr[hev_index];
503474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
504474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_col > 0)
5055c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_mbv
506474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, 0, 0, post->y_stride, 0, &lfi);
507474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
508474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
5095c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_bv
510474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, 0, 0, post->y_stride, 0, &lfi);
511474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
512474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    /* don't apply across umv border */
513474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_row > 0)
5145c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_mbh
515474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, 0, 0, post->y_stride, 0, &lfi);
516474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
517474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
5185c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_bh
519474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, 0, 0, post->y_stride, 0, &lfi);
520474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                }
521474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                else
522474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                {
523474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_col > 0)
5245c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_mbv
525474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, post->y_stride, lfi_n->mblim[filter_level]);
526474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
527474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
5285c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_bv
529474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, post->y_stride, lfi_n->blim[filter_level]);
530474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
531474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    /* don't apply across umv border */
532474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_row > 0)
5335c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_mbh
534474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, post->y_stride, lfi_n->mblim[filter_level]);
535474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
536474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
5375c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_bh
538474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, post->y_stride, lfi_n->blim[filter_level]);
539474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                }
540474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            }
541474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
542474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            y_ptr += 16;
543474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            mode_info_context ++;        /* step to next MB */
544474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
545474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
546474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
547474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        y_ptr += post->y_stride  * 16 - post->y_width;
548474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mode_info_context ++;            /* Skip border mb */
549474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
550474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
551474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
552474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
553474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_partial_frame
554474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org(
555474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    VP8_COMMON *cm,
556474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MACROBLOCKD *mbd,
557474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int default_filt_lvl
558474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org)
559474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
560474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    YV12_BUFFER_CONFIG *post = cm->frame_to_show;
561474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
562474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char *y_ptr;
563474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_row;
564474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_col;
565167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    int mb_cols = post->y_width >> 4;
566167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    int mb_rows = post->y_height >> 4;
567474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
568d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org    int linestocopy;
569474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
570474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    loop_filter_info_n *lfi_n = &cm->lf_info;
571474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    loop_filter_info lfi;
572474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
573474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int filter_level;
574474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    FRAME_TYPE frame_type = cm->frame_type;
575474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
576474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    const MODE_INFO *mode_info_context;
577474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
578d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org#if 0
579d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org    if(default_filt_lvl == 0) /* no filter applied */
580d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org        return;
581d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org#endif
582d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org
583d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org    /* Initialize the loop filter for this frame. */
584d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org    vp8_loop_filter_frame_init( cm, mbd, default_filt_lvl);
585474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
586167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    /* number of MB rows to use in partial filtering */
587167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    linestocopy = mb_rows / PARTIAL_FRAME_FRACTION;
588167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    linestocopy = linestocopy ? linestocopy << 4 : 16;     /* 16 lines per MB */
589474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
590167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    /* Set up the buffer pointers; partial image starts at ~middle of frame */
591167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    y_ptr = post->y_buffer + ((post->y_height >> 5) * 16) * post->y_stride;
592167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    mode_info_context = cm->mi + (post->y_height >> 5) * (mb_cols + 1);
593474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
594474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* vp8_filter each macro block */
595474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (mb_row = 0; mb_row<(linestocopy >> 4); mb_row++)
596474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
597474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        for (mb_col = 0; mb_col < mb_cols; mb_col++)
598474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
599474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            int skip_lf = (mode_info_context->mbmi.mode != B_PRED &&
600474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                           mode_info_context->mbmi.mode != SPLITMV &&
601474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                           mode_info_context->mbmi.mb_skip_coeff);
602474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
603d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org            const int mode_index =
604d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org                lfi_n->mode_lf_lut[mode_info_context->mbmi.mode];
605d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org            const int seg = mode_info_context->mbmi.segment_id;
606d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org            const int ref_frame = mode_info_context->mbmi.ref_frame;
607d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org
608d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org            filter_level = lfi_n->lvl[seg][ref_frame][mode_index];
609474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
610474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            if (filter_level)
611474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            {
612474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                if (cm->filter_type == NORMAL_LOOPFILTER)
613474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                {
614474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    const int hev_index = lfi_n->hev_thr_lut[frame_type][filter_level];
615474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.mblim = lfi_n->mblim[filter_level];
616474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.blim = lfi_n->blim[filter_level];
617474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.lim = lfi_n->lim[filter_level];
618474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    lfi.hev_thr = lfi_n->hev_thr[hev_index];
619474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
620474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_col > 0)
6215c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_mbv
622474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, 0, 0, post->y_stride, 0, &lfi);
623474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
624474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
6255c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_bv
626474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, 0, 0, post->y_stride, 0, &lfi);
627474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
6285c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                    vp8_loop_filter_mbh
629474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, 0, 0, post->y_stride, 0, &lfi);
630474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
631474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
6325c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_bh
633474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, 0, 0, post->y_stride, 0, &lfi);
634474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                }
635474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                else
636474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                {
637474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (mb_col > 0)
6385c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_mbv
639474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, post->y_stride, lfi_n->mblim[filter_level]);
640474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
641474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
6425c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_bv
643474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, post->y_stride, lfi_n->blim[filter_level]);
644474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
6455c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                    vp8_loop_filter_simple_mbh
646474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, post->y_stride, lfi_n->mblim[filter_level]);
647474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
648474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                    if (!skip_lf)
6495c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org                        vp8_loop_filter_simple_bh
650474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                        (y_ptr, post->y_stride, lfi_n->blim[filter_level]);
651474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                }
652474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            }
653474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
654474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            y_ptr += 16;
655474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            mode_info_context += 1;      /* step to next MB */
656474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
657474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
658474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        y_ptr += post->y_stride  * 16 - post->y_width;
659474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mode_info_context += 1;          /* Skip border mb */
660474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
661474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
662