xref: /aosp_15_r20/external/libavc/decoder/ih264d_deblocking.c (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
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