xref: /aosp_15_r20/external/libavc/decoder/ih264d_compute_bs.c (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker  *
3*495ae853SAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker  *
5*495ae853SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker  *
9*495ae853SAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker  *
11*495ae853SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker  * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker  *
17*495ae853SAndroid Build Coastguard Worker  *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker 
21*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
22*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
23*495ae853SAndroid Build Coastguard Worker #include "ih264_platform_macros.h"
24*495ae853SAndroid Build Coastguard Worker #include "ih264d_structs.h"
25*495ae853SAndroid Build Coastguard Worker #include "ih264d_defs.h"
26*495ae853SAndroid Build Coastguard Worker #include "ih264d_deblocking.h"
27*495ae853SAndroid Build Coastguard Worker #include "string.h"
28*495ae853SAndroid Build Coastguard Worker #include "ih264d_debug.h"
29*495ae853SAndroid Build Coastguard Worker #include "ih264d_tables.h"
30*495ae853SAndroid Build Coastguard Worker 
ih264d_update_csbp_8x8(UWORD16 u2_luma_csbp)31*495ae853SAndroid Build Coastguard Worker UWORD16 ih264d_update_csbp_8x8(UWORD16 u2_luma_csbp)
32*495ae853SAndroid Build Coastguard Worker {
33*495ae853SAndroid Build Coastguard Worker     UWORD16 u2_mod_csbp;
34*495ae853SAndroid Build Coastguard Worker 
35*495ae853SAndroid Build Coastguard Worker     u2_mod_csbp = u2_luma_csbp;
36*495ae853SAndroid Build Coastguard Worker 
37*495ae853SAndroid Build Coastguard Worker     if(u2_mod_csbp & 0x0033)
38*495ae853SAndroid Build Coastguard Worker     {
39*495ae853SAndroid Build Coastguard Worker         u2_mod_csbp |= 0x0033;
40*495ae853SAndroid Build Coastguard Worker     }
41*495ae853SAndroid Build Coastguard Worker 
42*495ae853SAndroid Build Coastguard Worker     if(u2_mod_csbp & 0x00CC)
43*495ae853SAndroid Build Coastguard Worker     {
44*495ae853SAndroid Build Coastguard Worker         u2_mod_csbp |= 0x00CC;
45*495ae853SAndroid Build Coastguard Worker     }
46*495ae853SAndroid Build Coastguard Worker 
47*495ae853SAndroid Build Coastguard Worker     if(u2_mod_csbp & 0x3300)
48*495ae853SAndroid Build Coastguard Worker     {
49*495ae853SAndroid Build Coastguard Worker         u2_mod_csbp |= 0x3300;
50*495ae853SAndroid Build Coastguard Worker     }
51*495ae853SAndroid Build Coastguard Worker 
52*495ae853SAndroid Build Coastguard Worker     if(u2_mod_csbp & 0xCC00)
53*495ae853SAndroid Build Coastguard Worker     {
54*495ae853SAndroid Build Coastguard Worker         u2_mod_csbp |= 0xCC00;
55*495ae853SAndroid Build Coastguard Worker     }
56*495ae853SAndroid Build Coastguard Worker 
57*495ae853SAndroid Build Coastguard Worker     return u2_mod_csbp;
58*495ae853SAndroid Build Coastguard Worker }
59*495ae853SAndroid Build Coastguard Worker 
60*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
61*495ae853SAndroid Build Coastguard Worker /*                                                                           */
62*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_fill_bs2_horz_vert                                       */
63*495ae853SAndroid Build Coastguard Worker /*                                                                           */
64*495ae853SAndroid Build Coastguard Worker /*  Description   : This function fills boundray strength (=2) for all horz  */
65*495ae853SAndroid Build Coastguard Worker /*                  and vert edges of current mb based on coded sub block    */
66*495ae853SAndroid Build Coastguard Worker /*                  pattern of current, top and left mb                      */
67*495ae853SAndroid Build Coastguard Worker /*  Inputs        :                                                          */
68*495ae853SAndroid Build Coastguard Worker /*                  pu4_bs : Base pointer of  BS table which gets updated    */
69*495ae853SAndroid Build Coastguard Worker /*                  u4_left_mb_csbp : left mb's coded sub block pattern      */
70*495ae853SAndroid Build Coastguard Worker /*                  u4_top_mb_csbp : top mb's coded sub block pattern        */
71*495ae853SAndroid Build Coastguard Worker /*                  u4_cur_mb_csbp : current mb's coded sub block pattern    */
72*495ae853SAndroid Build Coastguard Worker /*                                                                           */
73*495ae853SAndroid Build Coastguard Worker /*  Globals       : <Does it use any global variables?>                      */
74*495ae853SAndroid Build Coastguard Worker /*  Processing    :                                                          */
75*495ae853SAndroid Build Coastguard Worker /*                                                                           */
76*495ae853SAndroid Build Coastguard Worker /*              csbp for each 4x4 block in a mb is bit packet in reverse     */
77*495ae853SAndroid Build Coastguard Worker /*              raster scan order for each mb as shown below:                */
78*495ae853SAndroid Build Coastguard Worker /*              15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0.                       */
79*495ae853SAndroid Build Coastguard Worker /*                                                                           */
80*495ae853SAndroid Build Coastguard Worker /*              BS=2 for a 4x4 edge if any of adjacent blocks forming edge   */
81*495ae853SAndroid Build Coastguard Worker /*              are coded. Keeping this in mind, bs=2 for all horz and vert  */
82*495ae853SAndroid Build Coastguard Worker /*              edges can be derived using  a lookup table for each edge     */
83*495ae853SAndroid Build Coastguard Worker /*              after "ORing" the csbp values as follows:                    */
84*495ae853SAndroid Build Coastguard Worker /*              (C means current Mb, T means top mb and L means left mb)     */
85*495ae853SAndroid Build Coastguard Worker /*                                                                           */
86*495ae853SAndroid Build Coastguard Worker /*              All Horz edges:                                              */
87*495ae853SAndroid Build Coastguard Worker /*              15C|14C|13C|12C|11C|10C|9C|8C|7C|6C|5C|4C|3C |2C |1C |0C     */
88*495ae853SAndroid Build Coastguard Worker /*  (or with)   11C|10C| 9C| 8C| 7C|6C |5C|4C|3C|2C|1C|0C|15T|14T|13T|12T    */
89*495ae853SAndroid Build Coastguard Worker /*              -----BS[3]-----|----BS[2]----|---BS[1]---|----BS[0]-----|    */
90*495ae853SAndroid Build Coastguard Worker /*                                                                           */
91*495ae853SAndroid Build Coastguard Worker /*              All Vert edges:                                              */
92*495ae853SAndroid Build Coastguard Worker /*              15C|14C|13C|12C|11C|10C|9C| 8C|7C|6C|5C|4C|3C |2C |1C |0C    */
93*495ae853SAndroid Build Coastguard Worker /*  (or with)   14C|13C|12C|15L|10C| 9C|8C|11L|6C|5C|4C|7L|2C |1C |0C |3L    */
94*495ae853SAndroid Build Coastguard Worker /*              Do 4x4 transpose of resulting pattern to get vertBS[4]-BS[7] */
95*495ae853SAndroid Build Coastguard Worker /*                                                                           */
96*495ae853SAndroid Build Coastguard Worker /*  Outputs       : <What does the function produce?>                        */
97*495ae853SAndroid Build Coastguard Worker /*  Returns       : <What does the function return?>                         */
98*495ae853SAndroid Build Coastguard Worker /*                                                                           */
99*495ae853SAndroid Build Coastguard Worker /*  Issues        : <List any issues or problems with this function>         */
100*495ae853SAndroid Build Coastguard Worker /*                                                                           */
101*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
102*495ae853SAndroid Build Coastguard Worker /*                                                                           */
103*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
104*495ae853SAndroid Build Coastguard Worker /*         16 10 2008   Jay             Draft                                */
105*495ae853SAndroid Build Coastguard Worker /*                                                                           */
106*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
107*495ae853SAndroid Build Coastguard Worker #define CSBP_LEFT_BLOCK_MASK 0x1111
108*495ae853SAndroid Build Coastguard Worker #define CSBP_RIGHT_BLOCK_MASK 0x8888
109*495ae853SAndroid Build Coastguard Worker 
ih264d_fill_bs2_horz_vert(UWORD32 * pu4_bs,WORD32 u4_left_mb_csbp,WORD32 u4_top_mb_csbp,WORD32 u4_cur_mb_csbp,const UWORD32 * pu4_packed_bs2,const UWORD16 * pu2_4x4_v2h_reorder)110*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs2_horz_vert(UWORD32 *pu4_bs, /* Base pointer of BS table */
111*495ae853SAndroid Build Coastguard Worker                                WORD32 u4_left_mb_csbp, /* csbp of left mb */
112*495ae853SAndroid Build Coastguard Worker                                WORD32 u4_top_mb_csbp, /* csbp of top mb */
113*495ae853SAndroid Build Coastguard Worker                                WORD32 u4_cur_mb_csbp, /* csbp of current mb */
114*495ae853SAndroid Build Coastguard Worker                                const UWORD32 *pu4_packed_bs2, const UWORD16 *pu2_4x4_v2h_reorder)
115*495ae853SAndroid Build Coastguard Worker {
116*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
117*495ae853SAndroid Build Coastguard Worker     /*u4_nbr_horz_csbp=11C|10C|9C|8C|7C|6C|5C|4C|3C|2C|1C|0C|15T|14T|13T|12T */
118*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
119*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_nbr_horz_csbp = (u4_cur_mb_csbp << 4) | (u4_top_mb_csbp >> 12);
120*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_horz_bs2_dec = u4_cur_mb_csbp | u4_nbr_horz_csbp;
121*495ae853SAndroid Build Coastguard Worker 
122*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
123*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         */
124*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
125*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_left_mb_masked_csbp = u4_left_mb_csbp & CSBP_RIGHT_BLOCK_MASK;
126*495ae853SAndroid Build Coastguard Worker 
127*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
128*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 */
129*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
130*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_cur_mb_masked_csbp = (u4_cur_mb_csbp << 1)
131*495ae853SAndroid Build Coastguard Worker                     & (~CSBP_LEFT_BLOCK_MASK);
132*495ae853SAndroid Build Coastguard Worker 
133*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
134*495ae853SAndroid Build Coastguard Worker     /*u4_nbr_vert_csbp=14C|13C|12C|15L|10C|9C|8C|11L|6C|5C|4C|7L|2C|1C|0C|3L */
135*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
136*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_nbr_vert_csbp = (u4_cur_mb_masked_csbp)
137*495ae853SAndroid Build Coastguard Worker                     | (u4_left_mb_masked_csbp >> 3);
138*495ae853SAndroid Build Coastguard Worker 
139*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_vert_bs2_dec = u4_cur_mb_csbp | u4_nbr_vert_csbp;
140*495ae853SAndroid Build Coastguard Worker 
141*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_reordered_vert_bs2_dec, u4_temp;
142*495ae853SAndroid Build Coastguard Worker 
143*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
144*495ae853SAndroid Build Coastguard Worker 
145*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
146*495ae853SAndroid Build Coastguard Worker     /* Fill horz edges (0,1,2,3) boundary strengths 2 using look up table    */
147*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
148*495ae853SAndroid Build Coastguard Worker     pu4_bs[0] = pu4_packed_bs2[u4_horz_bs2_dec & 0xF];
149*495ae853SAndroid Build Coastguard Worker     pu4_bs[1] = pu4_packed_bs2[(u4_horz_bs2_dec >> 4) & 0xF];
150*495ae853SAndroid Build Coastguard Worker     pu4_bs[2] = pu4_packed_bs2[(u4_horz_bs2_dec >> 8) & 0xF];
151*495ae853SAndroid Build Coastguard Worker     pu4_bs[3] = pu4_packed_bs2[(u4_horz_bs2_dec >> 12) & 0xF];
152*495ae853SAndroid Build Coastguard Worker 
153*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
154*495ae853SAndroid Build Coastguard Worker     /* Do 4x4 tranpose of u4_vert_bs2_dec by using look up table for reorder */
155*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
156*495ae853SAndroid Build Coastguard Worker     u4_reordered_vert_bs2_dec = pu2_4x4_v2h_reorder[u4_vert_bs2_dec & 0xF];
157*495ae853SAndroid Build Coastguard Worker     u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 4) & 0xF];
158*495ae853SAndroid Build Coastguard Worker     u4_reordered_vert_bs2_dec |= (u4_temp << 1);
159*495ae853SAndroid Build Coastguard Worker     u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 8) & 0xF];
160*495ae853SAndroid Build Coastguard Worker     u4_reordered_vert_bs2_dec |= (u4_temp << 2);
161*495ae853SAndroid Build Coastguard Worker     u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 12) & 0xF];
162*495ae853SAndroid Build Coastguard Worker     u4_reordered_vert_bs2_dec |= (u4_temp << 3);
163*495ae853SAndroid Build Coastguard Worker 
164*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
165*495ae853SAndroid Build Coastguard Worker     /* Fill vert edges (4,5,6,7) boundary strengths 2 using look up table    */
166*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
167*495ae853SAndroid Build Coastguard Worker     pu4_bs[4] = pu4_packed_bs2[u4_reordered_vert_bs2_dec & 0xF];
168*495ae853SAndroid Build Coastguard Worker     pu4_bs[5] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 4) & 0xF];
169*495ae853SAndroid Build Coastguard Worker     pu4_bs[6] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 8) & 0xF];
170*495ae853SAndroid Build Coastguard Worker     pu4_bs[7] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 12) & 0xF];
171*495ae853SAndroid Build Coastguard Worker }
172*495ae853SAndroid Build Coastguard Worker 
173*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
174*495ae853SAndroid Build Coastguard Worker /*                                                                           */
175*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_fill_bs1_16x16mb_pslice                                  */
176*495ae853SAndroid Build Coastguard Worker /*                                                                           */
177*495ae853SAndroid Build Coastguard Worker /*  Description   : This function fills boundray strength (=1) for those     */
178*495ae853SAndroid Build Coastguard Worker /*                  horz and vert mb edges of 16x16mb which are set to 0 by  */
179*495ae853SAndroid Build Coastguard Worker /*                  ih264d_fill_bs2_horz_vert. This function is used for p slices   */
180*495ae853SAndroid Build Coastguard Worker /*                                                                           */
181*495ae853SAndroid Build Coastguard Worker /*  Inputs        : <What inputs does the function take?>                    */
182*495ae853SAndroid Build Coastguard Worker /*  Globals       : <Does it use any global variables?>                      */
183*495ae853SAndroid Build Coastguard Worker /*  Processing    : If any motion vector component of adjacent 4x4 blocks    */
184*495ae853SAndroid Build Coastguard Worker /*                  differs by more than 1 integer pel or if reference       */
185*495ae853SAndroid Build Coastguard Worker /*                  pictures are different, Bs is set to 1.                  */
186*495ae853SAndroid Build Coastguard Worker /*                                                                           */
187*495ae853SAndroid Build Coastguard Worker /*  Outputs       : <What does the function produce?>                        */
188*495ae853SAndroid Build Coastguard Worker /*  Returns       : <What does the function return?>                         */
189*495ae853SAndroid Build Coastguard Worker /*                                                                           */
190*495ae853SAndroid Build Coastguard Worker /*  Issues        : <List any issues or problems with this function>         */
191*495ae853SAndroid Build Coastguard Worker /*                                                                           */
192*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
193*495ae853SAndroid Build Coastguard Worker /*                                                                           */
194*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
195*495ae853SAndroid Build Coastguard Worker /*         16 10 2008   Jay             Draft                                */
196*495ae853SAndroid Build Coastguard Worker /*                                                                           */
197*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_fill_bs1_16x16mb_pslice(mv_pred_t * ps_cur_mv_pred,mv_pred_t * ps_top_mv_pred,void ** ppv_map_ref_idx_to_poc,UWORD32 * pu4_bs_table,mv_pred_t * ps_leftmost_mv_pred,neighbouradd_t * ps_left_addr,void ** u4_pic_addrress,WORD32 i4_ver_mvlimit)198*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs1_16x16mb_pslice(mv_pred_t *ps_cur_mv_pred,
199*495ae853SAndroid Build Coastguard Worker                                     mv_pred_t *ps_top_mv_pred,
200*495ae853SAndroid Build Coastguard Worker                                     void **ppv_map_ref_idx_to_poc,
201*495ae853SAndroid Build Coastguard Worker                                     UWORD32 *pu4_bs_table, /* pointer to the BsTable array */
202*495ae853SAndroid Build Coastguard Worker                                     mv_pred_t *ps_leftmost_mv_pred,
203*495ae853SAndroid Build Coastguard Worker                                     neighbouradd_t *ps_left_addr,
204*495ae853SAndroid Build Coastguard Worker                                     void **u4_pic_addrress, /* picture address for BS calc */
205*495ae853SAndroid Build Coastguard Worker                                     WORD32 i4_ver_mvlimit)
206*495ae853SAndroid Build Coastguard Worker {
207*495ae853SAndroid Build Coastguard Worker     WORD16 i2_q_mv0, i2_q_mv1;
208*495ae853SAndroid Build Coastguard Worker     WORD16 i2_p_mv0, i2_p_mv1;
209*495ae853SAndroid Build Coastguard Worker     void *pv_cur_pic_addr0, *pv_cur_pic_addr1;
210*495ae853SAndroid Build Coastguard Worker     void *pv_nbr_pic_addr0, *pv_nbr_pic_addr1;
211*495ae853SAndroid Build Coastguard Worker     void **ppv_map_ref_idx_to_poc_l0; //,*ppv_map_ref_idx_to_poc_l1;
212*495ae853SAndroid Build Coastguard Worker     UWORD32 i;
213*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_bs_horz = pu4_bs_table[0];
214*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_bs_vert = pu4_bs_table[4];
215*495ae853SAndroid Build Coastguard Worker 
216*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
217*495ae853SAndroid Build Coastguard Worker 
218*495ae853SAndroid Build Coastguard Worker     ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc;
219*495ae853SAndroid Build Coastguard Worker 
220*495ae853SAndroid Build Coastguard Worker     i2_q_mv0 = ps_cur_mv_pred->i2_mv[0];
221*495ae853SAndroid Build Coastguard Worker     i2_q_mv1 = ps_cur_mv_pred->i2_mv[1];
222*495ae853SAndroid Build Coastguard Worker     pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[ps_cur_mv_pred->i1_ref_frame[0]];
223*495ae853SAndroid Build Coastguard Worker     pv_cur_pic_addr1 = 0;
224*495ae853SAndroid Build Coastguard Worker 
225*495ae853SAndroid Build Coastguard Worker     /*********************************/
226*495ae853SAndroid Build Coastguard Worker     /* Computing Bs for the top edge */
227*495ae853SAndroid Build Coastguard Worker     /*********************************/
228*495ae853SAndroid Build Coastguard Worker     for(i = 0; i < 4; i++, ps_top_mv_pred++)
229*495ae853SAndroid Build Coastguard Worker     {
230*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_idx = 24 - (i << 3);
231*495ae853SAndroid Build Coastguard Worker 
232*495ae853SAndroid Build Coastguard Worker         /*********************************/
233*495ae853SAndroid Build Coastguard Worker         /* check if Bs is already set    */
234*495ae853SAndroid Build Coastguard Worker         /*********************************/
235*495ae853SAndroid Build Coastguard Worker         if(!((u4_bs_horz >> u4_idx) & 0xf))
236*495ae853SAndroid Build Coastguard Worker         {
237*495ae853SAndroid Build Coastguard Worker             /************************************************************/
238*495ae853SAndroid Build Coastguard Worker             /* If Bs is not set, use left edge and current edge mvs and */
239*495ae853SAndroid Build Coastguard Worker             /* reference pictures addresses to evaluate Bs==1           */
240*495ae853SAndroid Build Coastguard Worker             /************************************************************/
241*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs_temp1;
242*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs;
243*495ae853SAndroid Build Coastguard Worker 
244*495ae853SAndroid Build Coastguard Worker             /*********************************************************/
245*495ae853SAndroid Build Coastguard Worker             /* If any motion vector component differs by more than 1 */
246*495ae853SAndroid Build Coastguard Worker             /* integer pel or if reference pictures are different Bs */
247*495ae853SAndroid Build Coastguard Worker             /* is set to 1. Note that this condition shall be met for*/
248*495ae853SAndroid Build Coastguard Worker             /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
249*495ae853SAndroid Build Coastguard Worker             /*********************************************************/
250*495ae853SAndroid Build Coastguard Worker             i2_p_mv0 = ps_top_mv_pred->i2_mv[0];
251*495ae853SAndroid Build Coastguard Worker             i2_p_mv1 = ps_top_mv_pred->i2_mv[1];
252*495ae853SAndroid Build Coastguard Worker             pv_nbr_pic_addr0 = u4_pic_addrress[i & 2];
253*495ae853SAndroid Build Coastguard Worker             pv_nbr_pic_addr1 = u4_pic_addrress[1 + (i & 2)];
254*495ae853SAndroid Build Coastguard Worker 
255*495ae853SAndroid Build Coastguard Worker             u4_bs_temp1 = ((ABS((i2_p_mv0 - i2_q_mv0)) >= 4) ||
256*495ae853SAndroid Build Coastguard Worker                            (ABS((i2_p_mv1 - i2_q_mv1)) >= i4_ver_mvlimit));
257*495ae853SAndroid Build Coastguard Worker 
258*495ae853SAndroid Build Coastguard Worker             u4_bs = ((pv_cur_pic_addr0 != pv_nbr_pic_addr0)
259*495ae853SAndroid Build Coastguard Worker                             || (pv_cur_pic_addr1 != pv_nbr_pic_addr1)
260*495ae853SAndroid Build Coastguard Worker                             || u4_bs_temp1);
261*495ae853SAndroid Build Coastguard Worker 
262*495ae853SAndroid Build Coastguard Worker             u4_bs_horz |= (u4_bs << u4_idx);
263*495ae853SAndroid Build Coastguard Worker         }
264*495ae853SAndroid Build Coastguard Worker     }
265*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[0] = u4_bs_horz;
266*495ae853SAndroid Build Coastguard Worker 
267*495ae853SAndroid Build Coastguard Worker     /***********************************/
268*495ae853SAndroid Build Coastguard Worker     /* Computing Bs for the left edge  */
269*495ae853SAndroid Build Coastguard Worker     /***********************************/
270*495ae853SAndroid Build Coastguard Worker     for(i = 0; i < 4; i++, ps_leftmost_mv_pred += 4)
271*495ae853SAndroid Build Coastguard Worker     {
272*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_idx = 24 - (i << 3);
273*495ae853SAndroid Build Coastguard Worker 
274*495ae853SAndroid Build Coastguard Worker         /*********************************/
275*495ae853SAndroid Build Coastguard Worker         /* check if Bs is already set    */
276*495ae853SAndroid Build Coastguard Worker         /*********************************/
277*495ae853SAndroid Build Coastguard Worker         if(!((u4_bs_vert >> u4_idx) & 0xf))
278*495ae853SAndroid Build Coastguard Worker         {
279*495ae853SAndroid Build Coastguard Worker             /****************************************************/
280*495ae853SAndroid Build Coastguard Worker             /* If Bs is not set, evalaute conditions for Bs=1   */
281*495ae853SAndroid Build Coastguard Worker             /****************************************************/
282*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs_temp1;
283*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs;
284*495ae853SAndroid Build Coastguard Worker             /*********************************************************/
285*495ae853SAndroid Build Coastguard Worker             /* If any motion vector component differs by more than 1 */
286*495ae853SAndroid Build Coastguard Worker             /* integer pel or if reference pictures are different Bs */
287*495ae853SAndroid Build Coastguard Worker             /* is set to 1. Note that this condition shall be met for*/
288*495ae853SAndroid Build Coastguard Worker             /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
289*495ae853SAndroid Build Coastguard Worker             /*********************************************************/
290*495ae853SAndroid Build Coastguard Worker 
291*495ae853SAndroid Build Coastguard Worker             i2_p_mv0 = ps_leftmost_mv_pred->i2_mv[0];
292*495ae853SAndroid Build Coastguard Worker             i2_p_mv1 = ps_leftmost_mv_pred->i2_mv[1];
293*495ae853SAndroid Build Coastguard Worker             pv_nbr_pic_addr0 = ps_left_addr->u4_add[i & 2];
294*495ae853SAndroid Build Coastguard Worker             pv_nbr_pic_addr1 = ps_left_addr->u4_add[1 + (i & 2)];
295*495ae853SAndroid Build Coastguard Worker 
296*495ae853SAndroid Build Coastguard Worker             u4_bs_temp1 =
297*495ae853SAndroid Build Coastguard Worker                             ((ABS((i2_p_mv0 - i2_q_mv0))
298*495ae853SAndroid Build Coastguard Worker                                             >= 4)
299*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv1 - i2_q_mv1))
300*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit));
301*495ae853SAndroid Build Coastguard Worker 
302*495ae853SAndroid Build Coastguard Worker             u4_bs = ((pv_cur_pic_addr0 != pv_nbr_pic_addr0)
303*495ae853SAndroid Build Coastguard Worker                             || (pv_cur_pic_addr1 != pv_nbr_pic_addr1)
304*495ae853SAndroid Build Coastguard Worker                             || u4_bs_temp1);
305*495ae853SAndroid Build Coastguard Worker 
306*495ae853SAndroid Build Coastguard Worker             u4_bs_vert |= (u4_bs << u4_idx);
307*495ae853SAndroid Build Coastguard Worker         }
308*495ae853SAndroid Build Coastguard Worker     }
309*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[4] = u4_bs_vert;
310*495ae853SAndroid Build Coastguard Worker 
311*495ae853SAndroid Build Coastguard Worker     return;
312*495ae853SAndroid Build Coastguard Worker }
313*495ae853SAndroid Build Coastguard Worker 
314*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
315*495ae853SAndroid Build Coastguard Worker /*                                                                           */
316*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_fill_bs1_non16x16mb_pslice                               */
317*495ae853SAndroid Build Coastguard Worker /*                                                                           */
318*495ae853SAndroid Build Coastguard Worker /*  Description   : This function fills boundray strength (=1) for those     */
319*495ae853SAndroid Build Coastguard Worker /*                  horz and vert edges of non16x16mb which are set to 0 by  */
320*495ae853SAndroid Build Coastguard Worker /*                  ih264d_fill_bs2_horz_vert. This function is used for p slices   */
321*495ae853SAndroid Build Coastguard Worker /*                                                                           */
322*495ae853SAndroid Build Coastguard Worker /*  Inputs        : <What inputs does the function take?>                    */
323*495ae853SAndroid Build Coastguard Worker /*  Globals       : <Does it use any global variables?>                      */
324*495ae853SAndroid Build Coastguard Worker /*  Processing    : If any motion vector component of adjacent 4x4 blocks    */
325*495ae853SAndroid Build Coastguard Worker /*                  differs by more than 1 integer pel or if reference       */
326*495ae853SAndroid Build Coastguard Worker /*                  pictures are different, Bs is set to 1.                  */
327*495ae853SAndroid Build Coastguard Worker /*                                                                           */
328*495ae853SAndroid Build Coastguard Worker /*  Outputs       : <What does the function produce?>                        */
329*495ae853SAndroid Build Coastguard Worker /*  Returns       : <What does the function return?>                         */
330*495ae853SAndroid Build Coastguard Worker /*                                                                           */
331*495ae853SAndroid Build Coastguard Worker /*  Issues        : <List any issues or problems with this function>         */
332*495ae853SAndroid Build Coastguard Worker /*                                                                           */
333*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
334*495ae853SAndroid Build Coastguard Worker /*                                                                           */
335*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
336*495ae853SAndroid Build Coastguard Worker /*         16 10 2008   Jay             Draft                                */
337*495ae853SAndroid Build Coastguard Worker /*                                                                           */
338*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_fill_bs1_non16x16mb_pslice(mv_pred_t * ps_cur_mv_pred,mv_pred_t * ps_top_mv_pred,void ** ppv_map_ref_idx_to_poc,UWORD32 * pu4_bs_table,mv_pred_t * ps_leftmost_mv_pred,neighbouradd_t * ps_left_addr,void ** u4_pic_addrress,WORD32 i4_ver_mvlimit)339*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs1_non16x16mb_pslice(mv_pred_t *ps_cur_mv_pred,
340*495ae853SAndroid Build Coastguard Worker                                        mv_pred_t *ps_top_mv_pred,
341*495ae853SAndroid Build Coastguard Worker                                        void **ppv_map_ref_idx_to_poc,
342*495ae853SAndroid Build Coastguard Worker                                        UWORD32 *pu4_bs_table, /* pointer to the BsTable array */
343*495ae853SAndroid Build Coastguard Worker                                        mv_pred_t *ps_leftmost_mv_pred,
344*495ae853SAndroid Build Coastguard Worker                                        neighbouradd_t *ps_left_addr,
345*495ae853SAndroid Build Coastguard Worker                                        void **u4_pic_addrress,
346*495ae853SAndroid Build Coastguard Worker                                        WORD32 i4_ver_mvlimit)
347*495ae853SAndroid Build Coastguard Worker {
348*495ae853SAndroid Build Coastguard Worker     UWORD32 edge;
349*495ae853SAndroid Build Coastguard Worker     void **ppv_map_ref_idx_to_poc_l0; //,*ppv_map_ref_idx_to_poc_l1;
350*495ae853SAndroid Build Coastguard Worker 
351*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
352*495ae853SAndroid Build Coastguard Worker 
353*495ae853SAndroid Build Coastguard Worker     ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc;
354*495ae853SAndroid Build Coastguard Worker 
355*495ae853SAndroid Build Coastguard Worker 
356*495ae853SAndroid Build Coastguard Worker     for(edge = 0; edge < 4; edge++, ps_top_mv_pred = ps_cur_mv_pred - 4)
357*495ae853SAndroid Build Coastguard Worker     {
358*495ae853SAndroid Build Coastguard Worker         /*********************************************************************/
359*495ae853SAndroid Build Coastguard Worker         /* Each iteration of this loop fills the four BS values of one HORIZ */
360*495ae853SAndroid Build Coastguard Worker         /* edge and one BS value for each of the four VERT edges.            */
361*495ae853SAndroid Build Coastguard Worker         /*********************************************************************/
362*495ae853SAndroid Build Coastguard Worker         WORD32 i;
363*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_vert_idx = 24 - (edge << 3);
364*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_bs_horz = pu4_bs_table[edge];
365*495ae853SAndroid Build Coastguard Worker         mv_pred_t *ps_left_mv_pred = ps_leftmost_mv_pred + (edge << 2);
366*495ae853SAndroid Build Coastguard Worker 
367*495ae853SAndroid Build Coastguard Worker         for(i = 0; i < 4; i++, ps_top_mv_pred++, ps_cur_mv_pred++)
368*495ae853SAndroid Build Coastguard Worker         {
369*495ae853SAndroid Build Coastguard Worker             WORD16 i2_cur_mv0, i2_cur_mv1;
370*495ae853SAndroid Build Coastguard Worker             WORD8 i1_cur_ref0;
371*495ae853SAndroid Build Coastguard Worker             void *pv_cur_pic_addr0, *pv_cur_pic_addr1 = 0;
372*495ae853SAndroid Build Coastguard Worker             void *pv_nbr_pic_addr0, *pv_nbr_pic_addr1;
373*495ae853SAndroid Build Coastguard Worker 
374*495ae853SAndroid Build Coastguard Worker             /******************************************************/
375*495ae853SAndroid Build Coastguard Worker             /* Each iteration of this inner loop computes a HORIZ */
376*495ae853SAndroid Build Coastguard Worker             /* and a VERT BS value for a 4x4 block                */
377*495ae853SAndroid Build Coastguard Worker             /******************************************************/
378*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs_vert = (pu4_bs_table[i + 4] >> u4_vert_idx) & 0xf;
379*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_horz_idx = 24 - (i << 3);
380*495ae853SAndroid Build Coastguard Worker 
381*495ae853SAndroid Build Coastguard Worker             /*****************************************************/
382*495ae853SAndroid Build Coastguard Worker             /* check if vert Bs for this block is already set    */
383*495ae853SAndroid Build Coastguard Worker             /*****************************************************/
384*495ae853SAndroid Build Coastguard Worker             if(!u4_bs_vert)
385*495ae853SAndroid Build Coastguard Worker             {
386*495ae853SAndroid Build Coastguard Worker                 WORD16 i2_left_mv0, i2_left_mv1;
387*495ae853SAndroid Build Coastguard Worker                 /************************************************************/
388*495ae853SAndroid Build Coastguard Worker                 /* If Bs is not set, use left edge and current edge mvs and */
389*495ae853SAndroid Build Coastguard Worker                 /* reference pictures addresses to evaluate Bs==1           */
390*495ae853SAndroid Build Coastguard Worker                 /************************************************************/
391*495ae853SAndroid Build Coastguard Worker                 i2_left_mv0 = ps_left_mv_pred->i2_mv[0];
392*495ae853SAndroid Build Coastguard Worker                 i2_left_mv1 = ps_left_mv_pred->i2_mv[1];
393*495ae853SAndroid Build Coastguard Worker 
394*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0];
395*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1];
396*495ae853SAndroid Build Coastguard Worker 
397*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0];
398*495ae853SAndroid Build Coastguard Worker 
399*495ae853SAndroid Build Coastguard Worker                 pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0];
400*495ae853SAndroid Build Coastguard Worker                 if(i)
401*495ae853SAndroid Build Coastguard Worker                 {
402*495ae853SAndroid Build Coastguard Worker                     WORD8 i1_left_ref0 = ps_left_mv_pred->i1_ref_frame[0];
403*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_left_ref0];
404*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr1 = 0;
405*495ae853SAndroid Build Coastguard Worker                 }
406*495ae853SAndroid Build Coastguard Worker                 else
407*495ae853SAndroid Build Coastguard Worker                 {
408*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr0 = ps_left_addr->u4_add[edge & 2];
409*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr1 = ps_left_addr->u4_add[1 + (edge & 2)];
410*495ae853SAndroid Build Coastguard Worker                 }
411*495ae853SAndroid Build Coastguard Worker 
412*495ae853SAndroid Build Coastguard Worker                 {
413*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_bs_temp1;
414*495ae853SAndroid Build Coastguard Worker                     /*********************************************************/
415*495ae853SAndroid Build Coastguard Worker                     /* If any motion vector component differs by more than 1 */
416*495ae853SAndroid Build Coastguard Worker                     /* integer pel or if reference pictures are different Bs */
417*495ae853SAndroid Build Coastguard Worker                     /* is set to 1. Note that this condition shall be met for*/
418*495ae853SAndroid Build Coastguard Worker                     /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
419*495ae853SAndroid Build Coastguard Worker                     /*********************************************************/
420*495ae853SAndroid Build Coastguard Worker 
421*495ae853SAndroid Build Coastguard Worker                     u4_bs_temp1 =
422*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_left_mv0 - i2_cur_mv0))
423*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
424*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv1
425*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
426*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit));
427*495ae853SAndroid Build Coastguard Worker 
428*495ae853SAndroid Build Coastguard Worker                     u4_bs_vert = ((pv_nbr_pic_addr0 != pv_cur_pic_addr0)
429*495ae853SAndroid Build Coastguard Worker                                     || (pv_nbr_pic_addr1 != pv_cur_pic_addr1)
430*495ae853SAndroid Build Coastguard Worker                                     || u4_bs_temp1);
431*495ae853SAndroid Build Coastguard Worker 
432*495ae853SAndroid Build Coastguard Worker                     pu4_bs_table[i + 4] |= (u4_bs_vert << u4_vert_idx);
433*495ae853SAndroid Build Coastguard Worker                 }
434*495ae853SAndroid Build Coastguard Worker             }
435*495ae853SAndroid Build Coastguard Worker 
436*495ae853SAndroid Build Coastguard Worker             /*****************************************************/
437*495ae853SAndroid Build Coastguard Worker             /* check if horz Bs for this block is already set    */
438*495ae853SAndroid Build Coastguard Worker             /*****************************************************/
439*495ae853SAndroid Build Coastguard Worker             if(!((u4_bs_horz >> u4_horz_idx) & 0xf))
440*495ae853SAndroid Build Coastguard Worker             {
441*495ae853SAndroid Build Coastguard Worker                 WORD16 i2_top_mv0, i2_top_mv1;
442*495ae853SAndroid Build Coastguard Worker                 /************************************************************/
443*495ae853SAndroid Build Coastguard Worker                 /* If Bs is not set, use top edge and current edge mvs and  */
444*495ae853SAndroid Build Coastguard Worker                 /* reference pictures addresses to evaluate Bs==1           */
445*495ae853SAndroid Build Coastguard Worker                 /************************************************************/
446*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0];
447*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1];
448*495ae853SAndroid Build Coastguard Worker 
449*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0];
450*495ae853SAndroid Build Coastguard Worker 
451*495ae853SAndroid Build Coastguard Worker                 i2_top_mv0 = ps_top_mv_pred->i2_mv[0];
452*495ae853SAndroid Build Coastguard Worker                 i2_top_mv1 = ps_top_mv_pred->i2_mv[1];
453*495ae853SAndroid Build Coastguard Worker 
454*495ae853SAndroid Build Coastguard Worker                 pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0];
455*495ae853SAndroid Build Coastguard Worker                 if(edge)
456*495ae853SAndroid Build Coastguard Worker                 {
457*495ae853SAndroid Build Coastguard Worker                     WORD8 i1_top_ref0 = ps_top_mv_pred->i1_ref_frame[0];
458*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_top_ref0];
459*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr1 = 0;
460*495ae853SAndroid Build Coastguard Worker                 }
461*495ae853SAndroid Build Coastguard Worker                 else
462*495ae853SAndroid Build Coastguard Worker                 {
463*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr0 = u4_pic_addrress[i & 2];
464*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr1 = u4_pic_addrress[1 + (i & 2)];
465*495ae853SAndroid Build Coastguard Worker                 }
466*495ae853SAndroid Build Coastguard Worker 
467*495ae853SAndroid Build Coastguard Worker                 {
468*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_bs_temp1;
469*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_bs;
470*495ae853SAndroid Build Coastguard Worker                     /*********************************************************/
471*495ae853SAndroid Build Coastguard Worker                     /* If any motion vector component differs by more than 1 */
472*495ae853SAndroid Build Coastguard Worker                     /* integer pel or if reference pictures are different Bs */
473*495ae853SAndroid Build Coastguard Worker                     /* is set to 1. Note that this condition shall be met for*/
474*495ae853SAndroid Build Coastguard Worker                     /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
475*495ae853SAndroid Build Coastguard Worker                     /*********************************************************/
476*495ae853SAndroid Build Coastguard Worker 
477*495ae853SAndroid Build Coastguard Worker                     u4_bs_temp1 =
478*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_top_mv0 - i2_cur_mv0))
479*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
480*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_top_mv1
481*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
482*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit));
483*495ae853SAndroid Build Coastguard Worker 
484*495ae853SAndroid Build Coastguard Worker                     u4_bs = ((pv_nbr_pic_addr0 != pv_cur_pic_addr0)
485*495ae853SAndroid Build Coastguard Worker                                     || (pv_nbr_pic_addr1 != pv_cur_pic_addr1)
486*495ae853SAndroid Build Coastguard Worker                                     || u4_bs_temp1);
487*495ae853SAndroid Build Coastguard Worker 
488*495ae853SAndroid Build Coastguard Worker                     u4_bs_horz |= (u4_bs << u4_horz_idx);
489*495ae853SAndroid Build Coastguard Worker                 }
490*495ae853SAndroid Build Coastguard Worker             }
491*495ae853SAndroid Build Coastguard Worker 
492*495ae853SAndroid Build Coastguard Worker             ps_left_mv_pred = ps_cur_mv_pred;
493*495ae853SAndroid Build Coastguard Worker         }
494*495ae853SAndroid Build Coastguard Worker 
495*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[edge] = u4_bs_horz;
496*495ae853SAndroid Build Coastguard Worker     }
497*495ae853SAndroid Build Coastguard Worker }
498*495ae853SAndroid Build Coastguard Worker 
499*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
500*495ae853SAndroid Build Coastguard Worker /*                                                                           */
501*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_fill_bs1_16x16mb_bslice                                  */
502*495ae853SAndroid Build Coastguard Worker /*                                                                           */
503*495ae853SAndroid Build Coastguard Worker /*  Description   : This function fills boundray strength (=1) for those     */
504*495ae853SAndroid Build Coastguard Worker /*                  horz and vert mb edges of 16x16mb which are set to 0 by  */
505*495ae853SAndroid Build Coastguard Worker /*                  ih264d_fill_bs2_horz_vert. This function is used for b slices   */
506*495ae853SAndroid Build Coastguard Worker /*                                                                           */
507*495ae853SAndroid Build Coastguard Worker /*  Inputs        : <What inputs does the function take?>                    */
508*495ae853SAndroid Build Coastguard Worker /*  Globals       : <Does it use any global variables?>                      */
509*495ae853SAndroid Build Coastguard Worker /*  Processing    : If any motion vector component of adjacent 4x4 blocks    */
510*495ae853SAndroid Build Coastguard Worker /*                  differs by more than 1 integer pel or if reference       */
511*495ae853SAndroid Build Coastguard Worker /*                  pictures are different, Bs is set to 1.                  */
512*495ae853SAndroid Build Coastguard Worker /*                                                                           */
513*495ae853SAndroid Build Coastguard Worker /*  Outputs       : <What does the function produce?>                        */
514*495ae853SAndroid Build Coastguard Worker /*  Returns       : <What does the function return?>                         */
515*495ae853SAndroid Build Coastguard Worker /*                                                                           */
516*495ae853SAndroid Build Coastguard Worker /*  Issues        : <List any issues or problems with this function>         */
517*495ae853SAndroid Build Coastguard Worker /*                                                                           */
518*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
519*495ae853SAndroid Build Coastguard Worker /*                                                                           */
520*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
521*495ae853SAndroid Build Coastguard Worker /*         16 10 2008   Jay             Draft                                */
522*495ae853SAndroid Build Coastguard Worker /*                                                                           */
523*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_fill_bs1_16x16mb_bslice(mv_pred_t * ps_cur_mv_pred,mv_pred_t * ps_top_mv_pred,void ** ppv_map_ref_idx_to_poc,UWORD32 * pu4_bs_table,mv_pred_t * ps_leftmost_mv_pred,neighbouradd_t * ps_left_addr,void ** u4_pic_addrress,WORD32 i4_ver_mvlimit)524*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs1_16x16mb_bslice(mv_pred_t *ps_cur_mv_pred,
525*495ae853SAndroid Build Coastguard Worker                                     mv_pred_t *ps_top_mv_pred,
526*495ae853SAndroid Build Coastguard Worker                                     void **ppv_map_ref_idx_to_poc,
527*495ae853SAndroid Build Coastguard Worker                                     UWORD32 *pu4_bs_table, /* pointer to the BsTable array */
528*495ae853SAndroid Build Coastguard Worker                                     mv_pred_t *ps_leftmost_mv_pred,
529*495ae853SAndroid Build Coastguard Worker                                     neighbouradd_t *ps_left_addr,
530*495ae853SAndroid Build Coastguard Worker                                     void **u4_pic_addrress,
531*495ae853SAndroid Build Coastguard Worker                                     WORD32 i4_ver_mvlimit)
532*495ae853SAndroid Build Coastguard Worker {
533*495ae853SAndroid Build Coastguard Worker     WORD16 i2_q_mv0, i2_q_mv1, i2_q_mv2, i2_q_mv3;
534*495ae853SAndroid Build Coastguard Worker     WORD16 i2_p_mv0, i2_p_mv1, i2_p_mv2, i2_p_mv3;
535*495ae853SAndroid Build Coastguard Worker     void *pv_cur_pic_addr0, *pv_cur_pic_addr1;
536*495ae853SAndroid Build Coastguard Worker     void *pv_nbr_pic_addr0, *pv_nbr_pic_addr1;
537*495ae853SAndroid Build Coastguard Worker     void **ppv_map_ref_idx_to_poc_l0, **ppv_map_ref_idx_to_poc_l1;
538*495ae853SAndroid Build Coastguard Worker     UWORD32 i;
539*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_bs_horz = pu4_bs_table[0];
540*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_bs_vert = pu4_bs_table[4];
541*495ae853SAndroid Build Coastguard Worker 
542*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
543*495ae853SAndroid Build Coastguard Worker 
544*495ae853SAndroid Build Coastguard Worker     ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc;
545*495ae853SAndroid Build Coastguard Worker     ppv_map_ref_idx_to_poc_l1 = ppv_map_ref_idx_to_poc + POC_LIST_L0_TO_L1_DIFF;
546*495ae853SAndroid Build Coastguard Worker     i2_q_mv0 = ps_cur_mv_pred->i2_mv[0];
547*495ae853SAndroid Build Coastguard Worker     i2_q_mv1 = ps_cur_mv_pred->i2_mv[1];
548*495ae853SAndroid Build Coastguard Worker     i2_q_mv2 = ps_cur_mv_pred->i2_mv[2];
549*495ae853SAndroid Build Coastguard Worker     i2_q_mv3 = ps_cur_mv_pred->i2_mv[3];
550*495ae853SAndroid Build Coastguard Worker     pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[ps_cur_mv_pred->i1_ref_frame[0]];
551*495ae853SAndroid Build Coastguard Worker     pv_cur_pic_addr1 = ppv_map_ref_idx_to_poc_l1[ps_cur_mv_pred->i1_ref_frame[1]];
552*495ae853SAndroid Build Coastguard Worker 
553*495ae853SAndroid Build Coastguard Worker     /*********************************/
554*495ae853SAndroid Build Coastguard Worker     /* Computing Bs for the top edge */
555*495ae853SAndroid Build Coastguard Worker     /*********************************/
556*495ae853SAndroid Build Coastguard Worker     for(i = 0; i < 4; i++, ps_top_mv_pred++)
557*495ae853SAndroid Build Coastguard Worker     {
558*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_idx = 24 - (i << 3);
559*495ae853SAndroid Build Coastguard Worker 
560*495ae853SAndroid Build Coastguard Worker         /*********************************/
561*495ae853SAndroid Build Coastguard Worker         /* check if Bs is already set    */
562*495ae853SAndroid Build Coastguard Worker         /*********************************/
563*495ae853SAndroid Build Coastguard Worker         if(!((u4_bs_horz >> u4_idx) & 0xf))
564*495ae853SAndroid Build Coastguard Worker         {
565*495ae853SAndroid Build Coastguard Worker             /************************************************************/
566*495ae853SAndroid Build Coastguard Worker             /* If Bs is not set, use left edge and current edge mvs and */
567*495ae853SAndroid Build Coastguard Worker             /* reference pictures addresses to evaluate Bs==1           */
568*495ae853SAndroid Build Coastguard Worker             /************************************************************/
569*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs_temp1, u4_bs_temp2;
570*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs;
571*495ae853SAndroid Build Coastguard Worker 
572*495ae853SAndroid Build Coastguard Worker             /*********************************************************/
573*495ae853SAndroid Build Coastguard Worker             /* If any motion vector component differs by more than 1 */
574*495ae853SAndroid Build Coastguard Worker             /* integer pel or if reference pictures are different Bs */
575*495ae853SAndroid Build Coastguard Worker             /* is set to 1. Note that this condition shall be met for*/
576*495ae853SAndroid Build Coastguard Worker             /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
577*495ae853SAndroid Build Coastguard Worker             /*********************************************************/
578*495ae853SAndroid Build Coastguard Worker             i2_p_mv0 = ps_top_mv_pred->i2_mv[0];
579*495ae853SAndroid Build Coastguard Worker             i2_p_mv1 = ps_top_mv_pred->i2_mv[1];
580*495ae853SAndroid Build Coastguard Worker             i2_p_mv2 = ps_top_mv_pred->i2_mv[2];
581*495ae853SAndroid Build Coastguard Worker             i2_p_mv3 = ps_top_mv_pred->i2_mv[3];
582*495ae853SAndroid Build Coastguard Worker             pv_nbr_pic_addr0 = u4_pic_addrress[i & 2];
583*495ae853SAndroid Build Coastguard Worker             pv_nbr_pic_addr1 = u4_pic_addrress[1 + (i & 2)];
584*495ae853SAndroid Build Coastguard Worker 
585*495ae853SAndroid Build Coastguard Worker             u4_bs_temp1 =
586*495ae853SAndroid Build Coastguard Worker                             ((ABS((i2_p_mv0 - i2_q_mv0))
587*495ae853SAndroid Build Coastguard Worker                                             >= 4)
588*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv1 - i2_q_mv1))
589*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit)
590*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv2 - i2_q_mv2))
591*495ae853SAndroid Build Coastguard Worker                                                             >= 4)
592*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv3 - i2_q_mv3))
593*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit));
594*495ae853SAndroid Build Coastguard Worker 
595*495ae853SAndroid Build Coastguard Worker             u4_bs_temp2 =
596*495ae853SAndroid Build Coastguard Worker                             ((ABS((i2_p_mv0 - i2_q_mv2))
597*495ae853SAndroid Build Coastguard Worker                                             >= 4)
598*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv1 - i2_q_mv3))
599*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit)
600*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv2 - i2_q_mv0))
601*495ae853SAndroid Build Coastguard Worker                                                             >= 4)
602*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv3 - i2_q_mv1))
603*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit));
604*495ae853SAndroid Build Coastguard Worker 
605*495ae853SAndroid Build Coastguard Worker             u4_bs = ((pv_cur_pic_addr0 != pv_nbr_pic_addr0)
606*495ae853SAndroid Build Coastguard Worker                             || (pv_cur_pic_addr1 != pv_nbr_pic_addr1)
607*495ae853SAndroid Build Coastguard Worker                             || u4_bs_temp1)
608*495ae853SAndroid Build Coastguard Worker                             && ((pv_cur_pic_addr0 != pv_nbr_pic_addr1)
609*495ae853SAndroid Build Coastguard Worker                                             || (pv_cur_pic_addr1
610*495ae853SAndroid Build Coastguard Worker                                                             != pv_nbr_pic_addr0)
611*495ae853SAndroid Build Coastguard Worker                                             || u4_bs_temp2);
612*495ae853SAndroid Build Coastguard Worker 
613*495ae853SAndroid Build Coastguard Worker             u4_bs_horz |= (u4_bs << u4_idx);
614*495ae853SAndroid Build Coastguard Worker         }
615*495ae853SAndroid Build Coastguard Worker     }
616*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[0] = u4_bs_horz;
617*495ae853SAndroid Build Coastguard Worker 
618*495ae853SAndroid Build Coastguard Worker     /***********************************/
619*495ae853SAndroid Build Coastguard Worker     /* Computing Bs for the left edge  */
620*495ae853SAndroid Build Coastguard Worker     /***********************************/
621*495ae853SAndroid Build Coastguard Worker     for(i = 0; i < 4; i++, ps_leftmost_mv_pred += 4)
622*495ae853SAndroid Build Coastguard Worker     {
623*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_idx = 24 - (i << 3);
624*495ae853SAndroid Build Coastguard Worker 
625*495ae853SAndroid Build Coastguard Worker         /*********************************/
626*495ae853SAndroid Build Coastguard Worker         /* check if Bs is already set    */
627*495ae853SAndroid Build Coastguard Worker         /*********************************/
628*495ae853SAndroid Build Coastguard Worker         if(!((u4_bs_vert >> u4_idx) & 0xf))
629*495ae853SAndroid Build Coastguard Worker         {
630*495ae853SAndroid Build Coastguard Worker             /****************************************************/
631*495ae853SAndroid Build Coastguard Worker             /* If Bs is not set, evalaute conditions for Bs=1   */
632*495ae853SAndroid Build Coastguard Worker             /****************************************************/
633*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs_temp1, u4_bs_temp2;
634*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs;
635*495ae853SAndroid Build Coastguard Worker             /*********************************************************/
636*495ae853SAndroid Build Coastguard Worker             /* If any motion vector component differs by more than 1 */
637*495ae853SAndroid Build Coastguard Worker             /* integer pel or if reference pictures are different Bs */
638*495ae853SAndroid Build Coastguard Worker             /* is set to 1. Note that this condition shall be met for*/
639*495ae853SAndroid Build Coastguard Worker             /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
640*495ae853SAndroid Build Coastguard Worker             /*********************************************************/
641*495ae853SAndroid Build Coastguard Worker 
642*495ae853SAndroid Build Coastguard Worker             i2_p_mv0 = ps_leftmost_mv_pred->i2_mv[0];
643*495ae853SAndroid Build Coastguard Worker             i2_p_mv1 = ps_leftmost_mv_pred->i2_mv[1];
644*495ae853SAndroid Build Coastguard Worker             i2_p_mv2 = ps_leftmost_mv_pred->i2_mv[2];
645*495ae853SAndroid Build Coastguard Worker             i2_p_mv3 = ps_leftmost_mv_pred->i2_mv[3];
646*495ae853SAndroid Build Coastguard Worker             pv_nbr_pic_addr0 = ps_left_addr->u4_add[i & 2];
647*495ae853SAndroid Build Coastguard Worker             pv_nbr_pic_addr1 = ps_left_addr->u4_add[1 + (i & 2)];
648*495ae853SAndroid Build Coastguard Worker 
649*495ae853SAndroid Build Coastguard Worker             u4_bs_temp1 =
650*495ae853SAndroid Build Coastguard Worker                             ((ABS((i2_p_mv0 - i2_q_mv0))
651*495ae853SAndroid Build Coastguard Worker                                             >= 4)
652*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv1 - i2_q_mv1))
653*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit)
654*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv2 - i2_q_mv2))
655*495ae853SAndroid Build Coastguard Worker                                                             >= 4)
656*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv3 - i2_q_mv3))
657*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit));
658*495ae853SAndroid Build Coastguard Worker 
659*495ae853SAndroid Build Coastguard Worker             u4_bs_temp2 =
660*495ae853SAndroid Build Coastguard Worker                             ((ABS((i2_p_mv0 - i2_q_mv2))
661*495ae853SAndroid Build Coastguard Worker                                             >= 4)
662*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv1 - i2_q_mv3))
663*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit)
664*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv2 - i2_q_mv0))
665*495ae853SAndroid Build Coastguard Worker                                                             >= 4)
666*495ae853SAndroid Build Coastguard Worker                                             | (ABS((i2_p_mv3 - i2_q_mv1))
667*495ae853SAndroid Build Coastguard Worker                                                             >= i4_ver_mvlimit));
668*495ae853SAndroid Build Coastguard Worker 
669*495ae853SAndroid Build Coastguard Worker             u4_bs = ((pv_cur_pic_addr0 != pv_nbr_pic_addr0)
670*495ae853SAndroid Build Coastguard Worker                             || (pv_cur_pic_addr1 != pv_nbr_pic_addr1)
671*495ae853SAndroid Build Coastguard Worker                             || u4_bs_temp1)
672*495ae853SAndroid Build Coastguard Worker                             && ((pv_cur_pic_addr0 != pv_nbr_pic_addr1)
673*495ae853SAndroid Build Coastguard Worker                                             || (pv_cur_pic_addr1
674*495ae853SAndroid Build Coastguard Worker                                                             != pv_nbr_pic_addr0)
675*495ae853SAndroid Build Coastguard Worker                                             || u4_bs_temp2);
676*495ae853SAndroid Build Coastguard Worker 
677*495ae853SAndroid Build Coastguard Worker             u4_bs_vert |= (u4_bs << u4_idx);
678*495ae853SAndroid Build Coastguard Worker         }
679*495ae853SAndroid Build Coastguard Worker     }
680*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[4] = u4_bs_vert;
681*495ae853SAndroid Build Coastguard Worker 
682*495ae853SAndroid Build Coastguard Worker     return;
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 /*  Function Name : ih264d_fill_bs1_non16x16mb_bslice                               */
688*495ae853SAndroid Build Coastguard Worker /*                                                                           */
689*495ae853SAndroid Build Coastguard Worker /*  Description   : This function fills boundray strength (=1) for those     */
690*495ae853SAndroid Build Coastguard Worker /*                  horz and vert edges of non16x16mb which are set to 0 by  */
691*495ae853SAndroid Build Coastguard Worker /*                  ih264d_fill_bs2_horz_vert. This function is used for b slices   */
692*495ae853SAndroid Build Coastguard Worker /*                                                                           */
693*495ae853SAndroid Build Coastguard Worker /*  Inputs        : <What inputs does the function take?>                    */
694*495ae853SAndroid Build Coastguard Worker /*  Globals       : <Does it use any global variables?>                      */
695*495ae853SAndroid Build Coastguard Worker /*  Processing    : If any motion vector component of adjacent 4x4 blocks    */
696*495ae853SAndroid Build Coastguard Worker /*                  differs by more than 1 integer pel or if reference       */
697*495ae853SAndroid Build Coastguard Worker /*                  pictures are different, Bs is set to 1.                  */
698*495ae853SAndroid Build Coastguard Worker /*                                                                           */
699*495ae853SAndroid Build Coastguard Worker /*  Outputs       : <What does the function produce?>                        */
700*495ae853SAndroid Build Coastguard Worker /*  Returns       : <What does the function return?>                         */
701*495ae853SAndroid Build Coastguard Worker /*                                                                           */
702*495ae853SAndroid Build Coastguard Worker /*  Issues        : <List any issues or problems with this function>         */
703*495ae853SAndroid Build Coastguard Worker /*                                                                           */
704*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
705*495ae853SAndroid Build Coastguard Worker /*                                                                           */
706*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
707*495ae853SAndroid Build Coastguard Worker /*         16 10 2008   Jay             Draft                                */
708*495ae853SAndroid Build Coastguard Worker /*                                                                           */
709*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_fill_bs1_non16x16mb_bslice(mv_pred_t * ps_cur_mv_pred,mv_pred_t * ps_top_mv_pred,void ** ppv_map_ref_idx_to_poc,UWORD32 * pu4_bs_table,mv_pred_t * ps_leftmost_mv_pred,neighbouradd_t * ps_left_addr,void ** u4_pic_addrress,WORD32 i4_ver_mvlimit)710*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs1_non16x16mb_bslice(mv_pred_t *ps_cur_mv_pred,
711*495ae853SAndroid Build Coastguard Worker                                        mv_pred_t *ps_top_mv_pred,
712*495ae853SAndroid Build Coastguard Worker                                        void **ppv_map_ref_idx_to_poc,
713*495ae853SAndroid Build Coastguard Worker                                        UWORD32 *pu4_bs_table, /* pointer to the BsTable array */
714*495ae853SAndroid Build Coastguard Worker                                        mv_pred_t *ps_leftmost_mv_pred,
715*495ae853SAndroid Build Coastguard Worker                                        neighbouradd_t *ps_left_addr,
716*495ae853SAndroid Build Coastguard Worker                                        void **u4_pic_addrress,
717*495ae853SAndroid Build Coastguard Worker                                        WORD32 i4_ver_mvlimit)
718*495ae853SAndroid Build Coastguard Worker {
719*495ae853SAndroid Build Coastguard Worker     UWORD32 edge;
720*495ae853SAndroid Build Coastguard Worker     void **ppv_map_ref_idx_to_poc_l0, **ppv_map_ref_idx_to_poc_l1;
721*495ae853SAndroid Build Coastguard Worker     ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc;
722*495ae853SAndroid Build Coastguard Worker     ppv_map_ref_idx_to_poc_l1 = ppv_map_ref_idx_to_poc + POC_LIST_L0_TO_L1_DIFF;
723*495ae853SAndroid Build Coastguard Worker 
724*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
725*495ae853SAndroid Build Coastguard Worker 
726*495ae853SAndroid Build Coastguard Worker     for(edge = 0; edge < 4; edge++, ps_top_mv_pred = ps_cur_mv_pred - 4)
727*495ae853SAndroid Build Coastguard Worker     {
728*495ae853SAndroid Build Coastguard Worker         /*********************************************************************/
729*495ae853SAndroid Build Coastguard Worker         /* Each iteration of this loop fills the four BS values of one HORIZ */
730*495ae853SAndroid Build Coastguard Worker         /* edge and one BS value for each of the four VERT edges.            */
731*495ae853SAndroid Build Coastguard Worker         /*********************************************************************/
732*495ae853SAndroid Build Coastguard Worker         WORD32 i;
733*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_vert_idx = 24 - (edge << 3);
734*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_bs_horz = pu4_bs_table[edge];
735*495ae853SAndroid Build Coastguard Worker         mv_pred_t *ps_left_mv_pred = ps_leftmost_mv_pred + (edge << 2);
736*495ae853SAndroid Build Coastguard Worker 
737*495ae853SAndroid Build Coastguard Worker         for(i = 0; i < 4; i++, ps_top_mv_pred++, ps_cur_mv_pred++)
738*495ae853SAndroid Build Coastguard Worker         {
739*495ae853SAndroid Build Coastguard Worker             WORD16 i2_cur_mv0, i2_cur_mv1, i16_curMv2, i16_curMv3;
740*495ae853SAndroid Build Coastguard Worker             WORD8 i1_cur_ref0, i1_cur_ref1;
741*495ae853SAndroid Build Coastguard Worker             void *pv_cur_pic_addr0, *pv_cur_pic_addr1;
742*495ae853SAndroid Build Coastguard Worker             void *pv_nbr_pic_addr0, *pv_nbr_pic_addr1;
743*495ae853SAndroid Build Coastguard Worker 
744*495ae853SAndroid Build Coastguard Worker             /******************************************************/
745*495ae853SAndroid Build Coastguard Worker             /* Each iteration of this inner loop computes a HORIZ */
746*495ae853SAndroid Build Coastguard Worker             /* and a VERT BS value for a 4x4 block                */
747*495ae853SAndroid Build Coastguard Worker             /******************************************************/
748*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_bs_vert = (pu4_bs_table[i + 4] >> u4_vert_idx) & 0xf;
749*495ae853SAndroid Build Coastguard Worker             UWORD32 u4_horz_idx = 24 - (i << 3);
750*495ae853SAndroid Build Coastguard Worker 
751*495ae853SAndroid Build Coastguard Worker             /*****************************************************/
752*495ae853SAndroid Build Coastguard Worker             /* check if vert Bs for this block is already set    */
753*495ae853SAndroid Build Coastguard Worker             /*****************************************************/
754*495ae853SAndroid Build Coastguard Worker             if(!u4_bs_vert)
755*495ae853SAndroid Build Coastguard Worker             {
756*495ae853SAndroid Build Coastguard Worker                 WORD16 i2_left_mv0, i2_left_mv1, i2_left_mv2, i2_left_mv3;
757*495ae853SAndroid Build Coastguard Worker                 /************************************************************/
758*495ae853SAndroid Build Coastguard Worker                 /* If Bs is not set, use left edge and current edge mvs and */
759*495ae853SAndroid Build Coastguard Worker                 /* reference pictures addresses to evaluate Bs==1           */
760*495ae853SAndroid Build Coastguard Worker                 /************************************************************/
761*495ae853SAndroid Build Coastguard Worker                 i2_left_mv0 = ps_left_mv_pred->i2_mv[0];
762*495ae853SAndroid Build Coastguard Worker                 i2_left_mv1 = ps_left_mv_pred->i2_mv[1];
763*495ae853SAndroid Build Coastguard Worker                 i2_left_mv2 = ps_left_mv_pred->i2_mv[2];
764*495ae853SAndroid Build Coastguard Worker                 i2_left_mv3 = ps_left_mv_pred->i2_mv[3];
765*495ae853SAndroid Build Coastguard Worker 
766*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0];
767*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1];
768*495ae853SAndroid Build Coastguard Worker                 i16_curMv2 = ps_cur_mv_pred->i2_mv[2];
769*495ae853SAndroid Build Coastguard Worker                 i16_curMv3 = ps_cur_mv_pred->i2_mv[3];
770*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0];
771*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref1 = ps_cur_mv_pred->i1_ref_frame[1];
772*495ae853SAndroid Build Coastguard Worker                 pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0];
773*495ae853SAndroid Build Coastguard Worker                 pv_cur_pic_addr1 = ppv_map_ref_idx_to_poc_l1[i1_cur_ref1];
774*495ae853SAndroid Build Coastguard Worker 
775*495ae853SAndroid Build Coastguard Worker                 if(i)
776*495ae853SAndroid Build Coastguard Worker                 {
777*495ae853SAndroid Build Coastguard Worker                     WORD8 i1_left_ref0, i1_left_ref1;
778*495ae853SAndroid Build Coastguard Worker                     i1_left_ref0 = ps_left_mv_pred->i1_ref_frame[0];
779*495ae853SAndroid Build Coastguard Worker                     i1_left_ref1 = ps_left_mv_pred->i1_ref_frame[1];
780*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_left_ref0];
781*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr1 = ppv_map_ref_idx_to_poc_l1[i1_left_ref1];
782*495ae853SAndroid Build Coastguard Worker                 }
783*495ae853SAndroid Build Coastguard Worker                 else
784*495ae853SAndroid Build Coastguard Worker                 {
785*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr0 = ps_left_addr->u4_add[edge & 2];
786*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr1 = ps_left_addr->u4_add[1 + (edge & 2)];
787*495ae853SAndroid Build Coastguard Worker                 }
788*495ae853SAndroid Build Coastguard Worker 
789*495ae853SAndroid Build Coastguard Worker                 {
790*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_bs_temp1, u4_bs_temp2;
791*495ae853SAndroid Build Coastguard Worker                     /*********************************************************/
792*495ae853SAndroid Build Coastguard Worker                     /* If any motion vector component differs by more than 1 */
793*495ae853SAndroid Build Coastguard Worker                     /* integer pel or if reference pictures are different Bs */
794*495ae853SAndroid Build Coastguard Worker                     /* is set to 1. Note that this condition shall be met for*/
795*495ae853SAndroid Build Coastguard Worker                     /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
796*495ae853SAndroid Build Coastguard Worker                     /*********************************************************/
797*495ae853SAndroid Build Coastguard Worker 
798*495ae853SAndroid Build Coastguard Worker                     u4_bs_temp1 =
799*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_left_mv0 - i2_cur_mv0))
800*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
801*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv1
802*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
803*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit)
804*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv2
805*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv2))
806*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
807*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv3
808*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv3))
809*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit));
810*495ae853SAndroid Build Coastguard Worker 
811*495ae853SAndroid Build Coastguard Worker                     u4_bs_temp2 =
812*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_left_mv0 - i16_curMv2))
813*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
814*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv1
815*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv3))
816*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit)
817*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv2
818*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv0))
819*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
820*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv3
821*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
822*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit));
823*495ae853SAndroid Build Coastguard Worker 
824*495ae853SAndroid Build Coastguard Worker                     u4_bs_vert =
825*495ae853SAndroid Build Coastguard Worker                                     ((pv_nbr_pic_addr0 != pv_cur_pic_addr0)
826*495ae853SAndroid Build Coastguard Worker                                                     || (pv_nbr_pic_addr1
827*495ae853SAndroid Build Coastguard Worker                                                                     != pv_cur_pic_addr1)
828*495ae853SAndroid Build Coastguard Worker                                                     || u4_bs_temp1)
829*495ae853SAndroid Build Coastguard Worker                                                     && ((pv_nbr_pic_addr0
830*495ae853SAndroid Build Coastguard Worker                                                                     != pv_cur_pic_addr1)
831*495ae853SAndroid Build Coastguard Worker                                                                     || (pv_nbr_pic_addr1
832*495ae853SAndroid Build Coastguard Worker                                                                                     != pv_cur_pic_addr0)
833*495ae853SAndroid Build Coastguard Worker                                                                     || u4_bs_temp2);
834*495ae853SAndroid Build Coastguard Worker 
835*495ae853SAndroid Build Coastguard Worker                     pu4_bs_table[i + 4] |= (u4_bs_vert << u4_vert_idx);
836*495ae853SAndroid Build Coastguard Worker                 }
837*495ae853SAndroid Build Coastguard Worker             }
838*495ae853SAndroid Build Coastguard Worker 
839*495ae853SAndroid Build Coastguard Worker             /*****************************************************/
840*495ae853SAndroid Build Coastguard Worker             /* check if horz Bs for this block is already set    */
841*495ae853SAndroid Build Coastguard Worker             /*****************************************************/
842*495ae853SAndroid Build Coastguard Worker             if(!((u4_bs_horz >> u4_horz_idx) & 0xf))
843*495ae853SAndroid Build Coastguard Worker             {
844*495ae853SAndroid Build Coastguard Worker                 WORD16 i2_top_mv0, i2_top_mv1, i16_topMv2, i16_topMv3;
845*495ae853SAndroid Build Coastguard Worker                 /************************************************************/
846*495ae853SAndroid Build Coastguard Worker                 /* If Bs is not set, use top edge and current edge mvs and  */
847*495ae853SAndroid Build Coastguard Worker                 /* reference pictures addresses to evaluate Bs==1           */
848*495ae853SAndroid Build Coastguard Worker                 /************************************************************/
849*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0];
850*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1];
851*495ae853SAndroid Build Coastguard Worker                 i16_curMv2 = ps_cur_mv_pred->i2_mv[2];
852*495ae853SAndroid Build Coastguard Worker                 i16_curMv3 = ps_cur_mv_pred->i2_mv[3];
853*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0];
854*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref1 = ps_cur_mv_pred->i1_ref_frame[1];
855*495ae853SAndroid Build Coastguard Worker 
856*495ae853SAndroid Build Coastguard Worker                 i2_top_mv0 = ps_top_mv_pred->i2_mv[0];
857*495ae853SAndroid Build Coastguard Worker                 i2_top_mv1 = ps_top_mv_pred->i2_mv[1];
858*495ae853SAndroid Build Coastguard Worker                 i16_topMv2 = ps_top_mv_pred->i2_mv[2];
859*495ae853SAndroid Build Coastguard Worker                 i16_topMv3 = ps_top_mv_pred->i2_mv[3];
860*495ae853SAndroid Build Coastguard Worker                 pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0];
861*495ae853SAndroid Build Coastguard Worker                 pv_cur_pic_addr1 = ppv_map_ref_idx_to_poc_l1[i1_cur_ref1];
862*495ae853SAndroid Build Coastguard Worker                 if(edge)
863*495ae853SAndroid Build Coastguard Worker                 {
864*495ae853SAndroid Build Coastguard Worker                     WORD8 i1_top_ref0, i1_top_ref1;
865*495ae853SAndroid Build Coastguard Worker                     i1_top_ref0 = ps_top_mv_pred->i1_ref_frame[0];
866*495ae853SAndroid Build Coastguard Worker                     i1_top_ref1 = ps_top_mv_pred->i1_ref_frame[1];
867*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_top_ref0];
868*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr1 = ppv_map_ref_idx_to_poc_l1[i1_top_ref1];
869*495ae853SAndroid Build Coastguard Worker                 }
870*495ae853SAndroid Build Coastguard Worker                 else
871*495ae853SAndroid Build Coastguard Worker                 {
872*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr0 = u4_pic_addrress[i & 2];
873*495ae853SAndroid Build Coastguard Worker                     pv_nbr_pic_addr1 = u4_pic_addrress[1 + (i & 2)];
874*495ae853SAndroid Build Coastguard Worker                 }
875*495ae853SAndroid Build Coastguard Worker 
876*495ae853SAndroid Build Coastguard Worker                 {
877*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_bs_temp1, u4_bs_temp2;
878*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_bs;
879*495ae853SAndroid Build Coastguard Worker                     /*********************************************************/
880*495ae853SAndroid Build Coastguard Worker                     /* If any motion vector component differs by more than 1 */
881*495ae853SAndroid Build Coastguard Worker                     /* integer pel or if reference pictures are different Bs */
882*495ae853SAndroid Build Coastguard Worker                     /* is set to 1. Note that this condition shall be met for*/
883*495ae853SAndroid Build Coastguard Worker                     /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/
884*495ae853SAndroid Build Coastguard Worker                     /*********************************************************/
885*495ae853SAndroid Build Coastguard Worker 
886*495ae853SAndroid Build Coastguard Worker                     u4_bs_temp1 =
887*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_top_mv0 - i2_cur_mv0))
888*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
889*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_top_mv1
890*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
891*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit)
892*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i16_topMv2
893*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv2))
894*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
895*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i16_topMv3
896*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv3))
897*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit));
898*495ae853SAndroid Build Coastguard Worker 
899*495ae853SAndroid Build Coastguard Worker                     u4_bs_temp2 =
900*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_top_mv0 - i16_curMv2))
901*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
902*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_top_mv1
903*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv3))
904*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit)
905*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i16_topMv2
906*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv0))
907*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
908*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i16_topMv3
909*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
910*495ae853SAndroid Build Coastguard Worker                                                                     >= i4_ver_mvlimit));
911*495ae853SAndroid Build Coastguard Worker 
912*495ae853SAndroid Build Coastguard Worker                     u4_bs =
913*495ae853SAndroid Build Coastguard Worker                                     ((pv_nbr_pic_addr0 != pv_cur_pic_addr0)
914*495ae853SAndroid Build Coastguard Worker                                                     || (pv_nbr_pic_addr1
915*495ae853SAndroid Build Coastguard Worker                                                                     != pv_cur_pic_addr1)
916*495ae853SAndroid Build Coastguard Worker                                                     || u4_bs_temp1)
917*495ae853SAndroid Build Coastguard Worker                                                     && ((pv_nbr_pic_addr0
918*495ae853SAndroid Build Coastguard Worker                                                                     != pv_cur_pic_addr1)
919*495ae853SAndroid Build Coastguard Worker                                                                     || (pv_nbr_pic_addr1
920*495ae853SAndroid Build Coastguard Worker                                                                                     != pv_cur_pic_addr0)
921*495ae853SAndroid Build Coastguard Worker                                                                     || u4_bs_temp2);
922*495ae853SAndroid Build Coastguard Worker 
923*495ae853SAndroid Build Coastguard Worker                     u4_bs_horz |= (u4_bs << u4_horz_idx);
924*495ae853SAndroid Build Coastguard Worker                 }
925*495ae853SAndroid Build Coastguard Worker             }
926*495ae853SAndroid Build Coastguard Worker 
927*495ae853SAndroid Build Coastguard Worker             ps_left_mv_pred = ps_cur_mv_pred;
928*495ae853SAndroid Build Coastguard Worker         }
929*495ae853SAndroid Build Coastguard Worker 
930*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[edge] = u4_bs_horz;
931*495ae853SAndroid Build Coastguard Worker     }
932*495ae853SAndroid Build Coastguard Worker }
933*495ae853SAndroid Build Coastguard Worker 
934*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
935*495ae853SAndroid Build Coastguard Worker /*                                                                           */
936*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_fill_bs_xtra_left_edge_cur_fld                           */
937*495ae853SAndroid Build Coastguard Worker /*                                                                           */
938*495ae853SAndroid Build Coastguard Worker /*  Description   : This function fills boundray strength (= 2 or 1) for     */
939*495ae853SAndroid Build Coastguard Worker /*                  xtra left mb edge when cur mb is field and left mb is    */
940*495ae853SAndroid Build Coastguard Worker /*                  frame.                                                   */
941*495ae853SAndroid Build Coastguard Worker /*  Inputs        :                                                          */
942*495ae853SAndroid Build Coastguard Worker /*                                                                           */
943*495ae853SAndroid Build Coastguard Worker /*  Globals       : <Does it use any global variables?>                      */
944*495ae853SAndroid Build Coastguard Worker /*  Processing    :                                                          */
945*495ae853SAndroid Build Coastguard Worker /*                                                                           */
946*495ae853SAndroid Build Coastguard Worker /*                                                                           */
947*495ae853SAndroid Build Coastguard Worker /*  Outputs       : <What does the function produce?>                        */
948*495ae853SAndroid Build Coastguard Worker /*  Returns       : <What does the function return?>                         */
949*495ae853SAndroid Build Coastguard Worker /*                                                                           */
950*495ae853SAndroid Build Coastguard Worker /*  Issues        : <List any issues or problems with this function>         */
951*495ae853SAndroid Build Coastguard Worker /*                                                                           */
952*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
953*495ae853SAndroid Build Coastguard Worker /*                                                                           */
954*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
955*495ae853SAndroid Build Coastguard Worker /*         16 10 2008   Jay             Draft                                */
956*495ae853SAndroid Build Coastguard Worker /*                                                                           */
957*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_fill_bs_xtra_left_edge_cur_fld(UWORD32 * pu4_bs,WORD32 u4_left_mb_t_csbp,WORD32 u4_left_mb_b_csbp,WORD32 u4_cur_mb_csbp,UWORD32 u4_cur_mb_top)958*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs_xtra_left_edge_cur_fld(UWORD32 *pu4_bs, /* Base pointer of BS table */
959*495ae853SAndroid Build Coastguard Worker                                            WORD32 u4_left_mb_t_csbp, /* left mbpair's top csbp   */
960*495ae853SAndroid Build Coastguard Worker                                            WORD32 u4_left_mb_b_csbp, /* left mbpair's bottom csbp*/
961*495ae853SAndroid Build Coastguard Worker                                            WORD32 u4_cur_mb_csbp, /* csbp of current mb */
962*495ae853SAndroid Build Coastguard Worker                                            UWORD32 u4_cur_mb_top /* is top or bottom mb */
963*495ae853SAndroid Build Coastguard Worker 
964*495ae853SAndroid Build Coastguard Worker                                            )
965*495ae853SAndroid Build Coastguard Worker {
966*495ae853SAndroid Build Coastguard Worker     const UWORD32 *pu4_packed_bs = (const UWORD32 *)gau4_ih264d_packed_bs2;
967*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_cur, u4_left, u4_or;
968*495ae853SAndroid Build Coastguard Worker     UNUSED(u4_cur_mb_top);
969*495ae853SAndroid Build Coastguard Worker 
970*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
971*495ae853SAndroid Build Coastguard Worker 
972*495ae853SAndroid Build Coastguard Worker     u4_left_mb_t_csbp = ((u4_left_mb_t_csbp & 0x0008) >> 3)
973*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_t_csbp & 0x0080) >> 6)
974*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_t_csbp & 0x0800) >> 9)
975*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_t_csbp & 0x8000) >> 12);
976*495ae853SAndroid Build Coastguard Worker 
977*495ae853SAndroid Build Coastguard Worker     u4_left_mb_b_csbp = ((u4_left_mb_b_csbp & 0x0008) << 1)
978*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_b_csbp & 0x0080) >> 2)
979*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_b_csbp & 0x0800) >> 5)
980*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_b_csbp & 0x8000) >> 8);
981*495ae853SAndroid Build Coastguard Worker 
982*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
983*495ae853SAndroid Build Coastguard Worker     /* u4_cur = 0|0|0|0|0|0|0|0|12C|12C|8C|8C|4C|4C|0C|0C                */
984*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
985*495ae853SAndroid Build Coastguard Worker     u4_cur = (u4_cur_mb_csbp & 0x0001) + ((u4_cur_mb_csbp & 0x0001) << 1)
986*495ae853SAndroid Build Coastguard Worker                     + ((u4_cur_mb_csbp & 0x0010) >> 2)
987*495ae853SAndroid Build Coastguard Worker                     + ((u4_cur_mb_csbp & 0x0010) >> 1)
988*495ae853SAndroid Build Coastguard Worker                     + ((u4_cur_mb_csbp & 0x0100) >> 4)
989*495ae853SAndroid Build Coastguard Worker                     + ((u4_cur_mb_csbp & 0x0100) >> 3)
990*495ae853SAndroid Build Coastguard Worker                     + ((u4_cur_mb_csbp & 0x1000) >> 6)
991*495ae853SAndroid Build Coastguard Worker                     + ((u4_cur_mb_csbp & 0x1000) >> 5);
992*495ae853SAndroid Build Coastguard Worker 
993*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
994*495ae853SAndroid Build Coastguard Worker     /* u4_left =0|0|0|0|0|0|0|0|15Lb|11Lb|7Lb|3Lb|15Lt|11Lt|7Lt|3Lt      */
995*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
996*495ae853SAndroid Build Coastguard Worker     u4_left = u4_left_mb_t_csbp + u4_left_mb_b_csbp;
997*495ae853SAndroid Build Coastguard Worker 
998*495ae853SAndroid Build Coastguard Worker     u4_or = (u4_cur | u4_left);
999*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
1000*495ae853SAndroid Build Coastguard Worker     /* Fill vert edges (4,9) boundary strengths  using look up table     */
1001*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
1002*495ae853SAndroid Build Coastguard Worker     pu4_packed_bs += 16;
1003*495ae853SAndroid Build Coastguard Worker     pu4_bs[4] = pu4_packed_bs[u4_or & 0xF];
1004*495ae853SAndroid Build Coastguard Worker     pu4_bs[9] = pu4_packed_bs[(u4_or >> 4)];
1005*495ae853SAndroid Build Coastguard Worker }
1006*495ae853SAndroid Build Coastguard Worker 
1007*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1008*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1009*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_fill_bs_xtra_left_edge_cur_frm                           */
1010*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1011*495ae853SAndroid Build Coastguard Worker /*  Description   : This function fills boundray strength (= 2 or 1) for     */
1012*495ae853SAndroid Build Coastguard Worker /*                  xtra left mb edge when cur mb is frame and left mb is    */
1013*495ae853SAndroid Build Coastguard Worker /*                  field.                                                   */
1014*495ae853SAndroid Build Coastguard Worker /*  Inputs        :                                                          */
1015*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1016*495ae853SAndroid Build Coastguard Worker /*  Globals       : <Does it use any global variables?>                      */
1017*495ae853SAndroid Build Coastguard Worker /*  Processing    :                                                          */
1018*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1019*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1020*495ae853SAndroid Build Coastguard Worker /*  Outputs       : <What does the function produce?>                        */
1021*495ae853SAndroid Build Coastguard Worker /*  Returns       : <What does the function return?>                         */
1022*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1023*495ae853SAndroid Build Coastguard Worker /*  Issues        : <List any issues or problems with this function>         */
1024*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1025*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
1026*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1027*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
1028*495ae853SAndroid Build Coastguard Worker /*         16 10 2008   Jay             Draft                                */
1029*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1030*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_fill_bs_xtra_left_edge_cur_frm(UWORD32 * pu4_bs,WORD32 u4_left_mb_t_csbp,WORD32 u4_left_mb_b_csbp,WORD32 u4_cur_mb_csbp,UWORD32 u4_cur_mb_bot)1031*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs_xtra_left_edge_cur_frm(UWORD32 *pu4_bs, /* Base pointer of BS table */
1032*495ae853SAndroid Build Coastguard Worker                                            WORD32 u4_left_mb_t_csbp, /* left mbpair's top csbp   */
1033*495ae853SAndroid Build Coastguard Worker                                            WORD32 u4_left_mb_b_csbp, /* left mbpair's bottom csbp*/
1034*495ae853SAndroid Build Coastguard Worker                                            WORD32 u4_cur_mb_csbp, /* csbp of current mb */
1035*495ae853SAndroid Build Coastguard Worker                                            UWORD32 u4_cur_mb_bot /* is top or bottom mb */
1036*495ae853SAndroid Build Coastguard Worker 
1037*495ae853SAndroid Build Coastguard Worker                                            )
1038*495ae853SAndroid Build Coastguard Worker {
1039*495ae853SAndroid Build Coastguard Worker     const UWORD32 *pu4_packed_bs = (const UWORD32 *)gau4_ih264d_packed_bs2;
1040*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_cur, u4_left, u4_or;
1041*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_right_shift = (u4_cur_mb_bot << 3);
1042*495ae853SAndroid Build Coastguard Worker 
1043*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
1044*495ae853SAndroid Build Coastguard Worker 
1045*495ae853SAndroid Build Coastguard Worker     u4_left_mb_t_csbp >>= u4_right_shift;
1046*495ae853SAndroid Build Coastguard Worker     u4_left_mb_b_csbp >>= u4_right_shift;
1047*495ae853SAndroid Build Coastguard Worker 
1048*495ae853SAndroid Build Coastguard Worker     u4_left_mb_t_csbp = ((u4_left_mb_t_csbp & 0x08) >> 3)
1049*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_t_csbp & 0x08) >> 2)
1050*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_t_csbp & 0x80) >> 5)
1051*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_t_csbp & 0x80) >> 4);
1052*495ae853SAndroid Build Coastguard Worker 
1053*495ae853SAndroid Build Coastguard Worker     u4_left_mb_b_csbp = ((u4_left_mb_b_csbp & 0x08) << 1)
1054*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_b_csbp & 0x08) << 2)
1055*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_b_csbp & 0x80) >> 1)
1056*495ae853SAndroid Build Coastguard Worker                     + ((u4_left_mb_b_csbp & 0x80));
1057*495ae853SAndroid Build Coastguard Worker 
1058*495ae853SAndroid Build Coastguard Worker     u4_cur = ((u4_cur_mb_csbp & 0x0001)) + ((u4_cur_mb_csbp & 0x0010) >> 3)
1059*495ae853SAndroid Build Coastguard Worker                     + ((u4_cur_mb_csbp & 0x0100) >> 6)
1060*495ae853SAndroid Build Coastguard Worker                     + ((u4_cur_mb_csbp & 0x1000) >> 9);
1061*495ae853SAndroid Build Coastguard Worker 
1062*495ae853SAndroid Build Coastguard Worker     u4_cur += (u4_cur << 4);
1063*495ae853SAndroid Build Coastguard Worker 
1064*495ae853SAndroid Build Coastguard Worker     u4_left = u4_left_mb_t_csbp + u4_left_mb_b_csbp;
1065*495ae853SAndroid Build Coastguard Worker 
1066*495ae853SAndroid Build Coastguard Worker     u4_or = (u4_cur | u4_left);
1067*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
1068*495ae853SAndroid Build Coastguard Worker     /* Fill vert edges (4,9) boundary strengths  using look up table     */
1069*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
1070*495ae853SAndroid Build Coastguard Worker     pu4_packed_bs += 16;
1071*495ae853SAndroid Build Coastguard Worker     pu4_bs[4] = pu4_packed_bs[u4_or & 0xF];
1072*495ae853SAndroid Build Coastguard Worker     pu4_bs[9] = pu4_packed_bs[(u4_or >> 4)];
1073*495ae853SAndroid Build Coastguard Worker }
1074*495ae853SAndroid Build Coastguard Worker 
1075*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1076*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1077*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_fill_bs_xtra_top_edge                                    */
1078*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1079*495ae853SAndroid Build Coastguard Worker /*  Description   : This function fills boundray strength (= 2 or 1) for     */
1080*495ae853SAndroid Build Coastguard Worker /*                  xtra top mb edge when cur mb is top mb of frame mb pair  */
1081*495ae853SAndroid Build Coastguard Worker /*                  and top mbpair is field coded.                           */
1082*495ae853SAndroid Build Coastguard Worker /*  Inputs        :                                                          */
1083*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1084*495ae853SAndroid Build Coastguard Worker /*  Globals       : <Does it use any global variables?>                      */
1085*495ae853SAndroid Build Coastguard Worker /*  Processing    :                                                          */
1086*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1087*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1088*495ae853SAndroid Build Coastguard Worker /*  Outputs       : <What does the function produce?>                        */
1089*495ae853SAndroid Build Coastguard Worker /*  Returns       : <What does the function return?>                         */
1090*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1091*495ae853SAndroid Build Coastguard Worker /*  Issues        : <List any issues or problems with this function>         */
1092*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1093*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
1094*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1095*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
1096*495ae853SAndroid Build Coastguard Worker /*         16 10 2008   Jay             Draft                                */
1097*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1098*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_fill_bs_xtra_top_edge(UWORD32 * pu4_bs,WORD32 u4_topmb_t_csbp,WORD32 u4_topmb_b_csbp,WORD32 u4_cur_mb_csbp)1099*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs_xtra_top_edge(UWORD32 *pu4_bs, /* Base pointer of BS table */
1100*495ae853SAndroid Build Coastguard Worker                                   WORD32 u4_topmb_t_csbp, /* top mbpair's top csbp   */
1101*495ae853SAndroid Build Coastguard Worker                                   WORD32 u4_topmb_b_csbp, /* top mbpair's bottom csbp*/
1102*495ae853SAndroid Build Coastguard Worker                                   WORD32 u4_cur_mb_csbp /* csbp of current mb */
1103*495ae853SAndroid Build Coastguard Worker 
1104*495ae853SAndroid Build Coastguard Worker                                   )
1105*495ae853SAndroid Build Coastguard Worker {
1106*495ae853SAndroid Build Coastguard Worker     const UWORD32 *pu4_packed_bs = (const UWORD32 *)gau4_ih264d_packed_bs2;
1107*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_or;
1108*495ae853SAndroid Build Coastguard Worker 
1109*495ae853SAndroid Build Coastguard Worker     u4_cur_mb_csbp &= 0xf;
1110*495ae853SAndroid Build Coastguard Worker     u4_topmb_t_csbp >>= 12;
1111*495ae853SAndroid Build Coastguard Worker     u4_topmb_b_csbp >>= 12;
1112*495ae853SAndroid Build Coastguard Worker 
1113*495ae853SAndroid Build Coastguard Worker     u4_or = (u4_cur_mb_csbp | u4_topmb_t_csbp);
1114*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
1115*495ae853SAndroid Build Coastguard Worker     /* Fill vert edges (0,8) boundary strengths  using look up table     */
1116*495ae853SAndroid Build Coastguard Worker     /*********************************************************************/
1117*495ae853SAndroid Build Coastguard Worker     pu4_packed_bs += 16;
1118*495ae853SAndroid Build Coastguard Worker     pu4_bs[8] = pu4_packed_bs[u4_or];
1119*495ae853SAndroid Build Coastguard Worker 
1120*495ae853SAndroid Build Coastguard Worker     u4_or = (u4_cur_mb_csbp | u4_topmb_b_csbp);
1121*495ae853SAndroid Build Coastguard Worker     pu4_bs[0] = pu4_packed_bs[u4_or];
1122*495ae853SAndroid Build Coastguard Worker }
1123*495ae853SAndroid Build Coastguard Worker 
1124*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1125*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1126*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_compute_bs_non_mbaff                                        */
1127*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1128*495ae853SAndroid Build Coastguard Worker /*  Description   : This function computes the pointers of left,top & current*/
1129*495ae853SAndroid Build Coastguard Worker /*                : Nnz, MvPred & deblk_mb_t and supplies to FillBs function for*/
1130*495ae853SAndroid Build Coastguard Worker /*                : Boundary Strength Calculation                            */
1131*495ae853SAndroid Build Coastguard Worker /*  Inputs        : <What inputs does the function take?>                    */
1132*495ae853SAndroid Build Coastguard Worker /*  Processing    : This functions calls deblock MB in the MB increment order*/
1133*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1134*495ae853SAndroid Build Coastguard Worker /*  Outputs       : Produces the Boundary Strength for Current Mb            */
1135*495ae853SAndroid Build Coastguard Worker /*  Returns       : None                                                     */
1136*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1137*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
1138*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1139*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
1140*495ae853SAndroid Build Coastguard Worker /*                      ITTIAM                                               */
1141*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1142*495ae853SAndroid Build Coastguard Worker 
ih264d_compute_bs_non_mbaff(dec_struct_t * ps_dec,dec_mb_info_t * ps_cur_mb_info,const UWORD16 u2_mbxn_mb)1143*495ae853SAndroid Build Coastguard Worker void ih264d_compute_bs_non_mbaff(dec_struct_t * ps_dec,
1144*495ae853SAndroid Build Coastguard Worker                                  dec_mb_info_t * ps_cur_mb_info,
1145*495ae853SAndroid Build Coastguard Worker                                  const UWORD16 u2_mbxn_mb)
1146*495ae853SAndroid Build Coastguard Worker {
1147*495ae853SAndroid Build Coastguard Worker     /* Mvpred and Nnz for top and Courrent */
1148*495ae853SAndroid Build Coastguard Worker     mv_pred_t *ps_cur_mv_pred, *ps_top_mv_pred = NULL, *ps_left_mv_pred;
1149*495ae853SAndroid Build Coastguard Worker     /* deblk_mb_t Params */
1150*495ae853SAndroid Build Coastguard Worker     deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */
1151*495ae853SAndroid Build Coastguard Worker     deblkmb_neighbour_t *ps_deblk_top_mb;
1152*495ae853SAndroid Build Coastguard Worker 
1153*495ae853SAndroid Build Coastguard Worker     /* Reference Index to POC mapping*/
1154*495ae853SAndroid Build Coastguard Worker     void ** apv_map_ref_idx_to_poc;
1155*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_leftmbtype;
1156*495ae853SAndroid Build Coastguard Worker 
1157*495ae853SAndroid Build Coastguard Worker     UWORD16 u2_left_csbp, u2_top_csbp, u2_cur_csbp;
1158*495ae853SAndroid Build Coastguard Worker 
1159*495ae853SAndroid Build Coastguard Worker     /* Set of flags */
1160*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_cur_mb_intra, u1_top_mb_typ, u4_cur_mb_fld;
1161*495ae853SAndroid Build Coastguard Worker     UWORD32 u1_cur_mb_type;
1162*495ae853SAndroid Build Coastguard Worker     UWORD32 * pu4_bs_table;
1163*495ae853SAndroid Build Coastguard Worker 
1164*495ae853SAndroid Build Coastguard Worker     /* Neighbour availability */
1165*495ae853SAndroid Build Coastguard Worker     /* Initialization */
1166*495ae853SAndroid Build Coastguard Worker     const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx;
1167*495ae853SAndroid Build Coastguard Worker     const UWORD32 u2_mby = ps_cur_mb_info->u2_mby;
1168*495ae853SAndroid Build Coastguard Worker     const UWORD32 u1_pingpong = u2_mbx & 0x01;
1169*495ae853SAndroid Build Coastguard Worker 
1170*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
1171*495ae853SAndroid Build Coastguard Worker 
1172*495ae853SAndroid Build Coastguard Worker     ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + u2_mbx;
1173*495ae853SAndroid Build Coastguard Worker 
1174*495ae853SAndroid Build Coastguard Worker 
1175*495ae853SAndroid Build Coastguard Worker     /* Pointer assignment for Current DeblkMB, Current Mv Pred  */
1176*495ae853SAndroid Build Coastguard Worker     ps_cur_mb_params = ps_dec->ps_deblk_mbn + u2_mbxn_mb;
1177*495ae853SAndroid Build Coastguard Worker     ps_cur_mv_pred = ps_dec->ps_mv_cur + (u2_mbxn_mb << 4);
1178*495ae853SAndroid Build Coastguard Worker 
1179*495ae853SAndroid Build Coastguard Worker     apv_map_ref_idx_to_poc = ps_dec->ppv_map_ref_idx_to_poc + 1;
1180*495ae853SAndroid Build Coastguard Worker     u1_cur_mb_type = ps_cur_mb_params->u1_mb_type;
1181*495ae853SAndroid Build Coastguard Worker     u1_top_mb_typ = ps_deblk_top_mb->u1_mb_type;
1182*495ae853SAndroid Build Coastguard Worker     ps_deblk_top_mb->u1_mb_type = u1_cur_mb_type;
1183*495ae853SAndroid Build Coastguard Worker 
1184*495ae853SAndroid Build Coastguard Worker     {
1185*495ae853SAndroid Build Coastguard Worker         UWORD8 mb_qp_temp;
1186*495ae853SAndroid Build Coastguard Worker 
1187*495ae853SAndroid Build Coastguard Worker         ps_cur_mb_params->u1_topmb_qp = ps_deblk_top_mb->u1_mb_qp;
1188*495ae853SAndroid Build Coastguard Worker         ps_deblk_top_mb->u1_mb_qp = ps_cur_mb_params->u1_mb_qp;
1189*495ae853SAndroid Build Coastguard Worker 
1190*495ae853SAndroid Build Coastguard Worker         ps_cur_mb_params->u1_left_mb_qp = ps_dec->deblk_left_mb[1].u1_mb_qp;
1191*495ae853SAndroid Build Coastguard Worker         ps_dec->deblk_left_mb[1].u1_mb_qp = ps_cur_mb_params->u1_mb_qp;
1192*495ae853SAndroid Build Coastguard Worker 
1193*495ae853SAndroid Build Coastguard Worker     }
1194*495ae853SAndroid Build Coastguard Worker 
1195*495ae853SAndroid Build Coastguard Worker     /* if no deblocking required for current Mb then continue */
1196*495ae853SAndroid Build Coastguard Worker     /* Check next Mbs   in Mb group                           */
1197*495ae853SAndroid Build Coastguard Worker     if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING)
1198*495ae853SAndroid Build Coastguard Worker     {
1199*495ae853SAndroid Build Coastguard Worker         void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc +
1200*495ae853SAndroid Build Coastguard Worker         POC_LIST_L0_TO_L1_DIFF;
1201*495ae853SAndroid Build Coastguard Worker         {
1202*495ae853SAndroid Build Coastguard Worker             /* Store Parameter for Top MvPred refernce frame Address */
1203*495ae853SAndroid Build Coastguard Worker 
1204*495ae853SAndroid Build Coastguard Worker             void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress;
1205*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame;
1206*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame;
1207*495ae853SAndroid Build Coastguard Worker 
1208*495ae853SAndroid Build Coastguard Worker             /* Store Left addresses for Next Mb   */
1209*495ae853SAndroid Build Coastguard Worker             void ** ppv_left_mv_pred_addr =
1210*495ae853SAndroid Build Coastguard Worker                             ps_dec->ps_left_mvpred_addr[!u1_pingpong][1].u4_add;
1211*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refleft0 = (ps_cur_mv_pred + 3)->i1_ref_frame;
1212*495ae853SAndroid Build Coastguard Worker 
1213*495ae853SAndroid Build Coastguard Worker 
1214*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]];
1215*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]];
1216*495ae853SAndroid Build Coastguard Worker 
1217*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1218*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1219*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1220*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1221*495ae853SAndroid Build Coastguard Worker 
1222*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refleft0[0]];
1223*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refleft0[1]];
1224*495ae853SAndroid Build Coastguard Worker             //}
1225*495ae853SAndroid Build Coastguard Worker             /* Storing the leftMbtype for next Mb */
1226*495ae853SAndroid Build Coastguard Worker             ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type;
1227*495ae853SAndroid Build Coastguard Worker         }
1228*495ae853SAndroid Build Coastguard Worker 
1229*495ae853SAndroid Build Coastguard Worker         return;
1230*495ae853SAndroid Build Coastguard Worker     }
1231*495ae853SAndroid Build Coastguard Worker 
1232*495ae853SAndroid Build Coastguard Worker     /* Flag for extra left Edge */
1233*495ae853SAndroid Build Coastguard Worker     ps_cur_mb_params->u1_single_call = 1;
1234*495ae853SAndroid Build Coastguard Worker 
1235*495ae853SAndroid Build Coastguard Worker     /* Update the Left deblk_mb_t and Left MvPred Parameters           */
1236*495ae853SAndroid Build Coastguard Worker     if(!u2_mbx)
1237*495ae853SAndroid Build Coastguard Worker     {
1238*495ae853SAndroid Build Coastguard Worker         u4_leftmbtype = 0;
1239*495ae853SAndroid Build Coastguard Worker 
1240*495ae853SAndroid Build Coastguard Worker         /* Initialize the ps_left_mv_pred with Junk but Valid Location */
1241*495ae853SAndroid Build Coastguard Worker         /* to avoid invalid memory access                           */
1242*495ae853SAndroid Build Coastguard Worker         /* this is read only pointer                                */
1243*495ae853SAndroid Build Coastguard Worker         ps_left_mv_pred = ps_dec->ps_mv_cur + 3;
1244*495ae853SAndroid Build Coastguard Worker     }
1245*495ae853SAndroid Build Coastguard Worker     else
1246*495ae853SAndroid Build Coastguard Worker     {
1247*495ae853SAndroid Build Coastguard Worker         u4_leftmbtype = ps_dec->deblk_left_mb[1].u1_mb_type;
1248*495ae853SAndroid Build Coastguard Worker 
1249*495ae853SAndroid Build Coastguard Worker         /* Come to Left Most Edge of the MB */
1250*495ae853SAndroid Build Coastguard Worker         ps_left_mv_pred = (u2_mbxn_mb) ?
1251*495ae853SAndroid Build Coastguard Worker                         ps_dec->ps_mv_cur + ((u2_mbxn_mb - 1) << 4) + 3 :
1252*495ae853SAndroid Build Coastguard Worker                         ps_dec->ps_mv_left + 3;
1253*495ae853SAndroid Build Coastguard Worker     }
1254*495ae853SAndroid Build Coastguard Worker 
1255*495ae853SAndroid Build Coastguard Worker     if(!u2_mby)
1256*495ae853SAndroid Build Coastguard Worker         u1_top_mb_typ = 0;
1257*495ae853SAndroid Build Coastguard Worker 
1258*495ae853SAndroid Build Coastguard Worker     /* MvPred Pointer Calculation */
1259*495ae853SAndroid Build Coastguard Worker     /* CHANGED CODE */
1260*495ae853SAndroid Build Coastguard Worker     ps_top_mv_pred = ps_cur_mv_pred - (ps_dec->u2_frm_wd_in_mbs << 4) + 12;
1261*495ae853SAndroid Build Coastguard Worker 
1262*495ae853SAndroid Build Coastguard Worker     u4_cur_mb_intra = u1_cur_mb_type & D_INTRA_MB;
1263*495ae853SAndroid Build Coastguard Worker     u4_cur_mb_fld = !!(u1_cur_mb_type & D_FLD_MB);
1264*495ae853SAndroid Build Coastguard Worker     /* Compute BS function */
1265*495ae853SAndroid Build Coastguard Worker     pu4_bs_table = ps_cur_mb_params->u4_bs_table;
1266*495ae853SAndroid Build Coastguard Worker 
1267*495ae853SAndroid Build Coastguard Worker     u2_cur_csbp = ps_cur_mb_info->ps_curmb->u2_luma_csbp;
1268*495ae853SAndroid Build Coastguard Worker     u2_left_csbp = ps_cur_mb_info->ps_left_mb->u2_luma_csbp;
1269*495ae853SAndroid Build Coastguard Worker     u2_top_csbp = ps_cur_mb_info->ps_top_mb->u2_luma_csbp;
1270*495ae853SAndroid Build Coastguard Worker     /* Compute BS function */
1271*495ae853SAndroid Build Coastguard Worker     if(ps_dec->ps_cur_sps->u1_profile_idc == HIGH_PROFILE_IDC)
1272*495ae853SAndroid Build Coastguard Worker     {
1273*495ae853SAndroid Build Coastguard Worker         if(ps_cur_mb_info->u1_tran_form8x8 == 1)
1274*495ae853SAndroid Build Coastguard Worker         {
1275*495ae853SAndroid Build Coastguard Worker             u2_cur_csbp = ih264d_update_csbp_8x8(
1276*495ae853SAndroid Build Coastguard Worker                             ps_cur_mb_info->ps_curmb->u2_luma_csbp);
1277*495ae853SAndroid Build Coastguard Worker         }
1278*495ae853SAndroid Build Coastguard Worker 
1279*495ae853SAndroid Build Coastguard Worker         if(ps_cur_mb_info->ps_left_mb->u1_tran_form8x8 == 1)
1280*495ae853SAndroid Build Coastguard Worker         {
1281*495ae853SAndroid Build Coastguard Worker             u2_left_csbp = ih264d_update_csbp_8x8(
1282*495ae853SAndroid Build Coastguard Worker                             ps_cur_mb_info->ps_left_mb->u2_luma_csbp);
1283*495ae853SAndroid Build Coastguard Worker         }
1284*495ae853SAndroid Build Coastguard Worker 
1285*495ae853SAndroid Build Coastguard Worker         if(ps_cur_mb_info->ps_top_mb->u1_tran_form8x8 == 1)
1286*495ae853SAndroid Build Coastguard Worker         {
1287*495ae853SAndroid Build Coastguard Worker             u2_top_csbp = ih264d_update_csbp_8x8(
1288*495ae853SAndroid Build Coastguard Worker                             ps_cur_mb_info->ps_top_mb->u2_luma_csbp);
1289*495ae853SAndroid Build Coastguard Worker         }
1290*495ae853SAndroid Build Coastguard Worker     }
1291*495ae853SAndroid Build Coastguard Worker     if(u4_cur_mb_intra)
1292*495ae853SAndroid Build Coastguard Worker     {
1293*495ae853SAndroid Build Coastguard Worker 
1294*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[4] = 0x04040404;
1295*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404;
1296*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[1] = 0x03030303;
1297*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[2] = 0x03030303;
1298*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[3] = 0x03030303;
1299*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[5] = 0x03030303;
1300*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[6] = 0x03030303;
1301*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[7] = 0x03030303;
1302*495ae853SAndroid Build Coastguard Worker     }
1303*495ae853SAndroid Build Coastguard Worker     else
1304*495ae853SAndroid Build Coastguard Worker     {
1305*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_is_non16x16 = !!(u1_cur_mb_type & D_PRED_NON_16x16);
1306*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_is_b = ps_dec->u1_B;
1307*495ae853SAndroid Build Coastguard Worker 
1308*495ae853SAndroid Build Coastguard Worker         ih264d_fill_bs2_horz_vert(
1309*495ae853SAndroid Build Coastguard Worker                         pu4_bs_table, u2_left_csbp, u2_top_csbp, u2_cur_csbp,
1310*495ae853SAndroid Build Coastguard Worker                         (const UWORD32 *)(gau4_ih264d_packed_bs2),
1311*495ae853SAndroid Build Coastguard Worker                         (const UWORD16 *)(gau2_ih264d_4x4_v2h_reorder));
1312*495ae853SAndroid Build Coastguard Worker 
1313*495ae853SAndroid Build Coastguard Worker         if(u4_leftmbtype & D_INTRA_MB)
1314*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[4] = 0x04040404;
1315*495ae853SAndroid Build Coastguard Worker 
1316*495ae853SAndroid Build Coastguard Worker         if(u1_top_mb_typ & D_INTRA_MB)
1317*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404;
1318*495ae853SAndroid Build Coastguard Worker 
1319*495ae853SAndroid Build Coastguard Worker         ps_dec->pf_fill_bs1[u4_is_b][u4_is_non16x16](
1320*495ae853SAndroid Build Coastguard Worker                         ps_cur_mv_pred, ps_top_mv_pred, apv_map_ref_idx_to_poc,
1321*495ae853SAndroid Build Coastguard Worker                         pu4_bs_table, ps_left_mv_pred,
1322*495ae853SAndroid Build Coastguard Worker                         &(ps_dec->ps_left_mvpred_addr[u1_pingpong][1]),
1323*495ae853SAndroid Build Coastguard Worker                         ps_cur_mb_info->ps_top_mb->u4_pic_addrress,
1324*495ae853SAndroid Build Coastguard Worker                         (4 >> u4_cur_mb_fld));
1325*495ae853SAndroid Build Coastguard Worker     }
1326*495ae853SAndroid Build Coastguard Worker 
1327*495ae853SAndroid Build Coastguard Worker     {
1328*495ae853SAndroid Build Coastguard Worker         void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc +
1329*495ae853SAndroid Build Coastguard Worker         POC_LIST_L0_TO_L1_DIFF;
1330*495ae853SAndroid Build Coastguard Worker         {
1331*495ae853SAndroid Build Coastguard Worker             /* Store Parameter for Top MvPred refernce frame Address */
1332*495ae853SAndroid Build Coastguard Worker 
1333*495ae853SAndroid Build Coastguard Worker             void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress;
1334*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame;
1335*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame;
1336*495ae853SAndroid Build Coastguard Worker 
1337*495ae853SAndroid Build Coastguard Worker             /* Store Left addresses for Next Mb   */
1338*495ae853SAndroid Build Coastguard Worker             void ** ppv_left_mv_pred_addr =
1339*495ae853SAndroid Build Coastguard Worker                             ps_dec->ps_left_mvpred_addr[!u1_pingpong][1].u4_add;
1340*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refleft0 = (ps_cur_mv_pred + 3)->i1_ref_frame;
1341*495ae853SAndroid Build Coastguard Worker 
1342*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]];
1343*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]];
1344*495ae853SAndroid Build Coastguard Worker 
1345*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1346*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1347*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1348*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1349*495ae853SAndroid Build Coastguard Worker 
1350*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refleft0[0]];
1351*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refleft0[1]];
1352*495ae853SAndroid Build Coastguard Worker 
1353*495ae853SAndroid Build Coastguard Worker             /* Storing the leftMbtype for next Mb */
1354*495ae853SAndroid Build Coastguard Worker             ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type;
1355*495ae853SAndroid Build Coastguard Worker 
1356*495ae853SAndroid Build Coastguard Worker         }
1357*495ae853SAndroid Build Coastguard Worker     }
1358*495ae853SAndroid Build Coastguard Worker 
1359*495ae853SAndroid Build Coastguard Worker     /* For transform 8x8 disable deblocking of the intrernal edges of a 8x8 block */
1360*495ae853SAndroid Build Coastguard Worker     if(ps_cur_mb_info->u1_tran_form8x8)
1361*495ae853SAndroid Build Coastguard Worker     {
1362*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[1] = 0;
1363*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[3] = 0;
1364*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[5] = 0;
1365*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[7] = 0;
1366*495ae853SAndroid Build Coastguard Worker     }
1367*495ae853SAndroid Build Coastguard Worker }
1368*495ae853SAndroid Build Coastguard Worker 
1369*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1370*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1371*495ae853SAndroid Build Coastguard Worker /*  Function Name : ih264d_compute_bs_mbaff                                           */
1372*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1373*495ae853SAndroid Build Coastguard Worker /*  Description   : This function computes the pointers of left,top & current*/
1374*495ae853SAndroid Build Coastguard Worker /*                : Nnz, MvPred & deblk_mb_t and supplies to FillBs function for*/
1375*495ae853SAndroid Build Coastguard Worker /*                : Boundary Strength Calculation                            */
1376*495ae853SAndroid Build Coastguard Worker /*  Inputs        : <What inputs does the function take?>                    */
1377*495ae853SAndroid Build Coastguard Worker /*  Processing    : This functions calls deblock MB in the MB increment order*/
1378*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1379*495ae853SAndroid Build Coastguard Worker /*  Outputs       : Produces the Boundary Strength for Current Mb            */
1380*495ae853SAndroid Build Coastguard Worker /*  Returns       : None                                                     */
1381*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1382*495ae853SAndroid Build Coastguard Worker /*  Revision History:                                                        */
1383*495ae853SAndroid Build Coastguard Worker /*                                                                           */
1384*495ae853SAndroid Build Coastguard Worker /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
1385*495ae853SAndroid Build Coastguard Worker /*                      ITTIAM                                               */
1386*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1387*495ae853SAndroid Build Coastguard Worker 
ih264d_compute_bs_mbaff(dec_struct_t * ps_dec,dec_mb_info_t * ps_cur_mb_info,const UWORD16 u2_mbxn_mb)1388*495ae853SAndroid Build Coastguard Worker void ih264d_compute_bs_mbaff(dec_struct_t * ps_dec,
1389*495ae853SAndroid Build Coastguard Worker                              dec_mb_info_t * ps_cur_mb_info,
1390*495ae853SAndroid Build Coastguard Worker                              const UWORD16 u2_mbxn_mb)
1391*495ae853SAndroid Build Coastguard Worker {
1392*495ae853SAndroid Build Coastguard Worker     /* Mvpred and Nnz for top and Courrent */
1393*495ae853SAndroid Build Coastguard Worker     mv_pred_t *ps_cur_mv_pred, *ps_top_mv_pred = NULL, *ps_left_mv_pred;
1394*495ae853SAndroid Build Coastguard Worker     /* deblk_mb_t Params */
1395*495ae853SAndroid Build Coastguard Worker     deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */
1396*495ae853SAndroid Build Coastguard Worker     neighbouradd_t * ps_left_ngbr;
1397*495ae853SAndroid Build Coastguard Worker     deblkmb_neighbour_t *ps_deblk_top_mb;
1398*495ae853SAndroid Build Coastguard Worker     /* Reference Index to POC mapping*/
1399*495ae853SAndroid Build Coastguard Worker     void ** apv_map_ref_idx_to_poc;
1400*495ae853SAndroid Build Coastguard Worker 
1401*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_leftmbtype;
1402*495ae853SAndroid Build Coastguard Worker 
1403*495ae853SAndroid Build Coastguard Worker 
1404*495ae853SAndroid Build Coastguard Worker     UWORD16 u2_left_csbp, u2_top_csbp, u2_cur_csbp;
1405*495ae853SAndroid Build Coastguard Worker 
1406*495ae853SAndroid Build Coastguard Worker     /* Set of flags */
1407*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_cur_mb_intra, u4_cur_mb_fld, u4_top_mb_fld, u1_top_mb_typ, u4_left_mb_fld;
1408*495ae853SAndroid Build Coastguard Worker     UWORD32 u1_cur_mb_type;
1409*495ae853SAndroid Build Coastguard Worker     UWORD32 * pu4_bs_table;
1410*495ae853SAndroid Build Coastguard Worker     const UWORD32 u4_bot_mb = (1 - ps_cur_mb_info->u1_topmb);
1411*495ae853SAndroid Build Coastguard Worker     /* Initialization */
1412*495ae853SAndroid Build Coastguard Worker     const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx;
1413*495ae853SAndroid Build Coastguard Worker     const UWORD32 u2_mby = ps_cur_mb_info->u2_mby;
1414*495ae853SAndroid Build Coastguard Worker     /* Load From u1_pingpong and Store in !u1_pingpong */
1415*495ae853SAndroid Build Coastguard Worker     const UWORD32 u1_pingpong = u2_mbx & 0x01;
1416*495ae853SAndroid Build Coastguard Worker 
1417*495ae853SAndroid Build Coastguard Worker     PROFILE_DISABLE_BOUNDARY_STRENGTH()
1418*495ae853SAndroid Build Coastguard Worker 
1419*495ae853SAndroid Build Coastguard Worker     ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + (u2_mbx << 1);
1420*495ae853SAndroid Build Coastguard Worker 
1421*495ae853SAndroid Build Coastguard Worker 
1422*495ae853SAndroid Build Coastguard Worker     /************************************************/
1423*495ae853SAndroid Build Coastguard Worker     /* Initialize the left Mb type                  */
1424*495ae853SAndroid Build Coastguard Worker     /* Left MvPred                                  */
1425*495ae853SAndroid Build Coastguard Worker     /************************************************/
1426*495ae853SAndroid Build Coastguard Worker 
1427*495ae853SAndroid Build Coastguard Worker     if(!u2_mbx)
1428*495ae853SAndroid Build Coastguard Worker     {
1429*495ae853SAndroid Build Coastguard Worker         /************************************************************/
1430*495ae853SAndroid Build Coastguard Worker         /* Initialize the ps_left_mv_pred with Junk but Valid Location */
1431*495ae853SAndroid Build Coastguard Worker         /* to avoid invalid memory access                       */
1432*495ae853SAndroid Build Coastguard Worker         /* this is read only pointer                                */
1433*495ae853SAndroid Build Coastguard Worker         /************************************************************/
1434*495ae853SAndroid Build Coastguard Worker         ps_left_mv_pred = ps_dec->ps_mv_cur + 16;
1435*495ae853SAndroid Build Coastguard Worker     }
1436*495ae853SAndroid Build Coastguard Worker     else
1437*495ae853SAndroid Build Coastguard Worker     {
1438*495ae853SAndroid Build Coastguard Worker         /* Come to Left Most Edge of the MB */
1439*495ae853SAndroid Build Coastguard Worker         ps_left_mv_pred = (u2_mbxn_mb) ?
1440*495ae853SAndroid Build Coastguard Worker                         ps_dec->ps_mv_cur + ((u2_mbxn_mb - 1) << 5) + 3 :
1441*495ae853SAndroid Build Coastguard Worker                         ps_dec->ps_mv_left + 3;
1442*495ae853SAndroid Build Coastguard Worker 
1443*495ae853SAndroid Build Coastguard Worker         ps_left_mv_pred += (u4_bot_mb << 4);
1444*495ae853SAndroid Build Coastguard Worker     }
1445*495ae853SAndroid Build Coastguard Worker 
1446*495ae853SAndroid Build Coastguard Worker     u4_leftmbtype = ps_dec->deblk_left_mb[u4_bot_mb].u1_mb_type;
1447*495ae853SAndroid Build Coastguard Worker 
1448*495ae853SAndroid Build Coastguard Worker     ps_left_ngbr = &(ps_dec->ps_left_mvpred_addr[u1_pingpong][u4_bot_mb]);
1449*495ae853SAndroid Build Coastguard Worker 
1450*495ae853SAndroid Build Coastguard Worker     /************************************************/
1451*495ae853SAndroid Build Coastguard Worker     /* Pointer Assignment for Current Mb Parameters */
1452*495ae853SAndroid Build Coastguard Worker     /* Pointer Assignment for Current MvPred        */
1453*495ae853SAndroid Build Coastguard Worker     /************************************************/
1454*495ae853SAndroid Build Coastguard Worker     ps_cur_mb_params = ps_dec->ps_deblk_mbn + (u2_mbxn_mb << 1) + u4_bot_mb;
1455*495ae853SAndroid Build Coastguard Worker     u1_cur_mb_type = ps_cur_mb_params->u1_mb_type;
1456*495ae853SAndroid Build Coastguard Worker 
1457*495ae853SAndroid Build Coastguard Worker     ps_cur_mv_pred = ps_dec->ps_mv_cur + (u2_mbxn_mb << 5);
1458*495ae853SAndroid Build Coastguard Worker     ps_cur_mv_pred += (u4_bot_mb << 4);
1459*495ae853SAndroid Build Coastguard Worker 
1460*495ae853SAndroid Build Coastguard Worker     /********************************************/
1461*495ae853SAndroid Build Coastguard Worker     /* Pointer Assignment for Top Mb Parameters */
1462*495ae853SAndroid Build Coastguard Worker     /* Pointer Assignment for Top MvPred and    */
1463*495ae853SAndroid Build Coastguard Worker     /* Pointer Assignment for Top Nnz           */
1464*495ae853SAndroid Build Coastguard Worker     /********************************************/
1465*495ae853SAndroid Build Coastguard Worker 
1466*495ae853SAndroid Build Coastguard Worker     /* CHANGED CODE */
1467*495ae853SAndroid Build Coastguard Worker     ps_top_mv_pred = ps_cur_mv_pred - (ps_dec->u2_frm_wd_in_mbs << 5) + 12;
1468*495ae853SAndroid Build Coastguard Worker 
1469*495ae853SAndroid Build Coastguard Worker     u4_cur_mb_fld = !!(u1_cur_mb_type & D_FLD_MB);
1470*495ae853SAndroid Build Coastguard Worker     u4_left_mb_fld = !!(ps_dec->deblk_left_mb[0].u1_mb_type & D_FLD_MB);
1471*495ae853SAndroid Build Coastguard Worker 
1472*495ae853SAndroid Build Coastguard Worker     if(u4_left_mb_fld != u4_cur_mb_fld)
1473*495ae853SAndroid Build Coastguard Worker     {
1474*495ae853SAndroid Build Coastguard Worker         /* Flag for extra left Edge */
1475*495ae853SAndroid Build Coastguard Worker         ps_cur_mb_params->u1_single_call = 0;
1476*495ae853SAndroid Build Coastguard Worker 
1477*495ae853SAndroid Build Coastguard Worker         if(u4_bot_mb)
1478*495ae853SAndroid Build Coastguard Worker         {
1479*495ae853SAndroid Build Coastguard Worker             ps_left_ngbr--;
1480*495ae853SAndroid Build Coastguard Worker             ps_left_mv_pred -= 16;
1481*495ae853SAndroid Build Coastguard Worker         }
1482*495ae853SAndroid Build Coastguard Worker     }
1483*495ae853SAndroid Build Coastguard Worker     else
1484*495ae853SAndroid Build Coastguard Worker         ps_cur_mb_params->u1_single_call = 1;
1485*495ae853SAndroid Build Coastguard Worker 
1486*495ae853SAndroid Build Coastguard Worker     apv_map_ref_idx_to_poc = ps_dec->ppv_map_ref_idx_to_poc + 1;
1487*495ae853SAndroid Build Coastguard Worker     if(u4_cur_mb_fld)
1488*495ae853SAndroid Build Coastguard Worker     {
1489*495ae853SAndroid Build Coastguard Worker         if(u4_bot_mb)
1490*495ae853SAndroid Build Coastguard Worker         {
1491*495ae853SAndroid Build Coastguard Worker             apv_map_ref_idx_to_poc += BOT_LIST_FLD_L0;
1492*495ae853SAndroid Build Coastguard Worker         }
1493*495ae853SAndroid Build Coastguard Worker         else
1494*495ae853SAndroid Build Coastguard Worker         {
1495*495ae853SAndroid Build Coastguard Worker             apv_map_ref_idx_to_poc += TOP_LIST_FLD_L0;
1496*495ae853SAndroid Build Coastguard Worker         }
1497*495ae853SAndroid Build Coastguard Worker     }
1498*495ae853SAndroid Build Coastguard Worker 
1499*495ae853SAndroid Build Coastguard Worker     /**********************************************************/
1500*495ae853SAndroid Build Coastguard Worker     /* if no deblocking required for current Mb then continue */
1501*495ae853SAndroid Build Coastguard Worker     /**********************************************************/
1502*495ae853SAndroid Build Coastguard Worker     if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING)
1503*495ae853SAndroid Build Coastguard Worker     {
1504*495ae853SAndroid Build Coastguard Worker         void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc +
1505*495ae853SAndroid Build Coastguard Worker         POC_LIST_L0_TO_L1_DIFF;
1506*495ae853SAndroid Build Coastguard Worker 
1507*495ae853SAndroid Build Coastguard Worker         {
1508*495ae853SAndroid Build Coastguard Worker             /* Store Parameter for Top MvPred refernce frame Address */
1509*495ae853SAndroid Build Coastguard Worker 
1510*495ae853SAndroid Build Coastguard Worker             void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress;
1511*495ae853SAndroid Build Coastguard Worker             void ** ppv_left_mv_pred_addr =
1512*495ae853SAndroid Build Coastguard Worker                             ps_dec->ps_left_mvpred_addr[!u1_pingpong][u4_bot_mb].u4_add;
1513*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame;
1514*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame;
1515*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refLeft0 = (ps_cur_mv_pred + 3)->i1_ref_frame;
1516*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]];
1517*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]];
1518*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1519*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1520*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1521*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1522*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refLeft0[0]];
1523*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refLeft0[1]];
1524*495ae853SAndroid Build Coastguard Worker         }
1525*495ae853SAndroid Build Coastguard Worker         if(u4_bot_mb)
1526*495ae853SAndroid Build Coastguard Worker         {
1527*495ae853SAndroid Build Coastguard Worker             /* store The Left Mb Type*/
1528*495ae853SAndroid Build Coastguard Worker             ps_dec->deblk_left_mb[0].u1_mb_type =
1529*495ae853SAndroid Build Coastguard Worker                             (ps_cur_mb_params - 1)->u1_mb_type;
1530*495ae853SAndroid Build Coastguard Worker             ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type;
1531*495ae853SAndroid Build Coastguard Worker 
1532*495ae853SAndroid Build Coastguard Worker         }
1533*495ae853SAndroid Build Coastguard Worker         ps_deblk_top_mb[u4_bot_mb].u1_mb_type = u1_cur_mb_type;
1534*495ae853SAndroid Build Coastguard Worker         return;
1535*495ae853SAndroid Build Coastguard Worker     }
1536*495ae853SAndroid Build Coastguard Worker 
1537*495ae853SAndroid Build Coastguard Worker     if(u2_mby)
1538*495ae853SAndroid Build Coastguard Worker     {
1539*495ae853SAndroid Build Coastguard Worker         u1_top_mb_typ = ps_deblk_top_mb[1].u1_mb_type;
1540*495ae853SAndroid Build Coastguard Worker         u4_top_mb_fld = !!(u1_top_mb_typ & D_FLD_MB);
1541*495ae853SAndroid Build Coastguard Worker 
1542*495ae853SAndroid Build Coastguard Worker         if(!u4_bot_mb)
1543*495ae853SAndroid Build Coastguard Worker         {
1544*495ae853SAndroid Build Coastguard Worker             if(u4_top_mb_fld & u4_cur_mb_fld)
1545*495ae853SAndroid Build Coastguard Worker                 u1_top_mb_typ = ps_deblk_top_mb[0].u1_mb_type;
1546*495ae853SAndroid Build Coastguard Worker             else
1547*495ae853SAndroid Build Coastguard Worker             {
1548*495ae853SAndroid Build Coastguard Worker                 ps_top_mv_pred += 16;
1549*495ae853SAndroid Build Coastguard Worker             }
1550*495ae853SAndroid Build Coastguard Worker         }
1551*495ae853SAndroid Build Coastguard Worker     }
1552*495ae853SAndroid Build Coastguard Worker     else
1553*495ae853SAndroid Build Coastguard Worker     {
1554*495ae853SAndroid Build Coastguard Worker         u4_top_mb_fld = u4_cur_mb_fld;
1555*495ae853SAndroid Build Coastguard Worker         u1_top_mb_typ = 0;
1556*495ae853SAndroid Build Coastguard Worker     }
1557*495ae853SAndroid Build Coastguard Worker 
1558*495ae853SAndroid Build Coastguard Worker     if(u4_bot_mb & !u4_cur_mb_fld)
1559*495ae853SAndroid Build Coastguard Worker     {
1560*495ae853SAndroid Build Coastguard Worker         u1_top_mb_typ = ps_deblk_top_mb[0].u1_mb_type;
1561*495ae853SAndroid Build Coastguard Worker         u4_top_mb_fld = u4_cur_mb_fld;
1562*495ae853SAndroid Build Coastguard Worker         ps_top_mv_pred = ps_cur_mv_pred - 4;
1563*495ae853SAndroid Build Coastguard Worker     }
1564*495ae853SAndroid Build Coastguard Worker 
1565*495ae853SAndroid Build Coastguard Worker     pu4_bs_table = ps_cur_mb_params->u4_bs_table;
1566*495ae853SAndroid Build Coastguard Worker     u4_cur_mb_intra = u1_cur_mb_type & D_INTRA_MB;
1567*495ae853SAndroid Build Coastguard Worker 
1568*495ae853SAndroid Build Coastguard Worker     u2_cur_csbp = ps_cur_mb_info->ps_curmb->u2_luma_csbp;
1569*495ae853SAndroid Build Coastguard Worker     u2_left_csbp = ps_cur_mb_info->ps_left_mb->u2_luma_csbp;
1570*495ae853SAndroid Build Coastguard Worker     u2_top_csbp = ps_cur_mb_info->ps_top_mb->u2_luma_csbp;
1571*495ae853SAndroid Build Coastguard Worker     /* Compute BS function */
1572*495ae853SAndroid Build Coastguard Worker     if(ps_dec->ps_cur_sps->u1_profile_idc == HIGH_PROFILE_IDC)
1573*495ae853SAndroid Build Coastguard Worker     {
1574*495ae853SAndroid Build Coastguard Worker 
1575*495ae853SAndroid Build Coastguard Worker         if(ps_cur_mb_info->u1_tran_form8x8 == 1)
1576*495ae853SAndroid Build Coastguard Worker         {
1577*495ae853SAndroid Build Coastguard Worker             u2_cur_csbp = ih264d_update_csbp_8x8(
1578*495ae853SAndroid Build Coastguard Worker                             ps_cur_mb_info->ps_curmb->u2_luma_csbp);
1579*495ae853SAndroid Build Coastguard Worker         }
1580*495ae853SAndroid Build Coastguard Worker 
1581*495ae853SAndroid Build Coastguard Worker         if(ps_cur_mb_info->ps_left_mb->u1_tran_form8x8 == 1)
1582*495ae853SAndroid Build Coastguard Worker         {
1583*495ae853SAndroid Build Coastguard Worker             u2_left_csbp = ih264d_update_csbp_8x8(
1584*495ae853SAndroid Build Coastguard Worker                             ps_cur_mb_info->ps_left_mb->u2_luma_csbp);
1585*495ae853SAndroid Build Coastguard Worker         }
1586*495ae853SAndroid Build Coastguard Worker 
1587*495ae853SAndroid Build Coastguard Worker         if(ps_cur_mb_info->ps_top_mb->u1_tran_form8x8 == 1)
1588*495ae853SAndroid Build Coastguard Worker         {
1589*495ae853SAndroid Build Coastguard Worker             u2_top_csbp = ih264d_update_csbp_8x8(
1590*495ae853SAndroid Build Coastguard Worker                             ps_cur_mb_info->ps_top_mb->u2_luma_csbp);
1591*495ae853SAndroid Build Coastguard Worker         }
1592*495ae853SAndroid Build Coastguard Worker     }
1593*495ae853SAndroid Build Coastguard Worker     if(u4_cur_mb_intra)
1594*495ae853SAndroid Build Coastguard Worker     {
1595*495ae853SAndroid Build Coastguard Worker 
1596*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[4] = 0x04040404;
1597*495ae853SAndroid Build Coastguard Worker         if((0 == u4_cur_mb_fld) && (0 == u4_top_mb_fld))
1598*495ae853SAndroid Build Coastguard Worker         {
1599*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[0] = 0x04040404;
1600*495ae853SAndroid Build Coastguard Worker         }
1601*495ae853SAndroid Build Coastguard Worker         else
1602*495ae853SAndroid Build Coastguard Worker         {
1603*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[0] = 0x03030303;
1604*495ae853SAndroid Build Coastguard Worker         }
1605*495ae853SAndroid Build Coastguard Worker 
1606*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[1] = 0x03030303;
1607*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[2] = 0x03030303;
1608*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[3] = 0x03030303;
1609*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[5] = 0x03030303;
1610*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[6] = 0x03030303;
1611*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[7] = 0x03030303;
1612*495ae853SAndroid Build Coastguard Worker 
1613*495ae853SAndroid Build Coastguard Worker         /*********************************************************************/
1614*495ae853SAndroid Build Coastguard Worker         /* Fill Bs of xtra top and left edge unconditionally to avoid checks */
1615*495ae853SAndroid Build Coastguard Worker         /*********************************************************************/
1616*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[8] = 0x03030303;
1617*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[9] = 0x04040404;
1618*495ae853SAndroid Build Coastguard Worker     }
1619*495ae853SAndroid Build Coastguard Worker     else
1620*495ae853SAndroid Build Coastguard Worker     {
1621*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_is_non16x16 = !!(u1_cur_mb_type & D_PRED_NON_16x16);
1622*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_is_b = ps_dec->u1_B;
1623*495ae853SAndroid Build Coastguard Worker 
1624*495ae853SAndroid Build Coastguard Worker         ih264d_fill_bs2_horz_vert(
1625*495ae853SAndroid Build Coastguard Worker                         pu4_bs_table, u2_left_csbp, u2_top_csbp, u2_cur_csbp,
1626*495ae853SAndroid Build Coastguard Worker                         (const UWORD32 *)(gau4_ih264d_packed_bs2),
1627*495ae853SAndroid Build Coastguard Worker                         (const UWORD16 *)(gau2_ih264d_4x4_v2h_reorder));
1628*495ae853SAndroid Build Coastguard Worker 
1629*495ae853SAndroid Build Coastguard Worker         if(u4_leftmbtype & D_INTRA_MB)
1630*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[4] = 0x04040404;
1631*495ae853SAndroid Build Coastguard Worker 
1632*495ae853SAndroid Build Coastguard Worker         if(u1_top_mb_typ & D_INTRA_MB)
1633*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404;
1634*495ae853SAndroid Build Coastguard Worker         else if(u4_cur_mb_fld != u4_top_mb_fld)
1635*495ae853SAndroid Build Coastguard Worker         {
1636*495ae853SAndroid Build Coastguard Worker             /****************************************************/
1637*495ae853SAndroid Build Coastguard Worker             /* Setting BS for mixed mode edge=1 when (Bs!=2)    */
1638*495ae853SAndroid Build Coastguard Worker             /****************************************************/
1639*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[0] = (pu4_bs_table[0] >> 1) + 0x01010101;
1640*495ae853SAndroid Build Coastguard Worker         }
1641*495ae853SAndroid Build Coastguard Worker 
1642*495ae853SAndroid Build Coastguard Worker         {
1643*495ae853SAndroid Build Coastguard Worker             /* Call to Compute Boundary Strength for Extra Left Edge */
1644*495ae853SAndroid Build Coastguard Worker             if(u2_mbx
1645*495ae853SAndroid Build Coastguard Worker                             && !(ps_cur_mb_params->u1_deblocking_mode
1646*495ae853SAndroid Build Coastguard Worker                                             & MB_DISABLE_LEFT_EDGE))
1647*495ae853SAndroid Build Coastguard Worker             {
1648*495ae853SAndroid Build Coastguard Worker                 if(u4_cur_mb_fld != u4_left_mb_fld)
1649*495ae853SAndroid Build Coastguard Worker                 {
1650*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_left_mb_t_csbp =
1651*495ae853SAndroid Build Coastguard Worker                                     ps_cur_mb_info->ps_left_mb[0].u2_luma_csbp;
1652*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_left_mb_b_csbp =
1653*495ae853SAndroid Build Coastguard Worker                                     ps_cur_mb_info->ps_left_mb[1].u2_luma_csbp;
1654*495ae853SAndroid Build Coastguard Worker                     if(1 == ps_cur_mb_info->ps_left_mb[0].u1_tran_form8x8)
1655*495ae853SAndroid Build Coastguard Worker                     {
1656*495ae853SAndroid Build Coastguard Worker                         u4_left_mb_t_csbp = (UWORD32)ih264d_update_csbp_8x8(
1657*495ae853SAndroid Build Coastguard Worker                                         (UWORD16)u4_left_mb_t_csbp);
1658*495ae853SAndroid Build Coastguard Worker                     }
1659*495ae853SAndroid Build Coastguard Worker 
1660*495ae853SAndroid Build Coastguard Worker                     if(1 == ps_cur_mb_info->ps_left_mb[1].u1_tran_form8x8)
1661*495ae853SAndroid Build Coastguard Worker                     {
1662*495ae853SAndroid Build Coastguard Worker                         u4_left_mb_b_csbp = (UWORD32)ih264d_update_csbp_8x8(
1663*495ae853SAndroid Build Coastguard Worker                                         (UWORD16)u4_left_mb_b_csbp);
1664*495ae853SAndroid Build Coastguard Worker                     }
1665*495ae853SAndroid Build Coastguard Worker                     ps_dec->pf_fill_bs_xtra_left_edge[u4_cur_mb_fld](
1666*495ae853SAndroid Build Coastguard Worker                                     pu4_bs_table, u4_left_mb_t_csbp,
1667*495ae853SAndroid Build Coastguard Worker                                     u4_left_mb_b_csbp, u2_cur_csbp, u4_bot_mb);
1668*495ae853SAndroid Build Coastguard Worker 
1669*495ae853SAndroid Build Coastguard Worker                     if(ps_dec->deblk_left_mb[0].u1_mb_type & D_INTRA_MB)
1670*495ae853SAndroid Build Coastguard Worker                         pu4_bs_table[4] = 0x04040404;
1671*495ae853SAndroid Build Coastguard Worker 
1672*495ae853SAndroid Build Coastguard Worker                     if(ps_dec->deblk_left_mb[1].u1_mb_type & D_INTRA_MB)
1673*495ae853SAndroid Build Coastguard Worker                         pu4_bs_table[9] = 0x04040404;
1674*495ae853SAndroid Build Coastguard Worker 
1675*495ae853SAndroid Build Coastguard Worker                 }
1676*495ae853SAndroid Build Coastguard Worker             }
1677*495ae853SAndroid Build Coastguard Worker             /* Call to Compute Boundary Strength for Extra Top Edge */
1678*495ae853SAndroid Build Coastguard Worker             if(u2_mby
1679*495ae853SAndroid Build Coastguard Worker                             && !(ps_cur_mb_params->u1_deblocking_mode
1680*495ae853SAndroid Build Coastguard Worker                                             & MB_DISABLE_TOP_EDGE))
1681*495ae853SAndroid Build Coastguard Worker             {
1682*495ae853SAndroid Build Coastguard Worker                 if((((!u4_bot_mb) & (!u4_cur_mb_fld)) && u4_top_mb_fld))
1683*495ae853SAndroid Build Coastguard Worker                 {
1684*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_topmb_t_csbp =
1685*495ae853SAndroid Build Coastguard Worker                                     ps_cur_mb_info->ps_top_mb[-1].u2_luma_csbp;
1686*495ae853SAndroid Build Coastguard Worker                     UWORD32 u4_topmb_b_csbp =
1687*495ae853SAndroid Build Coastguard Worker                                     ps_cur_mb_info->ps_top_mb[0].u2_luma_csbp;
1688*495ae853SAndroid Build Coastguard Worker                     if(1 == ps_cur_mb_info->ps_top_mb[-1].u1_tran_form8x8)
1689*495ae853SAndroid Build Coastguard Worker                     {
1690*495ae853SAndroid Build Coastguard Worker                         u4_topmb_t_csbp = (UWORD32)ih264d_update_csbp_8x8(
1691*495ae853SAndroid Build Coastguard Worker                                         (UWORD16)u4_topmb_t_csbp);
1692*495ae853SAndroid Build Coastguard Worker                     }
1693*495ae853SAndroid Build Coastguard Worker 
1694*495ae853SAndroid Build Coastguard Worker                     if(1 == ps_cur_mb_info->ps_top_mb[0].u1_tran_form8x8)
1695*495ae853SAndroid Build Coastguard Worker                     {
1696*495ae853SAndroid Build Coastguard Worker                         u4_topmb_b_csbp = (UWORD32)ih264d_update_csbp_8x8(
1697*495ae853SAndroid Build Coastguard Worker                                         (UWORD16)u4_topmb_b_csbp);
1698*495ae853SAndroid Build Coastguard Worker                     }
1699*495ae853SAndroid Build Coastguard Worker                     ih264d_fill_bs_xtra_top_edge(pu4_bs_table, u4_topmb_t_csbp,
1700*495ae853SAndroid Build Coastguard Worker                                                  u4_topmb_b_csbp, u2_cur_csbp);
1701*495ae853SAndroid Build Coastguard Worker 
1702*495ae853SAndroid Build Coastguard Worker                     if(ps_deblk_top_mb[0].u1_mb_type & D_INTRA_MB)
1703*495ae853SAndroid Build Coastguard Worker                         pu4_bs_table[8] = 0x03030303;
1704*495ae853SAndroid Build Coastguard Worker 
1705*495ae853SAndroid Build Coastguard Worker                     if(ps_deblk_top_mb[1].u1_mb_type & D_INTRA_MB)
1706*495ae853SAndroid Build Coastguard Worker                         pu4_bs_table[0] = 0x03030303;
1707*495ae853SAndroid Build Coastguard Worker                 }
1708*495ae853SAndroid Build Coastguard Worker             }
1709*495ae853SAndroid Build Coastguard Worker         }
1710*495ae853SAndroid Build Coastguard Worker 
1711*495ae853SAndroid Build Coastguard Worker         ps_dec->pf_fill_bs1[u4_is_b][u4_is_non16x16](
1712*495ae853SAndroid Build Coastguard Worker                         ps_cur_mv_pred, ps_top_mv_pred, apv_map_ref_idx_to_poc,
1713*495ae853SAndroid Build Coastguard Worker                         pu4_bs_table, ps_left_mv_pred, ps_left_ngbr,
1714*495ae853SAndroid Build Coastguard Worker                         ps_cur_mb_info->ps_top_mb->u4_pic_addrress,
1715*495ae853SAndroid Build Coastguard Worker                         (4 >> u4_cur_mb_fld));
1716*495ae853SAndroid Build Coastguard Worker     }
1717*495ae853SAndroid Build Coastguard Worker 
1718*495ae853SAndroid Build Coastguard Worker     {
1719*495ae853SAndroid Build Coastguard Worker         void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc +
1720*495ae853SAndroid Build Coastguard Worker         POC_LIST_L0_TO_L1_DIFF;
1721*495ae853SAndroid Build Coastguard Worker 
1722*495ae853SAndroid Build Coastguard Worker         {
1723*495ae853SAndroid Build Coastguard Worker             /* Store Parameter for Top MvPred refernce frame Address */
1724*495ae853SAndroid Build Coastguard Worker             void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress;
1725*495ae853SAndroid Build Coastguard Worker             void ** ppv_left_mv_pred_addr =
1726*495ae853SAndroid Build Coastguard Worker                             ps_dec->ps_left_mvpred_addr[!u1_pingpong][u4_bot_mb].u4_add;
1727*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame;
1728*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame;
1729*495ae853SAndroid Build Coastguard Worker             WORD8 * p1_refLeft0 = (ps_cur_mv_pred + 3)->i1_ref_frame;
1730*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]];
1731*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]];
1732*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1733*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1734*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1735*495ae853SAndroid Build Coastguard Worker             ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1736*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refLeft0[0]];
1737*495ae853SAndroid Build Coastguard Worker             ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refLeft0[1]];
1738*495ae853SAndroid Build Coastguard Worker         }
1739*495ae853SAndroid Build Coastguard Worker         if(u4_bot_mb)
1740*495ae853SAndroid Build Coastguard Worker         {
1741*495ae853SAndroid Build Coastguard Worker             /* store The Left Mb Type*/
1742*495ae853SAndroid Build Coastguard Worker             ps_dec->deblk_left_mb[0].u1_mb_type =
1743*495ae853SAndroid Build Coastguard Worker                             (ps_cur_mb_params - 1)->u1_mb_type;
1744*495ae853SAndroid Build Coastguard Worker             ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type;
1745*495ae853SAndroid Build Coastguard Worker 
1746*495ae853SAndroid Build Coastguard Worker         }
1747*495ae853SAndroid Build Coastguard Worker         ps_deblk_top_mb[u4_bot_mb].u1_mb_type = u1_cur_mb_type;
1748*495ae853SAndroid Build Coastguard Worker     }
1749*495ae853SAndroid Build Coastguard Worker     /* For transform 8x8 disable deblocking of the intrernal edges of a 8x8 block */
1750*495ae853SAndroid Build Coastguard Worker     if(ps_cur_mb_info->u1_tran_form8x8)
1751*495ae853SAndroid Build Coastguard Worker     {
1752*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[1] = 0;
1753*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[3] = 0;
1754*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[5] = 0;
1755*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[7] = 0;
1756*495ae853SAndroid Build Coastguard Worker     }
1757*495ae853SAndroid Build Coastguard Worker 
1758*495ae853SAndroid Build Coastguard Worker }
1759*495ae853SAndroid Build Coastguard Worker 
1760*495ae853SAndroid Build Coastguard Worker 
1761*495ae853SAndroid Build Coastguard Worker 
1762*495ae853SAndroid Build Coastguard Worker /*!
1763*495ae853SAndroid Build Coastguard Worker  **************************************************************************
1764*495ae853SAndroid Build Coastguard Worker  * \if Function name : ih264d_fill_bs_for_mb \endif
1765*495ae853SAndroid Build Coastguard Worker  *
1766*495ae853SAndroid Build Coastguard Worker  * \brief
1767*495ae853SAndroid Build Coastguard Worker  *    Determines the boundary strength (Bs), for the complete MB. Bs is
1768*495ae853SAndroid Build Coastguard Worker  *    determined for each block boundary between two neighbouring 4x4
1769*495ae853SAndroid Build Coastguard Worker  *    luma blocks, then packed in a UWORD32, first Bs placed in MSB and
1770*495ae853SAndroid Build Coastguard Worker  *    so on.  Such packed Bs values for all 8 edges are kept in an array.
1771*495ae853SAndroid Build Coastguard Worker  *
1772*495ae853SAndroid Build Coastguard Worker  * \return
1773*495ae853SAndroid Build Coastguard Worker  *    Returns the packed boundary strength(Bs)  MSB -> LSB Bs0|Bs1|Bs2|Bs3
1774*495ae853SAndroid Build Coastguard Worker  *
1775*495ae853SAndroid Build Coastguard Worker  **************************************************************************
1776*495ae853SAndroid Build Coastguard Worker  */
1777*495ae853SAndroid Build Coastguard Worker 
ih264d_fill_bs_for_mb(deblk_mb_t * ps_cur_mb_params,deblk_mb_t * ps_top_mb_params,deblk_mb_t * ps_left_mb_params,mv_pred_t * ps_cur_mv_pred,mv_pred_t * ps_top_mv_pred,UWORD8 * puc_cur_nnz,UWORD8 * puc_top_nnz,void ** ppv_map_ref_idx_to_poc,UWORD32 ui_mbAff,UWORD32 ui_bs_table[],mv_pred_t * ps_leftmost_mv_pred,neighbouradd_t * ps_left_addr,neighbouradd_t * ps_top_add)1778*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs_for_mb(deblk_mb_t * ps_cur_mb_params,
1779*495ae853SAndroid Build Coastguard Worker                            deblk_mb_t * ps_top_mb_params,
1780*495ae853SAndroid Build Coastguard Worker                            deblk_mb_t * ps_left_mb_params,
1781*495ae853SAndroid Build Coastguard Worker                            mv_pred_t *ps_cur_mv_pred,
1782*495ae853SAndroid Build Coastguard Worker                            mv_pred_t *ps_top_mv_pred,
1783*495ae853SAndroid Build Coastguard Worker                            UWORD8 *puc_cur_nnz,
1784*495ae853SAndroid Build Coastguard Worker                            UWORD8 *puc_top_nnz,
1785*495ae853SAndroid Build Coastguard Worker                            void **ppv_map_ref_idx_to_poc,
1786*495ae853SAndroid Build Coastguard Worker                            UWORD32 ui_mbAff,
1787*495ae853SAndroid Build Coastguard Worker                            UWORD32 ui_bs_table[], /* pointer to the BsTable array */
1788*495ae853SAndroid Build Coastguard Worker                            mv_pred_t *ps_leftmost_mv_pred,
1789*495ae853SAndroid Build Coastguard Worker                            neighbouradd_t *ps_left_addr,
1790*495ae853SAndroid Build Coastguard Worker                            neighbouradd_t *ps_top_add)
1791*495ae853SAndroid Build Coastguard Worker {
1792*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_bs_horz = 0;
1793*495ae853SAndroid Build Coastguard Worker     UWORD8 edge, u1_top_intra = 0, u1_left_intra = 0;
1794*495ae853SAndroid Build Coastguard Worker     mv_pred_t *ps_left_mv_pred;
1795*495ae853SAndroid Build Coastguard Worker     WORD16 i2_cur_mv0, i2_cur_mv1, i16_curMv2, i16_curMv3;
1796*495ae853SAndroid Build Coastguard Worker     WORD16 i2_left_mv0, i2_left_mv1, i2_left_mv2, i2_left_mv3;
1797*495ae853SAndroid Build Coastguard Worker     WORD16 i2_top_mv0, i2_top_mv1, i16_topMv2, i16_topMv3;
1798*495ae853SAndroid Build Coastguard Worker     WORD8 i1_cur_ref0, i1_cur_ref1, i1_left_ref0, i1_left_ref1, i1_top_ref0, i1_top_ref1;
1799*495ae853SAndroid Build Coastguard Worker     UWORD8 uc_cur_nnz, uc_left_nnz, uc_top_nnz, u1_mb_type, uc_Bslice;
1800*495ae853SAndroid Build Coastguard Worker     void **ppv_map_ref_idx_to_poc_l0, **ppv_map_ref_idx_to_poc_l1;
1801*495ae853SAndroid Build Coastguard Worker     UWORD8 uc_temp;
1802*495ae853SAndroid Build Coastguard Worker     UWORD8 uc_cur_mb_fld, uc_top_mb_fld;
1803*495ae853SAndroid Build Coastguard Worker     UWORD32 c_mv_limit;
1804*495ae853SAndroid Build Coastguard Worker 
1805*495ae853SAndroid Build Coastguard Worker     u1_mb_type = ps_cur_mb_params->u1_mb_type;
1806*495ae853SAndroid Build Coastguard Worker     uc_Bslice = u1_mb_type & D_B_SLICE;
1807*495ae853SAndroid Build Coastguard Worker     ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc;
1808*495ae853SAndroid Build Coastguard Worker     ppv_map_ref_idx_to_poc_l1 = ppv_map_ref_idx_to_poc + POC_LIST_L0_TO_L1_DIFF;
1809*495ae853SAndroid Build Coastguard Worker 
1810*495ae853SAndroid Build Coastguard Worker     ps_top_mb_params = ps_top_mb_params ? ps_top_mb_params : ps_cur_mb_params;
1811*495ae853SAndroid Build Coastguard Worker     u1_top_intra = ps_top_mb_params->u1_mb_type & D_INTRA_MB;
1812*495ae853SAndroid Build Coastguard Worker     u1_left_intra = ps_left_mb_params->u1_mb_type & D_INTRA_MB;
1813*495ae853SAndroid Build Coastguard Worker 
1814*495ae853SAndroid Build Coastguard Worker     ui_bs_table[4] = 0x04040404; //Default for INTRA MB Boundary edges.
1815*495ae853SAndroid Build Coastguard Worker     uc_cur_mb_fld = (ps_cur_mb_params->u1_mb_type & D_FLD_MB) >> 7;
1816*495ae853SAndroid Build Coastguard Worker     uc_top_mb_fld = (ps_top_mb_params->u1_mb_type & D_FLD_MB) >> 7;
1817*495ae853SAndroid Build Coastguard Worker 
1818*495ae853SAndroid Build Coastguard Worker     c_mv_limit = 4 >> uc_cur_mb_fld;
1819*495ae853SAndroid Build Coastguard Worker     if((0 == uc_cur_mb_fld) && (0 == uc_top_mb_fld))
1820*495ae853SAndroid Build Coastguard Worker     {
1821*495ae853SAndroid Build Coastguard Worker         ui_bs_table[0] = 0x04040404;
1822*495ae853SAndroid Build Coastguard Worker     }
1823*495ae853SAndroid Build Coastguard Worker     else
1824*495ae853SAndroid Build Coastguard Worker     {
1825*495ae853SAndroid Build Coastguard Worker         ui_bs_table[0] = 0x03030303;
1826*495ae853SAndroid Build Coastguard Worker     }
1827*495ae853SAndroid Build Coastguard Worker 
1828*495ae853SAndroid Build Coastguard Worker     for(edge = 0; edge < 4;
1829*495ae853SAndroid Build Coastguard Worker                     edge++, ps_top_mv_pred = ps_cur_mv_pred - 4, puc_top_nnz =
1830*495ae853SAndroid Build Coastguard Worker                                     puc_cur_nnz - 4)
1831*495ae853SAndroid Build Coastguard Worker     {
1832*495ae853SAndroid Build Coastguard Worker         //Each iteration of this loop fills the four BS values of one HORIZ edge and
1833*495ae853SAndroid Build Coastguard Worker         //one BS value for each of the four VERT edges.
1834*495ae853SAndroid Build Coastguard Worker         WORD8 i = 0;
1835*495ae853SAndroid Build Coastguard Worker         UWORD8 uc_bs_horiz, uc_bs_vert;
1836*495ae853SAndroid Build Coastguard Worker         UWORD32 ui_cnd;
1837*495ae853SAndroid Build Coastguard Worker         void *ui_ref_pic_addr[4];
1838*495ae853SAndroid Build Coastguard Worker         UWORD8 uc_mixed_mode_edge;
1839*495ae853SAndroid Build Coastguard Worker 
1840*495ae853SAndroid Build Coastguard Worker         uc_mixed_mode_edge = 0;
1841*495ae853SAndroid Build Coastguard Worker 
1842*495ae853SAndroid Build Coastguard Worker         uc_temp = (ui_mbAff << 4) + 13;
1843*495ae853SAndroid Build Coastguard Worker 
1844*495ae853SAndroid Build Coastguard Worker         uc_cur_nnz = *(puc_cur_nnz - uc_temp);
1845*495ae853SAndroid Build Coastguard Worker         ps_left_mv_pred = ps_leftmost_mv_pred + (edge << 2);
1846*495ae853SAndroid Build Coastguard Worker 
1847*495ae853SAndroid Build Coastguard Worker         for(i = 0; i < 4; i++, ps_top_mv_pred++, ps_cur_mv_pred++)
1848*495ae853SAndroid Build Coastguard Worker         {
1849*495ae853SAndroid Build Coastguard Worker             //Each iteration of this inner loop computes a HORIZ
1850*495ae853SAndroid Build Coastguard Worker             //and a VERT BS value for a 4x4 block
1851*495ae853SAndroid Build Coastguard Worker 
1852*495ae853SAndroid Build Coastguard Worker             uc_left_nnz = uc_cur_nnz;
1853*495ae853SAndroid Build Coastguard Worker             uc_cur_nnz = *puc_cur_nnz++;
1854*495ae853SAndroid Build Coastguard Worker             uc_top_nnz = *puc_top_nnz++;
1855*495ae853SAndroid Build Coastguard Worker 
1856*495ae853SAndroid Build Coastguard Worker             //VERT edge is assigned BS values first
1857*495ae853SAndroid Build Coastguard Worker             ui_cnd = !(uc_left_nnz || uc_cur_nnz);
1858*495ae853SAndroid Build Coastguard Worker             uc_bs_vert = 2;
1859*495ae853SAndroid Build Coastguard Worker 
1860*495ae853SAndroid Build Coastguard Worker             if(ui_cnd)
1861*495ae853SAndroid Build Coastguard Worker             {
1862*495ae853SAndroid Build Coastguard Worker                 i2_left_mv0 = ps_left_mv_pred->i2_mv[0];
1863*495ae853SAndroid Build Coastguard Worker                 i2_left_mv1 = ps_left_mv_pred->i2_mv[1];
1864*495ae853SAndroid Build Coastguard Worker                 i2_left_mv2 = ps_left_mv_pred->i2_mv[2];
1865*495ae853SAndroid Build Coastguard Worker                 i2_left_mv3 = ps_left_mv_pred->i2_mv[3];
1866*495ae853SAndroid Build Coastguard Worker 
1867*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0];
1868*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1];
1869*495ae853SAndroid Build Coastguard Worker                 i16_curMv2 = ps_cur_mv_pred->i2_mv[2];
1870*495ae853SAndroid Build Coastguard Worker                 i16_curMv3 = ps_cur_mv_pred->i2_mv[3];
1871*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0];
1872*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref1 = ps_cur_mv_pred->i1_ref_frame[1];
1873*495ae853SAndroid Build Coastguard Worker                 ui_ref_pic_addr[2] = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0];
1874*495ae853SAndroid Build Coastguard Worker                 ui_ref_pic_addr[3] = ppv_map_ref_idx_to_poc_l1[i1_cur_ref1];
1875*495ae853SAndroid Build Coastguard Worker 
1876*495ae853SAndroid Build Coastguard Worker                 if(i)
1877*495ae853SAndroid Build Coastguard Worker                 {
1878*495ae853SAndroid Build Coastguard Worker                     i1_left_ref0 = ps_left_mv_pred->i1_ref_frame[0];
1879*495ae853SAndroid Build Coastguard Worker                     i1_left_ref1 = ps_left_mv_pred->i1_ref_frame[1];
1880*495ae853SAndroid Build Coastguard Worker                     ui_ref_pic_addr[0] = ppv_map_ref_idx_to_poc_l0[i1_left_ref0];
1881*495ae853SAndroid Build Coastguard Worker                     ui_ref_pic_addr[1] = ppv_map_ref_idx_to_poc_l1[i1_left_ref1];
1882*495ae853SAndroid Build Coastguard Worker                 }
1883*495ae853SAndroid Build Coastguard Worker                 else
1884*495ae853SAndroid Build Coastguard Worker                 {
1885*495ae853SAndroid Build Coastguard Worker                     ui_ref_pic_addr[0] = ps_left_addr->u4_add[edge & 2];
1886*495ae853SAndroid Build Coastguard Worker                     ui_ref_pic_addr[1] = ps_left_addr->u4_add[1 + (edge & 2)];
1887*495ae853SAndroid Build Coastguard Worker                 }
1888*495ae853SAndroid Build Coastguard Worker                 if(!uc_Bslice)
1889*495ae853SAndroid Build Coastguard Worker                 {
1890*495ae853SAndroid Build Coastguard Worker                     uc_bs_vert =
1891*495ae853SAndroid Build Coastguard Worker                                     (ui_ref_pic_addr[0] != ui_ref_pic_addr[2])
1892*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv0
1893*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv0))
1894*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
1895*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv1
1896*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
1897*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit);
1898*495ae853SAndroid Build Coastguard Worker                 }
1899*495ae853SAndroid Build Coastguard Worker                 else
1900*495ae853SAndroid Build Coastguard Worker                 {
1901*495ae853SAndroid Build Coastguard Worker                     UWORD8 uc_bs_temp1, uc_bs_temp2;
1902*495ae853SAndroid Build Coastguard Worker 
1903*495ae853SAndroid Build Coastguard Worker                     uc_bs_vert = 1;
1904*495ae853SAndroid Build Coastguard Worker 
1905*495ae853SAndroid Build Coastguard Worker                     uc_bs_temp1 =
1906*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_left_mv0 - i2_cur_mv0))
1907*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
1908*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv1
1909*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
1910*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit)
1911*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv2
1912*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv2))
1913*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
1914*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv3
1915*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv3))
1916*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit));
1917*495ae853SAndroid Build Coastguard Worker 
1918*495ae853SAndroid Build Coastguard Worker                     uc_bs_temp2 =
1919*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_left_mv0 - i16_curMv2))
1920*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
1921*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv1
1922*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv3))
1923*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit)
1924*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv2
1925*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv0))
1926*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
1927*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_left_mv3
1928*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
1929*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit));
1930*495ae853SAndroid Build Coastguard Worker 
1931*495ae853SAndroid Build Coastguard Worker                     uc_bs_vert =
1932*495ae853SAndroid Build Coastguard Worker                                     (((ui_ref_pic_addr[0] != ui_ref_pic_addr[2])
1933*495ae853SAndroid Build Coastguard Worker                                                     || (ui_ref_pic_addr[1]
1934*495ae853SAndroid Build Coastguard Worker                                                                     != ui_ref_pic_addr[3]))
1935*495ae853SAndroid Build Coastguard Worker                                                     || (uc_bs_temp1))
1936*495ae853SAndroid Build Coastguard Worker                                                     && (((ui_ref_pic_addr[0]
1937*495ae853SAndroid Build Coastguard Worker                                                                     != ui_ref_pic_addr[3])
1938*495ae853SAndroid Build Coastguard Worker                                                                     || (ui_ref_pic_addr[1]
1939*495ae853SAndroid Build Coastguard Worker                                                                                     != ui_ref_pic_addr[2]))
1940*495ae853SAndroid Build Coastguard Worker                                                                     || (uc_bs_temp2));
1941*495ae853SAndroid Build Coastguard Worker 
1942*495ae853SAndroid Build Coastguard Worker                 }
1943*495ae853SAndroid Build Coastguard Worker             }
1944*495ae853SAndroid Build Coastguard Worker             //Fill the VERT BS, only if valid i.e.,
1945*495ae853SAndroid Build Coastguard Worker             //if it is a non-edge OR it is an edge, which is not yet filled
1946*495ae853SAndroid Build Coastguard Worker             uc_bs_vert = (!i && u1_left_intra) ? 4 : uc_bs_vert;
1947*495ae853SAndroid Build Coastguard Worker             ui_bs_table[i + 4] = (ui_bs_table[i + 4] << 8) | uc_bs_vert;
1948*495ae853SAndroid Build Coastguard Worker 
1949*495ae853SAndroid Build Coastguard Worker             //HORIZ edge is assigned BS values next
1950*495ae853SAndroid Build Coastguard Worker             ui_cnd = !(uc_top_nnz || uc_cur_nnz);
1951*495ae853SAndroid Build Coastguard Worker             uc_bs_horiz = 2;
1952*495ae853SAndroid Build Coastguard Worker 
1953*495ae853SAndroid Build Coastguard Worker             if(ui_cnd)
1954*495ae853SAndroid Build Coastguard Worker             {
1955*495ae853SAndroid Build Coastguard Worker                 uc_mixed_mode_edge =
1956*495ae853SAndroid Build Coastguard Worker                                 (0 == edge) ? (uc_top_mb_fld != uc_cur_mb_fld) : 0;
1957*495ae853SAndroid Build Coastguard Worker                 ui_cnd = 1 - uc_mixed_mode_edge;
1958*495ae853SAndroid Build Coastguard Worker                 uc_bs_horiz = uc_mixed_mode_edge;
1959*495ae853SAndroid Build Coastguard Worker             }
1960*495ae853SAndroid Build Coastguard Worker 
1961*495ae853SAndroid Build Coastguard Worker             if(ui_cnd)
1962*495ae853SAndroid Build Coastguard Worker             {
1963*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0];
1964*495ae853SAndroid Build Coastguard Worker                 i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1];
1965*495ae853SAndroid Build Coastguard Worker                 i16_curMv2 = ps_cur_mv_pred->i2_mv[2];
1966*495ae853SAndroid Build Coastguard Worker                 i16_curMv3 = ps_cur_mv_pred->i2_mv[3];
1967*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0];
1968*495ae853SAndroid Build Coastguard Worker                 i1_cur_ref1 = ps_cur_mv_pred->i1_ref_frame[1];
1969*495ae853SAndroid Build Coastguard Worker 
1970*495ae853SAndroid Build Coastguard Worker                 i2_top_mv0 = ps_top_mv_pred->i2_mv[0];
1971*495ae853SAndroid Build Coastguard Worker                 i2_top_mv1 = ps_top_mv_pred->i2_mv[1];
1972*495ae853SAndroid Build Coastguard Worker                 i16_topMv2 = ps_top_mv_pred->i2_mv[2];
1973*495ae853SAndroid Build Coastguard Worker                 i16_topMv3 = ps_top_mv_pred->i2_mv[3];
1974*495ae853SAndroid Build Coastguard Worker                 ui_ref_pic_addr[2] = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0];
1975*495ae853SAndroid Build Coastguard Worker                 ui_ref_pic_addr[3] = ppv_map_ref_idx_to_poc_l1[i1_cur_ref1];
1976*495ae853SAndroid Build Coastguard Worker                 if(edge)
1977*495ae853SAndroid Build Coastguard Worker                 {
1978*495ae853SAndroid Build Coastguard Worker                     i1_top_ref0 = ps_top_mv_pred->i1_ref_frame[0];
1979*495ae853SAndroid Build Coastguard Worker                     i1_top_ref1 = ps_top_mv_pred->i1_ref_frame[1];
1980*495ae853SAndroid Build Coastguard Worker                     ui_ref_pic_addr[0] = ppv_map_ref_idx_to_poc_l0[i1_top_ref0];
1981*495ae853SAndroid Build Coastguard Worker                     ui_ref_pic_addr[1] = ppv_map_ref_idx_to_poc_l1[i1_top_ref1];
1982*495ae853SAndroid Build Coastguard Worker                 }
1983*495ae853SAndroid Build Coastguard Worker                 else
1984*495ae853SAndroid Build Coastguard Worker                 {
1985*495ae853SAndroid Build Coastguard Worker                     ui_ref_pic_addr[0] = ps_top_add->u4_add[i & 2];
1986*495ae853SAndroid Build Coastguard Worker                     ui_ref_pic_addr[1] = ps_top_add->u4_add[1 + (i & 2)];
1987*495ae853SAndroid Build Coastguard Worker                 }
1988*495ae853SAndroid Build Coastguard Worker                 if(!uc_Bslice)
1989*495ae853SAndroid Build Coastguard Worker                 {
1990*495ae853SAndroid Build Coastguard Worker                     uc_bs_horiz =
1991*495ae853SAndroid Build Coastguard Worker                                     (ui_ref_pic_addr[0] != ui_ref_pic_addr[2])
1992*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_top_mv0
1993*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv0))
1994*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
1995*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_top_mv1
1996*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
1997*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit);
1998*495ae853SAndroid Build Coastguard Worker                 }
1999*495ae853SAndroid Build Coastguard Worker                 else
2000*495ae853SAndroid Build Coastguard Worker                 {
2001*495ae853SAndroid Build Coastguard Worker                     UWORD8 uc_bs_temp1, uc_bs_temp2;
2002*495ae853SAndroid Build Coastguard Worker 
2003*495ae853SAndroid Build Coastguard Worker                     uc_bs_horiz = 1;
2004*495ae853SAndroid Build Coastguard Worker 
2005*495ae853SAndroid Build Coastguard Worker                     uc_bs_temp1 =
2006*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_top_mv0 - i2_cur_mv0))
2007*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
2008*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_top_mv1
2009*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
2010*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit)
2011*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i16_topMv2
2012*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv2))
2013*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
2014*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i16_topMv3
2015*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv3))
2016*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit));
2017*495ae853SAndroid Build Coastguard Worker 
2018*495ae853SAndroid Build Coastguard Worker                     uc_bs_temp2 =
2019*495ae853SAndroid Build Coastguard Worker                                     ((ABS((i2_top_mv0 - i16_curMv2))
2020*495ae853SAndroid Build Coastguard Worker                                                     >= 4)
2021*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i2_top_mv1
2022*495ae853SAndroid Build Coastguard Worker                                                                     - i16_curMv3))
2023*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit)
2024*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i16_topMv2
2025*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv0))
2026*495ae853SAndroid Build Coastguard Worker                                                                     >= 4)
2027*495ae853SAndroid Build Coastguard Worker                                                     | (ABS((i16_topMv3
2028*495ae853SAndroid Build Coastguard Worker                                                                     - i2_cur_mv1))
2029*495ae853SAndroid Build Coastguard Worker                                                                     >= (UWORD8)c_mv_limit));
2030*495ae853SAndroid Build Coastguard Worker 
2031*495ae853SAndroid Build Coastguard Worker                     uc_bs_horiz =
2032*495ae853SAndroid Build Coastguard Worker                                     (((ui_ref_pic_addr[0] != ui_ref_pic_addr[2])
2033*495ae853SAndroid Build Coastguard Worker                                                     || (ui_ref_pic_addr[1]
2034*495ae853SAndroid Build Coastguard Worker                                                                     != ui_ref_pic_addr[3]))
2035*495ae853SAndroid Build Coastguard Worker                                                     || (uc_bs_temp1))
2036*495ae853SAndroid Build Coastguard Worker                                                     && (((ui_ref_pic_addr[0]
2037*495ae853SAndroid Build Coastguard Worker                                                                     != ui_ref_pic_addr[3])
2038*495ae853SAndroid Build Coastguard Worker                                                                     || (ui_ref_pic_addr[1]
2039*495ae853SAndroid Build Coastguard Worker                                                                                     != ui_ref_pic_addr[2]))
2040*495ae853SAndroid Build Coastguard Worker                                                                     || (uc_bs_temp2));
2041*495ae853SAndroid Build Coastguard Worker 
2042*495ae853SAndroid Build Coastguard Worker                 }
2043*495ae853SAndroid Build Coastguard Worker             }
2044*495ae853SAndroid Build Coastguard Worker             ps_left_mv_pred = ps_cur_mv_pred;
2045*495ae853SAndroid Build Coastguard Worker             u4_bs_horz = (u4_bs_horz << 8) + uc_bs_horiz;
2046*495ae853SAndroid Build Coastguard Worker         }
2047*495ae853SAndroid Build Coastguard Worker         //Fill the HORIZ BS, only if valid i.e.,
2048*495ae853SAndroid Build Coastguard Worker         //if it is a non-edge OR it is an edge, which is not yet filled
2049*495ae853SAndroid Build Coastguard Worker         if(edge || (!edge && !u1_top_intra))
2050*495ae853SAndroid Build Coastguard Worker             ui_bs_table[edge] = u4_bs_horz;
2051*495ae853SAndroid Build Coastguard Worker     }
2052*495ae853SAndroid Build Coastguard Worker }
2053*495ae853SAndroid Build Coastguard Worker 
2054*495ae853SAndroid Build Coastguard Worker /*!
2055*495ae853SAndroid Build Coastguard Worker  **************************************************************************
2056*495ae853SAndroid Build Coastguard Worker  * \if Function name : ih264d_fill_bs_for_extra_left_edge \endif
2057*495ae853SAndroid Build Coastguard Worker  *
2058*495ae853SAndroid Build Coastguard Worker  * \brief
2059*495ae853SAndroid Build Coastguard Worker  *    Fills the boundary strength (Bs), for the top extra edge. ock
2060*495ae853SAndroid Build Coastguard Worker  *
2061*495ae853SAndroid Build Coastguard Worker  * \return
2062*495ae853SAndroid Build Coastguard Worker  *    Returns the packed boundary strength(Bs)  MSB -> LSB Bs0|Bs1|Bs2|Bs3
2063*495ae853SAndroid Build Coastguard Worker  *
2064*495ae853SAndroid Build Coastguard Worker  **************************************************************************
2065*495ae853SAndroid Build Coastguard Worker  */
ih264d_fill_bs_for_extra_left_edge(deblk_mb_t * ps_cur_deblk_mb,deblk_mb_t * ps_leftDeblkMb,UWORD8 * puc_cur_nnz,UWORD8 uc_botMb)2066*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs_for_extra_left_edge(deblk_mb_t *ps_cur_deblk_mb,
2067*495ae853SAndroid Build Coastguard Worker                                         deblk_mb_t *ps_leftDeblkMb,
2068*495ae853SAndroid Build Coastguard Worker                                         UWORD8* puc_cur_nnz,
2069*495ae853SAndroid Build Coastguard Worker                                         UWORD8 uc_botMb)
2070*495ae853SAndroid Build Coastguard Worker {
2071*495ae853SAndroid Build Coastguard Worker     /* Set the Flag in uc_deblocking_mode variable of current MB*/
2072*495ae853SAndroid Build Coastguard Worker     /* for mixed mode edge*/
2073*495ae853SAndroid Build Coastguard Worker     ps_cur_deblk_mb->u1_single_call = 0;
2074*495ae853SAndroid Build Coastguard Worker 
2075*495ae853SAndroid Build Coastguard Worker     if(ps_cur_deblk_mb->u1_mb_type & D_INTRA_MB)
2076*495ae853SAndroid Build Coastguard Worker     {
2077*495ae853SAndroid Build Coastguard Worker         ps_cur_deblk_mb->u4_bs_table[4] = 0x04040404;
2078*495ae853SAndroid Build Coastguard Worker         ps_cur_deblk_mb->u4_bs_table[9] = 0x04040404;
2079*495ae853SAndroid Build Coastguard Worker     }
2080*495ae853SAndroid Build Coastguard Worker     else if((ps_leftDeblkMb->u1_mb_type & D_INTRA_MB)
2081*495ae853SAndroid Build Coastguard Worker                     && ((ps_leftDeblkMb + 1)->u1_mb_type & D_INTRA_MB))
2082*495ae853SAndroid Build Coastguard Worker     {
2083*495ae853SAndroid Build Coastguard Worker         ps_cur_deblk_mb->u4_bs_table[4] = 0x04040404;
2084*495ae853SAndroid Build Coastguard Worker         ps_cur_deblk_mb->u4_bs_table[9] = 0x04040404;
2085*495ae853SAndroid Build Coastguard Worker     }
2086*495ae853SAndroid Build Coastguard Worker     else
2087*495ae853SAndroid Build Coastguard Worker     {
2088*495ae853SAndroid Build Coastguard Worker         /* Get strengths of left MB edge */
2089*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_bs;
2090*495ae853SAndroid Build Coastguard Worker         UWORD8 uc_Bs;
2091*495ae853SAndroid Build Coastguard Worker         WORD32 i;
2092*495ae853SAndroid Build Coastguard Worker         UWORD32 ui_curMbFld;
2093*495ae853SAndroid Build Coastguard Worker         UWORD8 *puc_left_nnz;
2094*495ae853SAndroid Build Coastguard Worker         UWORD32 ui_bs_left_edge[2];
2095*495ae853SAndroid Build Coastguard Worker 
2096*495ae853SAndroid Build Coastguard Worker         ui_curMbFld = (ps_cur_deblk_mb->u1_mb_type & D_FLD_MB) >> 7;
2097*495ae853SAndroid Build Coastguard Worker 
2098*495ae853SAndroid Build Coastguard Worker         puc_left_nnz = puc_cur_nnz - 29;
2099*495ae853SAndroid Build Coastguard Worker         if((ui_curMbFld == 0) && uc_botMb)
2100*495ae853SAndroid Build Coastguard Worker         {
2101*495ae853SAndroid Build Coastguard Worker             puc_left_nnz -= 8;
2102*495ae853SAndroid Build Coastguard Worker         }
2103*495ae853SAndroid Build Coastguard Worker         else if(ui_curMbFld && uc_botMb)
2104*495ae853SAndroid Build Coastguard Worker         {
2105*495ae853SAndroid Build Coastguard Worker             puc_left_nnz -= 16;
2106*495ae853SAndroid Build Coastguard Worker         }
2107*495ae853SAndroid Build Coastguard Worker 
2108*495ae853SAndroid Build Coastguard Worker         if(ui_curMbFld)
2109*495ae853SAndroid Build Coastguard Worker         {
2110*495ae853SAndroid Build Coastguard Worker             if(ps_leftDeblkMb->u1_mb_type & D_INTRA_MB)
2111*495ae853SAndroid Build Coastguard Worker             {
2112*495ae853SAndroid Build Coastguard Worker                 ui_bs_left_edge[0] = 0x04040404;
2113*495ae853SAndroid Build Coastguard Worker                 puc_left_nnz += 16;
2114*495ae853SAndroid Build Coastguard Worker                 puc_cur_nnz += 8;
2115*495ae853SAndroid Build Coastguard Worker             }
2116*495ae853SAndroid Build Coastguard Worker             else
2117*495ae853SAndroid Build Coastguard Worker             {
2118*495ae853SAndroid Build Coastguard Worker                 u4_bs = 0;
2119*495ae853SAndroid Build Coastguard Worker                 for(i = 4; i > 0; i--)
2120*495ae853SAndroid Build Coastguard Worker                 {
2121*495ae853SAndroid Build Coastguard Worker                     uc_Bs = ((*puc_cur_nnz || *puc_left_nnz)) ? 2 : 1;
2122*495ae853SAndroid Build Coastguard Worker                     u4_bs = (u4_bs << 8) | uc_Bs;
2123*495ae853SAndroid Build Coastguard Worker                     puc_left_nnz += 4;
2124*495ae853SAndroid Build Coastguard Worker                     if(i & 0x01)
2125*495ae853SAndroid Build Coastguard Worker                         puc_cur_nnz += 4;
2126*495ae853SAndroid Build Coastguard Worker                 }
2127*495ae853SAndroid Build Coastguard Worker                 ui_bs_left_edge[0] = u4_bs;
2128*495ae853SAndroid Build Coastguard Worker             }
2129*495ae853SAndroid Build Coastguard Worker 
2130*495ae853SAndroid Build Coastguard Worker             if((ps_leftDeblkMb + 1)->u1_mb_type & D_INTRA_MB)
2131*495ae853SAndroid Build Coastguard Worker             {
2132*495ae853SAndroid Build Coastguard Worker                 ui_bs_left_edge[1] = 0x04040404;
2133*495ae853SAndroid Build Coastguard Worker             }
2134*495ae853SAndroid Build Coastguard Worker             else
2135*495ae853SAndroid Build Coastguard Worker             {
2136*495ae853SAndroid Build Coastguard Worker                 u4_bs = 0;
2137*495ae853SAndroid Build Coastguard Worker                 for(i = 4; i > 0; i--)
2138*495ae853SAndroid Build Coastguard Worker                 {
2139*495ae853SAndroid Build Coastguard Worker                     uc_Bs = ((*puc_cur_nnz || *puc_left_nnz)) ? 2 : 1;
2140*495ae853SAndroid Build Coastguard Worker                     u4_bs = (u4_bs << 8) | uc_Bs;
2141*495ae853SAndroid Build Coastguard Worker                     puc_left_nnz += 4;
2142*495ae853SAndroid Build Coastguard Worker                     if(i & 0x01)
2143*495ae853SAndroid Build Coastguard Worker                         puc_cur_nnz += 4;
2144*495ae853SAndroid Build Coastguard Worker                 }
2145*495ae853SAndroid Build Coastguard Worker                 ui_bs_left_edge[1] = u4_bs;
2146*495ae853SAndroid Build Coastguard Worker             }
2147*495ae853SAndroid Build Coastguard Worker         }
2148*495ae853SAndroid Build Coastguard Worker         else
2149*495ae853SAndroid Build Coastguard Worker         {
2150*495ae853SAndroid Build Coastguard Worker             UWORD8 *puc_curNnzB, *puc_leftNnzB;
2151*495ae853SAndroid Build Coastguard Worker             puc_curNnzB = puc_cur_nnz;
2152*495ae853SAndroid Build Coastguard Worker             puc_leftNnzB = puc_left_nnz + 16;
2153*495ae853SAndroid Build Coastguard Worker             if(ps_leftDeblkMb->u1_mb_type & D_INTRA_MB)
2154*495ae853SAndroid Build Coastguard Worker             {
2155*495ae853SAndroid Build Coastguard Worker                 ui_bs_left_edge[0] = 0x04040404;
2156*495ae853SAndroid Build Coastguard Worker             }
2157*495ae853SAndroid Build Coastguard Worker             else
2158*495ae853SAndroid Build Coastguard Worker             {
2159*495ae853SAndroid Build Coastguard Worker                 u4_bs = 0;
2160*495ae853SAndroid Build Coastguard Worker                 for(i = 4; i > 0; i--, puc_cur_nnz += 4)
2161*495ae853SAndroid Build Coastguard Worker                 {
2162*495ae853SAndroid Build Coastguard Worker                     uc_Bs = ((*puc_cur_nnz || *puc_left_nnz)) ? 2 : 1;
2163*495ae853SAndroid Build Coastguard Worker                     u4_bs = (u4_bs << 8) | uc_Bs;
2164*495ae853SAndroid Build Coastguard Worker                     if(i & 0x01)
2165*495ae853SAndroid Build Coastguard Worker                         puc_left_nnz += 4;
2166*495ae853SAndroid Build Coastguard Worker                 }
2167*495ae853SAndroid Build Coastguard Worker                 ui_bs_left_edge[0] = u4_bs;
2168*495ae853SAndroid Build Coastguard Worker             }
2169*495ae853SAndroid Build Coastguard Worker 
2170*495ae853SAndroid Build Coastguard Worker             if((ps_leftDeblkMb + 1)->u1_mb_type & D_INTRA_MB)
2171*495ae853SAndroid Build Coastguard Worker             {
2172*495ae853SAndroid Build Coastguard Worker                 ui_bs_left_edge[1] = 0x04040404;
2173*495ae853SAndroid Build Coastguard Worker             }
2174*495ae853SAndroid Build Coastguard Worker             else
2175*495ae853SAndroid Build Coastguard Worker             {
2176*495ae853SAndroid Build Coastguard Worker                 u4_bs = 0;
2177*495ae853SAndroid Build Coastguard Worker                 for(i = 4; i > 0; i--, puc_curNnzB += 4)
2178*495ae853SAndroid Build Coastguard Worker                 {
2179*495ae853SAndroid Build Coastguard Worker                     uc_Bs = ((*puc_curNnzB || *puc_leftNnzB)) ? 2 : 1;
2180*495ae853SAndroid Build Coastguard Worker                     u4_bs = (u4_bs << 8) | uc_Bs;
2181*495ae853SAndroid Build Coastguard Worker                     if(i & 0x01)
2182*495ae853SAndroid Build Coastguard Worker                         puc_leftNnzB += 4;
2183*495ae853SAndroid Build Coastguard Worker                 }
2184*495ae853SAndroid Build Coastguard Worker                 ui_bs_left_edge[1] = u4_bs;
2185*495ae853SAndroid Build Coastguard Worker             }
2186*495ae853SAndroid Build Coastguard Worker         }
2187*495ae853SAndroid Build Coastguard Worker         /* Copy The Values in Cur Deblk Mb Parameters */
2188*495ae853SAndroid Build Coastguard Worker         ps_cur_deblk_mb->u4_bs_table[4] = ui_bs_left_edge[0];
2189*495ae853SAndroid Build Coastguard Worker         ps_cur_deblk_mb->u4_bs_table[9] = ui_bs_left_edge[1];
2190*495ae853SAndroid Build Coastguard Worker     }
2191*495ae853SAndroid Build Coastguard Worker 
2192*495ae853SAndroid Build Coastguard Worker }
2193*495ae853SAndroid Build Coastguard Worker 
2194*495ae853SAndroid Build Coastguard Worker /*!
2195*495ae853SAndroid Build Coastguard Worker  **************************************************************************
2196*495ae853SAndroid Build Coastguard Worker  * \if Function name : ih264d_fill_bs_for_extra_top_edge \endif
2197*495ae853SAndroid Build Coastguard Worker  *
2198*495ae853SAndroid Build Coastguard Worker  * \brief
2199*495ae853SAndroid Build Coastguard Worker  *    Fills the boundary strength (Bs), for the top extra edge. ock
2200*495ae853SAndroid Build Coastguard Worker  *
2201*495ae853SAndroid Build Coastguard Worker  * \return
2202*495ae853SAndroid Build Coastguard Worker  *    Returns the packed boundary strength(Bs)  MSB -> LSB Bs0|Bs1|Bs2|Bs3
2203*495ae853SAndroid Build Coastguard Worker  *
2204*495ae853SAndroid Build Coastguard Worker  **************************************************************************
2205*495ae853SAndroid Build Coastguard Worker  */
ih264d_fill_bs_for_extra_top_edge(deblk_mb_t * ps_cur_mb_params,UWORD8 u1_Edge0_mb_typ,UWORD8 u1_Edge1_mb_typ,UWORD8 * pu1_curNnz,UWORD8 * pu1_topNnz)2206*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs_for_extra_top_edge(deblk_mb_t *ps_cur_mb_params,
2207*495ae853SAndroid Build Coastguard Worker                                        UWORD8 u1_Edge0_mb_typ,
2208*495ae853SAndroid Build Coastguard Worker                                        UWORD8 u1_Edge1_mb_typ,
2209*495ae853SAndroid Build Coastguard Worker                                        UWORD8 *pu1_curNnz,
2210*495ae853SAndroid Build Coastguard Worker                                        UWORD8 *pu1_topNnz)
2211*495ae853SAndroid Build Coastguard Worker {
2212*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_bs;
2213*495ae853SAndroid Build Coastguard Worker     UWORD8 uc_Bs;
2214*495ae853SAndroid Build Coastguard Worker     WORD32 i;
2215*495ae853SAndroid Build Coastguard Worker     UWORD8 *pu1_cur_nnz_tmp;
2216*495ae853SAndroid Build Coastguard Worker     UWORD8 *pu1_top_nnz_tmp;
2217*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_top_edge;
2218*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_top_mb_type;
2219*495ae853SAndroid Build Coastguard Worker     for(u1_top_edge = 0; u1_top_edge < 2; u1_top_edge++)
2220*495ae853SAndroid Build Coastguard Worker     {
2221*495ae853SAndroid Build Coastguard Worker         u1_top_mb_type = u1_top_edge ? u1_Edge1_mb_typ : u1_Edge0_mb_typ;
2222*495ae853SAndroid Build Coastguard Worker         pu1_cur_nnz_tmp = pu1_curNnz;
2223*495ae853SAndroid Build Coastguard Worker         pu1_top_nnz_tmp = pu1_topNnz + (u1_top_edge << 2);
2224*495ae853SAndroid Build Coastguard Worker 
2225*495ae853SAndroid Build Coastguard Worker         if((ps_cur_mb_params->u1_mb_type & D_INTRA_MB)
2226*495ae853SAndroid Build Coastguard Worker                         + (u1_top_mb_type & D_INTRA_MB))
2227*495ae853SAndroid Build Coastguard Worker         {
2228*495ae853SAndroid Build Coastguard Worker             u4_bs = 0x03030303;
2229*495ae853SAndroid Build Coastguard Worker         }
2230*495ae853SAndroid Build Coastguard Worker         else
2231*495ae853SAndroid Build Coastguard Worker         {
2232*495ae853SAndroid Build Coastguard Worker             u4_bs = 0;
2233*495ae853SAndroid Build Coastguard Worker             for(i = 4; i > 0; i--, pu1_cur_nnz_tmp += 1, pu1_top_nnz_tmp += 1)
2234*495ae853SAndroid Build Coastguard Worker             {
2235*495ae853SAndroid Build Coastguard Worker                 uc_Bs = ((*pu1_cur_nnz_tmp || *pu1_top_nnz_tmp)) ? 2 : 1;
2236*495ae853SAndroid Build Coastguard Worker                 u4_bs = (u4_bs << 8) | uc_Bs;
2237*495ae853SAndroid Build Coastguard Worker             }
2238*495ae853SAndroid Build Coastguard Worker         }
2239*495ae853SAndroid Build Coastguard Worker         if(u1_top_edge)
2240*495ae853SAndroid Build Coastguard Worker             ps_cur_mb_params->u4_bs_table[0] = u4_bs;
2241*495ae853SAndroid Build Coastguard Worker         else
2242*495ae853SAndroid Build Coastguard Worker             ps_cur_mb_params->u4_bs_table[8] = u4_bs;
2243*495ae853SAndroid Build Coastguard Worker     }
2244*495ae853SAndroid Build Coastguard Worker }
2245*495ae853SAndroid Build Coastguard Worker 
2246*495ae853SAndroid Build Coastguard Worker 
ih264d_fill_bs_mbedge_4(dec_struct_t * ps_dec,dec_mb_info_t * ps_cur_mb_info,const UWORD16 u2_mbxn_mb)2247*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs_mbedge_4(dec_struct_t * ps_dec,
2248*495ae853SAndroid Build Coastguard Worker                              dec_mb_info_t * ps_cur_mb_info,
2249*495ae853SAndroid Build Coastguard Worker                              const UWORD16 u2_mbxn_mb)
2250*495ae853SAndroid Build Coastguard Worker {
2251*495ae853SAndroid Build Coastguard Worker 
2252*495ae853SAndroid Build Coastguard Worker     /* deblk_mb_t Params */
2253*495ae853SAndroid Build Coastguard Worker     deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */
2254*495ae853SAndroid Build Coastguard Worker     deblkmb_neighbour_t *ps_deblk_top_mb;
2255*495ae853SAndroid Build Coastguard Worker     UWORD32 * pu4_bs_table;
2256*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_cur_mb_type;
2257*495ae853SAndroid Build Coastguard Worker 
2258*495ae853SAndroid Build Coastguard Worker     /* Neighbour availability */
2259*495ae853SAndroid Build Coastguard Worker     /* Initialization */
2260*495ae853SAndroid Build Coastguard Worker     const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx;
2261*495ae853SAndroid Build Coastguard Worker     const UWORD32 u2_mby = ps_cur_mb_info->u2_mby;
2262*495ae853SAndroid Build Coastguard Worker     const UWORD32 u1_pingpong = u2_mbx & 0x01;
2263*495ae853SAndroid Build Coastguard Worker     ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + u2_mbx;
2264*495ae853SAndroid Build Coastguard Worker 
2265*495ae853SAndroid Build Coastguard Worker 
2266*495ae853SAndroid Build Coastguard Worker     /* Pointer assignment for Current DeblkMB, Current Mv Pred  */
2267*495ae853SAndroid Build Coastguard Worker     ps_cur_mb_params = ps_dec->ps_deblk_mbn + u2_mbxn_mb;
2268*495ae853SAndroid Build Coastguard Worker 
2269*495ae853SAndroid Build Coastguard Worker     u1_cur_mb_type = ps_cur_mb_params->u1_mb_type;
2270*495ae853SAndroid Build Coastguard Worker 
2271*495ae853SAndroid Build Coastguard Worker     ps_deblk_top_mb->u1_mb_type = u1_cur_mb_type;
2272*495ae853SAndroid Build Coastguard Worker 
2273*495ae853SAndroid Build Coastguard Worker     {
2274*495ae853SAndroid Build Coastguard Worker         UWORD8 mb_qp_temp;
2275*495ae853SAndroid Build Coastguard Worker 
2276*495ae853SAndroid Build Coastguard Worker         ps_cur_mb_params->u1_topmb_qp = ps_deblk_top_mb->u1_mb_qp;
2277*495ae853SAndroid Build Coastguard Worker         ps_deblk_top_mb->u1_mb_qp = ps_cur_mb_params->u1_mb_qp;
2278*495ae853SAndroid Build Coastguard Worker 
2279*495ae853SAndroid Build Coastguard Worker         ps_cur_mb_params->u1_left_mb_qp = ps_dec->deblk_left_mb[1].u1_mb_qp;
2280*495ae853SAndroid Build Coastguard Worker         ps_dec->deblk_left_mb[1].u1_mb_qp = ps_cur_mb_params->u1_mb_qp;
2281*495ae853SAndroid Build Coastguard Worker 
2282*495ae853SAndroid Build Coastguard Worker     }
2283*495ae853SAndroid Build Coastguard Worker 
2284*495ae853SAndroid Build Coastguard Worker     ps_cur_mb_params->u1_single_call = 1;
2285*495ae853SAndroid Build Coastguard Worker 
2286*495ae853SAndroid Build Coastguard Worker     ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type;
2287*495ae853SAndroid Build Coastguard Worker     /* if no deblocking required for current Mb then continue */
2288*495ae853SAndroid Build Coastguard Worker     /* Check next Mbs   in Mb group                           */
2289*495ae853SAndroid Build Coastguard Worker     if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING)
2290*495ae853SAndroid Build Coastguard Worker     {
2291*495ae853SAndroid Build Coastguard Worker         /* Storing the leftMbtype for next Mb */
2292*495ae853SAndroid Build Coastguard Worker         return;
2293*495ae853SAndroid Build Coastguard Worker     }
2294*495ae853SAndroid Build Coastguard Worker 
2295*495ae853SAndroid Build Coastguard Worker     /* Compute BS function */
2296*495ae853SAndroid Build Coastguard Worker     pu4_bs_table = ps_cur_mb_params->u4_bs_table;
2297*495ae853SAndroid Build Coastguard Worker 
2298*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[4] = 0x04040404;
2299*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[0] = 0x04040404;
2300*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[1] = 0;
2301*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[2] = 0;
2302*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[3] = 0;
2303*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[5] = 0;
2304*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[6] = 0;
2305*495ae853SAndroid Build Coastguard Worker     pu4_bs_table[7] = 0;
2306*495ae853SAndroid Build Coastguard Worker 
2307*495ae853SAndroid Build Coastguard Worker }
2308*495ae853SAndroid Build Coastguard Worker 
ih264d_fill_bs_mbedge_2(dec_struct_t * ps_dec,dec_mb_info_t * ps_cur_mb_info,const UWORD16 u2_mbxn_mb)2309*495ae853SAndroid Build Coastguard Worker void ih264d_fill_bs_mbedge_2(dec_struct_t * ps_dec,
2310*495ae853SAndroid Build Coastguard Worker                              dec_mb_info_t * ps_cur_mb_info,
2311*495ae853SAndroid Build Coastguard Worker                              const UWORD16 u2_mbxn_mb)
2312*495ae853SAndroid Build Coastguard Worker {
2313*495ae853SAndroid Build Coastguard Worker 
2314*495ae853SAndroid Build Coastguard Worker     /* deblk_mb_t Params */
2315*495ae853SAndroid Build Coastguard Worker     deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */
2316*495ae853SAndroid Build Coastguard Worker     deblkmb_neighbour_t *ps_deblk_top_mb;
2317*495ae853SAndroid Build Coastguard Worker     UWORD32 * pu4_bs_table;
2318*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_cur_mb_type;
2319*495ae853SAndroid Build Coastguard Worker 
2320*495ae853SAndroid Build Coastguard Worker     /* Neighbour availability */
2321*495ae853SAndroid Build Coastguard Worker     /* Initialization */
2322*495ae853SAndroid Build Coastguard Worker     const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx;
2323*495ae853SAndroid Build Coastguard Worker     const UWORD32 u2_mby = ps_cur_mb_info->u2_mby;
2324*495ae853SAndroid Build Coastguard Worker     const UWORD32 u1_pingpong = u2_mbx & 0x01;
2325*495ae853SAndroid Build Coastguard Worker     ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + u2_mbx;
2326*495ae853SAndroid Build Coastguard Worker 
2327*495ae853SAndroid Build Coastguard Worker 
2328*495ae853SAndroid Build Coastguard Worker     /* Pointer assignment for Current DeblkMB, Current Mv Pred  */
2329*495ae853SAndroid Build Coastguard Worker     ps_cur_mb_params = ps_dec->ps_deblk_mbn + u2_mbxn_mb;
2330*495ae853SAndroid Build Coastguard Worker 
2331*495ae853SAndroid Build Coastguard Worker     u1_cur_mb_type = ps_cur_mb_params->u1_mb_type;
2332*495ae853SAndroid Build Coastguard Worker 
2333*495ae853SAndroid Build Coastguard Worker     ps_deblk_top_mb->u1_mb_type = u1_cur_mb_type;
2334*495ae853SAndroid Build Coastguard Worker 
2335*495ae853SAndroid Build Coastguard Worker     {
2336*495ae853SAndroid Build Coastguard Worker         UWORD8 mb_qp_temp;
2337*495ae853SAndroid Build Coastguard Worker 
2338*495ae853SAndroid Build Coastguard Worker         ps_cur_mb_params->u1_topmb_qp = ps_deblk_top_mb->u1_mb_qp;
2339*495ae853SAndroid Build Coastguard Worker         ps_deblk_top_mb->u1_mb_qp = ps_cur_mb_params->u1_mb_qp;
2340*495ae853SAndroid Build Coastguard Worker 
2341*495ae853SAndroid Build Coastguard Worker         ps_cur_mb_params->u1_left_mb_qp = ps_dec->deblk_left_mb[1].u1_mb_qp;
2342*495ae853SAndroid Build Coastguard Worker         ps_dec->deblk_left_mb[1].u1_mb_qp = ps_cur_mb_params->u1_mb_qp;
2343*495ae853SAndroid Build Coastguard Worker 
2344*495ae853SAndroid Build Coastguard Worker     }
2345*495ae853SAndroid Build Coastguard Worker 
2346*495ae853SAndroid Build Coastguard Worker     ps_cur_mb_params->u1_single_call = 1;
2347*495ae853SAndroid Build Coastguard Worker 
2348*495ae853SAndroid Build Coastguard Worker     ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type;
2349*495ae853SAndroid Build Coastguard Worker     /* if no deblocking required for current Mb then continue */
2350*495ae853SAndroid Build Coastguard Worker     /* Check next Mbs   in Mb group                           */
2351*495ae853SAndroid Build Coastguard Worker     if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING)
2352*495ae853SAndroid Build Coastguard Worker     {
2353*495ae853SAndroid Build Coastguard Worker         /* Storing the leftMbtype for next Mb */
2354*495ae853SAndroid Build Coastguard Worker         return;
2355*495ae853SAndroid Build Coastguard Worker     }
2356*495ae853SAndroid Build Coastguard Worker 
2357*495ae853SAndroid Build Coastguard Worker     /* Compute BS function */
2358*495ae853SAndroid Build Coastguard Worker     pu4_bs_table = ps_cur_mb_params->u4_bs_table;
2359*495ae853SAndroid Build Coastguard Worker 
2360*495ae853SAndroid Build Coastguard Worker     {
2361*495ae853SAndroid Build Coastguard Worker         UWORD32 top_mb_csbp, left_mb_csbp, cur_mb_csbp;
2362*495ae853SAndroid Build Coastguard Worker         UWORD32 top_edge, left_edge;
2363*495ae853SAndroid Build Coastguard Worker 
2364*495ae853SAndroid Build Coastguard Worker         top_mb_csbp = ps_cur_mb_info->ps_top_mb->u2_luma_csbp;
2365*495ae853SAndroid Build Coastguard Worker         left_mb_csbp = ps_cur_mb_info->ps_left_mb->u2_luma_csbp;
2366*495ae853SAndroid Build Coastguard Worker         cur_mb_csbp = ps_cur_mb_info->ps_curmb->u2_luma_csbp;
2367*495ae853SAndroid Build Coastguard Worker 
2368*495ae853SAndroid Build Coastguard Worker         top_mb_csbp = top_mb_csbp >> 12;
2369*495ae853SAndroid Build Coastguard Worker         top_edge = top_mb_csbp | (cur_mb_csbp & 0xf);
2370*495ae853SAndroid Build Coastguard Worker 
2371*495ae853SAndroid Build Coastguard Worker         if(top_edge)
2372*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[0] = 0x02020202;
2373*495ae853SAndroid Build Coastguard Worker         else
2374*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[0] = 0;
2375*495ae853SAndroid Build Coastguard Worker 
2376*495ae853SAndroid Build Coastguard Worker         cur_mb_csbp = cur_mb_csbp & CSBP_LEFT_BLOCK_MASK;
2377*495ae853SAndroid Build Coastguard Worker         left_mb_csbp = left_mb_csbp & CSBP_RIGHT_BLOCK_MASK;
2378*495ae853SAndroid Build Coastguard Worker 
2379*495ae853SAndroid Build Coastguard Worker         left_edge = cur_mb_csbp | left_mb_csbp;
2380*495ae853SAndroid Build Coastguard Worker 
2381*495ae853SAndroid Build Coastguard Worker         if(left_edge)
2382*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[4] = 0x02020202;
2383*495ae853SAndroid Build Coastguard Worker         else
2384*495ae853SAndroid Build Coastguard Worker             pu4_bs_table[4] = 0;
2385*495ae853SAndroid Build Coastguard Worker 
2386*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[1] = 0;
2387*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[2] = 0;
2388*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[3] = 0;
2389*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[5] = 0;
2390*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[6] = 0;
2391*495ae853SAndroid Build Coastguard Worker         pu4_bs_table[7] = 0;
2392*495ae853SAndroid Build Coastguard Worker     }
2393*495ae853SAndroid Build Coastguard Worker 
2394*495ae853SAndroid Build Coastguard Worker }
2395