1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker * ih264e_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 * - ih264e_fill_bs_1mv_1ref_non_mbaff
34*495ae853SAndroid Build Coastguard Worker * - ih264e_calculate_csbp
35*495ae853SAndroid Build Coastguard Worker * - ih264e_compute_bs
36*495ae853SAndroid Build Coastguard Worker * - ih264e_filter_top_edge
37*495ae853SAndroid Build Coastguard Worker * - ih264e_filter_left_edge
38*495ae853SAndroid Build Coastguard Worker * - ih264e_deblock_mb
39*495ae853SAndroid Build Coastguard Worker *
40*495ae853SAndroid Build Coastguard Worker * @remarks
41*495ae853SAndroid Build Coastguard Worker * none
42*495ae853SAndroid Build Coastguard Worker *
43*495ae853SAndroid Build Coastguard Worker *******************************************************************************
44*495ae853SAndroid Build Coastguard Worker */
45*495ae853SAndroid Build Coastguard Worker
46*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
47*495ae853SAndroid Build Coastguard Worker /* File Includes */
48*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
49*495ae853SAndroid Build Coastguard Worker
50*495ae853SAndroid Build Coastguard Worker /* System Include Files */
51*495ae853SAndroid Build Coastguard Worker #include <stdio.h>
52*495ae853SAndroid Build Coastguard Worker #include <string.h>
53*495ae853SAndroid Build Coastguard Worker #include <assert.h>
54*495ae853SAndroid Build Coastguard Worker
55*495ae853SAndroid Build Coastguard Worker /* User Include Files */
56*495ae853SAndroid Build Coastguard Worker #include "ih264e_config.h"
57*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
58*495ae853SAndroid Build Coastguard Worker #include "iv2.h"
59*495ae853SAndroid Build Coastguard Worker #include "ive2.h"
60*495ae853SAndroid Build Coastguard Worker
61*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
62*495ae853SAndroid Build Coastguard Worker #include "ih264_defs.h"
63*495ae853SAndroid Build Coastguard Worker #include "ih264_mem_fns.h"
64*495ae853SAndroid Build Coastguard Worker #include "ih264_padding.h"
65*495ae853SAndroid Build Coastguard Worker #include "ih264_structs.h"
66*495ae853SAndroid Build Coastguard Worker #include "ih264_trans_quant_itrans_iquant.h"
67*495ae853SAndroid Build Coastguard Worker #include "ih264_inter_pred_filters.h"
68*495ae853SAndroid Build Coastguard Worker #include "ih264_intra_pred_filters.h"
69*495ae853SAndroid Build Coastguard Worker #include "ih264_deblk_edge_filters.h"
70*495ae853SAndroid Build Coastguard Worker #include "ih264_trans_data.h"
71*495ae853SAndroid Build Coastguard Worker #include "ih264_cabac_tables.h"
72*495ae853SAndroid Build Coastguard Worker #include "ih264_deblk_tables.h"
73*495ae853SAndroid Build Coastguard Worker
74*495ae853SAndroid Build Coastguard Worker #include "ime_defs.h"
75*495ae853SAndroid Build Coastguard Worker #include "ime_distortion_metrics.h"
76*495ae853SAndroid Build Coastguard Worker #include "ime_structs.h"
77*495ae853SAndroid Build Coastguard Worker
78*495ae853SAndroid Build Coastguard Worker #include "irc_cntrl_param.h"
79*495ae853SAndroid Build Coastguard Worker #include "irc_frame_info_collector.h"
80*495ae853SAndroid Build Coastguard Worker
81*495ae853SAndroid Build Coastguard Worker #include "ih264e_error.h"
82*495ae853SAndroid Build Coastguard Worker #include "ih264e_defs.h"
83*495ae853SAndroid Build Coastguard Worker #include "ih264e_rate_control.h"
84*495ae853SAndroid Build Coastguard Worker #include "ih264e_bitstream.h"
85*495ae853SAndroid Build Coastguard Worker #include "ih264e_cabac_structs.h"
86*495ae853SAndroid Build Coastguard Worker #include "ih264e_structs.h"
87*495ae853SAndroid Build Coastguard Worker #include "ih264e_deblk.h"
88*495ae853SAndroid Build Coastguard Worker
89*495ae853SAndroid Build Coastguard Worker
90*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
91*495ae853SAndroid Build Coastguard Worker /* global definitions */
92*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
93*495ae853SAndroid Build Coastguard Worker
94*495ae853SAndroid Build Coastguard Worker /**
95*495ae853SAndroid Build Coastguard Worker ******************************************************************************
96*495ae853SAndroid Build Coastguard Worker * @brief BS Table Lookup
97*495ae853SAndroid Build Coastguard Worker * input :
98*495ae853SAndroid Build Coastguard Worker * output :
99*495ae853SAndroid Build Coastguard Worker * @remarks none
100*495ae853SAndroid Build Coastguard Worker ******************************************************************************
101*495ae853SAndroid Build Coastguard Worker */
102*495ae853SAndroid Build Coastguard Worker static const UWORD32 gu4_bs_table[][16] =
103*495ae853SAndroid Build Coastguard Worker {
104*495ae853SAndroid Build Coastguard Worker {
105*495ae853SAndroid Build Coastguard Worker 0x00000000, 0x02000000, 0x00020000, 0x02020000,
106*495ae853SAndroid Build Coastguard Worker 0x00000200, 0x02000200, 0x00020200, 0x02020200,
107*495ae853SAndroid Build Coastguard Worker 0x00000002, 0x02000002, 0x00020002, 0x02020002,
108*495ae853SAndroid Build Coastguard Worker 0x00000202, 0x02000202, 0x00020202, 0x02020202
109*495ae853SAndroid Build Coastguard Worker },
110*495ae853SAndroid Build Coastguard Worker {
111*495ae853SAndroid Build Coastguard Worker 0x01010101, 0x02010101, 0x01020101, 0x02020101,
112*495ae853SAndroid Build Coastguard Worker 0x01010201, 0x02010201, 0x01020201, 0x02020201,
113*495ae853SAndroid Build Coastguard Worker 0x01010102, 0x02010102, 0x01020102, 0x02020102,
114*495ae853SAndroid Build Coastguard Worker 0x01010202, 0x02010202, 0x01020202, 0x02020202
115*495ae853SAndroid Build Coastguard Worker }
116*495ae853SAndroid Build Coastguard Worker };
117*495ae853SAndroid Build Coastguard Worker
118*495ae853SAndroid Build Coastguard Worker /**
119*495ae853SAndroid Build Coastguard Worker ******************************************************************************
120*495ae853SAndroid Build Coastguard Worker * @brief Transpose Matrix used in BS
121*495ae853SAndroid Build Coastguard Worker * input :
122*495ae853SAndroid Build Coastguard Worker * output :
123*495ae853SAndroid Build Coastguard Worker * @remarks none
124*495ae853SAndroid Build Coastguard Worker ******************************************************************************
125*495ae853SAndroid Build Coastguard Worker */
126*495ae853SAndroid Build Coastguard Worker static const UWORD16 ih264e_gu2_4x4_v2h_reorder[16] =
127*495ae853SAndroid Build Coastguard Worker {
128*495ae853SAndroid Build Coastguard Worker 0x0000, 0x0001, 0x0010, 0x0011,
129*495ae853SAndroid Build Coastguard Worker 0x0100, 0x0101, 0x0110, 0x0111,
130*495ae853SAndroid Build Coastguard Worker 0x1000, 0x1001, 0x1010, 0x1011,
131*495ae853SAndroid Build Coastguard Worker 0x1100, 0x1101, 0x1110, 0x1111
132*495ae853SAndroid Build Coastguard Worker };
133*495ae853SAndroid Build Coastguard Worker
134*495ae853SAndroid Build Coastguard Worker
135*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
136*495ae853SAndroid Build Coastguard Worker /* Function Definitions */
137*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
138*495ae853SAndroid Build Coastguard Worker
139*495ae853SAndroid Build Coastguard Worker /**
140*495ae853SAndroid Build Coastguard Worker *******************************************************************************
141*495ae853SAndroid Build Coastguard Worker *
142*495ae853SAndroid Build Coastguard Worker * @brief Fill BS value for all the edges of an mb
143*495ae853SAndroid Build Coastguard Worker *
144*495ae853SAndroid Build Coastguard Worker * @par Description:
145*495ae853SAndroid Build Coastguard Worker * Fill BS value for all the edges of an mb
146*495ae853SAndroid Build Coastguard Worker *
147*495ae853SAndroid Build Coastguard Worker * @param[in] pu4_horz_bs
148*495ae853SAndroid Build Coastguard Worker * Base pointer of horizontal BS table
149*495ae853SAndroid Build Coastguard Worker *
150*495ae853SAndroid Build Coastguard Worker * @param[in] pu4_vert_bs
151*495ae853SAndroid Build Coastguard Worker * Base pointer of vertical BS table
152*495ae853SAndroid Build Coastguard Worker *
153*495ae853SAndroid Build Coastguard Worker * @param[in] u4_left_mb_csbp
154*495ae853SAndroid Build Coastguard Worker * coded sub block pattern of left mb
155*495ae853SAndroid Build Coastguard Worker *
156*495ae853SAndroid Build Coastguard Worker * @param[in] u4_left_mb_csbp
157*495ae853SAndroid Build Coastguard Worker * coded sub block pattern of top mb
158*495ae853SAndroid Build Coastguard Worker *
159*495ae853SAndroid Build Coastguard Worker * @param[in] ps_left_pu
160*495ae853SAndroid Build Coastguard Worker * PU for left MB
161*495ae853SAndroid Build Coastguard Worker *
162*495ae853SAndroid Build Coastguard Worker * @param[in] ps_top_pu
163*495ae853SAndroid Build Coastguard Worker * PU for top MB
164*495ae853SAndroid Build Coastguard Worker *
165*495ae853SAndroid Build Coastguard Worker * @param[in] ps_curr_pu
166*495ae853SAndroid Build Coastguard Worker * PU for current MB
167*495ae853SAndroid Build Coastguard Worker *
168*495ae853SAndroid Build Coastguard Worker * @returns none
169*495ae853SAndroid Build Coastguard Worker *
170*495ae853SAndroid Build Coastguard Worker * @remarks none
171*495ae853SAndroid Build Coastguard Worker *
172*495ae853SAndroid Build Coastguard Worker *******************************************************************************
173*495ae853SAndroid Build Coastguard Worker */
ih264e_fill_bs_1mv_1ref_non_mbaff(UWORD32 * pu4_horz_bs,UWORD32 * pu4_vert_bs,UWORD32 u4_left_mb_csbp,UWORD32 u4_top_mb_csbp,UWORD32 u4_cur_mb_csbp,enc_pu_t * ps_left_pu,enc_pu_t * ps_top_pu,enc_pu_t * ps_curr_pu)174*495ae853SAndroid Build Coastguard Worker static void ih264e_fill_bs_1mv_1ref_non_mbaff(UWORD32 *pu4_horz_bs,
175*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_vert_bs,
176*495ae853SAndroid Build Coastguard Worker UWORD32 u4_left_mb_csbp,
177*495ae853SAndroid Build Coastguard Worker UWORD32 u4_top_mb_csbp,
178*495ae853SAndroid Build Coastguard Worker UWORD32 u4_cur_mb_csbp,
179*495ae853SAndroid Build Coastguard Worker enc_pu_t *ps_left_pu,
180*495ae853SAndroid Build Coastguard Worker enc_pu_t *ps_top_pu,
181*495ae853SAndroid Build Coastguard Worker enc_pu_t *ps_curr_pu)
182*495ae853SAndroid Build Coastguard Worker {
183*495ae853SAndroid Build Coastguard Worker /* motion vectors of blks p & q */
184*495ae853SAndroid Build Coastguard Worker WORD16 i16_qMvl0_x, i16_qMvl0_y, i16_pMvl0_x, i16_pMvl0_y;
185*495ae853SAndroid Build Coastguard Worker WORD16 i16_qMvl1_x, i16_qMvl1_y, i16_pMvl1_x, i16_pMvl1_y;
186*495ae853SAndroid Build Coastguard Worker
187*495ae853SAndroid Build Coastguard Worker /* temp var */
188*495ae853SAndroid Build Coastguard Worker UWORD32 u4_left_flag, u4_top_flag;
189*495ae853SAndroid Build Coastguard Worker const UWORD32 *bs_map;
190*495ae853SAndroid Build Coastguard Worker UWORD32 u4_reordered_vert_bs_enc, u4_temp;
191*495ae853SAndroid Build Coastguard Worker
192*495ae853SAndroid Build Coastguard Worker /* Coded Pattern for Horizontal Edge */
193*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
194*495ae853SAndroid Build Coastguard Worker /*u4_nbr_horz_csbp=11C|10C|9C|8C|7C|6C|5C|4C|3C|2C|1C|0C|15T|14T|13T|12T */
195*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
196*495ae853SAndroid Build Coastguard Worker UWORD32 u4_nbr_horz_csbp = (u4_cur_mb_csbp << 4) | (u4_top_mb_csbp >> 12);
197*495ae853SAndroid Build Coastguard Worker UWORD32 u4_horz_bs_enc = u4_cur_mb_csbp | u4_nbr_horz_csbp;
198*495ae853SAndroid Build Coastguard Worker
199*495ae853SAndroid Build Coastguard Worker /* Coded Pattern for Vertical Edge */
200*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
201*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 */
202*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
203*495ae853SAndroid Build Coastguard Worker UWORD32 u4_left_mb_masked_csbp = u4_left_mb_csbp & CSBP_RIGHT_BLOCK_MASK;
204*495ae853SAndroid Build Coastguard Worker
205*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
206*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 */
207*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
208*495ae853SAndroid Build Coastguard Worker UWORD32 u4_cur_mb_masked_csbp = (u4_cur_mb_csbp << 1)
209*495ae853SAndroid Build Coastguard Worker & (~CSBP_LEFT_BLOCK_MASK);
210*495ae853SAndroid Build Coastguard Worker
211*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
212*495ae853SAndroid Build Coastguard Worker /*u4_nbr_vert_csbp=14C|13C|12C|15L|10C|9C|8C|11L|6C|5C|4C|7L|2C|1C|0C|3L */
213*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
214*495ae853SAndroid Build Coastguard Worker UWORD32 u4_nbr_vert_csbp = (u4_cur_mb_masked_csbp)
215*495ae853SAndroid Build Coastguard Worker | (u4_left_mb_masked_csbp >> 3);
216*495ae853SAndroid Build Coastguard Worker UWORD32 u4_vert_bs_enc = u4_cur_mb_csbp | u4_nbr_vert_csbp;
217*495ae853SAndroid Build Coastguard Worker
218*495ae853SAndroid Build Coastguard Worker /* BS Calculation for MB Boundary Edges */
219*495ae853SAndroid Build Coastguard Worker
220*495ae853SAndroid Build Coastguard Worker /* BS calculation for 1 2 3 horizontal boundary */
221*495ae853SAndroid Build Coastguard Worker bs_map = gu4_bs_table[0];
222*495ae853SAndroid Build Coastguard Worker pu4_horz_bs[1] = bs_map[(u4_horz_bs_enc >> 4) & 0xF];
223*495ae853SAndroid Build Coastguard Worker pu4_horz_bs[2] = bs_map[(u4_horz_bs_enc >> 8) & 0xF];
224*495ae853SAndroid Build Coastguard Worker pu4_horz_bs[3] = bs_map[(u4_horz_bs_enc >> 12) & 0xF];
225*495ae853SAndroid Build Coastguard Worker
226*495ae853SAndroid Build Coastguard Worker /* BS calculation for 5 6 7 vertical boundary */
227*495ae853SAndroid Build Coastguard Worker /* Do 4x4 tranpose of u4_vert_bs_enc by using look up table for reorder */
228*495ae853SAndroid Build Coastguard Worker u4_reordered_vert_bs_enc = ih264e_gu2_4x4_v2h_reorder[u4_vert_bs_enc & 0xF];
229*495ae853SAndroid Build Coastguard Worker
230*495ae853SAndroid Build Coastguard Worker u4_temp = ih264e_gu2_4x4_v2h_reorder[(u4_vert_bs_enc >> 4) & 0xF];
231*495ae853SAndroid Build Coastguard Worker u4_reordered_vert_bs_enc |= (u4_temp << 1);
232*495ae853SAndroid Build Coastguard Worker
233*495ae853SAndroid Build Coastguard Worker u4_temp = ih264e_gu2_4x4_v2h_reorder[(u4_vert_bs_enc >> 8) & 0xF];
234*495ae853SAndroid Build Coastguard Worker u4_reordered_vert_bs_enc |= (u4_temp << 2);
235*495ae853SAndroid Build Coastguard Worker
236*495ae853SAndroid Build Coastguard Worker u4_temp = ih264e_gu2_4x4_v2h_reorder[(u4_vert_bs_enc >> 12) & 0xF];
237*495ae853SAndroid Build Coastguard Worker u4_reordered_vert_bs_enc |= (u4_temp << 3);
238*495ae853SAndroid Build Coastguard Worker
239*495ae853SAndroid Build Coastguard Worker pu4_vert_bs[1] = bs_map[(u4_reordered_vert_bs_enc >> 4) & 0xF];
240*495ae853SAndroid Build Coastguard Worker pu4_vert_bs[2] = bs_map[(u4_reordered_vert_bs_enc >> 8) & 0xF];
241*495ae853SAndroid Build Coastguard Worker pu4_vert_bs[3] = bs_map[(u4_reordered_vert_bs_enc >> 12) & 0xF];
242*495ae853SAndroid Build Coastguard Worker
243*495ae853SAndroid Build Coastguard Worker
244*495ae853SAndroid Build Coastguard Worker /* BS Calculation for MB Boundary Edges */
245*495ae853SAndroid Build Coastguard Worker if (ps_top_pu->b1_intra_flag)
246*495ae853SAndroid Build Coastguard Worker {
247*495ae853SAndroid Build Coastguard Worker pu4_horz_bs[0] = 0x04040404;
248*495ae853SAndroid Build Coastguard Worker }
249*495ae853SAndroid Build Coastguard Worker else
250*495ae853SAndroid Build Coastguard Worker {
251*495ae853SAndroid Build Coastguard Worker if (ps_curr_pu->b2_pred_mode != ps_top_pu->b2_pred_mode)
252*495ae853SAndroid Build Coastguard Worker {
253*495ae853SAndroid Build Coastguard Worker u4_top_flag = 1;
254*495ae853SAndroid Build Coastguard Worker }
255*495ae853SAndroid Build Coastguard Worker else if(ps_curr_pu->b2_pred_mode != 2)
256*495ae853SAndroid Build Coastguard Worker {
257*495ae853SAndroid Build Coastguard Worker i16_pMvl0_x = ps_top_pu->s_me_info[ps_top_pu->b2_pred_mode].s_mv.i2_mvx;
258*495ae853SAndroid Build Coastguard Worker i16_pMvl0_y = ps_top_pu->s_me_info[ps_top_pu->b2_pred_mode].s_mv.i2_mvy;
259*495ae853SAndroid Build Coastguard Worker
260*495ae853SAndroid Build Coastguard Worker i16_qMvl0_x = ps_curr_pu->s_me_info[ps_curr_pu->b2_pred_mode].s_mv.i2_mvx;
261*495ae853SAndroid Build Coastguard Worker i16_qMvl0_y = ps_curr_pu->s_me_info[ps_curr_pu->b2_pred_mode].s_mv.i2_mvy;
262*495ae853SAndroid Build Coastguard Worker
263*495ae853SAndroid Build Coastguard Worker
264*495ae853SAndroid Build Coastguard Worker u4_top_flag = (ABS((i16_pMvl0_x - i16_qMvl0_x)) >= 4)
265*495ae853SAndroid Build Coastguard Worker | (ABS((i16_pMvl0_y - i16_qMvl0_y)) >= 4);
266*495ae853SAndroid Build Coastguard Worker }
267*495ae853SAndroid Build Coastguard Worker else
268*495ae853SAndroid Build Coastguard Worker {
269*495ae853SAndroid Build Coastguard Worker
270*495ae853SAndroid Build Coastguard Worker i16_pMvl0_x = ps_top_pu->s_me_info[PRED_L0].s_mv.i2_mvx;
271*495ae853SAndroid Build Coastguard Worker i16_pMvl0_y = ps_top_pu->s_me_info[PRED_L0].s_mv.i2_mvy;
272*495ae853SAndroid Build Coastguard Worker i16_pMvl1_x = ps_top_pu->s_me_info[PRED_L1].s_mv.i2_mvx;
273*495ae853SAndroid Build Coastguard Worker i16_pMvl1_y = ps_top_pu->s_me_info[PRED_L1].s_mv.i2_mvy;
274*495ae853SAndroid Build Coastguard Worker
275*495ae853SAndroid Build Coastguard Worker i16_qMvl0_x = ps_curr_pu->s_me_info[PRED_L0].s_mv.i2_mvx;
276*495ae853SAndroid Build Coastguard Worker i16_qMvl0_y = ps_curr_pu->s_me_info[PRED_L0].s_mv.i2_mvy;
277*495ae853SAndroid Build Coastguard Worker i16_qMvl1_x = ps_curr_pu->s_me_info[PRED_L1].s_mv.i2_mvx;
278*495ae853SAndroid Build Coastguard Worker i16_qMvl1_y = ps_curr_pu->s_me_info[PRED_L1].s_mv.i2_mvy;
279*495ae853SAndroid Build Coastguard Worker
280*495ae853SAndroid Build Coastguard Worker
281*495ae853SAndroid Build Coastguard Worker u4_top_flag = (ABS((i16_pMvl0_x - i16_qMvl0_x)) >= 4)
282*495ae853SAndroid Build Coastguard Worker | (ABS((i16_pMvl0_y - i16_qMvl0_y)) >= 4)
283*495ae853SAndroid Build Coastguard Worker | (ABS((i16_pMvl1_x - i16_qMvl1_x)) >= 4)
284*495ae853SAndroid Build Coastguard Worker | (ABS((i16_pMvl1_y - i16_qMvl1_y)) >= 4);
285*495ae853SAndroid Build Coastguard Worker }
286*495ae853SAndroid Build Coastguard Worker
287*495ae853SAndroid Build Coastguard Worker bs_map = gu4_bs_table[!!u4_top_flag];
288*495ae853SAndroid Build Coastguard Worker pu4_horz_bs[0] = bs_map[u4_horz_bs_enc & 0xF];
289*495ae853SAndroid Build Coastguard Worker }
290*495ae853SAndroid Build Coastguard Worker
291*495ae853SAndroid Build Coastguard Worker
292*495ae853SAndroid Build Coastguard Worker if (ps_left_pu->b1_intra_flag)
293*495ae853SAndroid Build Coastguard Worker {
294*495ae853SAndroid Build Coastguard Worker pu4_vert_bs[0] = 0x04040404;
295*495ae853SAndroid Build Coastguard Worker }
296*495ae853SAndroid Build Coastguard Worker else
297*495ae853SAndroid Build Coastguard Worker {
298*495ae853SAndroid Build Coastguard Worker if (ps_curr_pu->b2_pred_mode != ps_left_pu->b2_pred_mode)
299*495ae853SAndroid Build Coastguard Worker {
300*495ae853SAndroid Build Coastguard Worker u4_left_flag = 1;
301*495ae853SAndroid Build Coastguard Worker }
302*495ae853SAndroid Build Coastguard Worker else if (ps_curr_pu->b2_pred_mode != 2)/* Not bipred */
303*495ae853SAndroid Build Coastguard Worker {
304*495ae853SAndroid Build Coastguard Worker i16_pMvl0_x = ps_left_pu->s_me_info[ps_left_pu->b2_pred_mode].s_mv.i2_mvx;
305*495ae853SAndroid Build Coastguard Worker i16_pMvl0_y = ps_left_pu->s_me_info[ps_left_pu->b2_pred_mode].s_mv.i2_mvy;
306*495ae853SAndroid Build Coastguard Worker
307*495ae853SAndroid Build Coastguard Worker i16_qMvl0_x = ps_curr_pu->s_me_info[ps_curr_pu->b2_pred_mode].s_mv.i2_mvx;
308*495ae853SAndroid Build Coastguard Worker i16_qMvl0_y = ps_curr_pu->s_me_info[ps_curr_pu->b2_pred_mode].s_mv.i2_mvy;
309*495ae853SAndroid Build Coastguard Worker
310*495ae853SAndroid Build Coastguard Worker
311*495ae853SAndroid Build Coastguard Worker u4_left_flag = (ABS((i16_pMvl0_x - i16_qMvl0_x)) >= 4)
312*495ae853SAndroid Build Coastguard Worker | (ABS((i16_pMvl0_y - i16_qMvl0_y)) >= 4);
313*495ae853SAndroid Build Coastguard Worker }
314*495ae853SAndroid Build Coastguard Worker else
315*495ae853SAndroid Build Coastguard Worker {
316*495ae853SAndroid Build Coastguard Worker i16_pMvl0_x = ps_left_pu->s_me_info[PRED_L0].s_mv.i2_mvx;
317*495ae853SAndroid Build Coastguard Worker i16_pMvl0_y = ps_left_pu->s_me_info[PRED_L0].s_mv.i2_mvy;
318*495ae853SAndroid Build Coastguard Worker i16_pMvl1_x = ps_left_pu->s_me_info[PRED_L1].s_mv.i2_mvx;
319*495ae853SAndroid Build Coastguard Worker i16_pMvl1_y = ps_left_pu->s_me_info[PRED_L1].s_mv.i2_mvy;
320*495ae853SAndroid Build Coastguard Worker
321*495ae853SAndroid Build Coastguard Worker i16_qMvl0_x = ps_curr_pu->s_me_info[PRED_L0].s_mv.i2_mvx;
322*495ae853SAndroid Build Coastguard Worker i16_qMvl0_y = ps_curr_pu->s_me_info[PRED_L0].s_mv.i2_mvy;
323*495ae853SAndroid Build Coastguard Worker i16_qMvl1_x = ps_curr_pu->s_me_info[PRED_L1].s_mv.i2_mvx;
324*495ae853SAndroid Build Coastguard Worker i16_qMvl1_y = ps_curr_pu->s_me_info[PRED_L1].s_mv.i2_mvy;
325*495ae853SAndroid Build Coastguard Worker
326*495ae853SAndroid Build Coastguard Worker
327*495ae853SAndroid Build Coastguard Worker u4_left_flag = (ABS((i16_pMvl0_x - i16_qMvl0_x)) >= 4)
328*495ae853SAndroid Build Coastguard Worker | (ABS((i16_pMvl0_y - i16_qMvl0_y)) >= 4)
329*495ae853SAndroid Build Coastguard Worker | (ABS((i16_pMvl1_x - i16_qMvl1_x)) >= 4)
330*495ae853SAndroid Build Coastguard Worker | (ABS((i16_pMvl1_y - i16_qMvl1_y)) >= 4);
331*495ae853SAndroid Build Coastguard Worker }
332*495ae853SAndroid Build Coastguard Worker
333*495ae853SAndroid Build Coastguard Worker bs_map = gu4_bs_table[!!u4_left_flag];
334*495ae853SAndroid Build Coastguard Worker pu4_vert_bs[0] = bs_map[u4_reordered_vert_bs_enc & 0xF];
335*495ae853SAndroid Build Coastguard Worker }
336*495ae853SAndroid Build Coastguard Worker }
337*495ae853SAndroid Build Coastguard Worker
338*495ae853SAndroid Build Coastguard Worker /**
339*495ae853SAndroid Build Coastguard Worker *******************************************************************************
340*495ae853SAndroid Build Coastguard Worker *
341*495ae853SAndroid Build Coastguard Worker * @brief calculate coded subblock pattern from nnz
342*495ae853SAndroid Build Coastguard Worker *
343*495ae853SAndroid Build Coastguard Worker * @par Description:
344*495ae853SAndroid Build Coastguard Worker * calculate coded subblock pattern from nnz
345*495ae853SAndroid Build Coastguard Worker *
346*495ae853SAndroid Build Coastguard Worker * @param[in] ps_proc
347*495ae853SAndroid Build Coastguard Worker * process context
348*495ae853SAndroid Build Coastguard Worker *
349*495ae853SAndroid Build Coastguard Worker * @returns csbp
350*495ae853SAndroid Build Coastguard Worker *
351*495ae853SAndroid Build Coastguard Worker * @remarks none
352*495ae853SAndroid Build Coastguard Worker *
353*495ae853SAndroid Build Coastguard Worker *******************************************************************************
354*495ae853SAndroid Build Coastguard Worker */
ih264e_calculate_csbp(process_ctxt_t * ps_proc)355*495ae853SAndroid Build Coastguard Worker static UWORD32 ih264e_calculate_csbp(process_ctxt_t *ps_proc)
356*495ae853SAndroid Build Coastguard Worker {
357*495ae853SAndroid Build Coastguard Worker /* number of non zeros for each tx blk */
358*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_curr_nnz = (UWORD8 *)ps_proc->au4_nnz;
359*495ae853SAndroid Build Coastguard Worker
360*495ae853SAndroid Build Coastguard Worker /* csbp */
361*495ae853SAndroid Build Coastguard Worker UWORD32 u4_csbp = 0;
362*495ae853SAndroid Build Coastguard Worker
363*495ae853SAndroid Build Coastguard Worker /* temp var */
364*495ae853SAndroid Build Coastguard Worker WORD32 i4_i;
365*495ae853SAndroid Build Coastguard Worker
366*495ae853SAndroid Build Coastguard Worker pu1_curr_nnz += 1;
367*495ae853SAndroid Build Coastguard Worker
368*495ae853SAndroid Build Coastguard Worker /* Creating Subblock pattern for current MB */
369*495ae853SAndroid Build Coastguard Worker /* 15C|14C|13C|12C|11C|10C|9C|8C|7C|6C|5C|4C|3C|2C|1C|0C */
370*495ae853SAndroid Build Coastguard Worker for (i4_i = 0; i4_i < 16; i4_i++ )
371*495ae853SAndroid Build Coastguard Worker {
372*495ae853SAndroid Build Coastguard Worker u4_csbp |= ((!!*(pu1_curr_nnz + i4_i))<< i4_i);
373*495ae853SAndroid Build Coastguard Worker }
374*495ae853SAndroid Build Coastguard Worker
375*495ae853SAndroid Build Coastguard Worker return u4_csbp;
376*495ae853SAndroid Build Coastguard Worker }
377*495ae853SAndroid Build Coastguard Worker
378*495ae853SAndroid Build Coastguard Worker /**
379*495ae853SAndroid Build Coastguard Worker *******************************************************************************
380*495ae853SAndroid Build Coastguard Worker *
381*495ae853SAndroid Build Coastguard Worker * @brief This function computes blocking strength for an mb
382*495ae853SAndroid Build Coastguard Worker *
383*495ae853SAndroid Build Coastguard Worker * @par Description:
384*495ae853SAndroid Build Coastguard Worker * This function computes blocking strength for an mb
385*495ae853SAndroid Build Coastguard Worker *
386*495ae853SAndroid Build Coastguard Worker * @param[in] ps_proc
387*495ae853SAndroid Build Coastguard Worker * process context
388*495ae853SAndroid Build Coastguard Worker *
389*495ae853SAndroid Build Coastguard Worker * @returns none
390*495ae853SAndroid Build Coastguard Worker *
391*495ae853SAndroid Build Coastguard Worker * @remarks
392*495ae853SAndroid Build Coastguard Worker *
393*495ae853SAndroid Build Coastguard Worker *******************************************************************************
394*495ae853SAndroid Build Coastguard Worker */
ih264e_compute_bs(process_ctxt_t * ps_proc)395*495ae853SAndroid Build Coastguard Worker void ih264e_compute_bs(process_ctxt_t * ps_proc)
396*495ae853SAndroid Build Coastguard Worker {
397*495ae853SAndroid Build Coastguard Worker /* deblk bs context */
398*495ae853SAndroid Build Coastguard Worker bs_ctxt_t *ps_bs = &(ps_proc->s_deblk_ctxt.s_bs_ctxt);
399*495ae853SAndroid Build Coastguard Worker
400*495ae853SAndroid Build Coastguard Worker /* vertical blocking strength */
401*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_vert_bs;
402*495ae853SAndroid Build Coastguard Worker
403*495ae853SAndroid Build Coastguard Worker /* horizontal blocking strength */
404*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_horz_bs;
405*495ae853SAndroid Build Coastguard Worker
406*495ae853SAndroid Build Coastguard Worker /* mb indices */
407*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_x, i4_mb_y;
408*495ae853SAndroid Build Coastguard Worker
409*495ae853SAndroid Build Coastguard Worker /* is intra */
410*495ae853SAndroid Build Coastguard Worker WORD32 i4_intra;
411*495ae853SAndroid Build Coastguard Worker
412*495ae853SAndroid Build Coastguard Worker /* temp var */
413*495ae853SAndroid Build Coastguard Worker WORD32 i4_wd_mbs = ps_proc->i4_wd_mbs;
414*495ae853SAndroid Build Coastguard Worker
415*495ae853SAndroid Build Coastguard Worker /* init indices */
416*495ae853SAndroid Build Coastguard Worker i4_mb_x = ps_bs->i4_mb_x;
417*495ae853SAndroid Build Coastguard Worker i4_mb_y = ps_bs->i4_mb_y;
418*495ae853SAndroid Build Coastguard Worker
419*495ae853SAndroid Build Coastguard Worker /* init pointers */
420*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs = ps_bs->pu4_pic_vert_bs + ((i4_mb_y * i4_wd_mbs) + i4_mb_x) * 4;
421*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs = ps_bs->pu4_pic_horz_bs + ((i4_mb_y * i4_wd_mbs) + i4_mb_x) * 4;
422*495ae853SAndroid Build Coastguard Worker
423*495ae853SAndroid Build Coastguard Worker /* is intra? */
424*495ae853SAndroid Build Coastguard Worker i4_intra = ps_proc->u4_is_intra;
425*495ae853SAndroid Build Coastguard Worker
426*495ae853SAndroid Build Coastguard Worker /* compute blocking strength */
427*495ae853SAndroid Build Coastguard Worker if (i4_intra)
428*495ae853SAndroid Build Coastguard Worker {
429*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs[0] = 0x04040404;
430*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs[1] = pu4_pic_vert_bs[2] = pu4_pic_vert_bs[3] = 0x03030303;
431*495ae853SAndroid Build Coastguard Worker
432*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs[0] = 0x04040404;
433*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs[1] = pu4_pic_horz_bs[2] = pu4_pic_horz_bs[3] = 0x03030303;
434*495ae853SAndroid Build Coastguard Worker }
435*495ae853SAndroid Build Coastguard Worker else
436*495ae853SAndroid Build Coastguard Worker {
437*495ae853SAndroid Build Coastguard Worker /* left mb syntax info */
438*495ae853SAndroid Build Coastguard Worker mb_info_t *ps_left_mb_syntax_ele = &ps_proc->s_left_mb_syntax_ele;
439*495ae853SAndroid Build Coastguard Worker
440*495ae853SAndroid Build Coastguard Worker /* top mb syntax info */
441*495ae853SAndroid Build Coastguard Worker mb_info_t *ps_top_mb_syntax_ele = ps_proc->ps_top_row_mb_syntax_ele + i4_mb_x;
442*495ae853SAndroid Build Coastguard Worker
443*495ae853SAndroid Build Coastguard Worker /* top row motion vector info */
444*495ae853SAndroid Build Coastguard Worker enc_pu_t *ps_top_row_pu = ps_proc->ps_top_row_pu + i4_mb_x;
445*495ae853SAndroid Build Coastguard Worker
446*495ae853SAndroid Build Coastguard Worker /* csbp for curr mb */
447*495ae853SAndroid Build Coastguard Worker ps_proc->u4_csbp = ih264e_calculate_csbp(ps_proc);
448*495ae853SAndroid Build Coastguard Worker
449*495ae853SAndroid Build Coastguard Worker /* csbp for ngbrs */
450*495ae853SAndroid Build Coastguard Worker if (i4_mb_x == 0)
451*495ae853SAndroid Build Coastguard Worker {
452*495ae853SAndroid Build Coastguard Worker ps_left_mb_syntax_ele->u4_csbp = 0;
453*495ae853SAndroid Build Coastguard Worker ps_proc->s_left_mb_pu.b1_intra_flag = 0;
454*495ae853SAndroid Build Coastguard Worker ps_proc->s_left_mb_pu.b2_pred_mode = ps_proc->ps_pu->b2_pred_mode;
455*495ae853SAndroid Build Coastguard Worker ps_proc->s_left_mb_pu.s_me_info[0].s_mv = ps_proc->ps_pu->s_me_info[0].s_mv;
456*495ae853SAndroid Build Coastguard Worker ps_proc->s_left_mb_pu.s_me_info[1].s_mv = ps_proc->ps_pu->s_me_info[1].s_mv;
457*495ae853SAndroid Build Coastguard Worker }
458*495ae853SAndroid Build Coastguard Worker if (i4_mb_y == 0)
459*495ae853SAndroid Build Coastguard Worker {
460*495ae853SAndroid Build Coastguard Worker ps_top_mb_syntax_ele->u4_csbp = 0;
461*495ae853SAndroid Build Coastguard Worker ps_top_row_pu->b1_intra_flag = 0;
462*495ae853SAndroid Build Coastguard Worker ps_top_row_pu->b2_pred_mode = ps_proc->ps_pu->b2_pred_mode;
463*495ae853SAndroid Build Coastguard Worker ps_top_row_pu->s_me_info[0].s_mv = ps_proc->ps_pu->s_me_info[0].s_mv;
464*495ae853SAndroid Build Coastguard Worker ps_top_row_pu->s_me_info[1].s_mv = ps_proc->ps_pu->s_me_info[1].s_mv;
465*495ae853SAndroid Build Coastguard Worker }
466*495ae853SAndroid Build Coastguard Worker
467*495ae853SAndroid Build Coastguard Worker ih264e_fill_bs_1mv_1ref_non_mbaff(pu4_pic_horz_bs,
468*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs,
469*495ae853SAndroid Build Coastguard Worker ps_left_mb_syntax_ele->u4_csbp,
470*495ae853SAndroid Build Coastguard Worker ps_top_mb_syntax_ele->u4_csbp,
471*495ae853SAndroid Build Coastguard Worker ps_proc->u4_csbp,
472*495ae853SAndroid Build Coastguard Worker &ps_proc->s_left_mb_pu,
473*495ae853SAndroid Build Coastguard Worker ps_top_row_pu,
474*495ae853SAndroid Build Coastguard Worker ps_proc->ps_pu);
475*495ae853SAndroid Build Coastguard Worker }
476*495ae853SAndroid Build Coastguard Worker
477*495ae853SAndroid Build Coastguard Worker return ;
478*495ae853SAndroid Build Coastguard Worker }
479*495ae853SAndroid Build Coastguard Worker
480*495ae853SAndroid Build Coastguard Worker /**
481*495ae853SAndroid Build Coastguard Worker *******************************************************************************
482*495ae853SAndroid Build Coastguard Worker *
483*495ae853SAndroid Build Coastguard Worker * @brief This function performs deblocking of top horizontal edge
484*495ae853SAndroid Build Coastguard Worker *
485*495ae853SAndroid Build Coastguard Worker * @par Description:
486*495ae853SAndroid Build Coastguard Worker * This function performs deblocking of top horizontal edge
487*495ae853SAndroid Build Coastguard Worker *
488*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec
489*495ae853SAndroid Build Coastguard Worker * pointer to codec context
490*495ae853SAndroid Build Coastguard Worker *
491*495ae853SAndroid Build Coastguard Worker * @param[in] ps_proc
492*495ae853SAndroid Build Coastguard Worker * pointer to proc context
493*495ae853SAndroid Build Coastguard Worker *
494*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_mb_qp
495*495ae853SAndroid Build Coastguard Worker * pointer to mb quantization param
496*495ae853SAndroid Build Coastguard Worker *
497*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_cur_pic_luma
498*495ae853SAndroid Build Coastguard Worker * pointer to recon buffer luma
499*495ae853SAndroid Build Coastguard Worker *
500*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_cur_pic_chroma
501*495ae853SAndroid Build Coastguard Worker * pointer to recon buffer chroma
502*495ae853SAndroid Build Coastguard Worker *
503*495ae853SAndroid Build Coastguard Worker * @param[in] pu4_pic_horz_bs
504*495ae853SAndroid Build Coastguard Worker * pointer to horizontal blocking strength
505*495ae853SAndroid Build Coastguard Worker *
506*495ae853SAndroid Build Coastguard Worker * @returns none
507*495ae853SAndroid Build Coastguard Worker *
508*495ae853SAndroid Build Coastguard Worker * @remarks none
509*495ae853SAndroid Build Coastguard Worker *
510*495ae853SAndroid Build Coastguard Worker *******************************************************************************
511*495ae853SAndroid Build Coastguard Worker */
ih264e_filter_top_edge(codec_t * ps_codec,process_ctxt_t * ps_proc,UWORD8 * pu1_mb_qp,UWORD8 * pu1_cur_pic_luma,UWORD8 * pu1_cur_pic_chroma,UWORD32 * pu4_pic_horz_bs)512*495ae853SAndroid Build Coastguard Worker static void ih264e_filter_top_edge(codec_t *ps_codec,
513*495ae853SAndroid Build Coastguard Worker process_ctxt_t *ps_proc,
514*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_mb_qp,
515*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_luma,
516*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_chroma,
517*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_horz_bs)
518*495ae853SAndroid Build Coastguard Worker {
519*495ae853SAndroid Build Coastguard Worker /* strd */
520*495ae853SAndroid Build Coastguard Worker WORD32 i4_rec_strd = ps_proc->i4_rec_strd;
521*495ae853SAndroid Build Coastguard Worker
522*495ae853SAndroid Build Coastguard Worker /* deblk params */
523*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_luma, u4_beta_luma, u4_qp_luma, u4_idx_A_luma, u4_idx_B_luma, u4_qp_p, u4_qp_q;
524*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_chroma, u4_beta_chroma, u4_qp_chroma, u4_idx_A_chroma, u4_idx_B_chroma;
525*495ae853SAndroid Build Coastguard Worker
526*495ae853SAndroid Build Coastguard Worker /* collect qp of left & top mb */
527*495ae853SAndroid Build Coastguard Worker u4_qp_p = pu1_mb_qp[-ps_proc->i4_wd_mbs];
528*495ae853SAndroid Build Coastguard Worker u4_qp_q = pu1_mb_qp[0];
529*495ae853SAndroid Build Coastguard Worker
530*495ae853SAndroid Build Coastguard Worker /********/
531*495ae853SAndroid Build Coastguard Worker /* luma */
532*495ae853SAndroid Build Coastguard Worker /********/
533*495ae853SAndroid Build Coastguard Worker u4_qp_luma = (u4_qp_p + u4_qp_q + 1) >> 1;
534*495ae853SAndroid Build Coastguard Worker
535*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header */
536*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
537*495ae853SAndroid Build Coastguard Worker
538*495ae853SAndroid Build Coastguard Worker
539*495ae853SAndroid Build Coastguard Worker u4_idx_A_luma = MIN(51, u4_qp_luma + 0);
540*495ae853SAndroid Build Coastguard Worker u4_idx_B_luma = MIN(51, u4_qp_luma + 0);
541*495ae853SAndroid Build Coastguard Worker
542*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
543*495ae853SAndroid Build Coastguard Worker u4_alpha_luma = gu1_ih264_alpha_table[u4_idx_A_luma];
544*495ae853SAndroid Build Coastguard Worker u4_beta_luma = gu1_ih264_beta_table[u4_idx_B_luma];
545*495ae853SAndroid Build Coastguard Worker
546*495ae853SAndroid Build Coastguard Worker /**********/
547*495ae853SAndroid Build Coastguard Worker /* chroma */
548*495ae853SAndroid Build Coastguard Worker /**********/
549*495ae853SAndroid Build Coastguard Worker u4_qp_chroma = (gu1_qpc_fqpi[u4_qp_p] + gu1_qpc_fqpi[u4_qp_q] + 1) >> 1;
550*495ae853SAndroid Build Coastguard Worker
551*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header */
552*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
553*495ae853SAndroid Build Coastguard Worker
554*495ae853SAndroid Build Coastguard Worker
555*495ae853SAndroid Build Coastguard Worker u4_idx_A_chroma = MIN(51, u4_qp_chroma + 0);
556*495ae853SAndroid Build Coastguard Worker u4_idx_B_chroma = MIN(51, u4_qp_chroma + 0);
557*495ae853SAndroid Build Coastguard Worker
558*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
559*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma = gu1_ih264_alpha_table[u4_idx_A_chroma];
560*495ae853SAndroid Build Coastguard Worker u4_beta_chroma = gu1_ih264_beta_table[u4_idx_B_chroma];
561*495ae853SAndroid Build Coastguard Worker
562*495ae853SAndroid Build Coastguard Worker /* deblk edge */
563*495ae853SAndroid Build Coastguard Worker /* top Horizontal edge - allowed to be deblocked ? */
564*495ae853SAndroid Build Coastguard Worker if (pu4_pic_horz_bs[0] == 0x04040404)
565*495ae853SAndroid Build Coastguard Worker {
566*495ae853SAndroid Build Coastguard Worker /* strong filter */
567*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bs4(pu1_cur_pic_luma, i4_rec_strd, u4_alpha_luma, u4_beta_luma);
568*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_horz_bs4(pu1_cur_pic_chroma, i4_rec_strd, u4_alpha_chroma, u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma);
569*495ae853SAndroid Build Coastguard Worker }
570*495ae853SAndroid Build Coastguard Worker else
571*495ae853SAndroid Build Coastguard Worker {
572*495ae853SAndroid Build Coastguard Worker /* normal filter */
573*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bslt4(pu1_cur_pic_luma, i4_rec_strd, u4_alpha_luma,
574*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_horz_bs[0],
575*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
576*495ae853SAndroid Build Coastguard Worker
577*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_horz_bslt4(pu1_cur_pic_chroma, i4_rec_strd, u4_alpha_chroma,
578*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma, pu4_pic_horz_bs[0],
579*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_chroma], gu1_ih264_clip_table[u4_idx_A_chroma]);
580*495ae853SAndroid Build Coastguard Worker }
581*495ae853SAndroid Build Coastguard Worker }
582*495ae853SAndroid Build Coastguard Worker
583*495ae853SAndroid Build Coastguard Worker /**
584*495ae853SAndroid Build Coastguard Worker *******************************************************************************
585*495ae853SAndroid Build Coastguard Worker *
586*495ae853SAndroid Build Coastguard Worker * @brief This function performs deblocking of left vertical edge
587*495ae853SAndroid Build Coastguard Worker *
588*495ae853SAndroid Build Coastguard Worker * @par Description:
589*495ae853SAndroid Build Coastguard Worker * This function performs deblocking of top horizontal edge
590*495ae853SAndroid Build Coastguard Worker *
591*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec
592*495ae853SAndroid Build Coastguard Worker * pointer to codec context
593*495ae853SAndroid Build Coastguard Worker *
594*495ae853SAndroid Build Coastguard Worker * @param[in] ps_proc
595*495ae853SAndroid Build Coastguard Worker * pointer to proc context
596*495ae853SAndroid Build Coastguard Worker *
597*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_mb_qp
598*495ae853SAndroid Build Coastguard Worker * pointer to mb quantization param
599*495ae853SAndroid Build Coastguard Worker *
600*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_cur_pic_luma
601*495ae853SAndroid Build Coastguard Worker * pointer to recon buffer luma
602*495ae853SAndroid Build Coastguard Worker *
603*495ae853SAndroid Build Coastguard Worker * @param[in] pu1_cur_pic_chroma
604*495ae853SAndroid Build Coastguard Worker * pointer to recon buffer chroma
605*495ae853SAndroid Build Coastguard Worker *
606*495ae853SAndroid Build Coastguard Worker * @param[in] pu4_pic_vert_bs
607*495ae853SAndroid Build Coastguard Worker * pointer to vertical blocking strength
608*495ae853SAndroid Build Coastguard Worker *
609*495ae853SAndroid Build Coastguard Worker * @returns none
610*495ae853SAndroid Build Coastguard Worker *
611*495ae853SAndroid Build Coastguard Worker * @remarks none
612*495ae853SAndroid Build Coastguard Worker *
613*495ae853SAndroid Build Coastguard Worker *******************************************************************************
614*495ae853SAndroid Build Coastguard Worker */
ih264e_filter_left_edge(codec_t * ps_codec,process_ctxt_t * ps_proc,UWORD8 * pu1_mb_qp,UWORD8 * pu1_cur_pic_luma,UWORD8 * pu1_cur_pic_chroma,UWORD32 * pu4_pic_vert_bs)615*495ae853SAndroid Build Coastguard Worker static void ih264e_filter_left_edge(codec_t *ps_codec,
616*495ae853SAndroid Build Coastguard Worker process_ctxt_t *ps_proc,
617*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_mb_qp,
618*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_luma,
619*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_chroma,
620*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_vert_bs)
621*495ae853SAndroid Build Coastguard Worker {
622*495ae853SAndroid Build Coastguard Worker /* strd */
623*495ae853SAndroid Build Coastguard Worker WORD32 i4_rec_strd = ps_proc->i4_rec_strd;
624*495ae853SAndroid Build Coastguard Worker
625*495ae853SAndroid Build Coastguard Worker /* deblk params */
626*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_luma, u4_beta_luma, u4_qp_luma, u4_idx_A_luma, u4_idx_B_luma, u4_qp_p, u4_qp_q;
627*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_chroma, u4_beta_chroma, u4_qp_chroma, u4_idx_A_chroma, u4_idx_B_chroma;
628*495ae853SAndroid Build Coastguard Worker
629*495ae853SAndroid Build Coastguard Worker /* collect qp of left & curr mb */
630*495ae853SAndroid Build Coastguard Worker u4_qp_p = pu1_mb_qp[-1];
631*495ae853SAndroid Build Coastguard Worker u4_qp_q = pu1_mb_qp[0];
632*495ae853SAndroid Build Coastguard Worker
633*495ae853SAndroid Build Coastguard Worker /********/
634*495ae853SAndroid Build Coastguard Worker /* luma */
635*495ae853SAndroid Build Coastguard Worker /********/
636*495ae853SAndroid Build Coastguard Worker u4_qp_luma = (u4_qp_p + u4_qp_q + 1) >> 1;
637*495ae853SAndroid Build Coastguard Worker
638*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header */
639*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
640*495ae853SAndroid Build Coastguard Worker
641*495ae853SAndroid Build Coastguard Worker
642*495ae853SAndroid Build Coastguard Worker u4_idx_A_luma = MIN(51, u4_qp_luma + 0);
643*495ae853SAndroid Build Coastguard Worker u4_idx_B_luma = MIN(51, u4_qp_luma + 0);
644*495ae853SAndroid Build Coastguard Worker
645*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
646*495ae853SAndroid Build Coastguard Worker u4_alpha_luma = gu1_ih264_alpha_table[u4_idx_A_luma];
647*495ae853SAndroid Build Coastguard Worker u4_beta_luma = gu1_ih264_beta_table[u4_idx_B_luma];
648*495ae853SAndroid Build Coastguard Worker
649*495ae853SAndroid Build Coastguard Worker /**********/
650*495ae853SAndroid Build Coastguard Worker /* chroma */
651*495ae853SAndroid Build Coastguard Worker /**********/
652*495ae853SAndroid Build Coastguard Worker u4_qp_chroma = (gu1_qpc_fqpi[u4_qp_p] + gu1_qpc_fqpi[u4_qp_q] + 1) >> 1;
653*495ae853SAndroid Build Coastguard Worker
654*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header */
655*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
656*495ae853SAndroid Build Coastguard Worker
657*495ae853SAndroid Build Coastguard Worker
658*495ae853SAndroid Build Coastguard Worker u4_idx_A_chroma = MIN(51, u4_qp_chroma + 0);
659*495ae853SAndroid Build Coastguard Worker u4_idx_B_chroma = MIN(51, u4_qp_chroma + 0);
660*495ae853SAndroid Build Coastguard Worker
661*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
662*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma = gu1_ih264_alpha_table[u4_idx_A_chroma];
663*495ae853SAndroid Build Coastguard Worker u4_beta_chroma = gu1_ih264_beta_table[u4_idx_B_chroma];
664*495ae853SAndroid Build Coastguard Worker
665*495ae853SAndroid Build Coastguard Worker /* deblk edge */
666*495ae853SAndroid Build Coastguard Worker if (pu4_pic_vert_bs[0] == 0x04040404)
667*495ae853SAndroid Build Coastguard Worker {
668*495ae853SAndroid Build Coastguard Worker /* strong filter */
669*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bs4(pu1_cur_pic_luma, i4_rec_strd, u4_alpha_luma, u4_beta_luma);
670*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_vert_bs4(pu1_cur_pic_chroma, i4_rec_strd, u4_alpha_chroma, u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma);
671*495ae853SAndroid Build Coastguard Worker }
672*495ae853SAndroid Build Coastguard Worker else
673*495ae853SAndroid Build Coastguard Worker {
674*495ae853SAndroid Build Coastguard Worker /* normal filter */
675*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bslt4(pu1_cur_pic_luma, i4_rec_strd,
676*495ae853SAndroid Build Coastguard Worker u4_alpha_luma, u4_beta_luma,
677*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs[0],
678*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
679*495ae853SAndroid Build Coastguard Worker
680*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_vert_bslt4(pu1_cur_pic_chroma, i4_rec_strd, u4_alpha_chroma,
681*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma, pu4_pic_vert_bs[0],
682*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_chroma], gu1_ih264_clip_table[u4_idx_A_chroma]);
683*495ae853SAndroid Build Coastguard Worker }
684*495ae853SAndroid Build Coastguard Worker }
685*495ae853SAndroid Build Coastguard Worker
686*495ae853SAndroid Build Coastguard Worker /**
687*495ae853SAndroid Build Coastguard Worker *******************************************************************************
688*495ae853SAndroid Build Coastguard Worker *
689*495ae853SAndroid Build Coastguard Worker * @brief This function performs deblocking on an mb
690*495ae853SAndroid Build Coastguard Worker *
691*495ae853SAndroid Build Coastguard Worker * @par Description:
692*495ae853SAndroid Build Coastguard Worker * This function performs deblocking on an mb
693*495ae853SAndroid Build Coastguard Worker *
694*495ae853SAndroid Build Coastguard Worker * @param[in] ps_proc
695*495ae853SAndroid Build Coastguard Worker * process context corresponding to the job
696*495ae853SAndroid Build Coastguard Worker *
697*495ae853SAndroid Build Coastguard Worker * @param[in] ps_deblk
698*495ae853SAndroid Build Coastguard Worker * pointer to deblock context
699*495ae853SAndroid Build Coastguard Worker *
700*495ae853SAndroid Build Coastguard Worker * @returns none
701*495ae853SAndroid Build Coastguard Worker *
702*495ae853SAndroid Build Coastguard Worker * @remarks none
703*495ae853SAndroid Build Coastguard Worker *
704*495ae853SAndroid Build Coastguard Worker *******************************************************************************
705*495ae853SAndroid Build Coastguard Worker */
ih264e_deblock_mb(process_ctxt_t * ps_proc,deblk_ctxt_t * ps_deblk)706*495ae853SAndroid Build Coastguard Worker void ih264e_deblock_mb(process_ctxt_t *ps_proc, deblk_ctxt_t * ps_deblk)
707*495ae853SAndroid Build Coastguard Worker {
708*495ae853SAndroid Build Coastguard Worker /* codec ctxt */
709*495ae853SAndroid Build Coastguard Worker codec_t *ps_codec = ps_proc->ps_codec;
710*495ae853SAndroid Build Coastguard Worker
711*495ae853SAndroid Build Coastguard Worker /* ngbr availability */
712*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mb_a, u1_mb_b;
713*495ae853SAndroid Build Coastguard Worker
714*495ae853SAndroid Build Coastguard Worker /* mb indices */
715*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_x = ps_deblk->i4_mb_x, i4_mb_y = ps_deblk->i4_mb_y;
716*495ae853SAndroid Build Coastguard Worker
717*495ae853SAndroid Build Coastguard Worker /* pic qp ptr */
718*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_pic_qp = ps_deblk->s_bs_ctxt.pu1_pic_qp;
719*495ae853SAndroid Build Coastguard Worker
720*495ae853SAndroid Build Coastguard Worker /* vertical blocking strength */
721*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_vert_bs = ps_deblk->s_bs_ctxt.pu4_pic_vert_bs;
722*495ae853SAndroid Build Coastguard Worker
723*495ae853SAndroid Build Coastguard Worker /* horizontal blocking strength */
724*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_pic_horz_bs = ps_deblk->s_bs_ctxt.pu4_pic_horz_bs;
725*495ae853SAndroid Build Coastguard Worker
726*495ae853SAndroid Build Coastguard Worker /* src buffers luma */
727*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_luma = ps_deblk->pu1_cur_pic_luma;
728*495ae853SAndroid Build Coastguard Worker
729*495ae853SAndroid Build Coastguard Worker /* src buffers chroma */
730*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cur_pic_chroma = ps_deblk->pu1_cur_pic_chroma;
731*495ae853SAndroid Build Coastguard Worker
732*495ae853SAndroid Build Coastguard Worker /* strd */
733*495ae853SAndroid Build Coastguard Worker WORD32 i4_rec_strd = ps_proc->i4_rec_strd;
734*495ae853SAndroid Build Coastguard Worker
735*495ae853SAndroid Build Coastguard Worker /* deblk params */
736*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_luma, u4_beta_luma, u4_qp_luma, u4_idx_A_luma, u4_idx_B_luma;
737*495ae853SAndroid Build Coastguard Worker UWORD32 u4_alpha_chroma, u4_beta_chroma, u4_qp_chroma, u4_idx_A_chroma, u4_idx_B_chroma;
738*495ae853SAndroid Build Coastguard Worker
739*495ae853SAndroid Build Coastguard Worker /* temp var */
740*495ae853SAndroid Build Coastguard Worker UWORD32 push_ptr = (i4_mb_y * ps_proc->i4_wd_mbs) + i4_mb_x;
741*495ae853SAndroid Build Coastguard Worker
742*495ae853SAndroid Build Coastguard Worker /* derive neighbor availability */
743*495ae853SAndroid Build Coastguard Worker /* In slice mode the edges of mbs that lie on the slice boundary are not deblocked */
744*495ae853SAndroid Build Coastguard Worker /* deblocking filter idc '2' */
745*495ae853SAndroid Build Coastguard Worker if (ps_codec->s_cfg.e_slice_mode != IVE_SLICE_MODE_NONE)
746*495ae853SAndroid Build Coastguard Worker {
747*495ae853SAndroid Build Coastguard Worker /* slice index */
748*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_slice_idx = ps_deblk->pu1_slice_idx;
749*495ae853SAndroid Build Coastguard Worker
750*495ae853SAndroid Build Coastguard Worker pu1_slice_idx += (i4_mb_y * ps_proc->i4_wd_mbs);
751*495ae853SAndroid Build Coastguard Worker /* left macroblock availability */
752*495ae853SAndroid Build Coastguard Worker u1_mb_a = (i4_mb_x == 0 ||
753*495ae853SAndroid Build Coastguard Worker (pu1_slice_idx[i4_mb_x - 1 ] != pu1_slice_idx[i4_mb_x]))? 0 : 1;
754*495ae853SAndroid Build Coastguard Worker /* top macroblock availability */
755*495ae853SAndroid Build Coastguard Worker u1_mb_b = (i4_mb_y == 0 ||
756*495ae853SAndroid Build Coastguard Worker (pu1_slice_idx[i4_mb_x-ps_proc->i4_wd_mbs] != pu1_slice_idx[i4_mb_x]))? 0 : 1;
757*495ae853SAndroid Build Coastguard Worker }
758*495ae853SAndroid Build Coastguard Worker else
759*495ae853SAndroid Build Coastguard Worker {
760*495ae853SAndroid Build Coastguard Worker /* left macroblock availability */
761*495ae853SAndroid Build Coastguard Worker u1_mb_a = (i4_mb_x == 0)? 0 : 1;
762*495ae853SAndroid Build Coastguard Worker /* top macroblock availability */
763*495ae853SAndroid Build Coastguard Worker u1_mb_b = (i4_mb_y == 0)? 0 : 1;
764*495ae853SAndroid Build Coastguard Worker }
765*495ae853SAndroid Build Coastguard Worker
766*495ae853SAndroid Build Coastguard Worker pu1_pic_qp += push_ptr;
767*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs += push_ptr * 4;
768*495ae853SAndroid Build Coastguard Worker pu4_pic_horz_bs += push_ptr * 4;
769*495ae853SAndroid Build Coastguard Worker
770*495ae853SAndroid Build Coastguard Worker /********/
771*495ae853SAndroid Build Coastguard Worker /* luma */
772*495ae853SAndroid Build Coastguard Worker /********/
773*495ae853SAndroid Build Coastguard Worker u4_qp_luma = pu1_pic_qp[0];
774*495ae853SAndroid Build Coastguard Worker
775*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header */
776*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
777*495ae853SAndroid Build Coastguard Worker
778*495ae853SAndroid Build Coastguard Worker
779*495ae853SAndroid Build Coastguard Worker u4_idx_A_luma = MIN(51, u4_qp_luma + 0);
780*495ae853SAndroid Build Coastguard Worker u4_idx_B_luma = MIN(51, u4_qp_luma + 0);
781*495ae853SAndroid Build Coastguard Worker
782*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
783*495ae853SAndroid Build Coastguard Worker u4_alpha_luma = gu1_ih264_alpha_table[u4_idx_A_luma];
784*495ae853SAndroid Build Coastguard Worker u4_beta_luma = gu1_ih264_beta_table[u4_idx_B_luma];
785*495ae853SAndroid Build Coastguard Worker
786*495ae853SAndroid Build Coastguard Worker /**********/
787*495ae853SAndroid Build Coastguard Worker /* chroma */
788*495ae853SAndroid Build Coastguard Worker /**********/
789*495ae853SAndroid Build Coastguard Worker u4_qp_chroma = gu1_qpc_fqpi[u4_qp_luma];
790*495ae853SAndroid Build Coastguard Worker
791*495ae853SAndroid Build Coastguard Worker /* filter offset A and filter offset B have to be received from slice header */
792*495ae853SAndroid Build Coastguard Worker /* TODO : for now lets set these offsets as zero */
793*495ae853SAndroid Build Coastguard Worker
794*495ae853SAndroid Build Coastguard Worker
795*495ae853SAndroid Build Coastguard Worker u4_idx_A_chroma = MIN(51, u4_qp_chroma + 0);
796*495ae853SAndroid Build Coastguard Worker u4_idx_B_chroma = MIN(51, u4_qp_chroma + 0);
797*495ae853SAndroid Build Coastguard Worker
798*495ae853SAndroid Build Coastguard Worker /* alpha, beta computation */
799*495ae853SAndroid Build Coastguard Worker u4_alpha_chroma = gu1_ih264_alpha_table[u4_idx_A_chroma];
800*495ae853SAndroid Build Coastguard Worker u4_beta_chroma = gu1_ih264_beta_table[u4_idx_B_chroma];
801*495ae853SAndroid Build Coastguard Worker
802*495ae853SAndroid Build Coastguard Worker /* Deblock vertical edges */
803*495ae853SAndroid Build Coastguard Worker /* left vertical edge 0 - allowed to be deblocked ? */
804*495ae853SAndroid Build Coastguard Worker if (u1_mb_a)
805*495ae853SAndroid Build Coastguard Worker {
806*495ae853SAndroid Build Coastguard Worker ih264e_filter_left_edge(ps_codec, ps_proc, pu1_pic_qp, pu1_cur_pic_luma, pu1_cur_pic_chroma, pu4_pic_vert_bs);
807*495ae853SAndroid Build Coastguard Worker }
808*495ae853SAndroid Build Coastguard Worker
809*495ae853SAndroid Build Coastguard Worker /* vertical edge 1 */
810*495ae853SAndroid Build Coastguard Worker if (pu4_pic_vert_bs[1] == 0x04040404)
811*495ae853SAndroid Build Coastguard Worker {
812*495ae853SAndroid Build Coastguard Worker /* strong filter */
813*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bs4(pu1_cur_pic_luma + 4, i4_rec_strd, u4_alpha_luma, u4_beta_luma);
814*495ae853SAndroid Build Coastguard Worker }
815*495ae853SAndroid Build Coastguard Worker else
816*495ae853SAndroid Build Coastguard Worker {
817*495ae853SAndroid Build Coastguard Worker /* normal filter */
818*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bslt4(pu1_cur_pic_luma + 4, i4_rec_strd,
819*495ae853SAndroid Build Coastguard Worker u4_alpha_luma, u4_beta_luma,
820*495ae853SAndroid Build Coastguard Worker pu4_pic_vert_bs[1],
821*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
822*495ae853SAndroid Build Coastguard Worker }
823*495ae853SAndroid Build Coastguard Worker
824*495ae853SAndroid Build Coastguard Worker /* vertical edge 2 */
825*495ae853SAndroid Build Coastguard Worker if (pu4_pic_vert_bs[2] == 0x04040404)
826*495ae853SAndroid Build Coastguard Worker {
827*495ae853SAndroid Build Coastguard Worker /* strong filter */
828*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bs4(pu1_cur_pic_luma + 8, i4_rec_strd, u4_alpha_luma, u4_beta_luma);
829*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_vert_bs4(pu1_cur_pic_chroma + 8, i4_rec_strd, u4_alpha_chroma, u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma);
830*495ae853SAndroid Build Coastguard Worker }
831*495ae853SAndroid Build Coastguard Worker else
832*495ae853SAndroid Build Coastguard Worker {
833*495ae853SAndroid Build Coastguard Worker /* normal filter */
834*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bslt4(pu1_cur_pic_luma + 8, i4_rec_strd, u4_alpha_luma,
835*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_vert_bs[2],
836*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
837*495ae853SAndroid Build Coastguard Worker
838*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_vert_bslt4(pu1_cur_pic_chroma + 8, i4_rec_strd, u4_alpha_chroma,
839*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma, pu4_pic_vert_bs[2],
840*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_chroma], gu1_ih264_clip_table[u4_idx_A_chroma]);
841*495ae853SAndroid Build Coastguard Worker }
842*495ae853SAndroid Build Coastguard Worker
843*495ae853SAndroid Build Coastguard Worker /* vertical edge 3 */
844*495ae853SAndroid Build Coastguard Worker if (pu4_pic_vert_bs[3] == 0x04040404)
845*495ae853SAndroid Build Coastguard Worker {
846*495ae853SAndroid Build Coastguard Worker /* strong filter */
847*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bs4(pu1_cur_pic_luma + 12, i4_rec_strd, u4_alpha_luma, u4_beta_luma);
848*495ae853SAndroid Build Coastguard Worker }
849*495ae853SAndroid Build Coastguard Worker else
850*495ae853SAndroid Build Coastguard Worker {
851*495ae853SAndroid Build Coastguard Worker /* normal filter */
852*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_vert_bslt4(pu1_cur_pic_luma + 12, i4_rec_strd, u4_alpha_luma,
853*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_vert_bs[3],
854*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
855*495ae853SAndroid Build Coastguard Worker }
856*495ae853SAndroid Build Coastguard Worker
857*495ae853SAndroid Build Coastguard Worker /* Deblock Horizontal edges */
858*495ae853SAndroid Build Coastguard Worker /* Horizontal edge 0 */
859*495ae853SAndroid Build Coastguard Worker if (u1_mb_b)
860*495ae853SAndroid Build Coastguard Worker {
861*495ae853SAndroid Build Coastguard Worker ih264e_filter_top_edge(ps_codec, ps_proc, pu1_pic_qp, pu1_cur_pic_luma, pu1_cur_pic_chroma, pu4_pic_horz_bs);
862*495ae853SAndroid Build Coastguard Worker }
863*495ae853SAndroid Build Coastguard Worker
864*495ae853SAndroid Build Coastguard Worker /* horizontal edge 1 */
865*495ae853SAndroid Build Coastguard Worker if (pu4_pic_horz_bs[1] == 0x04040404)
866*495ae853SAndroid Build Coastguard Worker {
867*495ae853SAndroid Build Coastguard Worker /* strong filter */
868*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bs4(pu1_cur_pic_luma + 4 * i4_rec_strd, i4_rec_strd, u4_alpha_luma, u4_beta_luma);
869*495ae853SAndroid Build Coastguard Worker }
870*495ae853SAndroid Build Coastguard Worker else
871*495ae853SAndroid Build Coastguard Worker {
872*495ae853SAndroid Build Coastguard Worker /* normal filter */
873*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bslt4(pu1_cur_pic_luma + 4 * i4_rec_strd, i4_rec_strd, u4_alpha_luma,
874*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_horz_bs[1],
875*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
876*495ae853SAndroid Build Coastguard Worker }
877*495ae853SAndroid Build Coastguard Worker
878*495ae853SAndroid Build Coastguard Worker /* horizontal edge 2 */
879*495ae853SAndroid Build Coastguard Worker if (pu4_pic_horz_bs[2] == 0x04040404)
880*495ae853SAndroid Build Coastguard Worker {
881*495ae853SAndroid Build Coastguard Worker /* strong filter */
882*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bs4(pu1_cur_pic_luma + 8 * i4_rec_strd, i4_rec_strd, u4_alpha_luma, u4_beta_luma);
883*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_horz_bs4(pu1_cur_pic_chroma + 4 * i4_rec_strd, i4_rec_strd, u4_alpha_chroma, u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma);
884*495ae853SAndroid Build Coastguard Worker }
885*495ae853SAndroid Build Coastguard Worker else
886*495ae853SAndroid Build Coastguard Worker {
887*495ae853SAndroid Build Coastguard Worker /* normal filter */
888*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bslt4(pu1_cur_pic_luma + 8 * i4_rec_strd, i4_rec_strd, u4_alpha_luma,
889*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_horz_bs[2],
890*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
891*495ae853SAndroid Build Coastguard Worker
892*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_chroma_horz_bslt4(pu1_cur_pic_chroma + 4 * i4_rec_strd, i4_rec_strd, u4_alpha_chroma,
893*495ae853SAndroid Build Coastguard Worker u4_beta_chroma, u4_alpha_chroma, u4_beta_chroma, pu4_pic_horz_bs[2],
894*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_chroma], gu1_ih264_clip_table[u4_idx_A_chroma]);
895*495ae853SAndroid Build Coastguard Worker }
896*495ae853SAndroid Build Coastguard Worker
897*495ae853SAndroid Build Coastguard Worker /* horizontal edge 3 */
898*495ae853SAndroid Build Coastguard Worker if (pu4_pic_horz_bs[3] == 0x04040404)
899*495ae853SAndroid Build Coastguard Worker {
900*495ae853SAndroid Build Coastguard Worker /* strong filter */
901*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bs4(pu1_cur_pic_luma + 12 * i4_rec_strd, i4_rec_strd, u4_alpha_luma, u4_beta_luma);
902*495ae853SAndroid Build Coastguard Worker }
903*495ae853SAndroid Build Coastguard Worker else
904*495ae853SAndroid Build Coastguard Worker {
905*495ae853SAndroid Build Coastguard Worker /* normal filter */
906*495ae853SAndroid Build Coastguard Worker ps_codec->pf_deblk_luma_horz_bslt4(pu1_cur_pic_luma + 12 * i4_rec_strd, i4_rec_strd, u4_alpha_luma,
907*495ae853SAndroid Build Coastguard Worker u4_beta_luma, pu4_pic_horz_bs[3],
908*495ae853SAndroid Build Coastguard Worker gu1_ih264_clip_table[u4_idx_A_luma]);
909*495ae853SAndroid Build Coastguard Worker }
910*495ae853SAndroid Build Coastguard Worker
911*495ae853SAndroid Build Coastguard Worker return ;
912*495ae853SAndroid Build Coastguard Worker }
913