1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2022 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 /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker * isvce_deblk.c
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker * This file contains functions that are associated with deblocking
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * @author
30*495ae853SAndroid Build Coastguard Worker * ittiam
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * @par List of Functions:
33*495ae853SAndroid Build Coastguard Worker * - isvce_fill_bs_1mv_1ref_non_mbaff
34*495ae853SAndroid Build Coastguard Worker * - isvce_compute_bs
35*495ae853SAndroid Build Coastguard Worker * - isvce_filter_top_edge
36*495ae853SAndroid Build Coastguard Worker * - isvce_filter_left_edge
37*495ae853SAndroid Build Coastguard Worker * - isvce_deblock_mb
38*495ae853SAndroid Build Coastguard Worker *
39*495ae853SAndroid Build Coastguard Worker * @remarks
40*495ae853SAndroid Build Coastguard Worker * None
41*495ae853SAndroid Build Coastguard Worker *
42*495ae853SAndroid Build Coastguard Worker *******************************************************************************
43*495ae853SAndroid Build Coastguard Worker */
44*495ae853SAndroid Build Coastguard Worker #include <stdio.h>
45*495ae853SAndroid Build Coastguard Worker #include <string.h>
46*495ae853SAndroid Build Coastguard Worker
47*495ae853SAndroid Build Coastguard Worker #include "ih264e_config.h"
48*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
49*495ae853SAndroid Build Coastguard Worker #include "iv2.h"
50*495ae853SAndroid Build Coastguard Worker #include "ive2.h"
51*495ae853SAndroid Build Coastguard Worker #include "isvc_macros.h"
52*495ae853SAndroid Build Coastguard Worker #include "isvc_defs.h"
53*495ae853SAndroid Build Coastguard Worker #include "isvc_structs.h"
54*495ae853SAndroid Build Coastguard Worker #include "ih264_trans_data.h"
55*495ae853SAndroid Build Coastguard Worker #include "isvc_trans_quant_itrans_iquant.h"
56*495ae853SAndroid Build Coastguard Worker #include "isvc_inter_pred_filters.h"
57*495ae853SAndroid Build Coastguard Worker #include "isvc_mem_fns.h"
58*495ae853SAndroid Build Coastguard Worker #include "ih264_padding.h"
59*495ae853SAndroid Build Coastguard Worker #include "ih264_intra_pred_filters.h"
60*495ae853SAndroid Build Coastguard Worker #include "ih264_deblk_edge_filters.h"
61*495ae853SAndroid Build Coastguard Worker #include "isvc_cabac_tables.h"
62*495ae853SAndroid Build Coastguard Worker #include "ih264_deblk_tables.h"
63*495ae853SAndroid Build Coastguard Worker #include "isvce_defs.h"
64*495ae853SAndroid Build Coastguard Worker #include "ih264e_error.h"
65*495ae853SAndroid Build Coastguard Worker #include "ih264e_bitstream.h"
66*495ae853SAndroid Build Coastguard Worker #include "ime_distortion_metrics.h"
67*495ae853SAndroid Build Coastguard Worker #include "ime_defs.h"
68*495ae853SAndroid Build Coastguard Worker #include "ime_structs.h"
69*495ae853SAndroid Build Coastguard Worker #include "irc_cntrl_param.h"
70*495ae853SAndroid Build Coastguard Worker #include "irc_frame_info_collector.h"
71*495ae853SAndroid Build Coastguard Worker #include "isvce_rate_control.h"
72*495ae853SAndroid Build Coastguard Worker #include "isvce_cabac_structs.h"
73*495ae853SAndroid Build Coastguard Worker #include "isvce_structs.h"
74*495ae853SAndroid Build Coastguard Worker #include "isvce_deblk.h"
75*495ae853SAndroid Build Coastguard Worker #include "isvce_globals.h"
76*495ae853SAndroid Build Coastguard Worker
77*495ae853SAndroid Build Coastguard Worker static const UWORD32 gau4_isvce_packed_bs2[(1 << MAX_TU_IN_MB_COL) * 2] = {
78*495ae853SAndroid Build Coastguard Worker /* BS TABLES FOR NORMAL EDGES */
79*495ae853SAndroid Build Coastguard Worker 0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00000200, 0x02000200, 0x00020200, 0x02020200,
80*495ae853SAndroid Build Coastguard Worker 0x00000002, 0x02000002, 0x00020002, 0x02020002, 0x00000202, 0x02000202, 0x00020202, 0x02020202,
81*495ae853SAndroid Build Coastguard Worker
82*495ae853SAndroid Build Coastguard Worker /* BS TABLES FOR XTRA LEFT MB EDGES IN MBAFF CASE */
83*495ae853SAndroid Build Coastguard Worker 0x01010101, 0x02010101, 0x01020101, 0x02020101, 0x01010201, 0x02010201, 0x01020201, 0x02020201,
84*495ae853SAndroid Build Coastguard Worker 0x01010102, 0x02010102, 0x01020102, 0x02020102, 0x01010202, 0x02010202, 0x01020202, 0x02020202};
85*495ae853SAndroid Build Coastguard Worker
86*495ae853SAndroid Build Coastguard Worker static const UWORD16 gau2_isvce_4x4_v2h_reorder[(1 << MAX_TU_IN_MB_COL)] = {
87*495ae853SAndroid Build Coastguard Worker 0x0000, 0x0001, 0x0010, 0x0011, 0x0100, 0x0101, 0x0110, 0x0111,
88*495ae853SAndroid Build Coastguard Worker 0x1000, 0x1001, 0x1010, 0x1011, 0x1100, 0x1101, 0x1110, 0x1111};
89*495ae853SAndroid Build Coastguard Worker
isvce_fill_bs1_16x16mb_pslice(isvce_mb_info_t * ps_cur_mb,isvce_mb_info_t * ps_top_mb,isvce_mb_info_t * ps_left_mb,UWORD32 * pu4_bs_table,coordinates_t * ps_mb_pos)90*495ae853SAndroid Build Coastguard Worker static void isvce_fill_bs1_16x16mb_pslice(isvce_mb_info_t *ps_cur_mb, isvce_mb_info_t *ps_top_mb,
91*495ae853SAndroid Build Coastguard Worker isvce_mb_info_t *ps_left_mb, UWORD32 *pu4_bs_table,
92*495ae853SAndroid Build Coastguard Worker coordinates_t *ps_mb_pos)
93*495ae853SAndroid Build Coastguard Worker {
94*495ae853SAndroid Build Coastguard Worker WORD16 i2_q_mv0, i2_q_mv1;
95*495ae853SAndroid Build Coastguard Worker WORD16 i2_p_mv0, i2_p_mv1;
96*495ae853SAndroid Build Coastguard Worker UWORD32 i;
97*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_horz = pu4_bs_table[0];
98*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_vert = pu4_bs_table[4];
99*495ae853SAndroid Build Coastguard Worker
100*495ae853SAndroid Build Coastguard Worker i2_q_mv0 = ps_cur_mb->as_pu->as_me_info[L0].s_mv.i2_mvx;
101*495ae853SAndroid Build Coastguard Worker i2_q_mv1 = ps_cur_mb->as_pu->as_me_info[L0].s_mv.i2_mvy;
102*495ae853SAndroid Build Coastguard Worker
103*495ae853SAndroid Build Coastguard Worker if(ps_mb_pos->i4_ordinate)
104*495ae853SAndroid Build Coastguard Worker {
105*495ae853SAndroid Build Coastguard Worker /* Computing Bs for the top edge */
106*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 4; i++)
107*495ae853SAndroid Build Coastguard Worker {
108*495ae853SAndroid Build Coastguard Worker UWORD32 u4_idx = 24 - (i << 3);
109*495ae853SAndroid Build Coastguard Worker
110*495ae853SAndroid Build Coastguard Worker /* check if Bs is already set */
111*495ae853SAndroid Build Coastguard Worker if(!((u4_bs_horz >> u4_idx) & 0xf))
112*495ae853SAndroid Build Coastguard Worker {
113*495ae853SAndroid Build Coastguard Worker /************************************************************/
114*495ae853SAndroid Build Coastguard Worker /* If Bs is not set, use left edge and current edge mvs and */
115*495ae853SAndroid Build Coastguard Worker /* reference pictures addresses to evaluate Bs==1 */
116*495ae853SAndroid Build Coastguard Worker /************************************************************/
117*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_temp1;
118*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs;
119*495ae853SAndroid Build Coastguard Worker
120*495ae853SAndroid Build Coastguard Worker /*********************************************************/
121*495ae853SAndroid Build Coastguard Worker /* If any motion vector component differs by more than 1 */
122*495ae853SAndroid Build Coastguard Worker /* integer pel or if reference pictures are different Bs */
123*495ae853SAndroid Build Coastguard Worker /* is set to 1. Note that this condition shall be met for*/
124*495ae853SAndroid Build Coastguard Worker /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
125*495ae853SAndroid Build Coastguard Worker /*********************************************************/
126*495ae853SAndroid Build Coastguard Worker i2_p_mv0 = ps_top_mb->as_pu->as_me_info[L0].s_mv.i2_mvx;
127*495ae853SAndroid Build Coastguard Worker i2_p_mv1 = ps_top_mb->as_pu->as_me_info[L0].s_mv.i2_mvy;
128*495ae853SAndroid Build Coastguard Worker
129*495ae853SAndroid Build Coastguard Worker u4_bs_temp1 =
130*495ae853SAndroid Build Coastguard Worker ((ABS((i2_p_mv0 - i2_q_mv0)) >= 4) || (ABS((i2_p_mv1 - i2_q_mv1)) >= 4));
131*495ae853SAndroid Build Coastguard Worker
132*495ae853SAndroid Build Coastguard Worker u4_bs = ((ps_cur_mb->as_pu->as_me_info[L0].i1_ref_idx !=
133*495ae853SAndroid Build Coastguard Worker ps_top_mb->as_pu->as_me_info[L0].i1_ref_idx) ||
134*495ae853SAndroid Build Coastguard Worker u4_bs_temp1);
135*495ae853SAndroid Build Coastguard Worker
136*495ae853SAndroid Build Coastguard Worker u4_bs_horz |= (u4_bs << u4_idx);
137*495ae853SAndroid Build Coastguard Worker }
138*495ae853SAndroid Build Coastguard Worker }
139*495ae853SAndroid Build Coastguard Worker
140*495ae853SAndroid Build Coastguard Worker pu4_bs_table[0] = u4_bs_horz;
141*495ae853SAndroid Build Coastguard Worker }
142*495ae853SAndroid Build Coastguard Worker
143*495ae853SAndroid Build Coastguard Worker if(ps_mb_pos->i4_abscissa)
144*495ae853SAndroid Build Coastguard Worker {
145*495ae853SAndroid Build Coastguard Worker /* Computing Bs for the left edge */
146*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 4; i++)
147*495ae853SAndroid Build Coastguard Worker {
148*495ae853SAndroid Build Coastguard Worker UWORD32 u4_idx = 24 - (i << 3);
149*495ae853SAndroid Build Coastguard Worker
150*495ae853SAndroid Build Coastguard Worker /* check if Bs is already set */
151*495ae853SAndroid Build Coastguard Worker if(!((u4_bs_vert >> u4_idx) & 0xf))
152*495ae853SAndroid Build Coastguard Worker {
153*495ae853SAndroid Build Coastguard Worker /* If Bs is not set, evalaute conditions for Bs=1 */
154*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_temp1;
155*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs;
156*495ae853SAndroid Build Coastguard Worker /*********************************************************/
157*495ae853SAndroid Build Coastguard Worker /* If any motion vector component differs by more than 1 */
158*495ae853SAndroid Build Coastguard Worker /* integer pel or if reference pictures are different Bs */
159*495ae853SAndroid Build Coastguard Worker /* is set to 1. Note that this condition shall be met for*/
160*495ae853SAndroid Build Coastguard Worker /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
161*495ae853SAndroid Build Coastguard Worker /*********************************************************/
162*495ae853SAndroid Build Coastguard Worker
163*495ae853SAndroid Build Coastguard Worker i2_p_mv0 = ps_left_mb->as_pu->as_me_info[L0].s_mv.i2_mvx;
164*495ae853SAndroid Build Coastguard Worker i2_p_mv1 = ps_left_mb->as_pu->as_me_info[L0].s_mv.i2_mvy;
165*495ae853SAndroid Build Coastguard Worker
166*495ae853SAndroid Build Coastguard Worker u4_bs_temp1 =
167*495ae853SAndroid Build Coastguard Worker ((ABS((i2_p_mv0 - i2_q_mv0)) >= 4) | (ABS((i2_p_mv1 - i2_q_mv1)) >= 4));
168*495ae853SAndroid Build Coastguard Worker
169*495ae853SAndroid Build Coastguard Worker u4_bs = ((ps_cur_mb->as_pu->as_me_info[L0].i1_ref_idx !=
170*495ae853SAndroid Build Coastguard Worker ps_left_mb->as_pu->as_me_info[L0].i1_ref_idx) ||
171*495ae853SAndroid Build Coastguard Worker u4_bs_temp1);
172*495ae853SAndroid Build Coastguard Worker
173*495ae853SAndroid Build Coastguard Worker u4_bs_vert |= (u4_bs << u4_idx);
174*495ae853SAndroid Build Coastguard Worker }
175*495ae853SAndroid Build Coastguard Worker }
176*495ae853SAndroid Build Coastguard Worker
177*495ae853SAndroid Build Coastguard Worker pu4_bs_table[4] = u4_bs_vert;
178*495ae853SAndroid Build Coastguard Worker }
179*495ae853SAndroid Build Coastguard Worker }
180*495ae853SAndroid Build Coastguard Worker
isvce_fill_bs1_16x16mb_bslice(isvce_mb_info_t * ps_cur_mb,isvce_mb_info_t * ps_top_mb,isvce_mb_info_t * ps_left_mb,UWORD32 * pu4_bs_table,coordinates_t * ps_mb_pos)181*495ae853SAndroid Build Coastguard Worker static void isvce_fill_bs1_16x16mb_bslice(isvce_mb_info_t *ps_cur_mb, isvce_mb_info_t *ps_top_mb,
182*495ae853SAndroid Build Coastguard Worker isvce_mb_info_t *ps_left_mb, UWORD32 *pu4_bs_table,
183*495ae853SAndroid Build Coastguard Worker coordinates_t *ps_mb_pos)
184*495ae853SAndroid Build Coastguard Worker {
185*495ae853SAndroid Build Coastguard Worker WORD16 i2_q_mv0, i2_q_mv1, i2_q_mv2, i2_q_mv3;
186*495ae853SAndroid Build Coastguard Worker WORD16 i2_p_mv0, i2_p_mv1, i2_p_mv2, i2_p_mv3;
187*495ae853SAndroid Build Coastguard Worker UWORD32 i;
188*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_horz = pu4_bs_table[0];
189*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_vert = pu4_bs_table[4];
190*495ae853SAndroid Build Coastguard Worker
191*495ae853SAndroid Build Coastguard Worker i2_q_mv0 = ps_cur_mb->as_pu->as_me_info[L0].s_mv.i2_mvx;
192*495ae853SAndroid Build Coastguard Worker i2_q_mv1 = ps_cur_mb->as_pu->as_me_info[L0].s_mv.i2_mvy;
193*495ae853SAndroid Build Coastguard Worker i2_q_mv2 = ps_cur_mb->as_pu->as_me_info[L1].s_mv.i2_mvx;
194*495ae853SAndroid Build Coastguard Worker i2_q_mv3 = ps_cur_mb->as_pu->as_me_info[L1].s_mv.i2_mvy;
195*495ae853SAndroid Build Coastguard Worker
196*495ae853SAndroid Build Coastguard Worker /* Computing Bs for the top edge */
197*495ae853SAndroid Build Coastguard Worker if(ps_mb_pos->i4_ordinate)
198*495ae853SAndroid Build Coastguard Worker {
199*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 4; i++)
200*495ae853SAndroid Build Coastguard Worker {
201*495ae853SAndroid Build Coastguard Worker UWORD32 u4_idx = 24 - (i << 3);
202*495ae853SAndroid Build Coastguard Worker
203*495ae853SAndroid Build Coastguard Worker /* check if Bs is already set */
204*495ae853SAndroid Build Coastguard Worker if(!((u4_bs_horz >> u4_idx) & 0xf))
205*495ae853SAndroid Build Coastguard Worker {
206*495ae853SAndroid Build Coastguard Worker /************************************************************/
207*495ae853SAndroid Build Coastguard Worker /* If Bs is not set, use left edge and current edge mvs and */
208*495ae853SAndroid Build Coastguard Worker /* reference pictures addresses to evaluate Bs==1 */
209*495ae853SAndroid Build Coastguard Worker /************************************************************/
210*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_temp1, u4_bs_temp2;
211*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs;
212*495ae853SAndroid Build Coastguard Worker
213*495ae853SAndroid Build Coastguard Worker /*********************************************************/
214*495ae853SAndroid Build Coastguard Worker /* If any motion vector component differs by more than 1 */
215*495ae853SAndroid Build Coastguard Worker /* integer pel or if reference pictures are different Bs */
216*495ae853SAndroid Build Coastguard Worker /* is set to 1. Note that this condition shall be met for*/
217*495ae853SAndroid Build Coastguard Worker /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
218*495ae853SAndroid Build Coastguard Worker /*********************************************************/
219*495ae853SAndroid Build Coastguard Worker i2_p_mv0 = ps_top_mb->as_pu->as_me_info[L0].s_mv.i2_mvx;
220*495ae853SAndroid Build Coastguard Worker i2_p_mv1 = ps_top_mb->as_pu->as_me_info[L0].s_mv.i2_mvy;
221*495ae853SAndroid Build Coastguard Worker i2_p_mv2 = ps_top_mb->as_pu->as_me_info[L1].s_mv.i2_mvx;
222*495ae853SAndroid Build Coastguard Worker i2_p_mv3 = ps_top_mb->as_pu->as_me_info[L1].s_mv.i2_mvy;
223*495ae853SAndroid Build Coastguard Worker
224*495ae853SAndroid Build Coastguard Worker u4_bs_temp1 =
225*495ae853SAndroid Build Coastguard Worker ((ABS((i2_p_mv0 - i2_q_mv0)) >= 4) | (ABS((i2_p_mv1 - i2_q_mv1)) >= 4) |
226*495ae853SAndroid Build Coastguard Worker (ABS((i2_p_mv2 - i2_q_mv2)) >= 4) | (ABS((i2_p_mv3 - i2_q_mv3)) >= 4));
227*495ae853SAndroid Build Coastguard Worker
228*495ae853SAndroid Build Coastguard Worker u4_bs_temp2 =
229*495ae853SAndroid Build Coastguard Worker ((ABS((i2_p_mv0 - i2_q_mv2)) >= 4) | (ABS((i2_p_mv1 - i2_q_mv3)) >= 4) |
230*495ae853SAndroid Build Coastguard Worker (ABS((i2_p_mv2 - i2_q_mv0)) >= 4) | (ABS((i2_p_mv3 - i2_q_mv1)) >= 4));
231*495ae853SAndroid Build Coastguard Worker
232*495ae853SAndroid Build Coastguard Worker u4_bs = ((ps_cur_mb->as_pu->as_me_info[L0].i1_ref_idx !=
233*495ae853SAndroid Build Coastguard Worker ps_top_mb->as_pu->as_me_info[L0].i1_ref_idx) ||
234*495ae853SAndroid Build Coastguard Worker (ps_cur_mb->as_pu->as_me_info[L1].i1_ref_idx !=
235*495ae853SAndroid Build Coastguard Worker ps_top_mb->as_pu->as_me_info[L1].i1_ref_idx) ||
236*495ae853SAndroid Build Coastguard Worker u4_bs_temp1) &&
237*495ae853SAndroid Build Coastguard Worker ((ps_cur_mb->as_pu->as_me_info[L0].i1_ref_idx !=
238*495ae853SAndroid Build Coastguard Worker ps_top_mb->as_pu->as_me_info[L1].i1_ref_idx) ||
239*495ae853SAndroid Build Coastguard Worker (ps_cur_mb->as_pu->as_me_info[L1].i1_ref_idx !=
240*495ae853SAndroid Build Coastguard Worker ps_top_mb->as_pu->as_me_info[L0].i1_ref_idx) ||
241*495ae853SAndroid Build Coastguard Worker u4_bs_temp2);
242*495ae853SAndroid Build Coastguard Worker
243*495ae853SAndroid Build Coastguard Worker u4_bs_horz |= (u4_bs << u4_idx);
244*495ae853SAndroid Build Coastguard Worker }
245*495ae853SAndroid Build Coastguard Worker }
246*495ae853SAndroid Build Coastguard Worker
247*495ae853SAndroid Build Coastguard Worker pu4_bs_table[0] = u4_bs_horz;
248*495ae853SAndroid Build Coastguard Worker }
249*495ae853SAndroid Build Coastguard Worker
250*495ae853SAndroid Build Coastguard Worker /* Computing Bs for the left edge */
251*495ae853SAndroid Build Coastguard Worker if(ps_mb_pos->i4_abscissa)
252*495ae853SAndroid Build Coastguard Worker {
253*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 4; i++)
254*495ae853SAndroid Build Coastguard Worker {
255*495ae853SAndroid Build Coastguard Worker UWORD32 u4_idx = 24 - (i << 3);
256*495ae853SAndroid Build Coastguard Worker
257*495ae853SAndroid Build Coastguard Worker /* check if Bs is already set */
258*495ae853SAndroid Build Coastguard Worker if(!((u4_bs_vert >> u4_idx) & 0xf))
259*495ae853SAndroid Build Coastguard Worker {
260*495ae853SAndroid Build Coastguard Worker /* If Bs is not set, evalaute conditions for Bs=1 */
261*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_temp1, u4_bs_temp2;
262*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs;
263*495ae853SAndroid Build Coastguard Worker /*********************************************************/
264*495ae853SAndroid Build Coastguard Worker /* If any motion vector component differs by more than 1 */
265*495ae853SAndroid Build Coastguard Worker /* integer pel or if reference pictures are different Bs */
266*495ae853SAndroid Build Coastguard Worker /* is set to 1. Note that this condition shall be met for*/
267*495ae853SAndroid Build Coastguard Worker /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
268*495ae853SAndroid Build Coastguard Worker /*********************************************************/
269*495ae853SAndroid Build Coastguard Worker
270*495ae853SAndroid Build Coastguard Worker i2_p_mv0 = ps_left_mb->as_pu->as_me_info[L0].s_mv.i2_mvx;
271*495ae853SAndroid Build Coastguard Worker i2_p_mv1 = ps_left_mb->as_pu->as_me_info[L0].s_mv.i2_mvy;
272*495ae853SAndroid Build Coastguard Worker i2_p_mv2 = ps_left_mb->as_pu->as_me_info[L1].s_mv.i2_mvx;
273*495ae853SAndroid Build Coastguard Worker i2_p_mv3 = ps_left_mb->as_pu->as_me_info[L1].s_mv.i2_mvy;
274*495ae853SAndroid Build Coastguard Worker
275*495ae853SAndroid Build Coastguard Worker u4_bs_temp1 =
276*495ae853SAndroid Build Coastguard Worker ((ABS((i2_p_mv0 - i2_q_mv0)) >= 4) | (ABS((i2_p_mv1 - i2_q_mv1)) >= 4) |
277*495ae853SAndroid Build Coastguard Worker (ABS((i2_p_mv2 - i2_q_mv2)) >= 4) | (ABS((i2_p_mv3 - i2_q_mv3)) >= 4));
278*495ae853SAndroid Build Coastguard Worker
279*495ae853SAndroid Build Coastguard Worker u4_bs_temp2 =
280*495ae853SAndroid Build Coastguard Worker ((ABS((i2_p_mv0 - i2_q_mv2)) >= 4) | (ABS((i2_p_mv1 - i2_q_mv3)) >= 4) |
281*495ae853SAndroid Build Coastguard Worker (ABS((i2_p_mv2 - i2_q_mv0)) >= 4) | (ABS((i2_p_mv3 - i2_q_mv1)) >= 4));
282*495ae853SAndroid Build Coastguard Worker
283*495ae853SAndroid Build Coastguard Worker u4_bs = ((ps_cur_mb->as_pu->as_me_info[L0].i1_ref_idx !=
284*495ae853SAndroid Build Coastguard Worker ps_left_mb->as_pu->as_me_info[L0].i1_ref_idx) ||
285*495ae853SAndroid Build Coastguard Worker (ps_cur_mb->as_pu->as_me_info[L1].i1_ref_idx !=
286*495ae853SAndroid Build Coastguard Worker ps_left_mb->as_pu->as_me_info[L1].i1_ref_idx) ||
287*495ae853SAndroid Build Coastguard Worker u4_bs_temp1) &&
288*495ae853SAndroid Build Coastguard Worker ((ps_cur_mb->as_pu->as_me_info[L0].i1_ref_idx !=
289*495ae853SAndroid Build Coastguard Worker ps_left_mb->as_pu->as_me_info[L1].i1_ref_idx) ||
290*495ae853SAndroid Build Coastguard Worker (ps_cur_mb->as_pu->as_me_info[L1].i1_ref_idx !=
291*495ae853SAndroid Build Coastguard Worker ps_left_mb->as_pu->as_me_info[L0].i1_ref_idx) ||
292*495ae853SAndroid Build Coastguard Worker u4_bs_temp2);
293*495ae853SAndroid Build Coastguard Worker
294*495ae853SAndroid Build Coastguard Worker u4_bs_vert |= (u4_bs << u4_idx);
295*495ae853SAndroid Build Coastguard Worker }
296*495ae853SAndroid Build Coastguard Worker }
297*495ae853SAndroid Build Coastguard Worker
298*495ae853SAndroid Build Coastguard Worker pu4_bs_table[4] = u4_bs_vert;
299*495ae853SAndroid Build Coastguard Worker }
300*495ae853SAndroid Build Coastguard Worker }
301*495ae853SAndroid Build Coastguard Worker
isvce_fill_bs2_horz_vert(UWORD32 * pu4_bs,WORD32 u4_left_mb_csbp,WORD32 u4_top_mb_csbp,WORD32 u4_cur_mb_csbp,coordinates_t * ps_mb_pos,const UWORD32 * pu4_packed_bs2,const UWORD16 * pu2_4x4_v2h_reorder)302*495ae853SAndroid Build Coastguard Worker static void isvce_fill_bs2_horz_vert(UWORD32 *pu4_bs, WORD32 u4_left_mb_csbp, WORD32 u4_top_mb_csbp,
303*495ae853SAndroid Build Coastguard Worker WORD32 u4_cur_mb_csbp, coordinates_t *ps_mb_pos,
304*495ae853SAndroid Build Coastguard Worker const UWORD32 *pu4_packed_bs2,
305*495ae853SAndroid Build Coastguard Worker const UWORD16 *pu2_4x4_v2h_reorder)
306*495ae853SAndroid Build Coastguard Worker {
307*495ae853SAndroid Build Coastguard Worker UWORD32 u4_nbr_horz_csbp, u4_nbr_vert_csbp;
308*495ae853SAndroid Build Coastguard Worker UWORD32 u4_horz_bs2_dec, u4_vert_bs2_dec;
309*495ae853SAndroid Build Coastguard Worker UWORD32 u4_left_mb_masked_csbp, u4_cur_mb_masked_csbp;
310*495ae853SAndroid Build Coastguard Worker
311*495ae853SAndroid Build Coastguard Worker UWORD32 u4_reordered_vert_bs2_dec, u4_temp;
312*495ae853SAndroid Build Coastguard Worker
313*495ae853SAndroid Build Coastguard Worker WORD32 u4_cur_mb_csbp_seq = 0;
314*495ae853SAndroid Build Coastguard Worker WORD32 u4_top_mb_csbp_seq = 0;
315*495ae853SAndroid Build Coastguard Worker WORD32 u4_left_mb_csbp_seq = 0;
316*495ae853SAndroid Build Coastguard Worker
317*495ae853SAndroid Build Coastguard Worker /* Convert the csbp packed data in sequential pattern from raster order */
318*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp_seq |= u4_cur_mb_csbp & 3; // 0 1
319*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp >>= 2;
320*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp_seq |= (u4_cur_mb_csbp & 3) << 4; // 4 5
321*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp >>= 2;
322*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp_seq |= (u4_cur_mb_csbp & 3) << 2; // 2 3
323*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp >>= 2;
324*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp_seq |= (u4_cur_mb_csbp & 3) << 6; // 6 7
325*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp >>= 2;
326*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp_seq |= (u4_cur_mb_csbp & 3) << 8; // 8 9
327*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp >>= 2;
328*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp_seq |= (u4_cur_mb_csbp & 3) << 12; // 12 13
329*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp >>= 2;
330*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp_seq |= (u4_cur_mb_csbp & 3) << 10; // 10 11
331*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp >>= 2;
332*495ae853SAndroid Build Coastguard Worker u4_cur_mb_csbp_seq |= (u4_cur_mb_csbp & 3) << 14; // 14 15
333*495ae853SAndroid Build Coastguard Worker
334*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp_seq |= u4_left_mb_csbp & 3; // 0 1
335*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp >>= 2;
336*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp_seq |= (u4_left_mb_csbp & 3) << 4; // 4 5
337*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp >>= 2;
338*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp_seq |= (u4_left_mb_csbp & 3) << 2; // 2 3
339*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp >>= 2;
340*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp_seq |= (u4_left_mb_csbp & 3) << 6; // 6 7
341*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp >>= 2;
342*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp_seq |= (u4_left_mb_csbp & 3) << 8; // 8 9
343*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp >>= 2;
344*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp_seq |= (u4_left_mb_csbp & 3) << 12; // 12 13
345*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp >>= 2;
346*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp_seq |= (u4_left_mb_csbp & 3) << 10; // 10 11
347*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp >>= 2;
348*495ae853SAndroid Build Coastguard Worker u4_left_mb_csbp_seq |= (u4_left_mb_csbp & 3) << 14; // 14 15
349*495ae853SAndroid Build Coastguard Worker
350*495ae853SAndroid Build Coastguard Worker /* Required only the last row of top MB */
351*495ae853SAndroid Build Coastguard Worker u4_top_mb_csbp = u4_top_mb_csbp >> 10; // 12 13
352*495ae853SAndroid Build Coastguard Worker u4_top_mb_csbp_seq |= (u4_top_mb_csbp & 3);
353*495ae853SAndroid Build Coastguard Worker u4_top_mb_csbp = u4_top_mb_csbp >> 4; // 14 15
354*495ae853SAndroid Build Coastguard Worker u4_top_mb_csbp_seq |= ((u4_top_mb_csbp & 3) << 2);
355*495ae853SAndroid Build Coastguard Worker
356*495ae853SAndroid Build Coastguard Worker /* u4_nbr_horz_csbp=11C|10C|9C|8C|7C|6C|5C|4C|3C|2C|1C|0C|15T|14T|13T|12T */
357*495ae853SAndroid Build Coastguard Worker u4_nbr_horz_csbp = (u4_cur_mb_csbp_seq << 4) | u4_top_mb_csbp_seq;
358*495ae853SAndroid Build Coastguard Worker u4_horz_bs2_dec = u4_cur_mb_csbp_seq | u4_nbr_horz_csbp;
359*495ae853SAndroid Build Coastguard Worker
360*495ae853SAndroid Build Coastguard Worker /* u4_left_mb_masked_csbp = 15L|0|0|0|11L|0|0|0|7L|0|0|0|3L|0|0|0 */
361*495ae853SAndroid Build Coastguard Worker u4_left_mb_masked_csbp = u4_left_mb_csbp_seq & CSBP_RIGHT_BLOCK_MASK;
362*495ae853SAndroid Build Coastguard Worker
363*495ae853SAndroid Build Coastguard Worker /* u4_cur_mb_masked_csbp =14C|13C|12C|x|10C|9C|8C|x|6C|5C|4C|x|2C|1C|0C|x */
364*495ae853SAndroid Build Coastguard Worker u4_cur_mb_masked_csbp = (u4_cur_mb_csbp_seq << 1) & (~CSBP_LEFT_BLOCK_MASK);
365*495ae853SAndroid Build Coastguard Worker
366*495ae853SAndroid Build Coastguard Worker /* u4_nbr_vert_csbp=14C|13C|12C|15L|10C|9C|8C|11L|6C|5C|4C|7L|2C|1C|0C|3L */
367*495ae853SAndroid Build Coastguard Worker u4_nbr_vert_csbp = (u4_cur_mb_masked_csbp) | (u4_left_mb_masked_csbp >> 3);
368*495ae853SAndroid Build Coastguard Worker
369*495ae853SAndroid Build Coastguard Worker u4_vert_bs2_dec = u4_cur_mb_csbp_seq | u4_nbr_vert_csbp;
370*495ae853SAndroid Build Coastguard Worker
371*495ae853SAndroid Build Coastguard Worker /* Fill horz edges (0,1,2,3) boundary strengths 2 using look up table */
372*495ae853SAndroid Build Coastguard Worker if(ps_mb_pos->i4_ordinate)
373*495ae853SAndroid Build Coastguard Worker {
374*495ae853SAndroid Build Coastguard Worker pu4_bs[0] = pu4_packed_bs2[u4_horz_bs2_dec & 0xF];
375*495ae853SAndroid Build Coastguard Worker }
376*495ae853SAndroid Build Coastguard Worker
377*495ae853SAndroid Build Coastguard Worker pu4_bs[1] = pu4_packed_bs2[(u4_horz_bs2_dec >> 4) & 0xF];
378*495ae853SAndroid Build Coastguard Worker pu4_bs[2] = pu4_packed_bs2[(u4_horz_bs2_dec >> 8) & 0xF];
379*495ae853SAndroid Build Coastguard Worker pu4_bs[3] = pu4_packed_bs2[(u4_horz_bs2_dec >> 12) & 0xF];
380*495ae853SAndroid Build Coastguard Worker
381*495ae853SAndroid Build Coastguard Worker /* Do 4x4 tranpose of u4_vert_bs2_dec by using look up table for reorder */
382*495ae853SAndroid Build Coastguard Worker u4_reordered_vert_bs2_dec = pu2_4x4_v2h_reorder[u4_vert_bs2_dec & 0xF];
383*495ae853SAndroid Build Coastguard Worker u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 4) & 0xF];
384*495ae853SAndroid Build Coastguard Worker u4_reordered_vert_bs2_dec |= (u4_temp << 1);
385*495ae853SAndroid Build Coastguard Worker u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 8) & 0xF];
386*495ae853SAndroid Build Coastguard Worker u4_reordered_vert_bs2_dec |= (u4_temp << 2);
387*495ae853SAndroid Build Coastguard Worker u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 12) & 0xF];
388*495ae853SAndroid Build Coastguard Worker u4_reordered_vert_bs2_dec |= (u4_temp << 3);
389*495ae853SAndroid Build Coastguard Worker
390*495ae853SAndroid Build Coastguard Worker /* Fill vert edges (4,5,6,7) boundary strengths 2 using look up table */
391*495ae853SAndroid Build Coastguard Worker if(ps_mb_pos->i4_abscissa)
392*495ae853SAndroid Build Coastguard Worker {
393*495ae853SAndroid Build Coastguard Worker pu4_bs[4] = pu4_packed_bs2[u4_reordered_vert_bs2_dec & 0xF];
394*495ae853SAndroid Build Coastguard Worker }
395*495ae853SAndroid Build Coastguard Worker
396*495ae853SAndroid Build Coastguard Worker pu4_bs[5] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 4) & 0xF];
397*495ae853SAndroid Build Coastguard Worker pu4_bs[6] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 8) & 0xF];
398*495ae853SAndroid Build Coastguard Worker pu4_bs[7] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 12) & 0xF];
399*495ae853SAndroid Build Coastguard Worker }
400*495ae853SAndroid Build Coastguard Worker
401*495ae853SAndroid Build Coastguard Worker /* brief Fills the BS for edges falling on a IBL boundary */
isvce_fill_bs_ibl(isvce_mb_info_t * ps_cur_mb,isvce_mb_info_t * ps_top_mb,isvce_mb_info_t * ps_left_mb,UWORD32 * pu4_bs_table)402*495ae853SAndroid Build Coastguard Worker static void isvce_fill_bs_ibl(isvce_mb_info_t *ps_cur_mb, isvce_mb_info_t *ps_top_mb,
403*495ae853SAndroid Build Coastguard Worker isvce_mb_info_t *ps_left_mb, UWORD32 *pu4_bs_table)
404*495ae853SAndroid Build Coastguard Worker {
405*495ae853SAndroid Build Coastguard Worker /*! Flow of the module is as follows */
406*495ae853SAndroid Build Coastguard Worker /*! 1. checks if MB edge is falling on IBL boundary */
407*495ae853SAndroid Build Coastguard Worker /*! 2. if only Mb edge then it fills the BS based on INTRA or INTER
408*495ae853SAndroid Build Coastguard Worker stauts */
409*495ae853SAndroid Build Coastguard Worker /*! 3. if the current MB is IBL and neighbours are also neighbours
410*495ae853SAndroid Build Coastguard Worker then it uses the current layer t_coeff flag to decide the
411*495ae853SAndroid Build Coastguard Worker BS of a particular edge */
412*495ae853SAndroid Build Coastguard Worker /*! 4. fills the BS for all the edges in curretn MB if IBL */
413*495ae853SAndroid Build Coastguard Worker
414*495ae853SAndroid Build Coastguard Worker UWORD16 u2_top_horz_nnz;
415*495ae853SAndroid Build Coastguard Worker UWORD8 u1_top_mb_ibl, u1_left_mb_ibl;
416*495ae853SAndroid Build Coastguard Worker UWORD32 i4_i, i4_edge;
417*495ae853SAndroid Build Coastguard Worker UWORD8 u1_bs;
418*495ae853SAndroid Build Coastguard Worker UWORD8 u1_cnd;
419*495ae853SAndroid Build Coastguard Worker UWORD8 u1_top_intra;
420*495ae853SAndroid Build Coastguard Worker UWORD8 u1_left_intra;
421*495ae853SAndroid Build Coastguard Worker UWORD8 u1_p_nnz, u1_q_nnz;
422*495ae853SAndroid Build Coastguard Worker UWORD8 u1_curr_mb_ibl;
423*495ae853SAndroid Build Coastguard Worker UWORD16 u2_curr_nnz;
424*495ae853SAndroid Build Coastguard Worker UWORD8 u1_left_mb_nnz = 0, u1_left_nnz;
425*495ae853SAndroid Build Coastguard Worker WORD32 i4_horz_start = 0;
426*495ae853SAndroid Build Coastguard Worker WORD32 i4_vertical_start = 0;
427*495ae853SAndroid Build Coastguard Worker
428*495ae853SAndroid Build Coastguard Worker u1_top_mb_ibl = ps_top_mb ? (ps_top_mb->u1_base_mode_flag && ps_top_mb->u1_is_intra) : 0;
429*495ae853SAndroid Build Coastguard Worker u1_left_mb_ibl = ps_left_mb ? (ps_left_mb->u1_base_mode_flag && ps_left_mb->u1_is_intra) : 0;
430*495ae853SAndroid Build Coastguard Worker
431*495ae853SAndroid Build Coastguard Worker u1_curr_mb_ibl = ps_cur_mb ? (ps_cur_mb->u1_base_mode_flag && ps_cur_mb->u1_is_intra) : 0;
432*495ae853SAndroid Build Coastguard Worker
433*495ae853SAndroid Build Coastguard Worker u1_top_intra = ps_top_mb ? ps_top_mb->u1_is_intra : 0;
434*495ae853SAndroid Build Coastguard Worker u1_left_intra = ps_left_mb ? ps_left_mb->u1_is_intra : 0;
435*495ae853SAndroid Build Coastguard Worker
436*495ae853SAndroid Build Coastguard Worker /* return if none of the current top and left is IBL */
437*495ae853SAndroid Build Coastguard Worker if((0 == u1_curr_mb_ibl) && (0 == u1_top_mb_ibl) && (0 == u1_left_mb_ibl))
438*495ae853SAndroid Build Coastguard Worker {
439*495ae853SAndroid Build Coastguard Worker return;
440*495ae853SAndroid Build Coastguard Worker }
441*495ae853SAndroid Build Coastguard Worker
442*495ae853SAndroid Build Coastguard Worker /* set up the vertical and horz MB edge skip flags */
443*495ae853SAndroid Build Coastguard Worker if(0 != u1_curr_mb_ibl)
444*495ae853SAndroid Build Coastguard Worker {
445*495ae853SAndroid Build Coastguard Worker /* if top is not IBL */
446*495ae853SAndroid Build Coastguard Worker if(0 == u1_top_mb_ibl)
447*495ae853SAndroid Build Coastguard Worker {
448*495ae853SAndroid Build Coastguard Worker i4_horz_start = 1;
449*495ae853SAndroid Build Coastguard Worker }
450*495ae853SAndroid Build Coastguard Worker
451*495ae853SAndroid Build Coastguard Worker /* if left in not IBL */
452*495ae853SAndroid Build Coastguard Worker if(0 == u1_left_mb_ibl)
453*495ae853SAndroid Build Coastguard Worker {
454*495ae853SAndroid Build Coastguard Worker i4_vertical_start = 1;
455*495ae853SAndroid Build Coastguard Worker }
456*495ae853SAndroid Build Coastguard Worker }
457*495ae853SAndroid Build Coastguard Worker
458*495ae853SAndroid Build Coastguard Worker /* Fill BS for mb egdex assuming non IBL case */
459*495ae853SAndroid Build Coastguard Worker
460*495ae853SAndroid Build Coastguard Worker /* only the MB edges fall across IBL boundary */
461*495ae853SAndroid Build Coastguard Worker if((0 != u1_curr_mb_ibl) || (0 != u1_top_mb_ibl) || (0 != u1_left_mb_ibl))
462*495ae853SAndroid Build Coastguard Worker {
463*495ae853SAndroid Build Coastguard Worker UWORD16 u2_temp, u2_i, u1_i;
464*495ae853SAndroid Build Coastguard Worker u2_temp = ps_left_mb ? ps_left_mb->u4_res_csbp : 0;
465*495ae853SAndroid Build Coastguard Worker for(u2_i = 0; u2_i < MAX_TU_IN_MB_COL; u2_i++)
466*495ae853SAndroid Build Coastguard Worker {
467*495ae853SAndroid Build Coastguard Worker UWORD8 u1_zscan_idx = gau1_raster_to_zscan_map[u2_i * 4 + MAX_TU_IN_MB_ROW - 1];
468*495ae853SAndroid Build Coastguard Worker u1_left_mb_nnz |= ((u2_temp & (1 << u1_zscan_idx)) ? 1 << u2_i : 0);
469*495ae853SAndroid Build Coastguard Worker }
470*495ae853SAndroid Build Coastguard Worker
471*495ae853SAndroid Build Coastguard Worker u2_curr_nnz = ps_cur_mb->u4_res_csbp;
472*495ae853SAndroid Build Coastguard Worker
473*495ae853SAndroid Build Coastguard Worker u2_top_horz_nnz = 0;
474*495ae853SAndroid Build Coastguard Worker if(ps_top_mb)
475*495ae853SAndroid Build Coastguard Worker {
476*495ae853SAndroid Build Coastguard Worker /* last row of top MB */
477*495ae853SAndroid Build Coastguard Worker for(u1_i = 12; u1_i < 16; u1_i++)
478*495ae853SAndroid Build Coastguard Worker {
479*495ae853SAndroid Build Coastguard Worker UWORD8 u1_zscan_idx = gau1_raster_to_zscan_map[u1_i];
480*495ae853SAndroid Build Coastguard Worker u2_top_horz_nnz |=
481*495ae853SAndroid Build Coastguard Worker ((ps_top_mb->u4_res_csbp & (1 << u1_zscan_idx)) ? 1 << (u1_i - 12) : 0);
482*495ae853SAndroid Build Coastguard Worker }
483*495ae853SAndroid Build Coastguard Worker }
484*495ae853SAndroid Build Coastguard Worker else
485*495ae853SAndroid Build Coastguard Worker {
486*495ae853SAndroid Build Coastguard Worker u2_top_horz_nnz = 0;
487*495ae853SAndroid Build Coastguard Worker }
488*495ae853SAndroid Build Coastguard Worker
489*495ae853SAndroid Build Coastguard Worker /* top is intra and not ibl */
490*495ae853SAndroid Build Coastguard Worker if(0 != u1_top_intra)
491*495ae853SAndroid Build Coastguard Worker {
492*495ae853SAndroid Build Coastguard Worker pu4_bs_table[0] = 0x04040404;
493*495ae853SAndroid Build Coastguard Worker }
494*495ae853SAndroid Build Coastguard Worker /* left is intra and not ibl */
495*495ae853SAndroid Build Coastguard Worker if(0 != u1_left_intra)
496*495ae853SAndroid Build Coastguard Worker {
497*495ae853SAndroid Build Coastguard Worker pu4_bs_table[4] = 0x04040404;
498*495ae853SAndroid Build Coastguard Worker }
499*495ae853SAndroid Build Coastguard Worker
500*495ae853SAndroid Build Coastguard Worker /* assume neighbours are inter and update bs */
501*495ae853SAndroid Build Coastguard Worker /* Edge = 0 means Vert Edges and Edge = 1 means Horz edges */
502*495ae853SAndroid Build Coastguard Worker for(i4_edge = 0; i4_edge < 2; i4_edge++)
503*495ae853SAndroid Build Coastguard Worker {
504*495ae853SAndroid Build Coastguard Worker UWORD8 u1_p_nnz = 0, u1_q_nnz = 0;
505*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_edge = 0;
506*495ae853SAndroid Build Coastguard Worker WORD32 i4_bit_mask;
507*495ae853SAndroid Build Coastguard Worker WORD32 i4_curr_intra_flag;
508*495ae853SAndroid Build Coastguard Worker WORD32 i4_neibor_intra_flag;
509*495ae853SAndroid Build Coastguard Worker
510*495ae853SAndroid Build Coastguard Worker if(((1 == i4_horz_start) && (i4_edge == 1))) continue;
511*495ae853SAndroid Build Coastguard Worker if(((1 == i4_vertical_start) && (i4_edge == 0))) continue;
512*495ae853SAndroid Build Coastguard Worker
513*495ae853SAndroid Build Coastguard Worker i4_curr_intra_flag = (0 != u1_curr_mb_ibl);
514*495ae853SAndroid Build Coastguard Worker
515*495ae853SAndroid Build Coastguard Worker if(0 != i4_edge)
516*495ae853SAndroid Build Coastguard Worker {
517*495ae853SAndroid Build Coastguard Worker /* initialize for the TOP edge */
518*495ae853SAndroid Build Coastguard Worker u1_p_nnz = (UWORD8) u2_top_horz_nnz;
519*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < MAX_TU_IN_MB_ROW; i4_i++)
520*495ae853SAndroid Build Coastguard Worker {
521*495ae853SAndroid Build Coastguard Worker UWORD8 u1_zscan_idx = gau1_raster_to_zscan_map[i4_i];
522*495ae853SAndroid Build Coastguard Worker u1_q_nnz |= ((u2_curr_nnz & (1 << u1_zscan_idx)) ? (1 << i4_i) : 0);
523*495ae853SAndroid Build Coastguard Worker }
524*495ae853SAndroid Build Coastguard Worker
525*495ae853SAndroid Build Coastguard Worker i4_neibor_intra_flag = (u1_top_mb_ibl || u1_top_intra);
526*495ae853SAndroid Build Coastguard Worker }
527*495ae853SAndroid Build Coastguard Worker else
528*495ae853SAndroid Build Coastguard Worker {
529*495ae853SAndroid Build Coastguard Worker u1_p_nnz = u1_left_mb_nnz;
530*495ae853SAndroid Build Coastguard Worker for(u2_i = 0; u2_i < MAX_TU_IN_MB_COL; u2_i++)
531*495ae853SAndroid Build Coastguard Worker {
532*495ae853SAndroid Build Coastguard Worker UWORD8 u1_zscan_idx = gau1_raster_to_zscan_map[u2_i * 4];
533*495ae853SAndroid Build Coastguard Worker u1_q_nnz |= ((u2_curr_nnz & (1 << u1_zscan_idx)) ? 1 << u2_i : 0);
534*495ae853SAndroid Build Coastguard Worker }
535*495ae853SAndroid Build Coastguard Worker
536*495ae853SAndroid Build Coastguard Worker i4_neibor_intra_flag = (u1_left_mb_ibl || u1_left_intra);
537*495ae853SAndroid Build Coastguard Worker }
538*495ae853SAndroid Build Coastguard Worker
539*495ae853SAndroid Build Coastguard Worker i4_bit_mask = 1;
540*495ae853SAndroid Build Coastguard Worker /* find bs of 4 edges */
541*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < 4; i4_i++)
542*495ae853SAndroid Build Coastguard Worker {
543*495ae853SAndroid Build Coastguard Worker UWORD8 u1_p_nnz_temp, u1_q_nnz_temp;
544*495ae853SAndroid Build Coastguard Worker
545*495ae853SAndroid Build Coastguard Worker u1_p_nnz_temp = (u1_p_nnz & i4_bit_mask);
546*495ae853SAndroid Build Coastguard Worker u1_q_nnz_temp = (u1_q_nnz & i4_bit_mask);
547*495ae853SAndroid Build Coastguard Worker
548*495ae853SAndroid Build Coastguard Worker u1_cnd = ((u1_p_nnz_temp && (!i4_neibor_intra_flag)) ||
549*495ae853SAndroid Build Coastguard Worker (u1_q_nnz_temp && (!i4_curr_intra_flag)));
550*495ae853SAndroid Build Coastguard Worker
551*495ae853SAndroid Build Coastguard Worker u1_bs = u1_cnd ? 2 : 1;
552*495ae853SAndroid Build Coastguard Worker
553*495ae853SAndroid Build Coastguard Worker /* update the bs of the edge */
554*495ae853SAndroid Build Coastguard Worker u4_bs_edge = (u4_bs_edge << 8) + u1_bs;
555*495ae853SAndroid Build Coastguard Worker i4_bit_mask <<= 1;
556*495ae853SAndroid Build Coastguard Worker
557*495ae853SAndroid Build Coastguard Worker } /* end of loop over blk edges */
558*495ae853SAndroid Build Coastguard Worker
559*495ae853SAndroid Build Coastguard Worker /* update the bs of edges */
560*495ae853SAndroid Build Coastguard Worker if(i4_edge && !u1_top_intra)
561*495ae853SAndroid Build Coastguard Worker {
562*495ae853SAndroid Build Coastguard Worker pu4_bs_table[0] = u4_bs_edge;
563*495ae853SAndroid Build Coastguard Worker }
564*495ae853SAndroid Build Coastguard Worker else if(!i4_edge && !u1_left_intra)
565*495ae853SAndroid Build Coastguard Worker {
566*495ae853SAndroid Build Coastguard Worker pu4_bs_table[4] = u4_bs_edge;
567*495ae853SAndroid Build Coastguard Worker }
568*495ae853SAndroid Build Coastguard Worker } /* end of loop over v1 vetical and horizontal edge */
569*495ae853SAndroid Build Coastguard Worker }
570*495ae853SAndroid Build Coastguard Worker
571*495ae853SAndroid Build Coastguard Worker /* current MB is IBL */
572*495ae853SAndroid Build Coastguard Worker if(0 != u1_curr_mb_ibl)
573*495ae853SAndroid Build Coastguard Worker {
574*495ae853SAndroid Build Coastguard Worker WORD32 i4_bit_mask_edge = 1;
575*495ae853SAndroid Build Coastguard Worker UWORD16 u2_temp, u2_i, u1_i;
576*495ae853SAndroid Build Coastguard Worker
577*495ae853SAndroid Build Coastguard Worker u1_left_mb_nnz = 0;
578*495ae853SAndroid Build Coastguard Worker u2_temp = ps_left_mb ? ps_left_mb->u4_csbp : 0;
579*495ae853SAndroid Build Coastguard Worker for(u2_i = 0; u2_i < MAX_TU_IN_MB_COL; u2_i++)
580*495ae853SAndroid Build Coastguard Worker {
581*495ae853SAndroid Build Coastguard Worker UWORD8 u1_zscan_idx = gau1_raster_to_zscan_map[u2_i * 4 + MAX_TU_IN_MB_ROW - 1];
582*495ae853SAndroid Build Coastguard Worker u1_left_mb_nnz |= ((u2_temp & (1 << u1_zscan_idx)) ? 1 << u2_i : 0);
583*495ae853SAndroid Build Coastguard Worker }
584*495ae853SAndroid Build Coastguard Worker
585*495ae853SAndroid Build Coastguard Worker u2_curr_nnz = ps_cur_mb->u4_csbp;
586*495ae853SAndroid Build Coastguard Worker
587*495ae853SAndroid Build Coastguard Worker u2_top_horz_nnz = 0;
588*495ae853SAndroid Build Coastguard Worker if(ps_top_mb)
589*495ae853SAndroid Build Coastguard Worker {
590*495ae853SAndroid Build Coastguard Worker for(u1_i = 12; u1_i < 16; u1_i++)
591*495ae853SAndroid Build Coastguard Worker {
592*495ae853SAndroid Build Coastguard Worker UWORD8 u1_zscan_idx = gau1_raster_to_zscan_map[u1_i];
593*495ae853SAndroid Build Coastguard Worker u2_top_horz_nnz |=
594*495ae853SAndroid Build Coastguard Worker ((ps_top_mb->u4_csbp & (1 << u1_zscan_idx)) ? 1 << (u1_i - 12) : 0);
595*495ae853SAndroid Build Coastguard Worker }
596*495ae853SAndroid Build Coastguard Worker }
597*495ae853SAndroid Build Coastguard Worker else
598*495ae853SAndroid Build Coastguard Worker {
599*495ae853SAndroid Build Coastguard Worker u2_top_horz_nnz = 0;
600*495ae853SAndroid Build Coastguard Worker }
601*495ae853SAndroid Build Coastguard Worker
602*495ae853SAndroid Build Coastguard Worker /* all are IBL edges then use only t_coeff of current layer */
603*495ae853SAndroid Build Coastguard Worker /* loop over all edges */
604*495ae853SAndroid Build Coastguard Worker for(i4_edge = 0; i4_edge < 4; i4_edge++)
605*495ae853SAndroid Build Coastguard Worker {
606*495ae853SAndroid Build Coastguard Worker UWORD16 u2_curr_horz_nnz = 0;
607*495ae853SAndroid Build Coastguard Worker WORD32 i4_bit_mask = 1;
608*495ae853SAndroid Build Coastguard Worker
609*495ae853SAndroid Build Coastguard Worker u1_left_nnz = (u1_left_mb_nnz & i4_bit_mask_edge);
610*495ae853SAndroid Build Coastguard Worker
611*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < 4; i4_i++)
612*495ae853SAndroid Build Coastguard Worker {
613*495ae853SAndroid Build Coastguard Worker UWORD8 u1_curr_nnz, u1_top_nnz;
614*495ae853SAndroid Build Coastguard Worker UWORD8 u1_zscan_idx = gau1_raster_to_zscan_map[(4 * i4_edge) + i4_i];
615*495ae853SAndroid Build Coastguard Worker
616*495ae853SAndroid Build Coastguard Worker u2_curr_horz_nnz |= ((ps_cur_mb->u4_csbp & (1 << u1_zscan_idx)) ? (1 << i4_i) : 0);
617*495ae853SAndroid Build Coastguard Worker u1_curr_nnz = (u2_curr_horz_nnz & i4_bit_mask);
618*495ae853SAndroid Build Coastguard Worker u1_top_nnz = (u2_top_horz_nnz & i4_bit_mask);
619*495ae853SAndroid Build Coastguard Worker
620*495ae853SAndroid Build Coastguard Worker /* update bs horizontal */
621*495ae853SAndroid Build Coastguard Worker if(!((1 == i4_horz_start) && (0 == i4_edge)))
622*495ae853SAndroid Build Coastguard Worker {
623*495ae853SAndroid Build Coastguard Worker u1_p_nnz = u1_top_nnz;
624*495ae853SAndroid Build Coastguard Worker u1_q_nnz = u1_curr_nnz;
625*495ae853SAndroid Build Coastguard Worker u1_cnd = !(u1_p_nnz || u1_q_nnz);
626*495ae853SAndroid Build Coastguard Worker u1_bs = u1_cnd ? 0 : 1;
627*495ae853SAndroid Build Coastguard Worker pu4_bs_table[i4_edge] = (pu4_bs_table[i4_edge] << 8) + u1_bs;
628*495ae853SAndroid Build Coastguard Worker }
629*495ae853SAndroid Build Coastguard Worker
630*495ae853SAndroid Build Coastguard Worker /* update bs vertical */
631*495ae853SAndroid Build Coastguard Worker if(!((1 == i4_vertical_start) && (0 == i4_i)))
632*495ae853SAndroid Build Coastguard Worker {
633*495ae853SAndroid Build Coastguard Worker u1_p_nnz = u1_left_nnz;
634*495ae853SAndroid Build Coastguard Worker u1_q_nnz = u1_curr_nnz;
635*495ae853SAndroid Build Coastguard Worker u1_cnd = !(u1_p_nnz || u1_q_nnz);
636*495ae853SAndroid Build Coastguard Worker u1_bs = u1_cnd ? 0 : 1;
637*495ae853SAndroid Build Coastguard Worker pu4_bs_table[i4_i + 4] = (pu4_bs_table[i4_i + 4] << 8) + u1_bs;
638*495ae853SAndroid Build Coastguard Worker }
639*495ae853SAndroid Build Coastguard Worker /* store the current nnz to left nnz */
640*495ae853SAndroid Build Coastguard Worker u1_left_nnz = u1_curr_nnz;
641*495ae853SAndroid Build Coastguard Worker i4_bit_mask <<= 1;
642*495ae853SAndroid Build Coastguard Worker }
643*495ae853SAndroid Build Coastguard Worker /* store the current row nnz to top row nnz */
644*495ae853SAndroid Build Coastguard Worker u2_top_horz_nnz = u2_curr_horz_nnz;
645*495ae853SAndroid Build Coastguard Worker i4_bit_mask_edge <<= 1;
646*495ae853SAndroid Build Coastguard Worker }
647*495ae853SAndroid Build Coastguard Worker }
648*495ae853SAndroid Build Coastguard Worker }
649*495ae853SAndroid Build Coastguard Worker
isvce_compute_bs(isvce_process_ctxt_t * ps_proc,UWORD8 u1_inter_layer_deblk_flag)650*495ae853SAndroid Build Coastguard Worker void isvce_compute_bs(isvce_process_ctxt_t *ps_proc, UWORD8 u1_inter_layer_deblk_flag)
651*495ae853SAndroid Build Coastguard Worker {
652*495ae853SAndroid Build Coastguard Worker coordinates_t s_mb_pos;
653*495ae853SAndroid Build Coastguard Worker
654*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_vert_bs;
655*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_horz_bs;
656*495ae853SAndroid Build Coastguard Worker
657*495ae853SAndroid Build Coastguard Worker isvce_bs_ctxt_t *ps_bs = &(ps_proc->s_deblk_ctxt.s_bs_ctxt);
658*495ae853SAndroid Build Coastguard Worker block_neighbors_t *ps_ngbr_avbl = ps_proc->ps_ngbr_avbl;
659*495ae853SAndroid Build Coastguard Worker nbr_info_t *ps_nbr_info = &ps_proc->s_nbr_info;
660*495ae853SAndroid Build Coastguard Worker isvce_mb_info_t *ps_left_mb = ps_ngbr_avbl->u1_mb_a ? ps_nbr_info->ps_left_mb_info : NULL;
661*495ae853SAndroid Build Coastguard Worker isvce_mb_info_t *ps_top_mb =
662*495ae853SAndroid Build Coastguard Worker ps_ngbr_avbl->u1_mb_b ? &ps_nbr_info->ps_top_row_mb_info[ps_bs->i4_mb_x] : NULL;
663*495ae853SAndroid Build Coastguard Worker isvce_mb_info_t *ps_cur_mb = ps_proc->ps_mb_info;
664*495ae853SAndroid Build Coastguard Worker
665*495ae853SAndroid Build Coastguard Worker UWORD32 u1_left_mb_intra, u1_left_mb_ibl;
666*495ae853SAndroid Build Coastguard Worker
667*495ae853SAndroid Build Coastguard Worker UWORD16 u2_left_csbp, u2_top_csbp, u2_cur_csbp;
668*495ae853SAndroid Build Coastguard Worker
669*495ae853SAndroid Build Coastguard Worker UWORD32 u4_cur_mb_intra, u1_top_mb_intra, u4_cur_mb_fld;
670*495ae853SAndroid Build Coastguard Worker UWORD32 u4_cur_mb_ibl, u1_top_mb_ibl;
671*495ae853SAndroid Build Coastguard Worker UWORD32 au4_bs_table[8];
672*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bs_table;
673*495ae853SAndroid Build Coastguard Worker
674*495ae853SAndroid Build Coastguard Worker u4_cur_mb_intra = ps_cur_mb->u1_is_intra;
675*495ae853SAndroid Build Coastguard Worker u4_cur_mb_ibl = ps_cur_mb->u1_base_mode_flag && ps_cur_mb->u1_is_intra;
676*495ae853SAndroid Build Coastguard Worker u4_cur_mb_fld = 0;
677*495ae853SAndroid Build Coastguard Worker
678*495ae853SAndroid Build Coastguard Worker u1_top_mb_intra = ps_top_mb ? ps_top_mb->u1_is_intra : 0;
679*495ae853SAndroid Build Coastguard Worker u1_top_mb_ibl = ps_top_mb ? (ps_top_mb->u1_base_mode_flag && ps_top_mb->u1_is_intra) : 0;
680*495ae853SAndroid Build Coastguard Worker
681*495ae853SAndroid Build Coastguard Worker u1_left_mb_intra = ps_left_mb ? ps_left_mb->u1_is_intra : 0;
682*495ae853SAndroid Build Coastguard Worker u1_left_mb_ibl = ps_left_mb ? (ps_left_mb->u1_base_mode_flag && ps_left_mb->u1_is_intra) : 0;
683*495ae853SAndroid Build Coastguard Worker
684*495ae853SAndroid Build Coastguard Worker pu4_bs_table = au4_bs_table;
685*495ae853SAndroid Build Coastguard Worker memset(pu4_bs_table, 0, sizeof(pu4_bs_table[0]) * NUM_EDGES_IN_MB * 2);
686*495ae853SAndroid Build Coastguard Worker
687*495ae853SAndroid Build Coastguard Worker s_mb_pos.i4_abscissa = ps_bs->i4_mb_x;
688*495ae853SAndroid Build Coastguard Worker s_mb_pos.i4_ordinate = ps_bs->i4_mb_y;
689*495ae853SAndroid Build Coastguard Worker
690*495ae853SAndroid Build Coastguard Worker if(!u1_inter_layer_deblk_flag)
691*495ae853SAndroid Build Coastguard Worker {
692*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs =
693*495ae853SAndroid Build Coastguard Worker ps_bs->pu4_pic_vert_bs +
694*495ae853SAndroid Build Coastguard Worker ((s_mb_pos.i4_ordinate * ps_proc->i4_wd_mbs) + s_mb_pos.i4_abscissa) * NUM_EDGES_IN_MB;
695*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs =
696*495ae853SAndroid Build Coastguard Worker ps_bs->pu4_pic_horz_bs +
697*495ae853SAndroid Build Coastguard Worker ((s_mb_pos.i4_ordinate * ps_proc->i4_wd_mbs) + s_mb_pos.i4_abscissa) * NUM_EDGES_IN_MB;
698*495ae853SAndroid Build Coastguard Worker }
699*495ae853SAndroid Build Coastguard Worker else
700*495ae853SAndroid Build Coastguard Worker {
701*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs =
702*495ae853SAndroid Build Coastguard Worker ps_bs->pu4_intra_base_vert_bs +
703*495ae853SAndroid Build Coastguard Worker ((s_mb_pos.i4_ordinate * ps_proc->i4_wd_mbs) + s_mb_pos.i4_abscissa) * NUM_EDGES_IN_MB;
704*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs =
705*495ae853SAndroid Build Coastguard Worker ps_bs->pu4_intra_base_horz_bs +
706*495ae853SAndroid Build Coastguard Worker ((s_mb_pos.i4_ordinate * ps_proc->i4_wd_mbs) + s_mb_pos.i4_abscissa) * NUM_EDGES_IN_MB;
707*495ae853SAndroid Build Coastguard Worker }
708*495ae853SAndroid Build Coastguard Worker
709*495ae853SAndroid Build Coastguard Worker if(u4_cur_mb_intra && !(u4_cur_mb_ibl))
710*495ae853SAndroid Build Coastguard Worker {
711*495ae853SAndroid Build Coastguard Worker pu4_bs_table[4] = ps_bs->i4_mb_x ? 0x04040404 : 0;
712*495ae853SAndroid Build Coastguard Worker pu4_bs_table[0] = ps_bs->i4_mb_y ? 0x04040404 : 0;
713*495ae853SAndroid Build Coastguard Worker pu4_bs_table[1] = 0x03030303;
714*495ae853SAndroid Build Coastguard Worker pu4_bs_table[2] = 0x03030303;
715*495ae853SAndroid Build Coastguard Worker pu4_bs_table[3] = 0x03030303;
716*495ae853SAndroid Build Coastguard Worker pu4_bs_table[5] = 0x03030303;
717*495ae853SAndroid Build Coastguard Worker pu4_bs_table[6] = 0x03030303;
718*495ae853SAndroid Build Coastguard Worker pu4_bs_table[7] = 0x03030303;
719*495ae853SAndroid Build Coastguard Worker }
720*495ae853SAndroid Build Coastguard Worker else
721*495ae853SAndroid Build Coastguard Worker {
722*495ae853SAndroid Build Coastguard Worker isvce_fill_bs_ibl(ps_cur_mb, ps_top_mb, ps_left_mb, pu4_bs_table);
723*495ae853SAndroid Build Coastguard Worker
724*495ae853SAndroid Build Coastguard Worker if(!u4_cur_mb_ibl)
725*495ae853SAndroid Build Coastguard Worker {
726*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bs_0, u4_bs_4;
727*495ae853SAndroid Build Coastguard Worker
728*495ae853SAndroid Build Coastguard Worker UWORD32 u4_is_b = (ps_proc->i4_slice_type == BSLICE);
729*495ae853SAndroid Build Coastguard Worker
730*495ae853SAndroid Build Coastguard Worker u2_cur_csbp = ps_cur_mb->u4_csbp;
731*495ae853SAndroid Build Coastguard Worker u2_left_csbp = ps_left_mb ? ps_left_mb->u4_csbp : 0;
732*495ae853SAndroid Build Coastguard Worker u2_top_csbp = ps_top_mb ? ps_top_mb->u4_csbp : 0;
733*495ae853SAndroid Build Coastguard Worker
734*495ae853SAndroid Build Coastguard Worker u2_cur_csbp |= (ps_cur_mb->u4_res_csbp);
735*495ae853SAndroid Build Coastguard Worker u2_left_csbp |= ps_left_mb ? ps_left_mb->u4_res_csbp : 0;
736*495ae853SAndroid Build Coastguard Worker u2_top_csbp |= ps_top_mb ? ps_top_mb->u4_res_csbp : 0;
737*495ae853SAndroid Build Coastguard Worker
738*495ae853SAndroid Build Coastguard Worker u4_bs_0 = pu4_bs_table[0];
739*495ae853SAndroid Build Coastguard Worker u4_bs_4 = pu4_bs_table[4];
740*495ae853SAndroid Build Coastguard Worker
741*495ae853SAndroid Build Coastguard Worker isvce_fill_bs2_horz_vert(pu4_bs_table, u2_left_csbp, u2_top_csbp, u2_cur_csbp,
742*495ae853SAndroid Build Coastguard Worker &s_mb_pos, (gau4_isvce_packed_bs2),
743*495ae853SAndroid Build Coastguard Worker (gau2_isvce_4x4_v2h_reorder));
744*495ae853SAndroid Build Coastguard Worker
745*495ae853SAndroid Build Coastguard Worker if(u1_left_mb_intra)
746*495ae853SAndroid Build Coastguard Worker {
747*495ae853SAndroid Build Coastguard Worker pu4_bs_table[4] = 0x04040404;
748*495ae853SAndroid Build Coastguard Worker }
749*495ae853SAndroid Build Coastguard Worker else if(u1_left_mb_ibl)
750*495ae853SAndroid Build Coastguard Worker {
751*495ae853SAndroid Build Coastguard Worker pu4_bs_table[4] = u4_bs_4;
752*495ae853SAndroid Build Coastguard Worker }
753*495ae853SAndroid Build Coastguard Worker
754*495ae853SAndroid Build Coastguard Worker if(u1_top_mb_intra)
755*495ae853SAndroid Build Coastguard Worker {
756*495ae853SAndroid Build Coastguard Worker pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404;
757*495ae853SAndroid Build Coastguard Worker }
758*495ae853SAndroid Build Coastguard Worker else if(u1_top_mb_ibl)
759*495ae853SAndroid Build Coastguard Worker {
760*495ae853SAndroid Build Coastguard Worker pu4_bs_table[0] = u4_bs_0;
761*495ae853SAndroid Build Coastguard Worker }
762*495ae853SAndroid Build Coastguard Worker
763*495ae853SAndroid Build Coastguard Worker if(!u4_is_b)
764*495ae853SAndroid Build Coastguard Worker {
765*495ae853SAndroid Build Coastguard Worker isvce_fill_bs1_16x16mb_pslice(ps_cur_mb, ps_top_mb, ps_left_mb, pu4_bs_table,
766*495ae853SAndroid Build Coastguard Worker &s_mb_pos);
767*495ae853SAndroid Build Coastguard Worker }
768*495ae853SAndroid Build Coastguard Worker else
769*495ae853SAndroid Build Coastguard Worker {
770*495ae853SAndroid Build Coastguard Worker isvce_fill_bs1_16x16mb_bslice(ps_cur_mb, ps_top_mb, ps_left_mb, pu4_bs_table,
771*495ae853SAndroid Build Coastguard Worker &s_mb_pos);
772*495ae853SAndroid Build Coastguard Worker }
773*495ae853SAndroid Build Coastguard Worker }
774*495ae853SAndroid Build Coastguard Worker }
775*495ae853SAndroid Build Coastguard Worker
776*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs[0] = pu4_bs_table[0];
777*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs[1] = pu4_bs_table[1];
778*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs[2] = pu4_bs_table[2];
779*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs[3] = pu4_bs_table[3];
780*495ae853SAndroid Build Coastguard Worker
781*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs[0] = pu4_bs_table[4];
782*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs[1] = pu4_bs_table[5];
783*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs[2] = pu4_bs_table[6];
784*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs[3] = pu4_bs_table[7];
785*495ae853SAndroid Build Coastguard Worker }
786*495ae853SAndroid Build Coastguard Worker
787*495ae853SAndroid Build Coastguard Worker /**
788*495ae853SAndroid Build Coastguard Worker *******************************************************************************
789*495ae853SAndroid Build Coastguard Worker *
790*495ae853SAndroid Build Coastguard Worker * @brief This function performs deblocking of top horizontal edge
791*495ae853SAndroid Build Coastguard Worker *
792*495ae853SAndroid Build Coastguard Worker * @par Description:
793*495ae853SAndroid Build Coastguard Worker * This function performs deblocking of top horizontal edge
794*495ae853SAndroid Build Coastguard Worker *
795*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec
796*495ae853SAndroid Build Coastguard Worker * pointer to codec context
797*495ae853SAndroid Build Coastguard Worker *
798*495ae853SAndroid Build Coastguard Worker * @param[in] ps_proc
799*495ae853SAndroid Build Coastguard Worker * pointer to proc context
800*495ae853SAndroid Build Coastguard Worker *
801*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_mb_qp
802*495ae853SAndroid Build Coastguard Worker * pointer to mb quantization param
803*495ae853SAndroid Build Coastguard Worker *
804*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_cur_pic_luma
805*495ae853SAndroid Build Coastguard Worker * pointer to recon buffer luma
806*495ae853SAndroid Build Coastguard Worker *
807*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_cur_pic_chroma
808*495ae853SAndroid Build Coastguard Worker * pointer to recon buffer chroma
809*495ae853SAndroid Build Coastguard Worker *
810*495ae853SAndroid Build Coastguard Worker * @param[in] pu4_pic_horz_bs
811*495ae853SAndroid Build Coastguard Worker * pointer to horizontal blocking strength
812*495ae853SAndroid Build Coastguard Worker *
813*495ae853SAndroid Build Coastguard Worker * @returns none
814*495ae853SAndroid Build Coastguard Worker *
815*495ae853SAndroid Build Coastguard Worker * @remarks none
816*495ae853SAndroid Build Coastguard Worker *
817*495ae853SAndroid Build Coastguard Worker *******************************************************************************
818*495ae853SAndroid Build Coastguard Worker */
isvce_filter_top_edge(isvce_codec_t * ps_codec,UWORD8 u1_qp_p,UWORD8 u1_qp_q,UWORD8 * pu1_cur_pic_luma,WORD32 i4_luma_stride,UWORD8 * pu1_cur_pic_chroma,WORD32 i4_chroma_stride,UWORD32 * pu4_pic_horz_bs)819*495ae853SAndroid Build Coastguard Worker static void isvce_filter_top_edge(isvce_codec_t *ps_codec, UWORD8 u1_qp_p, UWORD8 u1_qp_q,
820*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_luma, WORD32 i4_luma_stride,
821*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_chroma, WORD32 i4_chroma_stride,
822*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_horz_bs)
823*495ae853SAndroid Build Coastguard Worker {
824*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_luma, u4_beta_luma, u4_qp_luma, u4_idx_A_luma, u4_idx_B_luma;
825*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_chroma, u4_beta_chroma, u4_qp_chroma, u4_idx_A_chroma, u4_idx_B_chroma;
826*495ae853SAndroid Build Coastguard Worker
827*495ae853SAndroid Build Coastguard Worker /********/
828*495ae853SAndroid Build Coastguard Worker /* luma */
829*495ae853SAndroid Build Coastguard Worker /********/
830*495ae853SAndroid Build Coastguard Worker u4_qp_luma = (u1_qp_p + u1_qp_q + 1) >> 1;
831*495ae853SAndroid Build Coastguard Worker
832*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header
833*495ae853SAndroid Build Coastguard Worker */
834*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
835*495ae853SAndroid Build Coastguard Worker
836*495ae853SAndroid Build Coastguard Worker u4_idx_A_luma = MIN(51, u4_qp_luma + 0);
837*495ae853SAndroid Build Coastguard Worker u4_idx_B_luma = MIN(51, u4_qp_luma + 0);
838*495ae853SAndroid Build Coastguard Worker
839*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
840*495ae853SAndroid Build Coastguard Worker u4_alpha_luma = gu1_ih264_alpha_table[u4_idx_A_luma];
841*495ae853SAndroid Build Coastguard Worker u4_beta_luma = gu1_ih264_beta_table[u4_idx_B_luma];
842*495ae853SAndroid Build Coastguard Worker
843*495ae853SAndroid Build Coastguard Worker /**********/
844*495ae853SAndroid Build Coastguard Worker /* chroma */
845*495ae853SAndroid Build Coastguard Worker /**********/
846*495ae853SAndroid Build Coastguard Worker u4_qp_chroma = (gu1_qpc_fqpi[u1_qp_p] + gu1_qpc_fqpi[u1_qp_q] + 1) >> 1;
847*495ae853SAndroid Build Coastguard Worker
848*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header
849*495ae853SAndroid Build Coastguard Worker */
850*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
851*495ae853SAndroid Build Coastguard Worker
852*495ae853SAndroid Build Coastguard Worker u4_idx_A_chroma = MIN(51, u4_qp_chroma + 0);
853*495ae853SAndroid Build Coastguard Worker u4_idx_B_chroma = MIN(51, u4_qp_chroma + 0);
854*495ae853SAndroid Build Coastguard Worker
855*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
856*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma = gu1_ih264_alpha_table[u4_idx_A_chroma];
857*495ae853SAndroid Build Coastguard Worker u4_beta_chroma = gu1_ih264_beta_table[u4_idx_B_chroma];
858*495ae853SAndroid Build Coastguard Worker
859*495ae853SAndroid Build Coastguard Worker /* deblk edge */
860*495ae853SAndroid Build Coastguard Worker /* top Horizontal edge - allowed to be deblocked ? */
861*495ae853SAndroid Build Coastguard Worker if(pu4_pic_horz_bs[0] == 0x04040404)
862*495ae853SAndroid Build Coastguard Worker {
863*495ae853SAndroid Build Coastguard Worker /* strong filter */
864*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bs4(pu1_cur_pic_luma, i4_luma_stride, u4_alpha_luma,
865*495ae853SAndroid Build Coastguard Worker u4_beta_luma);
866*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_horz_bs4(pu1_cur_pic_chroma, i4_chroma_stride, u4_alpha_chroma,
867*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma);
868*495ae853SAndroid Build Coastguard Worker }
869*495ae853SAndroid Build Coastguard Worker else
870*495ae853SAndroid Build Coastguard Worker {
871*495ae853SAndroid Build Coastguard Worker /* normal filter */
872*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bslt4(pu1_cur_pic_luma, i4_luma_stride, u4_alpha_luma,
873*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_horz_bs[0],
874*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
875*495ae853SAndroid Build Coastguard Worker
876*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_horz_bslt4(
877*495ae853SAndroid Build Coastguard Worker pu1_cur_pic_chroma, i4_chroma_stride, u4_alpha_chroma, u4_beta_chroma, u4_alpha_chroma,
878*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, pu4_pic_horz_bs[0], gu1_ih264_clip_table[u4_idx_A_chroma],
879*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_chroma]);
880*495ae853SAndroid Build Coastguard Worker }
881*495ae853SAndroid Build Coastguard Worker }
882*495ae853SAndroid Build Coastguard Worker
883*495ae853SAndroid Build Coastguard Worker /**
884*495ae853SAndroid Build Coastguard Worker *******************************************************************************
885*495ae853SAndroid Build Coastguard Worker *
886*495ae853SAndroid Build Coastguard Worker * @brief This function performs deblocking of left vertical edge
887*495ae853SAndroid Build Coastguard Worker *
888*495ae853SAndroid Build Coastguard Worker * @par Description:
889*495ae853SAndroid Build Coastguard Worker * This function performs deblocking of top horizontal edge
890*495ae853SAndroid Build Coastguard Worker *
891*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec
892*495ae853SAndroid Build Coastguard Worker * pointer to codec context
893*495ae853SAndroid Build Coastguard Worker *
894*495ae853SAndroid Build Coastguard Worker * @param[in] ps_proc
895*495ae853SAndroid Build Coastguard Worker * pointer to proc context
896*495ae853SAndroid Build Coastguard Worker *
897*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_mb_qp
898*495ae853SAndroid Build Coastguard Worker * pointer to mb quantization param
899*495ae853SAndroid Build Coastguard Worker *
900*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_cur_pic_luma
901*495ae853SAndroid Build Coastguard Worker * pointer to recon buffer luma
902*495ae853SAndroid Build Coastguard Worker *
903*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_cur_pic_chroma
904*495ae853SAndroid Build Coastguard Worker * pointer to recon buffer chroma
905*495ae853SAndroid Build Coastguard Worker *
906*495ae853SAndroid Build Coastguard Worker * @param[in] pu4_pic_vert_bs
907*495ae853SAndroid Build Coastguard Worker * pointer to vertical blocking strength
908*495ae853SAndroid Build Coastguard Worker *
909*495ae853SAndroid Build Coastguard Worker * @returns none
910*495ae853SAndroid Build Coastguard Worker *
911*495ae853SAndroid Build Coastguard Worker * @remarks none
912*495ae853SAndroid Build Coastguard Worker *
913*495ae853SAndroid Build Coastguard Worker *******************************************************************************
914*495ae853SAndroid Build Coastguard Worker */
isvce_filter_left_edge(isvce_codec_t * ps_codec,UWORD8 u1_qp_p,UWORD8 u1_qp_q,UWORD8 * pu1_cur_pic_luma,WORD32 i4_luma_stride,UWORD8 * pu1_cur_pic_chroma,WORD32 i4_chroma_stride,UWORD32 * pu4_pic_vert_bs)915*495ae853SAndroid Build Coastguard Worker static void isvce_filter_left_edge(isvce_codec_t *ps_codec, UWORD8 u1_qp_p, UWORD8 u1_qp_q,
916*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_luma, WORD32 i4_luma_stride,
917*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_chroma, WORD32 i4_chroma_stride,
918*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_vert_bs)
919*495ae853SAndroid Build Coastguard Worker {
920*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_luma, u4_beta_luma, u4_qp_luma, u4_idx_A_luma, u4_idx_B_luma;
921*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_chroma, u4_beta_chroma, u4_qp_chroma, u4_idx_A_chroma, u4_idx_B_chroma;
922*495ae853SAndroid Build Coastguard Worker
923*495ae853SAndroid Build Coastguard Worker /********/
924*495ae853SAndroid Build Coastguard Worker /* luma */
925*495ae853SAndroid Build Coastguard Worker /********/
926*495ae853SAndroid Build Coastguard Worker u4_qp_luma = (u1_qp_p + u1_qp_q + 1) >> 1;
927*495ae853SAndroid Build Coastguard Worker
928*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header
929*495ae853SAndroid Build Coastguard Worker */
930*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
931*495ae853SAndroid Build Coastguard Worker
932*495ae853SAndroid Build Coastguard Worker u4_idx_A_luma = MIN(51, u4_qp_luma + 0);
933*495ae853SAndroid Build Coastguard Worker u4_idx_B_luma = MIN(51, u4_qp_luma + 0);
934*495ae853SAndroid Build Coastguard Worker
935*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
936*495ae853SAndroid Build Coastguard Worker u4_alpha_luma = gu1_ih264_alpha_table[u4_idx_A_luma];
937*495ae853SAndroid Build Coastguard Worker u4_beta_luma = gu1_ih264_beta_table[u4_idx_B_luma];
938*495ae853SAndroid Build Coastguard Worker
939*495ae853SAndroid Build Coastguard Worker /**********/
940*495ae853SAndroid Build Coastguard Worker /* chroma */
941*495ae853SAndroid Build Coastguard Worker /**********/
942*495ae853SAndroid Build Coastguard Worker u4_qp_chroma = (gu1_qpc_fqpi[u1_qp_p] + gu1_qpc_fqpi[u1_qp_q] + 1) >> 1;
943*495ae853SAndroid Build Coastguard Worker
944*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header
945*495ae853SAndroid Build Coastguard Worker */
946*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
947*495ae853SAndroid Build Coastguard Worker
948*495ae853SAndroid Build Coastguard Worker u4_idx_A_chroma = MIN(51, u4_qp_chroma + 0);
949*495ae853SAndroid Build Coastguard Worker u4_idx_B_chroma = MIN(51, u4_qp_chroma + 0);
950*495ae853SAndroid Build Coastguard Worker
951*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
952*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma = gu1_ih264_alpha_table[u4_idx_A_chroma];
953*495ae853SAndroid Build Coastguard Worker u4_beta_chroma = gu1_ih264_beta_table[u4_idx_B_chroma];
954*495ae853SAndroid Build Coastguard Worker
955*495ae853SAndroid Build Coastguard Worker /* deblk edge */
956*495ae853SAndroid Build Coastguard Worker if(pu4_pic_vert_bs[0] == 0x04040404)
957*495ae853SAndroid Build Coastguard Worker {
958*495ae853SAndroid Build Coastguard Worker /* strong filter */
959*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bs4(pu1_cur_pic_luma, i4_luma_stride, u4_alpha_luma,
960*495ae853SAndroid Build Coastguard Worker u4_beta_luma);
961*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_vert_bs4(pu1_cur_pic_chroma, i4_chroma_stride, u4_alpha_chroma,
962*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma);
963*495ae853SAndroid Build Coastguard Worker }
964*495ae853SAndroid Build Coastguard Worker else
965*495ae853SAndroid Build Coastguard Worker {
966*495ae853SAndroid Build Coastguard Worker /* normal filter */
967*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bslt4(pu1_cur_pic_luma, i4_luma_stride, u4_alpha_luma,
968*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_vert_bs[0],
969*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
970*495ae853SAndroid Build Coastguard Worker
971*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_vert_bslt4(
972*495ae853SAndroid Build Coastguard Worker pu1_cur_pic_chroma, i4_chroma_stride, u4_alpha_chroma, u4_beta_chroma, u4_alpha_chroma,
973*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, pu4_pic_vert_bs[0], gu1_ih264_clip_table[u4_idx_A_chroma],
974*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_chroma]);
975*495ae853SAndroid Build Coastguard Worker }
976*495ae853SAndroid Build Coastguard Worker }
977*495ae853SAndroid Build Coastguard Worker
isvce_get_deblk_mb_qp(isvce_process_ctxt_t * ps_proc,coordinates_t * ps_mb_pos)978*495ae853SAndroid Build Coastguard Worker static UWORD8 isvce_get_deblk_mb_qp(isvce_process_ctxt_t *ps_proc, coordinates_t *ps_mb_pos)
979*495ae853SAndroid Build Coastguard Worker {
980*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mb_qp;
981*495ae853SAndroid Build Coastguard Worker
982*495ae853SAndroid Build Coastguard Worker isvce_deblk_ctxt_t *ps_deblk = &ps_proc->s_deblk_ctxt;
983*495ae853SAndroid Build Coastguard Worker isvce_bs_ctxt_t *ps_bs_ctxt = &ps_deblk->s_bs_ctxt;
984*495ae853SAndroid Build Coastguard Worker coordinates_t s_cur_mb_pos = {ps_deblk->i4_mb_x, ps_deblk->i4_mb_y};
985*495ae853SAndroid Build Coastguard Worker
986*495ae853SAndroid Build Coastguard Worker UWORD32 u4_mb_idx = ps_mb_pos->i4_abscissa + ps_mb_pos->i4_ordinate * ps_proc->i4_wd_mbs;
987*495ae853SAndroid Build Coastguard Worker
988*495ae853SAndroid Build Coastguard Worker if((s_cur_mb_pos.i4_abscissa != ps_mb_pos->i4_abscissa) ||
989*495ae853SAndroid Build Coastguard Worker (s_cur_mb_pos.i4_ordinate != ps_mb_pos->i4_ordinate))
990*495ae853SAndroid Build Coastguard Worker {
991*495ae853SAndroid Build Coastguard Worker u1_mb_qp = ps_bs_ctxt->pu1_pic_qp[u4_mb_idx];
992*495ae853SAndroid Build Coastguard Worker }
993*495ae853SAndroid Build Coastguard Worker else
994*495ae853SAndroid Build Coastguard Worker {
995*495ae853SAndroid Build Coastguard Worker isvce_mb_info_t *ps_mb_info =
996*495ae853SAndroid Build Coastguard Worker ps_proc->ps_cur_mv_buf->ps_svc_layer_data[ps_proc->u1_spatial_layer_id].ps_mb_info +
997*495ae853SAndroid Build Coastguard Worker u4_mb_idx;
998*495ae853SAndroid Build Coastguard Worker
999*495ae853SAndroid Build Coastguard Worker if((0 == ps_mb_pos->i4_abscissa) && (0 == ps_mb_pos->i4_ordinate))
1000*495ae853SAndroid Build Coastguard Worker {
1001*495ae853SAndroid Build Coastguard Worker u1_mb_qp = ps_mb_info->u1_mb_qp;
1002*495ae853SAndroid Build Coastguard Worker }
1003*495ae853SAndroid Build Coastguard Worker else
1004*495ae853SAndroid Build Coastguard Worker {
1005*495ae853SAndroid Build Coastguard Worker if((ps_mb_info->u4_cbp > 0) || (I16x16 == ps_mb_info->u2_mb_type))
1006*495ae853SAndroid Build Coastguard Worker {
1007*495ae853SAndroid Build Coastguard Worker u1_mb_qp = ps_mb_info->u1_mb_qp;
1008*495ae853SAndroid Build Coastguard Worker }
1009*495ae853SAndroid Build Coastguard Worker else
1010*495ae853SAndroid Build Coastguard Worker {
1011*495ae853SAndroid Build Coastguard Worker u1_mb_qp = ps_bs_ctxt->pu1_pic_qp[u4_mb_idx - 1];
1012*495ae853SAndroid Build Coastguard Worker }
1013*495ae853SAndroid Build Coastguard Worker }
1014*495ae853SAndroid Build Coastguard Worker }
1015*495ae853SAndroid Build Coastguard Worker
1016*495ae853SAndroid Build Coastguard Worker return u1_mb_qp;
1017*495ae853SAndroid Build Coastguard Worker }
1018*495ae853SAndroid Build Coastguard Worker
1019*495ae853SAndroid Build Coastguard Worker /**
1020*495ae853SAndroid Build Coastguard Worker *******************************************************************************
1021*495ae853SAndroid Build Coastguard Worker *
1022*495ae853SAndroid Build Coastguard Worker * @brief This function performs deblocking on an mb
1023*495ae853SAndroid Build Coastguard Worker *
1024*495ae853SAndroid Build Coastguard Worker * @par Description:
1025*495ae853SAndroid Build Coastguard Worker * This function performs deblocking on an mb
1026*495ae853SAndroid Build Coastguard Worker *
1027*495ae853SAndroid Build Coastguard Worker * @param[in] ps_proc
1028*495ae853SAndroid Build Coastguard Worker * process context corresponding to the job
1029*495ae853SAndroid Build Coastguard Worker *
1030*495ae853SAndroid Build Coastguard Worker * @param[in] ps_deblk
1031*495ae853SAndroid Build Coastguard Worker * pointer to deblock context
1032*495ae853SAndroid Build Coastguard Worker *
1033*495ae853SAndroid Build Coastguard Worker * @returns none
1034*495ae853SAndroid Build Coastguard Worker *
1035*495ae853SAndroid Build Coastguard Worker * @remarks none
1036*495ae853SAndroid Build Coastguard Worker *
1037*495ae853SAndroid Build Coastguard Worker *******************************************************************************
1038*495ae853SAndroid Build Coastguard Worker */
isvce_deblock_mb(isvce_process_ctxt_t * ps_proc,isvce_deblk_ctxt_t * ps_deblk,UWORD8 u1_inter_layer_deblk_flag)1039*495ae853SAndroid Build Coastguard Worker void isvce_deblock_mb(isvce_process_ctxt_t *ps_proc, isvce_deblk_ctxt_t *ps_deblk,
1040*495ae853SAndroid Build Coastguard Worker UWORD8 u1_inter_layer_deblk_flag)
1041*495ae853SAndroid Build Coastguard Worker {
1042*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mb_a, u1_mb_b;
1043*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_vert_bs;
1044*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_horz_bs;
1045*495ae853SAndroid Build Coastguard Worker UWORD8 u1_cur_mb_qp;
1046*495ae853SAndroid Build Coastguard Worker UWORD8 u1_left_mb_qp;
1047*495ae853SAndroid Build Coastguard Worker UWORD8 u1_top_mb_qp;
1048*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_luma, u4_beta_luma, u4_idx_A_luma, u4_idx_B_luma;
1049*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_chroma, u4_beta_chroma, u4_qp_chroma, u4_idx_A_chroma, u4_idx_B_chroma;
1050*495ae853SAndroid Build Coastguard Worker
1051*495ae853SAndroid Build Coastguard Worker isvce_codec_t *ps_codec = ps_proc->ps_codec;
1052*495ae853SAndroid Build Coastguard Worker coordinates_t s_cur_mb_pos = {ps_deblk->i4_mb_x, ps_deblk->i4_mb_y};
1053*495ae853SAndroid Build Coastguard Worker coordinates_t s_left_mb_pos = {ps_deblk->i4_mb_x - 1, ps_deblk->i4_mb_y};
1054*495ae853SAndroid Build Coastguard Worker coordinates_t s_top_mb_pos = {ps_deblk->i4_mb_x, ps_deblk->i4_mb_y - 1};
1055*495ae853SAndroid Build Coastguard Worker
1056*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_x = ps_deblk->i4_mb_x, i4_mb_y = ps_deblk->i4_mb_y;
1057*495ae853SAndroid Build Coastguard Worker WORD32 i4_luma_stride = ps_deblk->s_rec_pic_buf_props.as_component_bufs[0].i4_data_stride;
1058*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_luma =
1059*495ae853SAndroid Build Coastguard Worker (UWORD8 *) (ps_deblk->s_rec_pic_buf_props.as_component_bufs[0].pv_data) +
1060*495ae853SAndroid Build Coastguard Worker (i4_mb_x * MB_SIZE) + ((i4_mb_y * MB_SIZE) * i4_luma_stride);
1061*495ae853SAndroid Build Coastguard Worker WORD32 i4_chroma_stride = ps_deblk->s_rec_pic_buf_props.as_component_bufs[1].i4_data_stride;
1062*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_chroma =
1063*495ae853SAndroid Build Coastguard Worker (UWORD8 *) (ps_deblk->s_rec_pic_buf_props.as_component_bufs[1].pv_data) +
1064*495ae853SAndroid Build Coastguard Worker (i4_mb_x * MB_SIZE) + (i4_mb_y * (MB_SIZE / 2) * i4_chroma_stride);
1065*495ae853SAndroid Build Coastguard Worker UWORD32 push_ptr = (i4_mb_y * ps_proc->i4_wd_mbs) + i4_mb_x;
1066*495ae853SAndroid Build Coastguard Worker
1067*495ae853SAndroid Build Coastguard Worker if(!u1_inter_layer_deblk_flag)
1068*495ae853SAndroid Build Coastguard Worker {
1069*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs = ps_deblk->s_bs_ctxt.pu4_pic_vert_bs;
1070*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs = ps_deblk->s_bs_ctxt.pu4_pic_horz_bs;
1071*495ae853SAndroid Build Coastguard Worker }
1072*495ae853SAndroid Build Coastguard Worker else
1073*495ae853SAndroid Build Coastguard Worker {
1074*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs = ps_deblk->s_bs_ctxt.pu4_intra_base_vert_bs;
1075*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs = ps_deblk->s_bs_ctxt.pu4_intra_base_horz_bs;
1076*495ae853SAndroid Build Coastguard Worker }
1077*495ae853SAndroid Build Coastguard Worker
1078*495ae853SAndroid Build Coastguard Worker /* derive neighbor availability */
1079*495ae853SAndroid Build Coastguard Worker /* In slice mode the edges of mbs that lie on the slice boundary are not
1080*495ae853SAndroid Build Coastguard Worker * deblocked */
1081*495ae853SAndroid Build Coastguard Worker /* deblocking filter idc '2' */
1082*495ae853SAndroid Build Coastguard Worker if(ps_codec->s_cfg.e_slice_mode != IVE_SLICE_MODE_NONE)
1083*495ae853SAndroid Build Coastguard Worker {
1084*495ae853SAndroid Build Coastguard Worker /* slice index */
1085*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_slice_idx = ps_deblk->pu1_slice_idx;
1086*495ae853SAndroid Build Coastguard Worker
1087*495ae853SAndroid Build Coastguard Worker pu1_slice_idx += (i4_mb_y * ps_proc->i4_wd_mbs);
1088*495ae853SAndroid Build Coastguard Worker /* left macroblock availability */
1089*495ae853SAndroid Build Coastguard Worker u1_mb_a = (i4_mb_x == 0 || (pu1_slice_idx[i4_mb_x - 1] != pu1_slice_idx[i4_mb_x])) ? 0 : 1;
1090*495ae853SAndroid Build Coastguard Worker /* top macroblock availability */
1091*495ae853SAndroid Build Coastguard Worker u1_mb_b = (i4_mb_y == 0 ||
1092*495ae853SAndroid Build Coastguard Worker (pu1_slice_idx[i4_mb_x - ps_proc->i4_wd_mbs] != pu1_slice_idx[i4_mb_x]))
1093*495ae853SAndroid Build Coastguard Worker ? 0
1094*495ae853SAndroid Build Coastguard Worker : 1;
1095*495ae853SAndroid Build Coastguard Worker }
1096*495ae853SAndroid Build Coastguard Worker else
1097*495ae853SAndroid Build Coastguard Worker {
1098*495ae853SAndroid Build Coastguard Worker /* left macroblock availability */
1099*495ae853SAndroid Build Coastguard Worker u1_mb_a = (i4_mb_x == 0) ? 0 : 1;
1100*495ae853SAndroid Build Coastguard Worker /* top macroblock availability */
1101*495ae853SAndroid Build Coastguard Worker u1_mb_b = (i4_mb_y == 0) ? 0 : 1;
1102*495ae853SAndroid Build Coastguard Worker }
1103*495ae853SAndroid Build Coastguard Worker
1104*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs += push_ptr * NUM_EDGES_IN_MB;
1105*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs += push_ptr * NUM_EDGES_IN_MB;
1106*495ae853SAndroid Build Coastguard Worker
1107*495ae853SAndroid Build Coastguard Worker /********/
1108*495ae853SAndroid Build Coastguard Worker /* luma */
1109*495ae853SAndroid Build Coastguard Worker /********/
1110*495ae853SAndroid Build Coastguard Worker u1_cur_mb_qp = isvce_get_deblk_mb_qp(ps_proc, &s_cur_mb_pos);
1111*495ae853SAndroid Build Coastguard Worker ps_deblk->s_bs_ctxt.pu1_pic_qp[push_ptr] = u1_cur_mb_qp;
1112*495ae853SAndroid Build Coastguard Worker
1113*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header
1114*495ae853SAndroid Build Coastguard Worker */
1115*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
1116*495ae853SAndroid Build Coastguard Worker
1117*495ae853SAndroid Build Coastguard Worker u4_idx_A_luma = MIN(51, u1_cur_mb_qp + 0);
1118*495ae853SAndroid Build Coastguard Worker u4_idx_B_luma = MIN(51, u1_cur_mb_qp + 0);
1119*495ae853SAndroid Build Coastguard Worker
1120*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
1121*495ae853SAndroid Build Coastguard Worker u4_alpha_luma = gu1_ih264_alpha_table[u4_idx_A_luma];
1122*495ae853SAndroid Build Coastguard Worker u4_beta_luma = gu1_ih264_beta_table[u4_idx_B_luma];
1123*495ae853SAndroid Build Coastguard Worker
1124*495ae853SAndroid Build Coastguard Worker /**********/
1125*495ae853SAndroid Build Coastguard Worker /* chroma */
1126*495ae853SAndroid Build Coastguard Worker /**********/
1127*495ae853SAndroid Build Coastguard Worker u4_qp_chroma = gu1_qpc_fqpi[u1_cur_mb_qp];
1128*495ae853SAndroid Build Coastguard Worker
1129*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header
1130*495ae853SAndroid Build Coastguard Worker */
1131*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
1132*495ae853SAndroid Build Coastguard Worker
1133*495ae853SAndroid Build Coastguard Worker u4_idx_A_chroma = MIN(51, u4_qp_chroma + 0);
1134*495ae853SAndroid Build Coastguard Worker u4_idx_B_chroma = MIN(51, u4_qp_chroma + 0);
1135*495ae853SAndroid Build Coastguard Worker
1136*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
1137*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma = gu1_ih264_alpha_table[u4_idx_A_chroma];
1138*495ae853SAndroid Build Coastguard Worker u4_beta_chroma = gu1_ih264_beta_table[u4_idx_B_chroma];
1139*495ae853SAndroid Build Coastguard Worker
1140*495ae853SAndroid Build Coastguard Worker /* Deblock vertical edges */
1141*495ae853SAndroid Build Coastguard Worker /* left vertical edge 0 - allowed to be deblocked ? */
1142*495ae853SAndroid Build Coastguard Worker if(u1_mb_a)
1143*495ae853SAndroid Build Coastguard Worker {
1144*495ae853SAndroid Build Coastguard Worker u1_left_mb_qp = isvce_get_deblk_mb_qp(ps_proc, &s_left_mb_pos);
1145*495ae853SAndroid Build Coastguard Worker
1146*495ae853SAndroid Build Coastguard Worker isvce_filter_left_edge(ps_codec, u1_left_mb_qp, u1_cur_mb_qp, pu1_cur_pic_luma,
1147*495ae853SAndroid Build Coastguard Worker i4_luma_stride, pu1_cur_pic_chroma, i4_chroma_stride,
1148*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs);
1149*495ae853SAndroid Build Coastguard Worker }
1150*495ae853SAndroid Build Coastguard Worker
1151*495ae853SAndroid Build Coastguard Worker /* vertical edge 1 */
1152*495ae853SAndroid Build Coastguard Worker if(pu4_pic_vert_bs[1] == 0x04040404)
1153*495ae853SAndroid Build Coastguard Worker {
1154*495ae853SAndroid Build Coastguard Worker /* strong filter */
1155*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bs4(pu1_cur_pic_luma + 4, i4_luma_stride, u4_alpha_luma,
1156*495ae853SAndroid Build Coastguard Worker u4_beta_luma);
1157*495ae853SAndroid Build Coastguard Worker }
1158*495ae853SAndroid Build Coastguard Worker else
1159*495ae853SAndroid Build Coastguard Worker {
1160*495ae853SAndroid Build Coastguard Worker /* normal filter */
1161*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bslt4(pu1_cur_pic_luma + 4, i4_luma_stride, u4_alpha_luma,
1162*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_vert_bs[1],
1163*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
1164*495ae853SAndroid Build Coastguard Worker }
1165*495ae853SAndroid Build Coastguard Worker
1166*495ae853SAndroid Build Coastguard Worker /* vertical edge 2 */
1167*495ae853SAndroid Build Coastguard Worker if(pu4_pic_vert_bs[2] == 0x04040404)
1168*495ae853SAndroid Build Coastguard Worker {
1169*495ae853SAndroid Build Coastguard Worker /* strong filter */
1170*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bs4(pu1_cur_pic_luma + 8, i4_luma_stride, u4_alpha_luma,
1171*495ae853SAndroid Build Coastguard Worker u4_beta_luma);
1172*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_vert_bs4(pu1_cur_pic_chroma + 8, i4_chroma_stride,
1173*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma, u4_beta_chroma, u4_alpha_chroma,
1174*495ae853SAndroid Build Coastguard Worker u4_beta_chroma);
1175*495ae853SAndroid Build Coastguard Worker }
1176*495ae853SAndroid Build Coastguard Worker else
1177*495ae853SAndroid Build Coastguard Worker {
1178*495ae853SAndroid Build Coastguard Worker /* normal filter */
1179*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bslt4(pu1_cur_pic_luma + 8, i4_luma_stride, u4_alpha_luma,
1180*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_vert_bs[2],
1181*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
1182*495ae853SAndroid Build Coastguard Worker
1183*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_vert_bslt4(
1184*495ae853SAndroid Build Coastguard Worker pu1_cur_pic_chroma + 8, i4_chroma_stride, u4_alpha_chroma, u4_beta_chroma,
1185*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma, u4_beta_chroma, pu4_pic_vert_bs[2],
1186*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_chroma], gu1_ih264_clip_table[u4_idx_A_chroma]);
1187*495ae853SAndroid Build Coastguard Worker }
1188*495ae853SAndroid Build Coastguard Worker
1189*495ae853SAndroid Build Coastguard Worker /* vertical edge 3 */
1190*495ae853SAndroid Build Coastguard Worker if(pu4_pic_vert_bs[3] == 0x04040404)
1191*495ae853SAndroid Build Coastguard Worker {
1192*495ae853SAndroid Build Coastguard Worker /* strong filter */
1193*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bs4(pu1_cur_pic_luma + 12, i4_luma_stride, u4_alpha_luma,
1194*495ae853SAndroid Build Coastguard Worker u4_beta_luma);
1195*495ae853SAndroid Build Coastguard Worker }
1196*495ae853SAndroid Build Coastguard Worker else
1197*495ae853SAndroid Build Coastguard Worker {
1198*495ae853SAndroid Build Coastguard Worker /* normal filter */
1199*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bslt4(pu1_cur_pic_luma + 12, i4_luma_stride, u4_alpha_luma,
1200*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_vert_bs[3],
1201*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
1202*495ae853SAndroid Build Coastguard Worker }
1203*495ae853SAndroid Build Coastguard Worker
1204*495ae853SAndroid Build Coastguard Worker /* Deblock Horizontal edges */
1205*495ae853SAndroid Build Coastguard Worker /* Horizontal edge 0 */
1206*495ae853SAndroid Build Coastguard Worker if(u1_mb_b)
1207*495ae853SAndroid Build Coastguard Worker {
1208*495ae853SAndroid Build Coastguard Worker u1_top_mb_qp = isvce_get_deblk_mb_qp(ps_proc, &s_top_mb_pos);
1209*495ae853SAndroid Build Coastguard Worker
1210*495ae853SAndroid Build Coastguard Worker isvce_filter_top_edge(ps_codec, u1_top_mb_qp, u1_cur_mb_qp, pu1_cur_pic_luma,
1211*495ae853SAndroid Build Coastguard Worker i4_luma_stride, pu1_cur_pic_chroma, i4_chroma_stride,
1212*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs);
1213*495ae853SAndroid Build Coastguard Worker }
1214*495ae853SAndroid Build Coastguard Worker
1215*495ae853SAndroid Build Coastguard Worker /* horizontal edge 1 */
1216*495ae853SAndroid Build Coastguard Worker if(pu4_pic_horz_bs[1] == 0x04040404)
1217*495ae853SAndroid Build Coastguard Worker {
1218*495ae853SAndroid Build Coastguard Worker /* strong filter */
1219*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bs4(pu1_cur_pic_luma + 4 * i4_luma_stride, i4_luma_stride,
1220*495ae853SAndroid Build Coastguard Worker u4_alpha_luma, u4_beta_luma);
1221*495ae853SAndroid Build Coastguard Worker }
1222*495ae853SAndroid Build Coastguard Worker else
1223*495ae853SAndroid Build Coastguard Worker {
1224*495ae853SAndroid Build Coastguard Worker /* normal filter */
1225*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bslt4(pu1_cur_pic_luma + 4 * i4_luma_stride, i4_luma_stride,
1226*495ae853SAndroid Build Coastguard Worker u4_alpha_luma, u4_beta_luma, pu4_pic_horz_bs[1],
1227*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
1228*495ae853SAndroid Build Coastguard Worker }
1229*495ae853SAndroid Build Coastguard Worker
1230*495ae853SAndroid Build Coastguard Worker /* horizontal edge 2 */
1231*495ae853SAndroid Build Coastguard Worker if(pu4_pic_horz_bs[2] == 0x04040404)
1232*495ae853SAndroid Build Coastguard Worker {
1233*495ae853SAndroid Build Coastguard Worker /* strong filter */
1234*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bs4(pu1_cur_pic_luma + 8 * i4_luma_stride, i4_luma_stride,
1235*495ae853SAndroid Build Coastguard Worker u4_alpha_luma, u4_beta_luma);
1236*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_horz_bs4(pu1_cur_pic_chroma + 4 * i4_chroma_stride,
1237*495ae853SAndroid Build Coastguard Worker i4_chroma_stride, u4_alpha_chroma, u4_beta_chroma,
1238*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma, u4_beta_chroma);
1239*495ae853SAndroid Build Coastguard Worker }
1240*495ae853SAndroid Build Coastguard Worker else
1241*495ae853SAndroid Build Coastguard Worker {
1242*495ae853SAndroid Build Coastguard Worker /* normal filter */
1243*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bslt4(pu1_cur_pic_luma + 8 * i4_luma_stride, i4_luma_stride,
1244*495ae853SAndroid Build Coastguard Worker u4_alpha_luma, u4_beta_luma, pu4_pic_horz_bs[2],
1245*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
1246*495ae853SAndroid Build Coastguard Worker
1247*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_horz_bslt4(
1248*495ae853SAndroid Build Coastguard Worker pu1_cur_pic_chroma + 4 * i4_chroma_stride, i4_chroma_stride, u4_alpha_chroma,
1249*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma, pu4_pic_horz_bs[2],
1250*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_chroma], gu1_ih264_clip_table[u4_idx_A_chroma]);
1251*495ae853SAndroid Build Coastguard Worker }
1252*495ae853SAndroid Build Coastguard Worker
1253*495ae853SAndroid Build Coastguard Worker /* horizontal edge 3 */
1254*495ae853SAndroid Build Coastguard Worker if(pu4_pic_horz_bs[3] == 0x04040404)
1255*495ae853SAndroid Build Coastguard Worker {
1256*495ae853SAndroid Build Coastguard Worker /* strong filter */
1257*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bs4(pu1_cur_pic_luma + 12 * i4_luma_stride, i4_luma_stride,
1258*495ae853SAndroid Build Coastguard Worker u4_alpha_luma, u4_beta_luma);
1259*495ae853SAndroid Build Coastguard Worker }
1260*495ae853SAndroid Build Coastguard Worker else
1261*495ae853SAndroid Build Coastguard Worker {
1262*495ae853SAndroid Build Coastguard Worker /* normal filter */
1263*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bslt4(pu1_cur_pic_luma + 12 * i4_luma_stride, i4_luma_stride,
1264*495ae853SAndroid Build Coastguard Worker u4_alpha_luma, u4_beta_luma, pu4_pic_horz_bs[3],
1265*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
1266*495ae853SAndroid Build Coastguard Worker }
1267*495ae853SAndroid Build Coastguard Worker }
1268