1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker
21*495ae853SAndroid Build Coastguard Worker #include <string.h>
22*495ae853SAndroid Build Coastguard Worker
23*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
24*495ae853SAndroid Build Coastguard Worker #include "iv.h"
25*495ae853SAndroid Build Coastguard Worker #include "ivd.h"
26*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
27*495ae853SAndroid Build Coastguard Worker #include "ih264_platform_macros.h"
28*495ae853SAndroid Build Coastguard Worker #include "ih264d_debug.h"
29*495ae853SAndroid Build Coastguard Worker #include "ih264d_defs.h"
30*495ae853SAndroid Build Coastguard Worker #include "ih264d_defs.h"
31*495ae853SAndroid Build Coastguard Worker #include "ih264d_structs.h"
32*495ae853SAndroid Build Coastguard Worker #include "ih264d_deblocking.h"
33*495ae853SAndroid Build Coastguard Worker #include "ih264d_mb_utils.h"
34*495ae853SAndroid Build Coastguard Worker #include "ih264d_error_handler.h"
35*495ae853SAndroid Build Coastguard Worker #include "ih264d_utils.h"
36*495ae853SAndroid Build Coastguard Worker
37*495ae853SAndroid Build Coastguard Worker
38*495ae853SAndroid Build Coastguard Worker #include "ih264d_defs.h"
39*495ae853SAndroid Build Coastguard Worker #include "ih264d_format_conv.h"
40*495ae853SAndroid Build Coastguard Worker #include "ih264d_deblocking.h"
41*495ae853SAndroid Build Coastguard Worker #include "ih264d_tables.h"
42*495ae853SAndroid Build Coastguard Worker
43*495ae853SAndroid Build Coastguard Worker /*!
44*495ae853SAndroid Build Coastguard Worker *************************************************************************
45*495ae853SAndroid Build Coastguard Worker * \file ih264d_deblocking.c
46*495ae853SAndroid Build Coastguard Worker *
47*495ae853SAndroid Build Coastguard Worker * \brief
48*495ae853SAndroid Build Coastguard Worker * Decoder specific deblocking routines
49*495ae853SAndroid Build Coastguard Worker *
50*495ae853SAndroid Build Coastguard Worker * \author AI
51*495ae853SAndroid Build Coastguard Worker *************************************************************************
52*495ae853SAndroid Build Coastguard Worker */
53*495ae853SAndroid Build Coastguard Worker
54*495ae853SAndroid Build Coastguard Worker /*!
55*495ae853SAndroid Build Coastguard Worker **************************************************************************
56*495ae853SAndroid Build Coastguard Worker * \if Function name : HorizonPad \endif
57*495ae853SAndroid Build Coastguard Worker *
58*495ae853SAndroid Build Coastguard Worker * \brief
59*495ae853SAndroid Build Coastguard Worker * Does the Horizontal padding on a whole pic.
60*495ae853SAndroid Build Coastguard Worker *
61*495ae853SAndroid Build Coastguard Worker * \return
62*495ae853SAndroid Build Coastguard Worker * None
63*495ae853SAndroid Build Coastguard Worker **************************************************************************
64*495ae853SAndroid Build Coastguard Worker */
65*495ae853SAndroid Build Coastguard Worker
66*495ae853SAndroid Build Coastguard Worker /*!
67*495ae853SAndroid Build Coastguard Worker **************************************************************************
68*495ae853SAndroid Build Coastguard Worker * \if Function name : FilterBoundaryLeft \endif
69*495ae853SAndroid Build Coastguard Worker *
70*495ae853SAndroid Build Coastguard Worker * \brief
71*495ae853SAndroid Build Coastguard Worker * Filters MacroBlock Left Boundary egdes.
72*495ae853SAndroid Build Coastguard Worker *
73*495ae853SAndroid Build Coastguard Worker * \return
74*495ae853SAndroid Build Coastguard Worker * None
75*495ae853SAndroid Build Coastguard Worker **************************************************************************
76*495ae853SAndroid Build Coastguard Worker */
ih264d_filter_boundary_left_nonmbaff(dec_struct_t * ps_dec,tfr_ctxt_t * ps_tfr_cxt,WORD8 i1_cb_qp_idx_ofst,WORD8 i1_cr_qp_idx_ofst,deblk_mb_t * ps_cur_mb,WORD32 i4_strd_y,WORD32 i4_strd_uv,deblk_mb_t * ps_left_mb,UWORD32 pu4_bs_tab[],UWORD8 u1_cur_fld)77*495ae853SAndroid Build Coastguard Worker void ih264d_filter_boundary_left_nonmbaff(dec_struct_t *ps_dec,
78*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt,
79*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst,
80*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst,
81*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_cur_mb,
82*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_y,
83*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_uv,
84*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_left_mb,
85*495ae853SAndroid Build Coastguard Worker UWORD32 pu4_bs_tab[],
86*495ae853SAndroid Build Coastguard Worker UWORD8 u1_cur_fld)
87*495ae853SAndroid Build Coastguard Worker {
88*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_y, *pu1_u, *pu1_v;
89*495ae853SAndroid Build Coastguard Worker WORD32 uc_tmp, qp_avg;
90*495ae853SAndroid Build Coastguard Worker WORD32 alpha_u = 0, beta_u = 0, alpha_v = 0, beta_v = 0;
91*495ae853SAndroid Build Coastguard Worker WORD32 alpha_y = 0, beta_y = 0;
92*495ae853SAndroid Build Coastguard Worker
93*495ae853SAndroid Build Coastguard Worker WORD32 idx_b_u, idx_a_u, idx_b_v, idx_a_v;
94*495ae853SAndroid Build Coastguard Worker WORD32 idx_b_y, idx_a_y;
95*495ae853SAndroid Build Coastguard Worker
96*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_val;
97*495ae853SAndroid Build Coastguard Worker
98*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_u, *pu1_cliptab_v, *pu1_cliptab_y;
99*495ae853SAndroid Build Coastguard Worker
100*495ae853SAndroid Build Coastguard Worker UWORD8 u1_double_cl = !ps_cur_mb->u1_single_call;
101*495ae853SAndroid Build Coastguard Worker WORD32 ofst_a = ps_cur_mb->i1_slice_alpha_c0_offset;
102*495ae853SAndroid Build Coastguard Worker WORD32 ofst_b = ps_cur_mb->i1_slice_beta_offset;
103*495ae853SAndroid Build Coastguard Worker
104*495ae853SAndroid Build Coastguard Worker PROFILE_DISABLE_DEBLK()
105*495ae853SAndroid Build Coastguard Worker
106*495ae853SAndroid Build Coastguard Worker pu1_y = ps_tfr_cxt->pu1_mb_y;
107*495ae853SAndroid Build Coastguard Worker pu1_u = ps_tfr_cxt->pu1_mb_u;
108*495ae853SAndroid Build Coastguard Worker pu1_v = ps_tfr_cxt->pu1_mb_v;
109*495ae853SAndroid Build Coastguard Worker
110*495ae853SAndroid Build Coastguard Worker /* LUMA values */
111*495ae853SAndroid Build Coastguard Worker /* Deblock rounding change */
112*495ae853SAndroid Build Coastguard Worker qp_avg =
113*495ae853SAndroid Build Coastguard Worker (UWORD8)((ps_cur_mb->u1_left_mb_qp + ps_cur_mb->u1_mb_qp + 1)
114*495ae853SAndroid Build Coastguard Worker >> 1);
115*495ae853SAndroid Build Coastguard Worker
116*495ae853SAndroid Build Coastguard Worker idx_a_y = qp_avg + ofst_a;
117*495ae853SAndroid Build Coastguard Worker alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
118*495ae853SAndroid Build Coastguard Worker idx_b_y = qp_avg + ofst_b;
119*495ae853SAndroid Build Coastguard Worker beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
120*495ae853SAndroid Build Coastguard Worker
121*495ae853SAndroid Build Coastguard Worker /* Chroma cb values */
122*495ae853SAndroid Build Coastguard Worker {
123*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
124*495ae853SAndroid Build Coastguard Worker mb_qp1 = (ps_cur_mb->u1_left_mb_qp + i1_cb_qp_idx_ofst);
125*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
126*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
127*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
128*495ae853SAndroid Build Coastguard Worker }
129*495ae853SAndroid Build Coastguard Worker idx_a_u = qp_avg + ofst_a;
130*495ae853SAndroid Build Coastguard Worker alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
131*495ae853SAndroid Build Coastguard Worker idx_b_u = qp_avg + ofst_b;
132*495ae853SAndroid Build Coastguard Worker beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
133*495ae853SAndroid Build Coastguard Worker /* Chroma cr values */
134*495ae853SAndroid Build Coastguard Worker {
135*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
136*495ae853SAndroid Build Coastguard Worker mb_qp1 = (ps_cur_mb->u1_left_mb_qp + i1_cr_qp_idx_ofst);
137*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
138*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
139*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
140*495ae853SAndroid Build Coastguard Worker }
141*495ae853SAndroid Build Coastguard Worker idx_a_v = qp_avg + ofst_a;
142*495ae853SAndroid Build Coastguard Worker alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
143*495ae853SAndroid Build Coastguard Worker idx_b_v = qp_avg + ofst_b;
144*495ae853SAndroid Build Coastguard Worker beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
145*495ae853SAndroid Build Coastguard Worker
146*495ae853SAndroid Build Coastguard Worker if(u1_double_cl == 0)
147*495ae853SAndroid Build Coastguard Worker {
148*495ae853SAndroid Build Coastguard Worker u4_bs_val = pu4_bs_tab[4];
149*495ae853SAndroid Build Coastguard Worker
150*495ae853SAndroid Build Coastguard Worker if(0x04040404 == u4_bs_val)
151*495ae853SAndroid Build Coastguard Worker {
152*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bs4(pu1_y, i4_strd_y, alpha_y, beta_y);
153*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bs4(pu1_u, i4_strd_uv, alpha_u,
154*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v);
155*495ae853SAndroid Build Coastguard Worker }
156*495ae853SAndroid Build Coastguard Worker else
157*495ae853SAndroid Build Coastguard Worker {
158*495ae853SAndroid Build Coastguard Worker if(u4_bs_val)
159*495ae853SAndroid Build Coastguard Worker {
160*495ae853SAndroid Build Coastguard Worker
161*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
162*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
163*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
164*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4(pu1_y, i4_strd_y, alpha_y,
165*495ae853SAndroid Build Coastguard Worker beta_y, u4_bs_val,
166*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y);
167*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bslt4(pu1_u, i4_strd_uv, alpha_u,
168*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v,
169*495ae853SAndroid Build Coastguard Worker u4_bs_val, pu1_cliptab_u,
170*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v);
171*495ae853SAndroid Build Coastguard Worker
172*495ae853SAndroid Build Coastguard Worker }
173*495ae853SAndroid Build Coastguard Worker }
174*495ae853SAndroid Build Coastguard Worker
175*495ae853SAndroid Build Coastguard Worker }
176*495ae853SAndroid Build Coastguard Worker else
177*495ae853SAndroid Build Coastguard Worker {
178*495ae853SAndroid Build Coastguard Worker
179*495ae853SAndroid Build Coastguard Worker i4_strd_y <<= (!u1_cur_fld);
180*495ae853SAndroid Build Coastguard Worker u4_bs_val = pu4_bs_tab[4];
181*495ae853SAndroid Build Coastguard Worker i4_strd_uv <<= (!u1_cur_fld);
182*495ae853SAndroid Build Coastguard Worker
183*495ae853SAndroid Build Coastguard Worker if(0x04040404 == u4_bs_val)
184*495ae853SAndroid Build Coastguard Worker {
185*495ae853SAndroid Build Coastguard Worker
186*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bs4_mbaff(pu1_y, i4_strd_y, alpha_y,
187*495ae853SAndroid Build Coastguard Worker beta_y);
188*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bs4_mbaff(pu1_u, i4_strd_uv, alpha_u,
189*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v);
190*495ae853SAndroid Build Coastguard Worker
191*495ae853SAndroid Build Coastguard Worker }
192*495ae853SAndroid Build Coastguard Worker else
193*495ae853SAndroid Build Coastguard Worker {
194*495ae853SAndroid Build Coastguard Worker if(u4_bs_val)
195*495ae853SAndroid Build Coastguard Worker {
196*495ae853SAndroid Build Coastguard Worker
197*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
198*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
199*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
200*495ae853SAndroid Build Coastguard Worker
201*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4_mbaff(pu1_y, i4_strd_y,
202*495ae853SAndroid Build Coastguard Worker alpha_y, beta_y,
203*495ae853SAndroid Build Coastguard Worker u4_bs_val,
204*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y);
205*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bslt4_mbaff(pu1_u, i4_strd_uv,
206*495ae853SAndroid Build Coastguard Worker alpha_u, beta_u,
207*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v,
208*495ae853SAndroid Build Coastguard Worker u4_bs_val,
209*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u,
210*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v);
211*495ae853SAndroid Build Coastguard Worker }
212*495ae853SAndroid Build Coastguard Worker }
213*495ae853SAndroid Build Coastguard Worker
214*495ae853SAndroid Build Coastguard Worker {
215*495ae853SAndroid Build Coastguard Worker
216*495ae853SAndroid Build Coastguard Worker UWORD16 u2_shift = (i4_strd_y >> 1) << (u1_cur_fld ? 4 : 0);
217*495ae853SAndroid Build Coastguard Worker pu1_y += u2_shift;
218*495ae853SAndroid Build Coastguard Worker u2_shift = (i4_strd_uv >> 1) << (u1_cur_fld ? 3 : 0);
219*495ae853SAndroid Build Coastguard Worker pu1_u += u2_shift;
220*495ae853SAndroid Build Coastguard Worker pu1_v += u2_shift;
221*495ae853SAndroid Build Coastguard Worker }
222*495ae853SAndroid Build Coastguard Worker
223*495ae853SAndroid Build Coastguard Worker qp_avg = (((ps_left_mb + 1)->u1_mb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
224*495ae853SAndroid Build Coastguard Worker
225*495ae853SAndroid Build Coastguard Worker idx_a_y = qp_avg + ofst_a;
226*495ae853SAndroid Build Coastguard Worker alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
227*495ae853SAndroid Build Coastguard Worker idx_b_y = qp_avg + ofst_b;
228*495ae853SAndroid Build Coastguard Worker beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
229*495ae853SAndroid Build Coastguard Worker u4_bs_val = pu4_bs_tab[9];
230*495ae853SAndroid Build Coastguard Worker
231*495ae853SAndroid Build Coastguard Worker {
232*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
233*495ae853SAndroid Build Coastguard Worker mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cb_qp_idx_ofst);
234*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
235*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
236*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
237*495ae853SAndroid Build Coastguard Worker }
238*495ae853SAndroid Build Coastguard Worker idx_a_u = qp_avg + ofst_a;
239*495ae853SAndroid Build Coastguard Worker alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
240*495ae853SAndroid Build Coastguard Worker idx_b_u = qp_avg + ofst_b;
241*495ae853SAndroid Build Coastguard Worker beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
242*495ae853SAndroid Build Coastguard Worker u4_bs_val = pu4_bs_tab[9];
243*495ae853SAndroid Build Coastguard Worker {
244*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
245*495ae853SAndroid Build Coastguard Worker mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cr_qp_idx_ofst);
246*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
247*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
248*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
249*495ae853SAndroid Build Coastguard Worker }
250*495ae853SAndroid Build Coastguard Worker idx_a_v = qp_avg + ofst_a;
251*495ae853SAndroid Build Coastguard Worker alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
252*495ae853SAndroid Build Coastguard Worker idx_b_v = qp_avg + ofst_b;
253*495ae853SAndroid Build Coastguard Worker beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
254*495ae853SAndroid Build Coastguard Worker
255*495ae853SAndroid Build Coastguard Worker if(0x04040404 == u4_bs_val)
256*495ae853SAndroid Build Coastguard Worker {
257*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bs4_mbaff(pu1_y, i4_strd_y, alpha_y,
258*495ae853SAndroid Build Coastguard Worker beta_y);
259*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bs4_mbaff(pu1_u, i4_strd_uv, alpha_u,
260*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v);
261*495ae853SAndroid Build Coastguard Worker
262*495ae853SAndroid Build Coastguard Worker }
263*495ae853SAndroid Build Coastguard Worker else
264*495ae853SAndroid Build Coastguard Worker {
265*495ae853SAndroid Build Coastguard Worker if(u4_bs_val)
266*495ae853SAndroid Build Coastguard Worker {
267*495ae853SAndroid Build Coastguard Worker
268*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
269*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
270*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
271*495ae853SAndroid Build Coastguard Worker
272*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4_mbaff(pu1_y, i4_strd_y,
273*495ae853SAndroid Build Coastguard Worker alpha_y, beta_y,
274*495ae853SAndroid Build Coastguard Worker u4_bs_val,
275*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y);
276*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bslt4_mbaff(pu1_u, i4_strd_uv,
277*495ae853SAndroid Build Coastguard Worker alpha_u, beta_u,
278*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v,
279*495ae853SAndroid Build Coastguard Worker u4_bs_val,
280*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u,
281*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v);
282*495ae853SAndroid Build Coastguard Worker
283*495ae853SAndroid Build Coastguard Worker }
284*495ae853SAndroid Build Coastguard Worker }
285*495ae853SAndroid Build Coastguard Worker }
286*495ae853SAndroid Build Coastguard Worker
287*495ae853SAndroid Build Coastguard Worker }
288*495ae853SAndroid Build Coastguard Worker
289*495ae853SAndroid Build Coastguard Worker /*!
290*495ae853SAndroid Build Coastguard Worker **************************************************************************
291*495ae853SAndroid Build Coastguard Worker * \if Function name : FilterBoundaryTop \endif
292*495ae853SAndroid Build Coastguard Worker *
293*495ae853SAndroid Build Coastguard Worker * \brief
294*495ae853SAndroid Build Coastguard Worker * Filters MacroBlock Top Boundary egdes.
295*495ae853SAndroid Build Coastguard Worker *
296*495ae853SAndroid Build Coastguard Worker * \return
297*495ae853SAndroid Build Coastguard Worker * None
298*495ae853SAndroid Build Coastguard Worker **************************************************************************
299*495ae853SAndroid Build Coastguard Worker */
300*495ae853SAndroid Build Coastguard Worker
ih264d_filter_boundary_top_nonmbaff(dec_struct_t * ps_dec,tfr_ctxt_t * ps_tfr_cxt,WORD8 i1_cb_qp_idx_ofst,WORD8 i1_cr_qp_idx_ofst,deblk_mb_t * ps_cur_mb,WORD32 i4_strd_y,WORD32 i4_strd_uv,deblk_mb_t * ps_top_mb,UWORD32 u4_bs)301*495ae853SAndroid Build Coastguard Worker void ih264d_filter_boundary_top_nonmbaff(dec_struct_t *ps_dec,
302*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt,
303*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst,
304*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst,
305*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_cur_mb,
306*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_y,
307*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_uv,
308*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_top_mb,
309*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs)
310*495ae853SAndroid Build Coastguard Worker {
311*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_y, *pu1_u;
312*495ae853SAndroid Build Coastguard Worker WORD32 alpha_u = 0, beta_u = 0, alpha_v = 0, beta_v = 0;
313*495ae853SAndroid Build Coastguard Worker WORD32 alpha_y = 0, beta_y = 0;
314*495ae853SAndroid Build Coastguard Worker WORD32 qp_avg;
315*495ae853SAndroid Build Coastguard Worker WORD32 idx_b_u, idx_a_u, idx_b_v, idx_a_v;
316*495ae853SAndroid Build Coastguard Worker WORD32 idx_b_y, idx_a_y;
317*495ae853SAndroid Build Coastguard Worker UWORD16 uc_tmp;
318*495ae853SAndroid Build Coastguard Worker
319*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_u, *pu1_cliptab_v, *pu1_cliptab_y;
320*495ae853SAndroid Build Coastguard Worker WORD32 ofst_a = ps_cur_mb->i1_slice_alpha_c0_offset;
321*495ae853SAndroid Build Coastguard Worker WORD32 ofst_b = ps_cur_mb->i1_slice_beta_offset;
322*495ae853SAndroid Build Coastguard Worker
323*495ae853SAndroid Build Coastguard Worker UNUSED(ps_top_mb);
324*495ae853SAndroid Build Coastguard Worker /* LUMA values */
325*495ae853SAndroid Build Coastguard Worker /* Deblock rounding change */
326*495ae853SAndroid Build Coastguard Worker uc_tmp = ((ps_cur_mb->u1_topmb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
327*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)uc_tmp;
328*495ae853SAndroid Build Coastguard Worker idx_a_y = qp_avg + ofst_a;
329*495ae853SAndroid Build Coastguard Worker alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
330*495ae853SAndroid Build Coastguard Worker idx_b_y = qp_avg + ofst_b;
331*495ae853SAndroid Build Coastguard Worker beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
332*495ae853SAndroid Build Coastguard Worker pu1_y = ps_tfr_cxt->pu1_mb_y;
333*495ae853SAndroid Build Coastguard Worker
334*495ae853SAndroid Build Coastguard Worker /* CHROMA cb values */
335*495ae853SAndroid Build Coastguard Worker {
336*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
337*495ae853SAndroid Build Coastguard Worker mb_qp1 = (ps_cur_mb->u1_topmb_qp + i1_cb_qp_idx_ofst);
338*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
339*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
340*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
341*495ae853SAndroid Build Coastguard Worker }
342*495ae853SAndroid Build Coastguard Worker
343*495ae853SAndroid Build Coastguard Worker idx_a_u = qp_avg + ofst_a;
344*495ae853SAndroid Build Coastguard Worker alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
345*495ae853SAndroid Build Coastguard Worker idx_b_u = qp_avg + ofst_b;
346*495ae853SAndroid Build Coastguard Worker beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
347*495ae853SAndroid Build Coastguard Worker /* CHROMA cr values */
348*495ae853SAndroid Build Coastguard Worker {
349*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
350*495ae853SAndroid Build Coastguard Worker mb_qp1 = (ps_cur_mb->u1_topmb_qp + i1_cr_qp_idx_ofst);
351*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
352*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
353*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
354*495ae853SAndroid Build Coastguard Worker }
355*495ae853SAndroid Build Coastguard Worker
356*495ae853SAndroid Build Coastguard Worker idx_a_v = qp_avg + ofst_a;
357*495ae853SAndroid Build Coastguard Worker alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
358*495ae853SAndroid Build Coastguard Worker idx_b_v = qp_avg + ofst_b;
359*495ae853SAndroid Build Coastguard Worker beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
360*495ae853SAndroid Build Coastguard Worker pu1_u = ps_tfr_cxt->pu1_mb_u;
361*495ae853SAndroid Build Coastguard Worker
362*495ae853SAndroid Build Coastguard Worker if(u4_bs == 0x04040404)
363*495ae853SAndroid Build Coastguard Worker {
364*495ae853SAndroid Build Coastguard Worker /* Code specific to the assembly module */
365*495ae853SAndroid Build Coastguard Worker
366*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bs4(pu1_y, i4_strd_y, alpha_y, beta_y);
367*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_horz_bs4(pu1_u, i4_strd_uv, alpha_u, beta_u,
368*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v);
369*495ae853SAndroid Build Coastguard Worker }
370*495ae853SAndroid Build Coastguard Worker else
371*495ae853SAndroid Build Coastguard Worker {
372*495ae853SAndroid Build Coastguard Worker if(u4_bs)
373*495ae853SAndroid Build Coastguard Worker {
374*495ae853SAndroid Build Coastguard Worker
375*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
376*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u =
377*495ae853SAndroid Build Coastguard Worker (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
378*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v =
379*495ae853SAndroid Build Coastguard Worker (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
380*495ae853SAndroid Build Coastguard Worker
381*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bslt4(pu1_y, i4_strd_y, alpha_y, beta_y,
382*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_y);
383*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_horz_bslt4(pu1_u, i4_strd_uv, alpha_u,
384*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v,
385*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_u,
386*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v);
387*495ae853SAndroid Build Coastguard Worker
388*495ae853SAndroid Build Coastguard Worker }
389*495ae853SAndroid Build Coastguard Worker }
390*495ae853SAndroid Build Coastguard Worker
391*495ae853SAndroid Build Coastguard Worker }
392*495ae853SAndroid Build Coastguard Worker
ih264d_deblock_mb_nonmbaff(dec_struct_t * ps_dec,tfr_ctxt_t * ps_tfr_cxt,WORD8 i1_cb_qp_idx_ofst,WORD8 i1_cr_qp_idx_ofst,WORD32 i4_strd_y,WORD32 i4_strd_uv)393*495ae853SAndroid Build Coastguard Worker void ih264d_deblock_mb_nonmbaff(dec_struct_t *ps_dec,
394*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt,
395*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst,
396*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst,
397*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_y,
398*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_uv )
399*495ae853SAndroid Build Coastguard Worker {
400*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_y, *pu1_u;
401*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs;
402*495ae853SAndroid Build Coastguard Worker
403*495ae853SAndroid Build Coastguard Worker WORD32 alpha, beta, alpha_u, beta_u, alpha_v, beta_v;
404*495ae853SAndroid Build Coastguard Worker
405*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_u;
406*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_v;
407*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_y;
408*495ae853SAndroid Build Coastguard Worker
409*495ae853SAndroid Build Coastguard Worker UWORD32 * pu4_bs_tab;
410*495ae853SAndroid Build Coastguard Worker WORD32 idx_a_y, idx_a_u, idx_a_v;
411*495ae853SAndroid Build Coastguard Worker UWORD32 u4_deb_mode, u4_mbs_next;
412*495ae853SAndroid Build Coastguard Worker UWORD32 u4_image_wd_mb;
413*495ae853SAndroid Build Coastguard Worker deblk_mb_t *ps_top_mb,*ps_left_mb,*ps_cur_mb;
414*495ae853SAndroid Build Coastguard Worker
415*495ae853SAndroid Build Coastguard Worker PROFILE_DISABLE_DEBLK()
416*495ae853SAndroid Build Coastguard Worker /* Return from here to switch off deblocking */
417*495ae853SAndroid Build Coastguard Worker
418*495ae853SAndroid Build Coastguard Worker u4_image_wd_mb = ps_dec->u2_frm_wd_in_mbs;
419*495ae853SAndroid Build Coastguard Worker
420*495ae853SAndroid Build Coastguard Worker ps_cur_mb = ps_dec->ps_cur_deblk_mb;
421*495ae853SAndroid Build Coastguard Worker pu4_bs_tab = ps_cur_mb->u4_bs_table;
422*495ae853SAndroid Build Coastguard Worker u4_deb_mode = ps_cur_mb->u1_deblocking_mode;
423*495ae853SAndroid Build Coastguard Worker if(!(u4_deb_mode & MB_DISABLE_FILTERING))
424*495ae853SAndroid Build Coastguard Worker {
425*495ae853SAndroid Build Coastguard Worker
426*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_deblk_mb_x)
427*495ae853SAndroid Build Coastguard Worker {
428*495ae853SAndroid Build Coastguard Worker ps_left_mb = ps_cur_mb - 1;
429*495ae853SAndroid Build Coastguard Worker
430*495ae853SAndroid Build Coastguard Worker }
431*495ae853SAndroid Build Coastguard Worker else
432*495ae853SAndroid Build Coastguard Worker {
433*495ae853SAndroid Build Coastguard Worker ps_left_mb = NULL;
434*495ae853SAndroid Build Coastguard Worker
435*495ae853SAndroid Build Coastguard Worker }
436*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_deblk_mb_y != 0)
437*495ae853SAndroid Build Coastguard Worker {
438*495ae853SAndroid Build Coastguard Worker ps_top_mb = ps_cur_mb - (u4_image_wd_mb);
439*495ae853SAndroid Build Coastguard Worker }
440*495ae853SAndroid Build Coastguard Worker else
441*495ae853SAndroid Build Coastguard Worker {
442*495ae853SAndroid Build Coastguard Worker ps_top_mb = NULL;
443*495ae853SAndroid Build Coastguard Worker }
444*495ae853SAndroid Build Coastguard Worker
445*495ae853SAndroid Build Coastguard Worker if(u4_deb_mode & MB_DISABLE_LEFT_EDGE)
446*495ae853SAndroid Build Coastguard Worker ps_left_mb = NULL;
447*495ae853SAndroid Build Coastguard Worker if(u4_deb_mode & MB_DISABLE_TOP_EDGE)
448*495ae853SAndroid Build Coastguard Worker ps_top_mb = NULL;
449*495ae853SAndroid Build Coastguard Worker
450*495ae853SAndroid Build Coastguard Worker /*---------------------------------------------------------------------*/
451*495ae853SAndroid Build Coastguard Worker /* Filter wrt Left edge */
452*495ae853SAndroid Build Coastguard Worker /* except */
453*495ae853SAndroid Build Coastguard Worker /* - Left Egde is Picture Boundary */
454*495ae853SAndroid Build Coastguard Worker /* - Left Egde is part of Slice Boundary and Deblocking */
455*495ae853SAndroid Build Coastguard Worker /* parameters of slice disable Filtering of Slice Boundary Edges*/
456*495ae853SAndroid Build Coastguard Worker /*---------------------------------------------------------------------*/
457*495ae853SAndroid Build Coastguard Worker if(ps_left_mb)
458*495ae853SAndroid Build Coastguard Worker ih264d_filter_boundary_left_nonmbaff(ps_dec, ps_tfr_cxt,
459*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
460*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst, ps_cur_mb,
461*495ae853SAndroid Build Coastguard Worker i4_strd_y, i4_strd_uv, ps_left_mb,
462*495ae853SAndroid Build Coastguard Worker pu4_bs_tab, 0);
463*495ae853SAndroid Build Coastguard Worker
464*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
465*495ae853SAndroid Build Coastguard Worker /* Filter wrt Other Vertical Edges */
466*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
467*495ae853SAndroid Build Coastguard Worker {
468*495ae853SAndroid Build Coastguard Worker WORD32 ofst_a, ofst_b, idx_b_y, idx_b_u,
469*495ae853SAndroid Build Coastguard Worker idx_b_v;
470*495ae853SAndroid Build Coastguard Worker WORD32 qp_avg, qp_avg_u, qp_avg_v;
471*495ae853SAndroid Build Coastguard Worker ofst_a = ps_cur_mb->i1_slice_alpha_c0_offset;
472*495ae853SAndroid Build Coastguard Worker ofst_b = ps_cur_mb->i1_slice_beta_offset;
473*495ae853SAndroid Build Coastguard Worker
474*495ae853SAndroid Build Coastguard Worker qp_avg = ps_cur_mb->u1_mb_qp;
475*495ae853SAndroid Build Coastguard Worker
476*495ae853SAndroid Build Coastguard Worker idx_a_y = qp_avg + ofst_a;
477*495ae853SAndroid Build Coastguard Worker alpha = gau1_ih264d_alpha_table[12 + idx_a_y];
478*495ae853SAndroid Build Coastguard Worker idx_b_y = qp_avg + ofst_b;
479*495ae853SAndroid Build Coastguard Worker beta = gau1_ih264d_beta_table[12 + idx_b_y];
480*495ae853SAndroid Build Coastguard Worker
481*495ae853SAndroid Build Coastguard Worker /* CHROMA values */
482*495ae853SAndroid Build Coastguard Worker /* CHROMA Cb values */
483*495ae853SAndroid Build Coastguard Worker qp_avg_u = (qp_avg + i1_cb_qp_idx_ofst);
484*495ae853SAndroid Build Coastguard Worker qp_avg_u = gau1_ih264d_qp_scale_cr[12 + qp_avg_u];
485*495ae853SAndroid Build Coastguard Worker idx_a_u = qp_avg_u + ofst_a;
486*495ae853SAndroid Build Coastguard Worker alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
487*495ae853SAndroid Build Coastguard Worker idx_b_u = qp_avg_u + ofst_b;
488*495ae853SAndroid Build Coastguard Worker beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
489*495ae853SAndroid Build Coastguard Worker /* CHROMA Cr values */
490*495ae853SAndroid Build Coastguard Worker qp_avg_v = (qp_avg + i1_cr_qp_idx_ofst);
491*495ae853SAndroid Build Coastguard Worker qp_avg_v = gau1_ih264d_qp_scale_cr[12 + qp_avg_v];
492*495ae853SAndroid Build Coastguard Worker idx_a_v = qp_avg_v + ofst_a;
493*495ae853SAndroid Build Coastguard Worker alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
494*495ae853SAndroid Build Coastguard Worker idx_b_v = qp_avg_v + ofst_b;
495*495ae853SAndroid Build Coastguard Worker beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
496*495ae853SAndroid Build Coastguard Worker }
497*495ae853SAndroid Build Coastguard Worker
498*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y]; //this for Luma
499*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u]; //this for chroma
500*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v]; //this for chroma
501*495ae853SAndroid Build Coastguard Worker
502*495ae853SAndroid Build Coastguard Worker //edge=1
503*495ae853SAndroid Build Coastguard Worker
504*495ae853SAndroid Build Coastguard Worker
505*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[5];
506*495ae853SAndroid Build Coastguard Worker pu1_y = ps_tfr_cxt->pu1_mb_y;
507*495ae853SAndroid Build Coastguard Worker pu1_u = ps_tfr_cxt->pu1_mb_u;
508*495ae853SAndroid Build Coastguard Worker
509*495ae853SAndroid Build Coastguard Worker if(u4_bs)
510*495ae853SAndroid Build Coastguard Worker {
511*495ae853SAndroid Build Coastguard Worker
512*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 4, i4_strd_y, alpha, beta,
513*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_y);
514*495ae853SAndroid Build Coastguard Worker
515*495ae853SAndroid Build Coastguard Worker }
516*495ae853SAndroid Build Coastguard Worker //edge=2
517*495ae853SAndroid Build Coastguard Worker
518*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[6];
519*495ae853SAndroid Build Coastguard Worker if(u4_bs)
520*495ae853SAndroid Build Coastguard Worker {
521*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 8, i4_strd_y, alpha, beta,
522*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_y);
523*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bslt4(pu1_u + 4 * YUV420SP_FACTOR,
524*495ae853SAndroid Build Coastguard Worker i4_strd_uv, alpha_u, beta_u,
525*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v, u4_bs,
526*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u, pu1_cliptab_v);
527*495ae853SAndroid Build Coastguard Worker
528*495ae853SAndroid Build Coastguard Worker }
529*495ae853SAndroid Build Coastguard Worker //edge=3
530*495ae853SAndroid Build Coastguard Worker
531*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[7];
532*495ae853SAndroid Build Coastguard Worker if(u4_bs)
533*495ae853SAndroid Build Coastguard Worker {
534*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 12, i4_strd_y, alpha, beta,
535*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_y);
536*495ae853SAndroid Build Coastguard Worker
537*495ae853SAndroid Build Coastguard Worker }
538*495ae853SAndroid Build Coastguard Worker
539*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
540*495ae853SAndroid Build Coastguard Worker /* Filter wrt Top edge */
541*495ae853SAndroid Build Coastguard Worker /* except */
542*495ae853SAndroid Build Coastguard Worker /* - Top Egde is Picture Boundary */
543*495ae853SAndroid Build Coastguard Worker /* - Top Egde is part of Slice Boundary and Deblocking */
544*495ae853SAndroid Build Coastguard Worker /* parameters of slice disable Filtering of Slice Boundary Edges*/
545*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
546*495ae853SAndroid Build Coastguard Worker if(ps_top_mb)
547*495ae853SAndroid Build Coastguard Worker {
548*495ae853SAndroid Build Coastguard Worker /** if top MB and MB AFF and cur MB is frame and top is field then */
549*495ae853SAndroid Build Coastguard Worker /* one extra top edge needs to be deblocked */
550*495ae853SAndroid Build Coastguard Worker
551*495ae853SAndroid Build Coastguard Worker ih264d_filter_boundary_top_nonmbaff(ps_dec, ps_tfr_cxt,
552*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
553*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst, ps_cur_mb,
554*495ae853SAndroid Build Coastguard Worker i4_strd_y, i4_strd_uv, ps_top_mb,
555*495ae853SAndroid Build Coastguard Worker pu4_bs_tab[0]);
556*495ae853SAndroid Build Coastguard Worker
557*495ae853SAndroid Build Coastguard Worker }
558*495ae853SAndroid Build Coastguard Worker
559*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
560*495ae853SAndroid Build Coastguard Worker /* Filter wrt Other Horizontal Edges */
561*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
562*495ae853SAndroid Build Coastguard Worker
563*495ae853SAndroid Build Coastguard Worker //edge1
564*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[1];
565*495ae853SAndroid Build Coastguard Worker
566*495ae853SAndroid Build Coastguard Worker if(u4_bs)
567*495ae853SAndroid Build Coastguard Worker {
568*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bslt4(pu1_y + (i4_strd_y << 2), i4_strd_y,
569*495ae853SAndroid Build Coastguard Worker alpha, beta, u4_bs, pu1_cliptab_y);
570*495ae853SAndroid Build Coastguard Worker
571*495ae853SAndroid Build Coastguard Worker }
572*495ae853SAndroid Build Coastguard Worker //edge2
573*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[2];
574*495ae853SAndroid Build Coastguard Worker
575*495ae853SAndroid Build Coastguard Worker if(u4_bs)
576*495ae853SAndroid Build Coastguard Worker {
577*495ae853SAndroid Build Coastguard Worker
578*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bslt4(pu1_y + (i4_strd_y << 3), i4_strd_y,
579*495ae853SAndroid Build Coastguard Worker alpha, beta, u4_bs, pu1_cliptab_y);
580*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_horz_bslt4(pu1_u + (i4_strd_uv << 2),
581*495ae853SAndroid Build Coastguard Worker i4_strd_uv, alpha_u, beta_u,
582*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v, u4_bs,
583*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u, pu1_cliptab_v);
584*495ae853SAndroid Build Coastguard Worker
585*495ae853SAndroid Build Coastguard Worker }
586*495ae853SAndroid Build Coastguard Worker //edge3
587*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[3];
588*495ae853SAndroid Build Coastguard Worker if(u4_bs)
589*495ae853SAndroid Build Coastguard Worker {
590*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bslt4(
591*495ae853SAndroid Build Coastguard Worker (pu1_y + (i4_strd_y << 3) + (i4_strd_y << 2)),
592*495ae853SAndroid Build Coastguard Worker i4_strd_y, alpha, beta, u4_bs, pu1_cliptab_y);
593*495ae853SAndroid Build Coastguard Worker
594*495ae853SAndroid Build Coastguard Worker }
595*495ae853SAndroid Build Coastguard Worker }
596*495ae853SAndroid Build Coastguard Worker
597*495ae853SAndroid Build Coastguard Worker ps_dec->u4_deblk_mb_x++;
598*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_deblk_mb++;
599*495ae853SAndroid Build Coastguard Worker ps_dec->u4_cur_deblk_mb_num++;
600*495ae853SAndroid Build Coastguard Worker u4_mbs_next = u4_image_wd_mb - ps_dec->u4_deblk_mb_x;
601*495ae853SAndroid Build Coastguard Worker
602*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_y += 16;
603*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_u += 8 * YUV420SP_FACTOR;
604*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_v += 8;
605*495ae853SAndroid Build Coastguard Worker
606*495ae853SAndroid Build Coastguard Worker if(!u4_mbs_next)
607*495ae853SAndroid Build Coastguard Worker {
608*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_y += ps_tfr_cxt->u4_y_inc;
609*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_u += ps_tfr_cxt->u4_uv_inc;
610*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_v += ps_tfr_cxt->u4_uv_inc;
611*495ae853SAndroid Build Coastguard Worker ps_dec->u4_deblk_mb_y++;
612*495ae853SAndroid Build Coastguard Worker ps_dec->u4_deblk_mb_x = 0;
613*495ae853SAndroid Build Coastguard Worker }
614*495ae853SAndroid Build Coastguard Worker
615*495ae853SAndroid Build Coastguard Worker }
616*495ae853SAndroid Build Coastguard Worker
617*495ae853SAndroid Build Coastguard Worker /**************************************************************************
618*495ae853SAndroid Build Coastguard Worker *
619*495ae853SAndroid Build Coastguard Worker * Function Name : ih264d_init_deblk_tfr_ctxt
620*495ae853SAndroid Build Coastguard Worker *
621*495ae853SAndroid Build Coastguard Worker * Description : This function is called once per deblockpicture call
622*495ae853SAndroid Build Coastguard Worker * This sets up the transfer address contexts
623*495ae853SAndroid Build Coastguard Worker *
624*495ae853SAndroid Build Coastguard Worker * Revision History:
625*495ae853SAndroid Build Coastguard Worker *
626*495ae853SAndroid Build Coastguard Worker * DD MM YYYY Author(s) Changes (Describe the changes made)
627*495ae853SAndroid Build Coastguard Worker * 14 06 2005 SWRN Draft
628*495ae853SAndroid Build Coastguard Worker **************************************************************************/
ih264d_init_deblk_tfr_ctxt(dec_struct_t * ps_dec,pad_mgr_t * ps_pad_mgr,tfr_ctxt_t * ps_tfr_cxt,UWORD16 u2_image_wd_mb,UWORD8 u1_mbaff)629*495ae853SAndroid Build Coastguard Worker void ih264d_init_deblk_tfr_ctxt(dec_struct_t * ps_dec,
630*495ae853SAndroid Build Coastguard Worker pad_mgr_t *ps_pad_mgr,
631*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t *ps_tfr_cxt,
632*495ae853SAndroid Build Coastguard Worker UWORD16 u2_image_wd_mb,
633*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mbaff)
634*495ae853SAndroid Build Coastguard Worker {
635*495ae853SAndroid Build Coastguard Worker
636*495ae853SAndroid Build Coastguard Worker UWORD32 i4_wd_y;
637*495ae853SAndroid Build Coastguard Worker UWORD32 i4_wd_uv;
638*495ae853SAndroid Build Coastguard Worker UWORD8 u1_field_pic_flag = ps_dec->ps_cur_slice->u1_field_pic_flag; /*< Field u4_flag */
639*495ae853SAndroid Build Coastguard Worker UNUSED(u2_image_wd_mb);
640*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_y = ps_dec->s_cur_pic.pu1_buf1 - 4;
641*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_u = ps_dec->s_cur_pic.pu1_buf2 - 4;
642*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_v = ps_dec->s_cur_pic.pu1_buf3 - 4;
643*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_dest_y = ps_tfr_cxt->pu1_src_y;
644*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_dest_u = ps_tfr_cxt->pu1_src_u;
645*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_dest_v = ps_tfr_cxt->pu1_src_v;
646*495ae853SAndroid Build Coastguard Worker
647*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_y = ps_tfr_cxt->pu1_src_y + 4;
648*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_u = ps_tfr_cxt->pu1_src_u + 4;
649*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_v = ps_tfr_cxt->pu1_src_v + 4;
650*495ae853SAndroid Build Coastguard Worker
651*495ae853SAndroid Build Coastguard Worker i4_wd_y = ps_dec->u2_frm_wd_y << u1_field_pic_flag;
652*495ae853SAndroid Build Coastguard Worker i4_wd_uv = ps_dec->u2_frm_wd_uv << u1_field_pic_flag;
653*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->u4_y_inc = ((i4_wd_y << u1_mbaff) * 16
654*495ae853SAndroid Build Coastguard Worker - (ps_dec->u2_frm_wd_in_mbs << 4));
655*495ae853SAndroid Build Coastguard Worker
656*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->u4_uv_inc = (i4_wd_uv << u1_mbaff) * 8
657*495ae853SAndroid Build Coastguard Worker - (ps_dec->u2_frm_wd_in_mbs << 4);
658*495ae853SAndroid Build Coastguard Worker
659*495ae853SAndroid Build Coastguard Worker /* padding related initialisations */
660*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_cur_slice->u1_nal_ref_idc)
661*495ae853SAndroid Build Coastguard Worker {
662*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_vert_pad_top = !(ps_dec->ps_cur_slice->u1_field_pic_flag
663*495ae853SAndroid Build Coastguard Worker && ps_dec->ps_cur_slice->u1_bottom_field_flag);
664*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_vert_pad_bot =
665*495ae853SAndroid Build Coastguard Worker ((!ps_dec->ps_cur_slice->u1_field_pic_flag)
666*495ae853SAndroid Build Coastguard Worker || ps_dec->ps_cur_slice->u1_bottom_field_flag);
667*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_horz_pad = 1;
668*495ae853SAndroid Build Coastguard Worker }
669*495ae853SAndroid Build Coastguard Worker else
670*495ae853SAndroid Build Coastguard Worker {
671*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_horz_pad = 0;
672*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_vert_pad_top = 0;
673*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_vert_pad_bot = 0;
674*495ae853SAndroid Build Coastguard Worker }
675*495ae853SAndroid Build Coastguard Worker }
676*495ae853SAndroid Build Coastguard Worker
677*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
678*495ae853SAndroid Build Coastguard Worker /* */
679*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_deblock_picture_mbaff */
680*495ae853SAndroid Build Coastguard Worker /* */
681*495ae853SAndroid Build Coastguard Worker /* Description : This function carries out deblocking on a whole picture */
682*495ae853SAndroid Build Coastguard Worker /* with MBAFF */
683*495ae853SAndroid Build Coastguard Worker /* */
684*495ae853SAndroid Build Coastguard Worker /* Inputs : <What inputs does the function take?> */
685*495ae853SAndroid Build Coastguard Worker /* Processing : This functions calls deblock MB in the MB increment order*/
686*495ae853SAndroid Build Coastguard Worker /* */
687*495ae853SAndroid Build Coastguard Worker /* Outputs : Produces the deblocked picture */
688*495ae853SAndroid Build Coastguard Worker /* Returns : None */
689*495ae853SAndroid Build Coastguard Worker /* */
690*495ae853SAndroid Build Coastguard Worker /* Revision History: */
691*495ae853SAndroid Build Coastguard Worker /* */
692*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
693*495ae853SAndroid Build Coastguard Worker /* 17 02 2005 NS Creation */
694*495ae853SAndroid Build Coastguard Worker /* 14 06 2005 SWRN clean-up */
695*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
696*495ae853SAndroid Build Coastguard Worker
ih264d_deblock_picture_mbaff(dec_struct_t * ps_dec)697*495ae853SAndroid Build Coastguard Worker void ih264d_deblock_picture_mbaff(dec_struct_t * ps_dec)
698*495ae853SAndroid Build Coastguard Worker {
699*495ae853SAndroid Build Coastguard Worker WORD16 i2_mb_x, i2_mb_y;
700*495ae853SAndroid Build Coastguard Worker deblk_mb_t *ps_cur_mb;
701*495ae853SAndroid Build Coastguard Worker deblk_mb_t *ps_top_mb;
702*495ae853SAndroid Build Coastguard Worker deblk_mb_t *ps_left_mb;
703*495ae853SAndroid Build Coastguard Worker
704*495ae853SAndroid Build Coastguard Worker UWORD8 u1_vert_pad_top = 1;
705*495ae853SAndroid Build Coastguard Worker UWORD8 u1_cur_fld, u1_top_fld, u1_left_fld;
706*495ae853SAndroid Build Coastguard Worker UWORD8 u1_first_row;
707*495ae853SAndroid Build Coastguard Worker
708*495ae853SAndroid Build Coastguard Worker UWORD8 * pu1_deb_y, *pu1_deb_u, *pu1_deb_v;
709*495ae853SAndroid Build Coastguard Worker UWORD8 u1_deb_mode, u1_extra_top_edge;
710*495ae853SAndroid Build Coastguard Worker WORD32 i4_wd_y, i4_wd_uv;
711*495ae853SAndroid Build Coastguard Worker
712*495ae853SAndroid Build Coastguard Worker UWORD8 u1_field_pic_flag = ps_dec->ps_cur_slice->u1_field_pic_flag; /*< Field u4_flag */
713*495ae853SAndroid Build Coastguard Worker UWORD8 u1_bottom_field_flag = ps_dec->ps_cur_slice->u1_bottom_field_flag; /*< Bottom field u4_flag*/
714*495ae853SAndroid Build Coastguard Worker
715*495ae853SAndroid Build Coastguard Worker /**************************************************/
716*495ae853SAndroid Build Coastguard Worker /* one time loads from ps_dec which will be used */
717*495ae853SAndroid Build Coastguard Worker /* frequently throughout the deblocking procedure */
718*495ae853SAndroid Build Coastguard Worker /**************************************************/
719*495ae853SAndroid Build Coastguard Worker pad_mgr_t * ps_pad_mgr = &ps_dec->s_pad_mgr;
720*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t s_tfr_ctxt;
721*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt = &s_tfr_ctxt;
722*495ae853SAndroid Build Coastguard Worker
723*495ae853SAndroid Build Coastguard Worker UWORD16 u2_image_wd_mb = ps_dec->u2_frm_wd_in_mbs;
724*495ae853SAndroid Build Coastguard Worker UWORD16 u2_image_ht_mb = ps_dec->u2_frm_ht_in_mbs;
725*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mbaff = ps_dec->ps_cur_slice->u1_mbaff_frame_flag;
726*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst = ps_dec->ps_cur_pps->i1_chroma_qp_index_offset;
727*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst =
728*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_pps->i1_second_chroma_qp_index_offset;
729*495ae853SAndroid Build Coastguard Worker
730*495ae853SAndroid Build Coastguard Worker /* Set up Parameter for DMA transfer */
731*495ae853SAndroid Build Coastguard Worker ih264d_init_deblk_tfr_ctxt(ps_dec, ps_pad_mgr, ps_tfr_cxt, u2_image_wd_mb,
732*495ae853SAndroid Build Coastguard Worker u1_mbaff);
733*495ae853SAndroid Build Coastguard Worker
734*495ae853SAndroid Build Coastguard Worker /* Pic level Initialisations */
735*495ae853SAndroid Build Coastguard Worker i2_mb_y = u2_image_ht_mb;
736*495ae853SAndroid Build Coastguard Worker i2_mb_x = 0;
737*495ae853SAndroid Build Coastguard Worker u1_extra_top_edge = 0;
738*495ae853SAndroid Build Coastguard Worker
739*495ae853SAndroid Build Coastguard Worker u1_first_row = 1;
740*495ae853SAndroid Build Coastguard Worker
741*495ae853SAndroid Build Coastguard Worker i4_wd_y = ps_dec->u2_frm_wd_y << u1_field_pic_flag;
742*495ae853SAndroid Build Coastguard Worker i4_wd_uv = ps_dec->u2_frm_wd_uv << u1_field_pic_flag;
743*495ae853SAndroid Build Coastguard Worker /* Initial filling of the buffers with deblocking data */
744*495ae853SAndroid Build Coastguard Worker
745*495ae853SAndroid Build Coastguard Worker pu1_deb_y = ps_tfr_cxt->pu1_mb_y;
746*495ae853SAndroid Build Coastguard Worker pu1_deb_u = ps_tfr_cxt->pu1_mb_u;
747*495ae853SAndroid Build Coastguard Worker pu1_deb_v = ps_tfr_cxt->pu1_mb_v;
748*495ae853SAndroid Build Coastguard Worker ps_cur_mb = ps_dec->ps_deblk_pic;
749*495ae853SAndroid Build Coastguard Worker
750*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_app_disable_deblk_frm == 0)
751*495ae853SAndroid Build Coastguard Worker {
752*495ae853SAndroid Build Coastguard Worker {
753*495ae853SAndroid Build Coastguard Worker
754*495ae853SAndroid Build Coastguard Worker while(i2_mb_y > 0)
755*495ae853SAndroid Build Coastguard Worker {
756*495ae853SAndroid Build Coastguard Worker do
757*495ae853SAndroid Build Coastguard Worker {
758*495ae853SAndroid Build Coastguard Worker
759*495ae853SAndroid Build Coastguard Worker u1_deb_mode = ps_cur_mb->u1_deblocking_mode;
760*495ae853SAndroid Build Coastguard Worker if(!(u1_deb_mode & MB_DISABLE_FILTERING))
761*495ae853SAndroid Build Coastguard Worker {
762*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_y = pu1_deb_y;
763*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_u = pu1_deb_u;
764*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_v = pu1_deb_v;
765*495ae853SAndroid Build Coastguard Worker
766*495ae853SAndroid Build Coastguard Worker u1_cur_fld = (ps_cur_mb->u1_mb_type & D_FLD_MB) >> 7;
767*495ae853SAndroid Build Coastguard Worker u1_cur_fld &= 1;
768*495ae853SAndroid Build Coastguard Worker if(i2_mb_x)
769*495ae853SAndroid Build Coastguard Worker {
770*495ae853SAndroid Build Coastguard Worker ps_left_mb = ps_cur_mb - 2;
771*495ae853SAndroid Build Coastguard Worker }
772*495ae853SAndroid Build Coastguard Worker else
773*495ae853SAndroid Build Coastguard Worker {
774*495ae853SAndroid Build Coastguard Worker ps_left_mb = NULL;
775*495ae853SAndroid Build Coastguard Worker }
776*495ae853SAndroid Build Coastguard Worker if(!u1_first_row)
777*495ae853SAndroid Build Coastguard Worker {
778*495ae853SAndroid Build Coastguard Worker ps_top_mb = ps_cur_mb - (u2_image_wd_mb << 1) + 1;
779*495ae853SAndroid Build Coastguard Worker u1_top_fld = (ps_top_mb->u1_mb_type & D_FLD_MB)
780*495ae853SAndroid Build Coastguard Worker >> 7;
781*495ae853SAndroid Build Coastguard Worker }
782*495ae853SAndroid Build Coastguard Worker else
783*495ae853SAndroid Build Coastguard Worker {
784*495ae853SAndroid Build Coastguard Worker ps_top_mb = NULL;
785*495ae853SAndroid Build Coastguard Worker u1_top_fld = 0;
786*495ae853SAndroid Build Coastguard Worker }
787*495ae853SAndroid Build Coastguard Worker
788*495ae853SAndroid Build Coastguard Worker if((!u1_first_row) & u1_top_fld & u1_cur_fld)
789*495ae853SAndroid Build Coastguard Worker ps_top_mb--;
790*495ae853SAndroid Build Coastguard Worker
791*495ae853SAndroid Build Coastguard Worker /********************************************************/
792*495ae853SAndroid Build Coastguard Worker /* if top MB and MB AFF and cur MB is frame and top is */
793*495ae853SAndroid Build Coastguard Worker /* field, then one extra top edge needs to be deblocked */
794*495ae853SAndroid Build Coastguard Worker /********************************************************/
795*495ae853SAndroid Build Coastguard Worker u1_extra_top_edge = (!u1_cur_fld) & u1_top_fld;
796*495ae853SAndroid Build Coastguard Worker
797*495ae853SAndroid Build Coastguard Worker if(u1_deb_mode & MB_DISABLE_LEFT_EDGE)
798*495ae853SAndroid Build Coastguard Worker ps_left_mb = NULL;
799*495ae853SAndroid Build Coastguard Worker if(u1_deb_mode & MB_DISABLE_TOP_EDGE)
800*495ae853SAndroid Build Coastguard Worker ps_top_mb = NULL;
801*495ae853SAndroid Build Coastguard Worker
802*495ae853SAndroid Build Coastguard Worker ih264d_deblock_mb_mbaff(ps_dec, ps_tfr_cxt,
803*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
804*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst, ps_cur_mb,
805*495ae853SAndroid Build Coastguard Worker i4_wd_y, i4_wd_uv, ps_top_mb,
806*495ae853SAndroid Build Coastguard Worker ps_left_mb, u1_cur_fld,
807*495ae853SAndroid Build Coastguard Worker u1_extra_top_edge);
808*495ae853SAndroid Build Coastguard Worker }
809*495ae853SAndroid Build Coastguard Worker
810*495ae853SAndroid Build Coastguard Worker ps_cur_mb++;
811*495ae853SAndroid Build Coastguard Worker
812*495ae853SAndroid Build Coastguard Worker u1_deb_mode = ps_cur_mb->u1_deblocking_mode;
813*495ae853SAndroid Build Coastguard Worker if(!(u1_deb_mode & MB_DISABLE_FILTERING))
814*495ae853SAndroid Build Coastguard Worker {
815*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_y = pu1_deb_y;
816*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_u = pu1_deb_u;
817*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_v = pu1_deb_v;
818*495ae853SAndroid Build Coastguard Worker
819*495ae853SAndroid Build Coastguard Worker u1_cur_fld = (ps_cur_mb->u1_mb_type & D_FLD_MB) >> 7;
820*495ae853SAndroid Build Coastguard Worker u1_cur_fld &= 1;
821*495ae853SAndroid Build Coastguard Worker if(i2_mb_x)
822*495ae853SAndroid Build Coastguard Worker {
823*495ae853SAndroid Build Coastguard Worker ps_left_mb = ps_cur_mb - 2;
824*495ae853SAndroid Build Coastguard Worker u1_left_fld = (ps_left_mb->u1_mb_type & D_FLD_MB)
825*495ae853SAndroid Build Coastguard Worker >> 7;
826*495ae853SAndroid Build Coastguard Worker }
827*495ae853SAndroid Build Coastguard Worker else
828*495ae853SAndroid Build Coastguard Worker {
829*495ae853SAndroid Build Coastguard Worker ps_left_mb = NULL;
830*495ae853SAndroid Build Coastguard Worker u1_left_fld = u1_cur_fld;
831*495ae853SAndroid Build Coastguard Worker }
832*495ae853SAndroid Build Coastguard Worker if(!u1_first_row)
833*495ae853SAndroid Build Coastguard Worker {
834*495ae853SAndroid Build Coastguard Worker ps_top_mb = ps_cur_mb - (u2_image_wd_mb << 1);
835*495ae853SAndroid Build Coastguard Worker }
836*495ae853SAndroid Build Coastguard Worker else
837*495ae853SAndroid Build Coastguard Worker {
838*495ae853SAndroid Build Coastguard Worker ps_top_mb = NULL;
839*495ae853SAndroid Build Coastguard Worker }
840*495ae853SAndroid Build Coastguard Worker
841*495ae853SAndroid Build Coastguard Worker {
842*495ae853SAndroid Build Coastguard Worker UWORD8 u1_row_shift_y = 0, u1_row_shift_uv = 0;
843*495ae853SAndroid Build Coastguard Worker if(!u1_cur_fld)
844*495ae853SAndroid Build Coastguard Worker {
845*495ae853SAndroid Build Coastguard Worker ps_top_mb = ps_cur_mb - 1;
846*495ae853SAndroid Build Coastguard Worker u1_top_fld = (ps_top_mb->u1_mb_type & D_FLD_MB)
847*495ae853SAndroid Build Coastguard Worker >> 7;
848*495ae853SAndroid Build Coastguard Worker u1_row_shift_y = 4;
849*495ae853SAndroid Build Coastguard Worker u1_row_shift_uv = 3;
850*495ae853SAndroid Build Coastguard Worker }
851*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_y += i4_wd_y << u1_row_shift_y;
852*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_u +=
853*495ae853SAndroid Build Coastguard Worker (i4_wd_uv << u1_row_shift_uv);
854*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_v += i4_wd_uv << u1_row_shift_uv;
855*495ae853SAndroid Build Coastguard Worker }
856*495ae853SAndroid Build Coastguard Worker
857*495ae853SAndroid Build Coastguard Worker /* point to A if top else A+1 */
858*495ae853SAndroid Build Coastguard Worker if(u1_left_fld ^ u1_cur_fld)
859*495ae853SAndroid Build Coastguard Worker ps_left_mb--;
860*495ae853SAndroid Build Coastguard Worker
861*495ae853SAndroid Build Coastguard Worker /********************************************************/
862*495ae853SAndroid Build Coastguard Worker /* if top MB and MB AFF and cur MB is frame and top is */
863*495ae853SAndroid Build Coastguard Worker /* field, then one extra top edge needs to be deblocked */
864*495ae853SAndroid Build Coastguard Worker /********************************************************/
865*495ae853SAndroid Build Coastguard Worker u1_extra_top_edge = 0;
866*495ae853SAndroid Build Coastguard Worker
867*495ae853SAndroid Build Coastguard Worker if(u1_deb_mode & MB_DISABLE_LEFT_EDGE)
868*495ae853SAndroid Build Coastguard Worker ps_left_mb = NULL;
869*495ae853SAndroid Build Coastguard Worker if(u1_deb_mode & MB_DISABLE_TOP_EDGE)
870*495ae853SAndroid Build Coastguard Worker ps_top_mb = NULL;
871*495ae853SAndroid Build Coastguard Worker
872*495ae853SAndroid Build Coastguard Worker ih264d_deblock_mb_mbaff(ps_dec, ps_tfr_cxt,
873*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
874*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst, ps_cur_mb,
875*495ae853SAndroid Build Coastguard Worker i4_wd_y, i4_wd_uv, ps_top_mb,
876*495ae853SAndroid Build Coastguard Worker ps_left_mb, u1_cur_fld,
877*495ae853SAndroid Build Coastguard Worker u1_extra_top_edge);
878*495ae853SAndroid Build Coastguard Worker }
879*495ae853SAndroid Build Coastguard Worker
880*495ae853SAndroid Build Coastguard Worker ps_cur_mb++;
881*495ae853SAndroid Build Coastguard Worker i2_mb_x++;
882*495ae853SAndroid Build Coastguard Worker
883*495ae853SAndroid Build Coastguard Worker pu1_deb_y += 16;
884*495ae853SAndroid Build Coastguard Worker pu1_deb_u += 8 * YUV420SP_FACTOR;
885*495ae853SAndroid Build Coastguard Worker pu1_deb_v += 8;
886*495ae853SAndroid Build Coastguard Worker
887*495ae853SAndroid Build Coastguard Worker }
888*495ae853SAndroid Build Coastguard Worker while(u2_image_wd_mb > i2_mb_x);
889*495ae853SAndroid Build Coastguard Worker
890*495ae853SAndroid Build Coastguard Worker pu1_deb_y += ps_tfr_cxt->u4_y_inc;
891*495ae853SAndroid Build Coastguard Worker pu1_deb_u += ps_tfr_cxt->u4_uv_inc;
892*495ae853SAndroid Build Coastguard Worker pu1_deb_v += ps_tfr_cxt->u4_uv_inc;
893*495ae853SAndroid Build Coastguard Worker
894*495ae853SAndroid Build Coastguard Worker i2_mb_x = 0;
895*495ae853SAndroid Build Coastguard Worker i2_mb_y -= 2;
896*495ae853SAndroid Build Coastguard Worker
897*495ae853SAndroid Build Coastguard Worker u1_first_row = 0;
898*495ae853SAndroid Build Coastguard Worker
899*495ae853SAndroid Build Coastguard Worker }
900*495ae853SAndroid Build Coastguard Worker }
901*495ae853SAndroid Build Coastguard Worker
902*495ae853SAndroid Build Coastguard Worker }
903*495ae853SAndroid Build Coastguard Worker //Padd the Picture
904*495ae853SAndroid Build Coastguard Worker //Horizontal Padd
905*495ae853SAndroid Build Coastguard Worker
906*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_horz_pad)
907*495ae853SAndroid Build Coastguard Worker {
908*495ae853SAndroid Build Coastguard Worker UWORD32 u1_field_pic_flag = ps_dec->ps_cur_slice->u1_field_pic_flag;
909*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_left_luma(ps_tfr_cxt->pu1_src_y + 4,
910*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y << u1_field_pic_flag,
911*495ae853SAndroid Build Coastguard Worker ps_dec->u2_pic_ht >> u1_field_pic_flag,
912*495ae853SAndroid Build Coastguard Worker PAD_LEN_Y_H);
913*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_right_luma(
914*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_y + 4
915*495ae853SAndroid Build Coastguard Worker + (ps_dec->u2_frm_wd_in_mbs << 4),
916*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y << u1_field_pic_flag,
917*495ae853SAndroid Build Coastguard Worker ps_dec->u2_pic_ht >> u1_field_pic_flag, PAD_LEN_Y_H);
918*495ae853SAndroid Build Coastguard Worker
919*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_left_chroma(ps_tfr_cxt->pu1_src_u + 4,
920*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv << u1_field_pic_flag,
921*495ae853SAndroid Build Coastguard Worker (ps_dec->u2_pic_ht / 2) >> u1_field_pic_flag,
922*495ae853SAndroid Build Coastguard Worker PAD_LEN_UV_H * YUV420SP_FACTOR);
923*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_right_chroma(
924*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_u + 4
925*495ae853SAndroid Build Coastguard Worker + (ps_dec->u2_frm_wd_in_mbs << 4),
926*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv << u1_field_pic_flag,
927*495ae853SAndroid Build Coastguard Worker (ps_dec->u2_pic_ht / 2) >> u1_field_pic_flag,
928*495ae853SAndroid Build Coastguard Worker PAD_LEN_UV_H * YUV420SP_FACTOR);
929*495ae853SAndroid Build Coastguard Worker
930*495ae853SAndroid Build Coastguard Worker }
931*495ae853SAndroid Build Coastguard Worker
932*495ae853SAndroid Build Coastguard Worker //Vertical Padd Top
933*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_vert_pad_top)
934*495ae853SAndroid Build Coastguard Worker {
935*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_top(ps_dec->ps_cur_pic->pu1_buf1 - PAD_LEN_Y_H,
936*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y, ps_dec->u2_frm_wd_y,
937*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_y_v);
938*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_top(
939*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_pic->pu1_buf2
940*495ae853SAndroid Build Coastguard Worker - PAD_LEN_UV_H * YUV420SP_FACTOR,
941*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv, ps_dec->u2_frm_wd_uv,
942*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_cr_v);
943*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_vert_pad_top = 0;
944*495ae853SAndroid Build Coastguard Worker }
945*495ae853SAndroid Build Coastguard Worker
946*495ae853SAndroid Build Coastguard Worker //Vertical Padd Bottom
947*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_vert_pad_bot)
948*495ae853SAndroid Build Coastguard Worker {
949*495ae853SAndroid Build Coastguard Worker
950*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf;
951*495ae853SAndroid Build Coastguard Worker pu1_buf = ps_dec->ps_cur_pic->pu1_buf1 - PAD_LEN_Y_H;
952*495ae853SAndroid Build Coastguard Worker pu1_buf += ps_dec->u2_pic_ht * ps_dec->u2_frm_wd_y;
953*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_bottom(pu1_buf, ps_dec->u2_frm_wd_y, ps_dec->u2_frm_wd_y,
954*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_y_v);
955*495ae853SAndroid Build Coastguard Worker pu1_buf = ps_dec->ps_cur_pic->pu1_buf2 - PAD_LEN_UV_H * YUV420SP_FACTOR;
956*495ae853SAndroid Build Coastguard Worker pu1_buf += (ps_dec->u2_pic_ht >> 1) * ps_dec->u2_frm_wd_uv;
957*495ae853SAndroid Build Coastguard Worker
958*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_bottom(pu1_buf, ps_dec->u2_frm_wd_uv,
959*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv,
960*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_cr_v);
961*495ae853SAndroid Build Coastguard Worker
962*495ae853SAndroid Build Coastguard Worker }
963*495ae853SAndroid Build Coastguard Worker }
964*495ae853SAndroid Build Coastguard Worker
965*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
966*495ae853SAndroid Build Coastguard Worker /* */
967*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_deblock_picture_non_mbaff */
968*495ae853SAndroid Build Coastguard Worker /* */
969*495ae853SAndroid Build Coastguard Worker /* Description : This function carries out deblocking on a whole picture */
970*495ae853SAndroid Build Coastguard Worker /* without MBAFF */
971*495ae853SAndroid Build Coastguard Worker /* */
972*495ae853SAndroid Build Coastguard Worker /* Inputs : <What inputs does the function take?> */
973*495ae853SAndroid Build Coastguard Worker /* Processing : This functions calls deblock MB in the MB increment order*/
974*495ae853SAndroid Build Coastguard Worker /* */
975*495ae853SAndroid Build Coastguard Worker /* Outputs : Produces the deblocked picture */
976*495ae853SAndroid Build Coastguard Worker /* Returns : None */
977*495ae853SAndroid Build Coastguard Worker /* */
978*495ae853SAndroid Build Coastguard Worker /* Revision History: */
979*495ae853SAndroid Build Coastguard Worker /* */
980*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
981*495ae853SAndroid Build Coastguard Worker /* 17 02 2005 NS Creation */
982*495ae853SAndroid Build Coastguard Worker /* 14 06 2005 SWRN clean-up */
983*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
984*495ae853SAndroid Build Coastguard Worker
ih264d_deblock_picture_non_mbaff(dec_struct_t * ps_dec)985*495ae853SAndroid Build Coastguard Worker void ih264d_deblock_picture_non_mbaff(dec_struct_t * ps_dec)
986*495ae853SAndroid Build Coastguard Worker {
987*495ae853SAndroid Build Coastguard Worker deblk_mb_t *ps_cur_mb;
988*495ae853SAndroid Build Coastguard Worker
989*495ae853SAndroid Build Coastguard Worker UWORD8 u1_vert_pad_top = 1;
990*495ae853SAndroid Build Coastguard Worker
991*495ae853SAndroid Build Coastguard Worker UWORD8 u1_deb_mode;
992*495ae853SAndroid Build Coastguard Worker WORD32 i4_wd_y, i4_wd_uv;
993*495ae853SAndroid Build Coastguard Worker
994*495ae853SAndroid Build Coastguard Worker UWORD8 u1_field_pic_flag = ps_dec->ps_cur_slice->u1_field_pic_flag; /*< Field u4_flag */
995*495ae853SAndroid Build Coastguard Worker UWORD8 u1_bottom_field_flag = ps_dec->ps_cur_slice->u1_bottom_field_flag; /*< Bottom field u4_flag */
996*495ae853SAndroid Build Coastguard Worker
997*495ae853SAndroid Build Coastguard Worker /**************************************************/
998*495ae853SAndroid Build Coastguard Worker /* one time loads from ps_dec which will be used */
999*495ae853SAndroid Build Coastguard Worker /* frequently throughout the deblocking procedure */
1000*495ae853SAndroid Build Coastguard Worker /**************************************************/
1001*495ae853SAndroid Build Coastguard Worker pad_mgr_t * ps_pad_mgr = &ps_dec->s_pad_mgr;
1002*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t s_tfr_ctxt;
1003*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt = &s_tfr_ctxt; // = &ps_dec->s_tran_addrecon;
1004*495ae853SAndroid Build Coastguard Worker
1005*495ae853SAndroid Build Coastguard Worker UWORD16 u2_image_wd_mb = ps_dec->u2_frm_wd_in_mbs;
1006*495ae853SAndroid Build Coastguard Worker UWORD16 u2_image_ht_mb = ps_dec->u2_frm_ht_in_mbs;
1007*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst = ps_dec->ps_cur_pps->i1_chroma_qp_index_offset;
1008*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst =
1009*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_pps->i1_second_chroma_qp_index_offset;
1010*495ae853SAndroid Build Coastguard Worker
1011*495ae853SAndroid Build Coastguard Worker /* Set up Parameter for DMA transfer */
1012*495ae853SAndroid Build Coastguard Worker ih264d_init_deblk_tfr_ctxt(ps_dec, ps_pad_mgr, ps_tfr_cxt, u2_image_wd_mb,
1013*495ae853SAndroid Build Coastguard Worker 0);
1014*495ae853SAndroid Build Coastguard Worker
1015*495ae853SAndroid Build Coastguard Worker /* Pic level Initialisations */
1016*495ae853SAndroid Build Coastguard Worker
1017*495ae853SAndroid Build Coastguard Worker
1018*495ae853SAndroid Build Coastguard Worker
1019*495ae853SAndroid Build Coastguard Worker i4_wd_y = ps_dec->u2_frm_wd_y << u1_field_pic_flag;
1020*495ae853SAndroid Build Coastguard Worker i4_wd_uv = ps_dec->u2_frm_wd_uv << u1_field_pic_flag;
1021*495ae853SAndroid Build Coastguard Worker /* Initial filling of the buffers with deblocking data */
1022*495ae853SAndroid Build Coastguard Worker
1023*495ae853SAndroid Build Coastguard Worker ps_cur_mb = ps_dec->ps_deblk_pic;
1024*495ae853SAndroid Build Coastguard Worker
1025*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_app_disable_deblk_frm == 0)
1026*495ae853SAndroid Build Coastguard Worker {
1027*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_cur_sps->u1_mb_aff_flag == 1)
1028*495ae853SAndroid Build Coastguard Worker {
1029*495ae853SAndroid Build Coastguard Worker while( ps_dec->u4_deblk_mb_y < u2_image_ht_mb)
1030*495ae853SAndroid Build Coastguard Worker {
1031*495ae853SAndroid Build Coastguard Worker ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt,
1032*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
1033*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst,
1034*495ae853SAndroid Build Coastguard Worker i4_wd_y, i4_wd_uv);
1035*495ae853SAndroid Build Coastguard Worker ps_cur_mb++;
1036*495ae853SAndroid Build Coastguard Worker }
1037*495ae853SAndroid Build Coastguard Worker }
1038*495ae853SAndroid Build Coastguard Worker
1039*495ae853SAndroid Build Coastguard Worker }
1040*495ae853SAndroid Build Coastguard Worker
1041*495ae853SAndroid Build Coastguard Worker //Padd the Picture
1042*495ae853SAndroid Build Coastguard Worker //Horizontal Padd
1043*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_horz_pad)
1044*495ae853SAndroid Build Coastguard Worker {
1045*495ae853SAndroid Build Coastguard Worker UWORD32 u1_field_pic_flag = ps_dec->ps_cur_slice->u1_field_pic_flag;
1046*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_left_luma(ps_tfr_cxt->pu1_src_y + 4,
1047*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y << u1_field_pic_flag,
1048*495ae853SAndroid Build Coastguard Worker ps_dec->u2_pic_ht >> u1_field_pic_flag,
1049*495ae853SAndroid Build Coastguard Worker PAD_LEN_Y_H);
1050*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_right_luma(
1051*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_y + 4
1052*495ae853SAndroid Build Coastguard Worker + (ps_dec->u2_frm_wd_in_mbs << 4),
1053*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y << u1_field_pic_flag,
1054*495ae853SAndroid Build Coastguard Worker ps_dec->u2_pic_ht >> u1_field_pic_flag, PAD_LEN_Y_H);
1055*495ae853SAndroid Build Coastguard Worker
1056*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_left_chroma(ps_tfr_cxt->pu1_src_u + 4,
1057*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv << u1_field_pic_flag,
1058*495ae853SAndroid Build Coastguard Worker (ps_dec->u2_pic_ht / 2) >> u1_field_pic_flag,
1059*495ae853SAndroid Build Coastguard Worker PAD_LEN_UV_H * YUV420SP_FACTOR);
1060*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_right_chroma(
1061*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_u + 4
1062*495ae853SAndroid Build Coastguard Worker + (ps_dec->u2_frm_wd_in_mbs << 4),
1063*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv << u1_field_pic_flag,
1064*495ae853SAndroid Build Coastguard Worker (ps_dec->u2_pic_ht / 2) >> u1_field_pic_flag,
1065*495ae853SAndroid Build Coastguard Worker PAD_LEN_UV_H * YUV420SP_FACTOR);
1066*495ae853SAndroid Build Coastguard Worker
1067*495ae853SAndroid Build Coastguard Worker }
1068*495ae853SAndroid Build Coastguard Worker
1069*495ae853SAndroid Build Coastguard Worker //Vertical Padd Top
1070*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_vert_pad_top)
1071*495ae853SAndroid Build Coastguard Worker {
1072*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_top(ps_dec->ps_cur_pic->pu1_buf1 - PAD_LEN_Y_H,
1073*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y, ps_dec->u2_frm_wd_y,
1074*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_y_v);
1075*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_top(
1076*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_pic->pu1_buf2
1077*495ae853SAndroid Build Coastguard Worker - PAD_LEN_UV_H * YUV420SP_FACTOR,
1078*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv, ps_dec->u2_frm_wd_uv,
1079*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_cr_v);
1080*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_vert_pad_top = 0;
1081*495ae853SAndroid Build Coastguard Worker }
1082*495ae853SAndroid Build Coastguard Worker
1083*495ae853SAndroid Build Coastguard Worker //Vertical Padd Bottom
1084*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_vert_pad_bot)
1085*495ae853SAndroid Build Coastguard Worker {
1086*495ae853SAndroid Build Coastguard Worker
1087*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf;
1088*495ae853SAndroid Build Coastguard Worker pu1_buf = ps_dec->ps_cur_pic->pu1_buf1 - PAD_LEN_Y_H;
1089*495ae853SAndroid Build Coastguard Worker pu1_buf += ps_dec->u2_pic_ht * ps_dec->u2_frm_wd_y;
1090*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_bottom(pu1_buf, ps_dec->u2_frm_wd_y, ps_dec->u2_frm_wd_y,
1091*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_y_v);
1092*495ae853SAndroid Build Coastguard Worker pu1_buf = ps_dec->ps_cur_pic->pu1_buf2 - PAD_LEN_UV_H * YUV420SP_FACTOR;
1093*495ae853SAndroid Build Coastguard Worker pu1_buf += (ps_dec->u2_pic_ht >> 1) * ps_dec->u2_frm_wd_uv;
1094*495ae853SAndroid Build Coastguard Worker
1095*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_bottom(pu1_buf, ps_dec->u2_frm_wd_uv,
1096*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv,
1097*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_cr_v);
1098*495ae853SAndroid Build Coastguard Worker
1099*495ae853SAndroid Build Coastguard Worker }
1100*495ae853SAndroid Build Coastguard Worker }
1101*495ae853SAndroid Build Coastguard Worker
ih264d_deblock_picture_progressive(dec_struct_t * ps_dec)1102*495ae853SAndroid Build Coastguard Worker void ih264d_deblock_picture_progressive(dec_struct_t * ps_dec)
1103*495ae853SAndroid Build Coastguard Worker {
1104*495ae853SAndroid Build Coastguard Worker deblk_mb_t *ps_cur_mb;
1105*495ae853SAndroid Build Coastguard Worker
1106*495ae853SAndroid Build Coastguard Worker UWORD8 u1_vert_pad_top = 1;
1107*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mbs_next;
1108*495ae853SAndroid Build Coastguard Worker UWORD8 u1_deb_mode;
1109*495ae853SAndroid Build Coastguard Worker WORD32 i4_wd_y, i4_wd_uv;
1110*495ae853SAndroid Build Coastguard Worker
1111*495ae853SAndroid Build Coastguard Worker
1112*495ae853SAndroid Build Coastguard Worker /**************************************************/
1113*495ae853SAndroid Build Coastguard Worker /* one time loads from ps_dec which will be used */
1114*495ae853SAndroid Build Coastguard Worker /* frequently throughout the deblocking procedure */
1115*495ae853SAndroid Build Coastguard Worker /**************************************************/
1116*495ae853SAndroid Build Coastguard Worker pad_mgr_t * ps_pad_mgr = &ps_dec->s_pad_mgr;
1117*495ae853SAndroid Build Coastguard Worker
1118*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t s_tfr_ctxt;
1119*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt = &s_tfr_ctxt; // = &ps_dec->s_tran_addrecon;
1120*495ae853SAndroid Build Coastguard Worker UWORD16 u2_image_wd_mb = ps_dec->u2_frm_wd_in_mbs;
1121*495ae853SAndroid Build Coastguard Worker UWORD16 u2_image_ht_mb = ps_dec->u2_frm_ht_in_mbs;
1122*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mbaff = ps_dec->ps_cur_slice->u1_mbaff_frame_flag;
1123*495ae853SAndroid Build Coastguard Worker
1124*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst = ps_dec->ps_cur_pps->i1_chroma_qp_index_offset;
1125*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst =
1126*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_pps->i1_second_chroma_qp_index_offset;
1127*495ae853SAndroid Build Coastguard Worker
1128*495ae853SAndroid Build Coastguard Worker /* Set up Parameter for deblocking */
1129*495ae853SAndroid Build Coastguard Worker ih264d_init_deblk_tfr_ctxt(ps_dec, ps_pad_mgr, ps_tfr_cxt, u2_image_wd_mb,
1130*495ae853SAndroid Build Coastguard Worker 0);
1131*495ae853SAndroid Build Coastguard Worker
1132*495ae853SAndroid Build Coastguard Worker /* Pic level Initialisations */
1133*495ae853SAndroid Build Coastguard Worker
1134*495ae853SAndroid Build Coastguard Worker i4_wd_y = ps_dec->u2_frm_wd_y;
1135*495ae853SAndroid Build Coastguard Worker i4_wd_uv = ps_dec->u2_frm_wd_uv;
1136*495ae853SAndroid Build Coastguard Worker /* Initial filling of the buffers with deblocking data */
1137*495ae853SAndroid Build Coastguard Worker ps_cur_mb = ps_dec->ps_deblk_pic;
1138*495ae853SAndroid Build Coastguard Worker
1139*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_app_disable_deblk_frm == 0)
1140*495ae853SAndroid Build Coastguard Worker {
1141*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_cur_sps->u1_mb_aff_flag == 1)
1142*495ae853SAndroid Build Coastguard Worker {
1143*495ae853SAndroid Build Coastguard Worker while( ps_dec->u4_deblk_mb_y < u2_image_ht_mb)
1144*495ae853SAndroid Build Coastguard Worker {
1145*495ae853SAndroid Build Coastguard Worker ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt,
1146*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
1147*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst,
1148*495ae853SAndroid Build Coastguard Worker i4_wd_y, i4_wd_uv);
1149*495ae853SAndroid Build Coastguard Worker ps_cur_mb++;
1150*495ae853SAndroid Build Coastguard Worker }
1151*495ae853SAndroid Build Coastguard Worker }
1152*495ae853SAndroid Build Coastguard Worker
1153*495ae853SAndroid Build Coastguard Worker }
1154*495ae853SAndroid Build Coastguard Worker
1155*495ae853SAndroid Build Coastguard Worker //Padd the Picture
1156*495ae853SAndroid Build Coastguard Worker //Horizontal Padd
1157*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_horz_pad)
1158*495ae853SAndroid Build Coastguard Worker {
1159*495ae853SAndroid Build Coastguard Worker UWORD32 u1_field_pic_flag = ps_dec->ps_cur_slice->u1_field_pic_flag;
1160*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_left_luma(ps_tfr_cxt->pu1_src_y + 4,
1161*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y << u1_field_pic_flag,
1162*495ae853SAndroid Build Coastguard Worker ps_dec->u2_pic_ht >> u1_field_pic_flag,
1163*495ae853SAndroid Build Coastguard Worker PAD_LEN_Y_H);
1164*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_right_luma(
1165*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_y + 4
1166*495ae853SAndroid Build Coastguard Worker + (ps_dec->u2_frm_wd_in_mbs << 4),
1167*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y << u1_field_pic_flag,
1168*495ae853SAndroid Build Coastguard Worker ps_dec->u2_pic_ht >> u1_field_pic_flag, PAD_LEN_Y_H);
1169*495ae853SAndroid Build Coastguard Worker
1170*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_left_chroma(ps_tfr_cxt->pu1_src_u + 4,
1171*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv << u1_field_pic_flag,
1172*495ae853SAndroid Build Coastguard Worker (ps_dec->u2_pic_ht / 2) >> u1_field_pic_flag,
1173*495ae853SAndroid Build Coastguard Worker PAD_LEN_UV_H * YUV420SP_FACTOR);
1174*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_right_chroma(
1175*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_src_u + 4
1176*495ae853SAndroid Build Coastguard Worker + (ps_dec->u2_frm_wd_in_mbs << 4),
1177*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv << u1_field_pic_flag,
1178*495ae853SAndroid Build Coastguard Worker (ps_dec->u2_pic_ht / 2) >> u1_field_pic_flag,
1179*495ae853SAndroid Build Coastguard Worker PAD_LEN_UV_H * YUV420SP_FACTOR);
1180*495ae853SAndroid Build Coastguard Worker
1181*495ae853SAndroid Build Coastguard Worker }
1182*495ae853SAndroid Build Coastguard Worker
1183*495ae853SAndroid Build Coastguard Worker //Vertical Padd Top
1184*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_vert_pad_top)
1185*495ae853SAndroid Build Coastguard Worker {
1186*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_top(ps_dec->ps_cur_pic->pu1_buf1 - PAD_LEN_Y_H,
1187*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_y, ps_dec->u2_frm_wd_y,
1188*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_y_v);
1189*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_top(
1190*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_pic->pu1_buf2
1191*495ae853SAndroid Build Coastguard Worker - PAD_LEN_UV_H * YUV420SP_FACTOR,
1192*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv, ps_dec->u2_frm_wd_uv,
1193*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_cr_v);
1194*495ae853SAndroid Build Coastguard Worker
1195*495ae853SAndroid Build Coastguard Worker }
1196*495ae853SAndroid Build Coastguard Worker
1197*495ae853SAndroid Build Coastguard Worker //Vertical Padd Bottom
1198*495ae853SAndroid Build Coastguard Worker if(ps_pad_mgr->u1_vert_pad_bot)
1199*495ae853SAndroid Build Coastguard Worker {
1200*495ae853SAndroid Build Coastguard Worker
1201*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf;
1202*495ae853SAndroid Build Coastguard Worker pu1_buf = ps_dec->ps_cur_pic->pu1_buf1 - PAD_LEN_Y_H;
1203*495ae853SAndroid Build Coastguard Worker pu1_buf += ps_dec->u2_pic_ht * ps_dec->u2_frm_wd_y;
1204*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_bottom(pu1_buf, ps_dec->u2_frm_wd_y, ps_dec->u2_frm_wd_y,
1205*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_y_v);
1206*495ae853SAndroid Build Coastguard Worker pu1_buf = ps_dec->ps_cur_pic->pu1_buf2 - PAD_LEN_UV_H * YUV420SP_FACTOR;
1207*495ae853SAndroid Build Coastguard Worker pu1_buf += (ps_dec->u2_pic_ht >> 1) * ps_dec->u2_frm_wd_uv;
1208*495ae853SAndroid Build Coastguard Worker
1209*495ae853SAndroid Build Coastguard Worker ps_dec->pf_pad_bottom(pu1_buf, ps_dec->u2_frm_wd_uv,
1210*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_uv,
1211*495ae853SAndroid Build Coastguard Worker ps_pad_mgr->u1_pad_len_cr_v);
1212*495ae853SAndroid Build Coastguard Worker
1213*495ae853SAndroid Build Coastguard Worker }
1214*495ae853SAndroid Build Coastguard Worker }
1215*495ae853SAndroid Build Coastguard Worker
1216*495ae853SAndroid Build Coastguard Worker /*!
1217*495ae853SAndroid Build Coastguard Worker **************************************************************************
1218*495ae853SAndroid Build Coastguard Worker * \if Function name : ih264d_set_deblocking_parameters \endif
1219*495ae853SAndroid Build Coastguard Worker *
1220*495ae853SAndroid Build Coastguard Worker * \brief
1221*495ae853SAndroid Build Coastguard Worker * Sets the deblocking parameters of the macroblock
1222*495ae853SAndroid Build Coastguard Worker *
1223*495ae853SAndroid Build Coastguard Worker * \return
1224*495ae853SAndroid Build Coastguard Worker * 0 on Success and Error code otherwise
1225*495ae853SAndroid Build Coastguard Worker *
1226*495ae853SAndroid Build Coastguard Worker * \note
1227*495ae853SAndroid Build Coastguard Worker * Given the neighbour availablity information, and the deblocking
1228*495ae853SAndroid Build Coastguard Worker * parameters of the slice,this function will set the deblocking
1229*495ae853SAndroid Build Coastguard Worker * mode of the macroblock.
1230*495ae853SAndroid Build Coastguard Worker **************************************************************************
1231*495ae853SAndroid Build Coastguard Worker */
1232*495ae853SAndroid Build Coastguard Worker
ih264d_set_deblocking_parameters(deblk_mb_t * ps_cur_mb,dec_slice_params_t * ps_slice,UWORD8 u1_mb_ngbr_availablity,UWORD8 u1_mb_field_decoding_flag)1233*495ae853SAndroid Build Coastguard Worker WORD8 ih264d_set_deblocking_parameters(deblk_mb_t * ps_cur_mb,
1234*495ae853SAndroid Build Coastguard Worker dec_slice_params_t * ps_slice,
1235*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mb_ngbr_availablity,
1236*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mb_field_decoding_flag)
1237*495ae853SAndroid Build Coastguard Worker {
1238*495ae853SAndroid Build Coastguard Worker /*------------------------------------------------------------------*/
1239*495ae853SAndroid Build Coastguard Worker /* Set the deblocking parameters */
1240*495ae853SAndroid Build Coastguard Worker /*------------------------------------------------------------------*/
1241*495ae853SAndroid Build Coastguard Worker ps_cur_mb->i1_slice_alpha_c0_offset = ps_slice->i1_slice_alpha_c0_offset;
1242*495ae853SAndroid Build Coastguard Worker ps_cur_mb->i1_slice_beta_offset = ps_slice->i1_slice_beta_offset;
1243*495ae853SAndroid Build Coastguard Worker ps_cur_mb->u1_mb_type = (u1_mb_field_decoding_flag << 7);
1244*495ae853SAndroid Build Coastguard Worker
1245*495ae853SAndroid Build Coastguard Worker switch(ps_slice->u1_disable_dblk_filter_idc)
1246*495ae853SAndroid Build Coastguard Worker {
1247*495ae853SAndroid Build Coastguard Worker case DBLK_ENABLED:
1248*495ae853SAndroid Build Coastguard Worker ps_cur_mb->u1_deblocking_mode = MB_ENABLE_FILTERING;
1249*495ae853SAndroid Build Coastguard Worker break;
1250*495ae853SAndroid Build Coastguard Worker case DBLK_DISABLED:
1251*495ae853SAndroid Build Coastguard Worker ps_cur_mb->u1_deblocking_mode = MB_DISABLE_FILTERING;
1252*495ae853SAndroid Build Coastguard Worker break;
1253*495ae853SAndroid Build Coastguard Worker case SLICE_BOUNDARY_DBLK_DISABLED:
1254*495ae853SAndroid Build Coastguard Worker {
1255*495ae853SAndroid Build Coastguard Worker ps_cur_mb->u1_deblocking_mode = MB_ENABLE_FILTERING;
1256*495ae853SAndroid Build Coastguard Worker if(!(u1_mb_ngbr_availablity & LEFT_MB_AVAILABLE_MASK))
1257*495ae853SAndroid Build Coastguard Worker ps_cur_mb->u1_deblocking_mode |= MB_DISABLE_LEFT_EDGE;
1258*495ae853SAndroid Build Coastguard Worker if(!(u1_mb_ngbr_availablity & TOP_MB_AVAILABLE_MASK))
1259*495ae853SAndroid Build Coastguard Worker ps_cur_mb->u1_deblocking_mode |= MB_DISABLE_TOP_EDGE;
1260*495ae853SAndroid Build Coastguard Worker break;
1261*495ae853SAndroid Build Coastguard Worker }
1262*495ae853SAndroid Build Coastguard Worker }
1263*495ae853SAndroid Build Coastguard Worker
1264*495ae853SAndroid Build Coastguard Worker return (0);
1265*495ae853SAndroid Build Coastguard Worker }
1266*495ae853SAndroid Build Coastguard Worker
ih264d_copy_intra_pred_line(dec_struct_t * ps_dec,dec_mb_info_t * ps_cur_mb_info,UWORD32 nmb_index)1267*495ae853SAndroid Build Coastguard Worker void ih264d_copy_intra_pred_line(dec_struct_t *ps_dec,
1268*495ae853SAndroid Build Coastguard Worker dec_mb_info_t *ps_cur_mb_info,
1269*495ae853SAndroid Build Coastguard Worker UWORD32 nmb_index)
1270*495ae853SAndroid Build Coastguard Worker {
1271*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_mb_last_row, u1_mb_field_decoding_flag;
1272*495ae853SAndroid Build Coastguard Worker UWORD32 u4_recWidth, u4_recwidth_cr;
1273*495ae853SAndroid Build Coastguard Worker
1274*495ae853SAndroid Build Coastguard Worker u1_mb_field_decoding_flag = ps_cur_mb_info->u1_mb_field_decodingflag;
1275*495ae853SAndroid Build Coastguard Worker
1276*495ae853SAndroid Build Coastguard Worker u4_recWidth = ps_dec->u2_frm_wd_y << u1_mb_field_decoding_flag;
1277*495ae853SAndroid Build Coastguard Worker u4_recwidth_cr = ps_dec->u2_frm_wd_uv << u1_mb_field_decoding_flag;
1278*495ae853SAndroid Build Coastguard Worker
1279*495ae853SAndroid Build Coastguard Worker pu1_mb_last_row = ps_dec->ps_frame_buf_ip_recon->pu1_dest_y
1280*495ae853SAndroid Build Coastguard Worker + (u4_recWidth * (MB_SIZE - 1));
1281*495ae853SAndroid Build Coastguard Worker pu1_mb_last_row += MB_SIZE * nmb_index;
1282*495ae853SAndroid Build Coastguard Worker MEMCPY_16BYTES(ps_dec->pu1_cur_y_intra_pred_line, pu1_mb_last_row);
1283*495ae853SAndroid Build Coastguard Worker
1284*495ae853SAndroid Build Coastguard Worker pu1_mb_last_row = ps_dec->ps_frame_buf_ip_recon->pu1_dest_u
1285*495ae853SAndroid Build Coastguard Worker + (u4_recwidth_cr * (BLK8x8SIZE - 1));
1286*495ae853SAndroid Build Coastguard Worker pu1_mb_last_row += BLK8x8SIZE * nmb_index * YUV420SP_FACTOR;
1287*495ae853SAndroid Build Coastguard Worker
1288*495ae853SAndroid Build Coastguard Worker MEMCPY_16BYTES(ps_dec->pu1_cur_u_intra_pred_line, pu1_mb_last_row);
1289*495ae853SAndroid Build Coastguard Worker
1290*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_y_intra_pred_line = ps_dec->pu1_cur_y_intra_pred_line_base
1291*495ae853SAndroid Build Coastguard Worker + (MB_SIZE * (ps_cur_mb_info->u2_mbx + 1));
1292*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_u_intra_pred_line = ps_dec->pu1_cur_u_intra_pred_line_base
1293*495ae853SAndroid Build Coastguard Worker + (BLK8x8SIZE * (ps_cur_mb_info->u2_mbx + 1))
1294*495ae853SAndroid Build Coastguard Worker * YUV420SP_FACTOR;
1295*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_v_intra_pred_line = ps_dec->pu1_cur_v_intra_pred_line_base
1296*495ae853SAndroid Build Coastguard Worker + (BLK8x8SIZE * (ps_cur_mb_info->u2_mbx + 1));
1297*495ae853SAndroid Build Coastguard Worker
1298*495ae853SAndroid Build Coastguard Worker if(ps_cur_mb_info->u2_mbx == (ps_dec->u2_frm_wd_in_mbs - 1))
1299*495ae853SAndroid Build Coastguard Worker {
1300*495ae853SAndroid Build Coastguard Worker UWORD8* pu1_temp;
1301*495ae853SAndroid Build Coastguard Worker
1302*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_y_intra_pred_line =
1303*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_y_intra_pred_line_base;
1304*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_u_intra_pred_line =
1305*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_u_intra_pred_line_base;
1306*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_v_intra_pred_line =
1307*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_v_intra_pred_line_base;
1308*495ae853SAndroid Build Coastguard Worker
1309*495ae853SAndroid Build Coastguard Worker /*swap current and previous rows*/
1310*495ae853SAndroid Build Coastguard Worker pu1_temp = ps_dec->pu1_cur_y_intra_pred_line;
1311*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_y_intra_pred_line = ps_dec->pu1_prev_y_intra_pred_line;
1312*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_prev_y_intra_pred_line = pu1_temp;
1313*495ae853SAndroid Build Coastguard Worker
1314*495ae853SAndroid Build Coastguard Worker pu1_temp = ps_dec->pu1_cur_u_intra_pred_line;
1315*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_u_intra_pred_line = ps_dec->pu1_prev_u_intra_pred_line;
1316*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_prev_u_intra_pred_line = pu1_temp;
1317*495ae853SAndroid Build Coastguard Worker
1318*495ae853SAndroid Build Coastguard Worker pu1_temp = ps_dec->pu1_cur_v_intra_pred_line;
1319*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_v_intra_pred_line = ps_dec->pu1_prev_v_intra_pred_line;
1320*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_prev_v_intra_pred_line = pu1_temp;
1321*495ae853SAndroid Build Coastguard Worker
1322*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_y_intra_pred_line_base =
1323*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_y_intra_pred_line;
1324*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_u_intra_pred_line_base =
1325*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_u_intra_pred_line;
1326*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_v_intra_pred_line_base =
1327*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_cur_v_intra_pred_line;
1328*495ae853SAndroid Build Coastguard Worker
1329*495ae853SAndroid Build Coastguard Worker
1330*495ae853SAndroid Build Coastguard Worker
1331*495ae853SAndroid Build Coastguard Worker
1332*495ae853SAndroid Build Coastguard Worker
1333*495ae853SAndroid Build Coastguard Worker }
1334*495ae853SAndroid Build Coastguard Worker
1335*495ae853SAndroid Build Coastguard Worker }
1336*495ae853SAndroid Build Coastguard Worker
1337*495ae853SAndroid Build Coastguard Worker
ih264d_filter_boundary_left_mbaff(dec_struct_t * ps_dec,tfr_ctxt_t * ps_tfr_cxt,WORD8 i1_cb_qp_idx_ofst,WORD8 i1_cr_qp_idx_ofst,deblk_mb_t * ps_cur_mb,WORD32 i4_strd_y,WORD32 i4_strd_uv,deblk_mb_t * ps_left_mb,UWORD32 pu4_bs_tab[],UWORD8 u1_cur_fld)1338*495ae853SAndroid Build Coastguard Worker void ih264d_filter_boundary_left_mbaff(dec_struct_t *ps_dec,
1339*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt,
1340*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst,
1341*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst,
1342*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_cur_mb,
1343*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_y,
1344*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_uv,
1345*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_left_mb, /* Neighbouring MB parameters */
1346*495ae853SAndroid Build Coastguard Worker UWORD32 pu4_bs_tab[], /* pointer to the BsTable array */
1347*495ae853SAndroid Build Coastguard Worker UWORD8 u1_cur_fld)
1348*495ae853SAndroid Build Coastguard Worker {
1349*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_y, *pu1_u, *pu1_v;
1350*495ae853SAndroid Build Coastguard Worker UWORD8 uc_tmp, qp_avg;
1351*495ae853SAndroid Build Coastguard Worker WORD32 alpha_u = 0, beta_u = 0, alpha_v = 0, beta_v = 0;
1352*495ae853SAndroid Build Coastguard Worker WORD32 alpha_y = 0, beta_y = 0;
1353*495ae853SAndroid Build Coastguard Worker
1354*495ae853SAndroid Build Coastguard Worker WORD32 idx_b_u, idx_a_u, idx_b_v, idx_a_v;
1355*495ae853SAndroid Build Coastguard Worker WORD32 idx_b_y, idx_a_y;
1356*495ae853SAndroid Build Coastguard Worker
1357*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_val;
1358*495ae853SAndroid Build Coastguard Worker
1359*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_u, *pu1_cliptab_v, *pu1_cliptab_y;
1360*495ae853SAndroid Build Coastguard Worker
1361*495ae853SAndroid Build Coastguard Worker UWORD8 u1_double_cl = !ps_cur_mb->u1_single_call;
1362*495ae853SAndroid Build Coastguard Worker WORD32 ofst_a = ps_cur_mb->i1_slice_alpha_c0_offset;
1363*495ae853SAndroid Build Coastguard Worker WORD32 ofst_b = ps_cur_mb->i1_slice_beta_offset;
1364*495ae853SAndroid Build Coastguard Worker
1365*495ae853SAndroid Build Coastguard Worker PROFILE_DISABLE_DEBLK()
1366*495ae853SAndroid Build Coastguard Worker
1367*495ae853SAndroid Build Coastguard Worker pu1_y = ps_tfr_cxt->pu1_mb_y;
1368*495ae853SAndroid Build Coastguard Worker pu1_u = ps_tfr_cxt->pu1_mb_u;
1369*495ae853SAndroid Build Coastguard Worker pu1_v = ps_tfr_cxt->pu1_mb_v;
1370*495ae853SAndroid Build Coastguard Worker
1371*495ae853SAndroid Build Coastguard Worker /* LUMA values */
1372*495ae853SAndroid Build Coastguard Worker /* Deblock rounding change */
1373*495ae853SAndroid Build Coastguard Worker uc_tmp = (UWORD8)((ps_left_mb->u1_mb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
1374*495ae853SAndroid Build Coastguard Worker qp_avg = uc_tmp;
1375*495ae853SAndroid Build Coastguard Worker idx_a_y = qp_avg + ofst_a;
1376*495ae853SAndroid Build Coastguard Worker alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
1377*495ae853SAndroid Build Coastguard Worker idx_b_y = qp_avg + ofst_b;
1378*495ae853SAndroid Build Coastguard Worker beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
1379*495ae853SAndroid Build Coastguard Worker
1380*495ae853SAndroid Build Coastguard Worker /* Chroma cb values */
1381*495ae853SAndroid Build Coastguard Worker {
1382*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
1383*495ae853SAndroid Build Coastguard Worker mb_qp1 = (ps_left_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
1384*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
1385*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
1386*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
1387*495ae853SAndroid Build Coastguard Worker }
1388*495ae853SAndroid Build Coastguard Worker idx_a_u = qp_avg + ofst_a;
1389*495ae853SAndroid Build Coastguard Worker alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
1390*495ae853SAndroid Build Coastguard Worker idx_b_u = qp_avg + ofst_b;
1391*495ae853SAndroid Build Coastguard Worker beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
1392*495ae853SAndroid Build Coastguard Worker
1393*495ae853SAndroid Build Coastguard Worker /* Chroma cr values */
1394*495ae853SAndroid Build Coastguard Worker {
1395*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
1396*495ae853SAndroid Build Coastguard Worker mb_qp1 = (ps_left_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
1397*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
1398*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
1399*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
1400*495ae853SAndroid Build Coastguard Worker }
1401*495ae853SAndroid Build Coastguard Worker idx_a_v = qp_avg + ofst_a;
1402*495ae853SAndroid Build Coastguard Worker alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
1403*495ae853SAndroid Build Coastguard Worker idx_b_v = qp_avg + ofst_b;
1404*495ae853SAndroid Build Coastguard Worker beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
1405*495ae853SAndroid Build Coastguard Worker
1406*495ae853SAndroid Build Coastguard Worker if(u1_double_cl == 0)
1407*495ae853SAndroid Build Coastguard Worker {
1408*495ae853SAndroid Build Coastguard Worker u4_bs_val = pu4_bs_tab[4];
1409*495ae853SAndroid Build Coastguard Worker
1410*495ae853SAndroid Build Coastguard Worker if(0x04040404 == u4_bs_val)
1411*495ae853SAndroid Build Coastguard Worker {
1412*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bs4(pu1_y, i4_strd_y, alpha_y, beta_y);
1413*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bs4(pu1_u, i4_strd_uv, alpha_u,
1414*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v);
1415*495ae853SAndroid Build Coastguard Worker
1416*495ae853SAndroid Build Coastguard Worker }
1417*495ae853SAndroid Build Coastguard Worker else
1418*495ae853SAndroid Build Coastguard Worker {
1419*495ae853SAndroid Build Coastguard Worker if(u4_bs_val)
1420*495ae853SAndroid Build Coastguard Worker {
1421*495ae853SAndroid Build Coastguard Worker
1422*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12
1423*495ae853SAndroid Build Coastguard Worker + idx_a_y];
1424*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12
1425*495ae853SAndroid Build Coastguard Worker + idx_a_u];
1426*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12
1427*495ae853SAndroid Build Coastguard Worker + idx_a_v];
1428*495ae853SAndroid Build Coastguard Worker
1429*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4(pu1_y, i4_strd_y, alpha_y,
1430*495ae853SAndroid Build Coastguard Worker beta_y, u4_bs_val,
1431*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y);
1432*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bslt4(pu1_u, i4_strd_uv, alpha_u,
1433*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v,
1434*495ae853SAndroid Build Coastguard Worker u4_bs_val, pu1_cliptab_u,
1435*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v);
1436*495ae853SAndroid Build Coastguard Worker
1437*495ae853SAndroid Build Coastguard Worker }
1438*495ae853SAndroid Build Coastguard Worker }
1439*495ae853SAndroid Build Coastguard Worker
1440*495ae853SAndroid Build Coastguard Worker }
1441*495ae853SAndroid Build Coastguard Worker else
1442*495ae853SAndroid Build Coastguard Worker {
1443*495ae853SAndroid Build Coastguard Worker
1444*495ae853SAndroid Build Coastguard Worker i4_strd_y <<= (!u1_cur_fld);
1445*495ae853SAndroid Build Coastguard Worker u4_bs_val = pu4_bs_tab[4];
1446*495ae853SAndroid Build Coastguard Worker i4_strd_uv <<= (!u1_cur_fld);
1447*495ae853SAndroid Build Coastguard Worker
1448*495ae853SAndroid Build Coastguard Worker if(0x04040404 == u4_bs_val)
1449*495ae853SAndroid Build Coastguard Worker {
1450*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bs4_mbaff(pu1_y, i4_strd_y, alpha_y,
1451*495ae853SAndroid Build Coastguard Worker beta_y);
1452*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bs4_mbaff(pu1_u, i4_strd_uv, alpha_u,
1453*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v);
1454*495ae853SAndroid Build Coastguard Worker }
1455*495ae853SAndroid Build Coastguard Worker else
1456*495ae853SAndroid Build Coastguard Worker {
1457*495ae853SAndroid Build Coastguard Worker if(u4_bs_val)
1458*495ae853SAndroid Build Coastguard Worker {
1459*495ae853SAndroid Build Coastguard Worker
1460*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
1461*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
1462*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
1463*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4_mbaff(pu1_y, i4_strd_y,
1464*495ae853SAndroid Build Coastguard Worker alpha_y, beta_y,
1465*495ae853SAndroid Build Coastguard Worker u4_bs_val,
1466*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y);
1467*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bslt4_mbaff(pu1_u, i4_strd_uv,
1468*495ae853SAndroid Build Coastguard Worker alpha_u, beta_u,
1469*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v,
1470*495ae853SAndroid Build Coastguard Worker u4_bs_val,
1471*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u,
1472*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v);
1473*495ae853SAndroid Build Coastguard Worker
1474*495ae853SAndroid Build Coastguard Worker }
1475*495ae853SAndroid Build Coastguard Worker }
1476*495ae853SAndroid Build Coastguard Worker
1477*495ae853SAndroid Build Coastguard Worker {
1478*495ae853SAndroid Build Coastguard Worker
1479*495ae853SAndroid Build Coastguard Worker UWORD16 u2_shift = (i4_strd_y >> 1) << (u1_cur_fld ? 4 : 0);
1480*495ae853SAndroid Build Coastguard Worker pu1_y += u2_shift;
1481*495ae853SAndroid Build Coastguard Worker u2_shift = (i4_strd_uv >> 1) << (u1_cur_fld ? 3 : 0);
1482*495ae853SAndroid Build Coastguard Worker pu1_u += u2_shift;
1483*495ae853SAndroid Build Coastguard Worker pu1_v += u2_shift;
1484*495ae853SAndroid Build Coastguard Worker }
1485*495ae853SAndroid Build Coastguard Worker
1486*495ae853SAndroid Build Coastguard Worker uc_tmp = (((ps_left_mb + 1)->u1_mb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
1487*495ae853SAndroid Build Coastguard Worker qp_avg = uc_tmp;
1488*495ae853SAndroid Build Coastguard Worker idx_a_y = qp_avg + ofst_a;
1489*495ae853SAndroid Build Coastguard Worker alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
1490*495ae853SAndroid Build Coastguard Worker idx_b_y = qp_avg + ofst_b;
1491*495ae853SAndroid Build Coastguard Worker beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
1492*495ae853SAndroid Build Coastguard Worker u4_bs_val = pu4_bs_tab[9];
1493*495ae853SAndroid Build Coastguard Worker
1494*495ae853SAndroid Build Coastguard Worker {
1495*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
1496*495ae853SAndroid Build Coastguard Worker mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cb_qp_idx_ofst);
1497*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
1498*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
1499*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
1500*495ae853SAndroid Build Coastguard Worker }
1501*495ae853SAndroid Build Coastguard Worker idx_a_u = qp_avg + ofst_a;
1502*495ae853SAndroid Build Coastguard Worker alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
1503*495ae853SAndroid Build Coastguard Worker idx_b_u = qp_avg + ofst_b;
1504*495ae853SAndroid Build Coastguard Worker beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
1505*495ae853SAndroid Build Coastguard Worker u4_bs_val = pu4_bs_tab[9];
1506*495ae853SAndroid Build Coastguard Worker {
1507*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
1508*495ae853SAndroid Build Coastguard Worker mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cr_qp_idx_ofst);
1509*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
1510*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
1511*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
1512*495ae853SAndroid Build Coastguard Worker }
1513*495ae853SAndroid Build Coastguard Worker idx_a_v = qp_avg + ofst_a;
1514*495ae853SAndroid Build Coastguard Worker alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
1515*495ae853SAndroid Build Coastguard Worker idx_b_v = qp_avg + ofst_b;
1516*495ae853SAndroid Build Coastguard Worker beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
1517*495ae853SAndroid Build Coastguard Worker
1518*495ae853SAndroid Build Coastguard Worker if(0x04040404 == u4_bs_val)
1519*495ae853SAndroid Build Coastguard Worker {
1520*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bs4_mbaff(pu1_y, i4_strd_y, alpha_y,
1521*495ae853SAndroid Build Coastguard Worker beta_y);
1522*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bs4_mbaff(pu1_u, i4_strd_uv, alpha_u,
1523*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v);
1524*495ae853SAndroid Build Coastguard Worker
1525*495ae853SAndroid Build Coastguard Worker }
1526*495ae853SAndroid Build Coastguard Worker else
1527*495ae853SAndroid Build Coastguard Worker {
1528*495ae853SAndroid Build Coastguard Worker if(u4_bs_val)
1529*495ae853SAndroid Build Coastguard Worker {
1530*495ae853SAndroid Build Coastguard Worker
1531*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
1532*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
1533*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
1534*495ae853SAndroid Build Coastguard Worker
1535*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4_mbaff(pu1_y, i4_strd_y,
1536*495ae853SAndroid Build Coastguard Worker alpha_y, beta_y,
1537*495ae853SAndroid Build Coastguard Worker u4_bs_val,
1538*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y);
1539*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bslt4_mbaff(pu1_u, i4_strd_uv,
1540*495ae853SAndroid Build Coastguard Worker alpha_u, beta_u,
1541*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v,
1542*495ae853SAndroid Build Coastguard Worker u4_bs_val,
1543*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u,
1544*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v);
1545*495ae853SAndroid Build Coastguard Worker
1546*495ae853SAndroid Build Coastguard Worker }
1547*495ae853SAndroid Build Coastguard Worker }
1548*495ae853SAndroid Build Coastguard Worker }
1549*495ae853SAndroid Build Coastguard Worker
1550*495ae853SAndroid Build Coastguard Worker }
1551*495ae853SAndroid Build Coastguard Worker
ih264d_filter_boundary_topmbaff(dec_struct_t * ps_dec,tfr_ctxt_t * ps_tfr_cxt,WORD8 i1_cb_qp_idx_ofst,WORD8 i1_cr_qp_idx_ofst,deblk_mb_t * ps_cur_mb,WORD32 i4_strd_y,WORD32 i4_strd_uv,deblk_mb_t * ps_top_mb,UWORD32 u4_bs)1552*495ae853SAndroid Build Coastguard Worker void ih264d_filter_boundary_topmbaff(dec_struct_t *ps_dec,
1553*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt,
1554*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst,
1555*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst,
1556*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_cur_mb,
1557*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_y,
1558*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_uv,
1559*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_top_mb,
1560*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs)
1561*495ae853SAndroid Build Coastguard Worker {
1562*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_y, *pu1_u;
1563*495ae853SAndroid Build Coastguard Worker WORD32 alpha_u = 0, beta_u = 0, alpha_v = 0, beta_v = 0;
1564*495ae853SAndroid Build Coastguard Worker WORD32 alpha_y = 0, beta_y = 0;
1565*495ae853SAndroid Build Coastguard Worker WORD32 qp_avg;
1566*495ae853SAndroid Build Coastguard Worker WORD32 idx_b_u, idx_a_u, idx_b_v, idx_a_v;
1567*495ae853SAndroid Build Coastguard Worker WORD32 idx_b_y, idx_a_y;
1568*495ae853SAndroid Build Coastguard Worker UWORD16 uc_tmp;
1569*495ae853SAndroid Build Coastguard Worker
1570*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_u, *pu1_cliptab_v, *pu1_cliptab_y;
1571*495ae853SAndroid Build Coastguard Worker WORD32 ofst_a = ps_cur_mb->i1_slice_alpha_c0_offset;
1572*495ae853SAndroid Build Coastguard Worker WORD32 ofst_b = ps_cur_mb->i1_slice_beta_offset;
1573*495ae853SAndroid Build Coastguard Worker
1574*495ae853SAndroid Build Coastguard Worker /* LUMA values */
1575*495ae853SAndroid Build Coastguard Worker /* Deblock rounding change */
1576*495ae853SAndroid Build Coastguard Worker uc_tmp = ((ps_top_mb->u1_mb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
1577*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)uc_tmp;
1578*495ae853SAndroid Build Coastguard Worker idx_a_y = qp_avg + ofst_a;
1579*495ae853SAndroid Build Coastguard Worker alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
1580*495ae853SAndroid Build Coastguard Worker idx_b_y = qp_avg + ofst_b;
1581*495ae853SAndroid Build Coastguard Worker beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
1582*495ae853SAndroid Build Coastguard Worker pu1_y = ps_tfr_cxt->pu1_mb_y;
1583*495ae853SAndroid Build Coastguard Worker
1584*495ae853SAndroid Build Coastguard Worker /* CHROMA cb values */
1585*495ae853SAndroid Build Coastguard Worker {
1586*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
1587*495ae853SAndroid Build Coastguard Worker mb_qp1 = (ps_top_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
1588*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
1589*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
1590*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
1591*495ae853SAndroid Build Coastguard Worker }
1592*495ae853SAndroid Build Coastguard Worker
1593*495ae853SAndroid Build Coastguard Worker idx_a_u = qp_avg + ofst_a;
1594*495ae853SAndroid Build Coastguard Worker alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
1595*495ae853SAndroid Build Coastguard Worker idx_b_u = qp_avg + ofst_b;
1596*495ae853SAndroid Build Coastguard Worker beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
1597*495ae853SAndroid Build Coastguard Worker /* CHROMA cr values */
1598*495ae853SAndroid Build Coastguard Worker {
1599*495ae853SAndroid Build Coastguard Worker WORD32 mb_qp1, mb_qp2;
1600*495ae853SAndroid Build Coastguard Worker mb_qp1 = (ps_top_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
1601*495ae853SAndroid Build Coastguard Worker mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
1602*495ae853SAndroid Build Coastguard Worker qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
1603*495ae853SAndroid Build Coastguard Worker + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
1604*495ae853SAndroid Build Coastguard Worker }
1605*495ae853SAndroid Build Coastguard Worker
1606*495ae853SAndroid Build Coastguard Worker idx_a_v = qp_avg + ofst_a;
1607*495ae853SAndroid Build Coastguard Worker alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
1608*495ae853SAndroid Build Coastguard Worker idx_b_v = qp_avg + ofst_b;
1609*495ae853SAndroid Build Coastguard Worker beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
1610*495ae853SAndroid Build Coastguard Worker pu1_u = ps_tfr_cxt->pu1_mb_u;
1611*495ae853SAndroid Build Coastguard Worker
1612*495ae853SAndroid Build Coastguard Worker if(u4_bs == 0x04040404)
1613*495ae853SAndroid Build Coastguard Worker {
1614*495ae853SAndroid Build Coastguard Worker /* Code specific to the assembly module */
1615*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bs4(pu1_y, i4_strd_y, alpha_y, beta_y);
1616*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_horz_bs4(pu1_u, i4_strd_uv, alpha_u, beta_u,
1617*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v);
1618*495ae853SAndroid Build Coastguard Worker
1619*495ae853SAndroid Build Coastguard Worker }
1620*495ae853SAndroid Build Coastguard Worker else
1621*495ae853SAndroid Build Coastguard Worker {
1622*495ae853SAndroid Build Coastguard Worker if(u4_bs)
1623*495ae853SAndroid Build Coastguard Worker {
1624*495ae853SAndroid Build Coastguard Worker
1625*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
1626*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u =
1627*495ae853SAndroid Build Coastguard Worker (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
1628*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v =
1629*495ae853SAndroid Build Coastguard Worker (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
1630*495ae853SAndroid Build Coastguard Worker
1631*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bslt4(pu1_y, i4_strd_y, alpha_y, beta_y,
1632*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_y);
1633*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_horz_bslt4(pu1_u, i4_strd_uv, alpha_u,
1634*495ae853SAndroid Build Coastguard Worker beta_u, alpha_v, beta_v,
1635*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_u,
1636*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v);
1637*495ae853SAndroid Build Coastguard Worker
1638*495ae853SAndroid Build Coastguard Worker }
1639*495ae853SAndroid Build Coastguard Worker }
1640*495ae853SAndroid Build Coastguard Worker
1641*495ae853SAndroid Build Coastguard Worker }
1642*495ae853SAndroid Build Coastguard Worker
ih264d_deblock_mb_mbaff(dec_struct_t * ps_dec,tfr_ctxt_t * ps_tfr_cxt,WORD8 i1_cb_qp_idx_ofst,WORD8 i1_cr_qp_idx_ofst,deblk_mb_t * ps_cur_mb,WORD32 i4_strd_y,WORD32 i4_strd_uv,deblk_mb_t * ps_top_mb,deblk_mb_t * ps_left_mb,UWORD8 u1_cur_fld,UWORD8 u1_extra_top_edge)1643*495ae853SAndroid Build Coastguard Worker void ih264d_deblock_mb_mbaff(dec_struct_t *ps_dec,
1644*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t * ps_tfr_cxt,
1645*495ae853SAndroid Build Coastguard Worker WORD8 i1_cb_qp_idx_ofst,
1646*495ae853SAndroid Build Coastguard Worker WORD8 i1_cr_qp_idx_ofst,
1647*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_cur_mb,
1648*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_y,
1649*495ae853SAndroid Build Coastguard Worker WORD32 i4_strd_uv,
1650*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_top_mb,
1651*495ae853SAndroid Build Coastguard Worker deblk_mb_t * ps_left_mb,
1652*495ae853SAndroid Build Coastguard Worker UWORD8 u1_cur_fld,
1653*495ae853SAndroid Build Coastguard Worker UWORD8 u1_extra_top_edge)
1654*495ae853SAndroid Build Coastguard Worker {
1655*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_y, *pu1_u;
1656*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs;
1657*495ae853SAndroid Build Coastguard Worker // WORD8 edge;
1658*495ae853SAndroid Build Coastguard Worker WORD32 alpha, beta, alpha_u, beta_u, alpha_v, beta_v;
1659*495ae853SAndroid Build Coastguard Worker
1660*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_u;
1661*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_v;
1662*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cliptab_y;
1663*495ae853SAndroid Build Coastguard Worker
1664*495ae853SAndroid Build Coastguard Worker UWORD32 * pu4_bs_tab = ps_cur_mb->u4_bs_table;
1665*495ae853SAndroid Build Coastguard Worker WORD32 idx_a_y, idx_a_u, idx_a_v;
1666*495ae853SAndroid Build Coastguard Worker /* Return from here to switch off deblocking */
1667*495ae853SAndroid Build Coastguard Worker PROFILE_DISABLE_DEBLK()
1668*495ae853SAndroid Build Coastguard Worker
1669*495ae853SAndroid Build Coastguard Worker i4_strd_y <<= u1_cur_fld;
1670*495ae853SAndroid Build Coastguard Worker i4_strd_uv <<= u1_cur_fld;
1671*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
1672*495ae853SAndroid Build Coastguard Worker /* Filter wrt Left edge */
1673*495ae853SAndroid Build Coastguard Worker /* except */
1674*495ae853SAndroid Build Coastguard Worker /* - Left Egde is Picture Boundary */
1675*495ae853SAndroid Build Coastguard Worker /* - Left Egde is part of Slice Boundary and Deblocking */
1676*495ae853SAndroid Build Coastguard Worker /* parameters of slice disable Filtering of Slice Boundary Edges*/
1677*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
1678*495ae853SAndroid Build Coastguard Worker if(ps_left_mb)
1679*495ae853SAndroid Build Coastguard Worker ih264d_filter_boundary_left_mbaff(ps_dec, ps_tfr_cxt, i1_cb_qp_idx_ofst,
1680*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst, ps_cur_mb,
1681*495ae853SAndroid Build Coastguard Worker i4_strd_y, i4_strd_uv, ps_left_mb,
1682*495ae853SAndroid Build Coastguard Worker pu4_bs_tab, u1_cur_fld);
1683*495ae853SAndroid Build Coastguard Worker
1684*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
1685*495ae853SAndroid Build Coastguard Worker /* Filter wrt Other Vertical Edges */
1686*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
1687*495ae853SAndroid Build Coastguard Worker {
1688*495ae853SAndroid Build Coastguard Worker WORD32 ofst_a, ofst_b, idx_b_y, idx_b_u,
1689*495ae853SAndroid Build Coastguard Worker idx_b_v;
1690*495ae853SAndroid Build Coastguard Worker WORD32 qp_avg, qp_avg_u, qp_avg_v;
1691*495ae853SAndroid Build Coastguard Worker ofst_a = ps_cur_mb->i1_slice_alpha_c0_offset;
1692*495ae853SAndroid Build Coastguard Worker ofst_b = ps_cur_mb->i1_slice_beta_offset;
1693*495ae853SAndroid Build Coastguard Worker qp_avg = ps_cur_mb->u1_mb_qp;
1694*495ae853SAndroid Build Coastguard Worker idx_a_y = qp_avg + ofst_a;
1695*495ae853SAndroid Build Coastguard Worker alpha = gau1_ih264d_alpha_table[12 + idx_a_y];
1696*495ae853SAndroid Build Coastguard Worker idx_b_y = qp_avg + ofst_b;
1697*495ae853SAndroid Build Coastguard Worker beta = gau1_ih264d_beta_table[12 + idx_b_y];
1698*495ae853SAndroid Build Coastguard Worker
1699*495ae853SAndroid Build Coastguard Worker /* CHROMA Cb values */
1700*495ae853SAndroid Build Coastguard Worker qp_avg_u = (qp_avg + i1_cb_qp_idx_ofst);
1701*495ae853SAndroid Build Coastguard Worker qp_avg_u = gau1_ih264d_qp_scale_cr[12 + qp_avg_u];
1702*495ae853SAndroid Build Coastguard Worker idx_a_u = qp_avg_u + ofst_a;
1703*495ae853SAndroid Build Coastguard Worker alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
1704*495ae853SAndroid Build Coastguard Worker idx_b_u = qp_avg_u + ofst_b;
1705*495ae853SAndroid Build Coastguard Worker beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
1706*495ae853SAndroid Build Coastguard Worker /* CHROMA Cr values */
1707*495ae853SAndroid Build Coastguard Worker qp_avg_v = (qp_avg + i1_cr_qp_idx_ofst);
1708*495ae853SAndroid Build Coastguard Worker qp_avg_v = gau1_ih264d_qp_scale_cr[12 + qp_avg_v];
1709*495ae853SAndroid Build Coastguard Worker idx_a_v = qp_avg_v + ofst_a;
1710*495ae853SAndroid Build Coastguard Worker alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
1711*495ae853SAndroid Build Coastguard Worker idx_b_v = qp_avg_v + ofst_b;
1712*495ae853SAndroid Build Coastguard Worker beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
1713*495ae853SAndroid Build Coastguard Worker }
1714*495ae853SAndroid Build Coastguard Worker
1715*495ae853SAndroid Build Coastguard Worker //STARTL4_FILTER_VERT;
1716*495ae853SAndroid Build Coastguard Worker
1717*495ae853SAndroid Build Coastguard Worker pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y]; //this for Luma
1718*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u]; //this for chroma
1719*495ae853SAndroid Build Coastguard Worker pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v]; //this for chroma
1720*495ae853SAndroid Build Coastguard Worker
1721*495ae853SAndroid Build Coastguard Worker //edge=1
1722*495ae853SAndroid Build Coastguard Worker
1723*495ae853SAndroid Build Coastguard Worker
1724*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[5];
1725*495ae853SAndroid Build Coastguard Worker pu1_y = ps_tfr_cxt->pu1_mb_y;
1726*495ae853SAndroid Build Coastguard Worker pu1_u = ps_tfr_cxt->pu1_mb_u;
1727*495ae853SAndroid Build Coastguard Worker
1728*495ae853SAndroid Build Coastguard Worker if(u4_bs)
1729*495ae853SAndroid Build Coastguard Worker {
1730*495ae853SAndroid Build Coastguard Worker
1731*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 4, i4_strd_y, alpha, beta,
1732*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_y);
1733*495ae853SAndroid Build Coastguard Worker
1734*495ae853SAndroid Build Coastguard Worker }
1735*495ae853SAndroid Build Coastguard Worker //edge=2
1736*495ae853SAndroid Build Coastguard Worker
1737*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[6];
1738*495ae853SAndroid Build Coastguard Worker if(u4_bs)
1739*495ae853SAndroid Build Coastguard Worker {
1740*495ae853SAndroid Build Coastguard Worker
1741*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 8, i4_strd_y, alpha, beta,
1742*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_y);
1743*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_vert_bslt4(pu1_u + 4 * YUV420SP_FACTOR,
1744*495ae853SAndroid Build Coastguard Worker i4_strd_uv, alpha_u, beta_u,
1745*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v, u4_bs,
1746*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u, pu1_cliptab_v);
1747*495ae853SAndroid Build Coastguard Worker }
1748*495ae853SAndroid Build Coastguard Worker //edge=3
1749*495ae853SAndroid Build Coastguard Worker
1750*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[7];
1751*495ae853SAndroid Build Coastguard Worker if(u4_bs)
1752*495ae853SAndroid Build Coastguard Worker {
1753*495ae853SAndroid Build Coastguard Worker
1754*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 12, i4_strd_y, alpha, beta,
1755*495ae853SAndroid Build Coastguard Worker u4_bs, pu1_cliptab_y);
1756*495ae853SAndroid Build Coastguard Worker
1757*495ae853SAndroid Build Coastguard Worker }
1758*495ae853SAndroid Build Coastguard Worker
1759*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
1760*495ae853SAndroid Build Coastguard Worker /* Filter wrt Top edge */
1761*495ae853SAndroid Build Coastguard Worker /* except */
1762*495ae853SAndroid Build Coastguard Worker /* - Top Egde is Picture Boundary */
1763*495ae853SAndroid Build Coastguard Worker /* - Top Egde is part of Slice Boundary and Deblocking */
1764*495ae853SAndroid Build Coastguard Worker /* parameters of slice disable Filtering of Slice Boundary Edges*/
1765*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
1766*495ae853SAndroid Build Coastguard Worker if(ps_top_mb)
1767*495ae853SAndroid Build Coastguard Worker {
1768*495ae853SAndroid Build Coastguard Worker /** if top MB and MB AFF and cur MB is frame and top is field then */
1769*495ae853SAndroid Build Coastguard Worker /* one extra top edge needs to be deblocked */
1770*495ae853SAndroid Build Coastguard Worker if(u1_extra_top_edge)
1771*495ae853SAndroid Build Coastguard Worker {
1772*495ae853SAndroid Build Coastguard Worker ih264d_filter_boundary_topmbaff(ps_dec, ps_tfr_cxt,
1773*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
1774*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst, ps_cur_mb,
1775*495ae853SAndroid Build Coastguard Worker (UWORD16)(i4_strd_y << 1),
1776*495ae853SAndroid Build Coastguard Worker (UWORD16)(i4_strd_uv << 1),
1777*495ae853SAndroid Build Coastguard Worker ps_top_mb - 1, pu4_bs_tab[8]);
1778*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_y += i4_strd_y;
1779*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_u += i4_strd_uv;
1780*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_v += i4_strd_uv;
1781*495ae853SAndroid Build Coastguard Worker
1782*495ae853SAndroid Build Coastguard Worker ih264d_filter_boundary_topmbaff(ps_dec, ps_tfr_cxt,
1783*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
1784*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst, ps_cur_mb,
1785*495ae853SAndroid Build Coastguard Worker (UWORD16)(i4_strd_y << 1),
1786*495ae853SAndroid Build Coastguard Worker (UWORD16)(i4_strd_uv << 1),
1787*495ae853SAndroid Build Coastguard Worker ps_top_mb, pu4_bs_tab[0]);
1788*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_y -= i4_strd_y;
1789*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_u -= i4_strd_uv;
1790*495ae853SAndroid Build Coastguard Worker ps_tfr_cxt->pu1_mb_v -= i4_strd_uv;
1791*495ae853SAndroid Build Coastguard Worker }
1792*495ae853SAndroid Build Coastguard Worker else
1793*495ae853SAndroid Build Coastguard Worker {
1794*495ae853SAndroid Build Coastguard Worker ih264d_filter_boundary_topmbaff(ps_dec, ps_tfr_cxt,
1795*495ae853SAndroid Build Coastguard Worker i1_cb_qp_idx_ofst,
1796*495ae853SAndroid Build Coastguard Worker i1_cr_qp_idx_ofst, ps_cur_mb,
1797*495ae853SAndroid Build Coastguard Worker i4_strd_y, i4_strd_uv, ps_top_mb,
1798*495ae853SAndroid Build Coastguard Worker pu4_bs_tab[0]);
1799*495ae853SAndroid Build Coastguard Worker }
1800*495ae853SAndroid Build Coastguard Worker }
1801*495ae853SAndroid Build Coastguard Worker
1802*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
1803*495ae853SAndroid Build Coastguard Worker /* Filter wrt Other Horizontal Edges */
1804*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
1805*495ae853SAndroid Build Coastguard Worker
1806*495ae853SAndroid Build Coastguard Worker //edge1
1807*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[1];
1808*495ae853SAndroid Build Coastguard Worker
1809*495ae853SAndroid Build Coastguard Worker if(u4_bs)
1810*495ae853SAndroid Build Coastguard Worker {
1811*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bslt4(pu1_y + (i4_strd_y << 2), i4_strd_y,
1812*495ae853SAndroid Build Coastguard Worker alpha, beta, u4_bs, pu1_cliptab_y);
1813*495ae853SAndroid Build Coastguard Worker
1814*495ae853SAndroid Build Coastguard Worker }
1815*495ae853SAndroid Build Coastguard Worker //edge2
1816*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[2];
1817*495ae853SAndroid Build Coastguard Worker
1818*495ae853SAndroid Build Coastguard Worker if(u4_bs)
1819*495ae853SAndroid Build Coastguard Worker {
1820*495ae853SAndroid Build Coastguard Worker
1821*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bslt4(pu1_y + (i4_strd_y << 3), i4_strd_y,
1822*495ae853SAndroid Build Coastguard Worker alpha, beta, u4_bs, pu1_cliptab_y);
1823*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_chroma_horz_bslt4(pu1_u + (i4_strd_uv << 2),
1824*495ae853SAndroid Build Coastguard Worker i4_strd_uv, alpha_u, beta_u,
1825*495ae853SAndroid Build Coastguard Worker alpha_v, beta_v, u4_bs,
1826*495ae853SAndroid Build Coastguard Worker pu1_cliptab_u, pu1_cliptab_v);
1827*495ae853SAndroid Build Coastguard Worker
1828*495ae853SAndroid Build Coastguard Worker }
1829*495ae853SAndroid Build Coastguard Worker //edge3
1830*495ae853SAndroid Build Coastguard Worker u4_bs = pu4_bs_tab[3];
1831*495ae853SAndroid Build Coastguard Worker if(u4_bs)
1832*495ae853SAndroid Build Coastguard Worker {
1833*495ae853SAndroid Build Coastguard Worker
1834*495ae853SAndroid Build Coastguard Worker ps_dec->pf_deblk_luma_horz_bslt4(
1835*495ae853SAndroid Build Coastguard Worker (pu1_y + (i4_strd_y << 3) + (i4_strd_y << 2)),
1836*495ae853SAndroid Build Coastguard Worker i4_strd_y, alpha, beta, u4_bs, pu1_cliptab_y);
1837*495ae853SAndroid Build Coastguard Worker
1838*495ae853SAndroid Build Coastguard Worker }
1839*495ae853SAndroid Build Coastguard Worker
1840*495ae853SAndroid Build Coastguard Worker }
1841*495ae853SAndroid Build Coastguard Worker
1842