xref: /aosp_15_r20/external/libavc/decoder/ih264d_mb_utils.h (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 #ifndef _IH264D_MB_UTILS_H_
21*495ae853SAndroid Build Coastguard Worker #define _IH264D_MB_UTILS_H_
22*495ae853SAndroid Build Coastguard Worker /*!
23*495ae853SAndroid Build Coastguard Worker  **************************************************************************
24*495ae853SAndroid Build Coastguard Worker  * \file ih264d_mb_utils.h
25*495ae853SAndroid Build Coastguard Worker  *
26*495ae853SAndroid Build Coastguard Worker  * \brief
27*495ae853SAndroid Build Coastguard Worker  *    Contains declarations of the utility functions needed to decode MB
28*495ae853SAndroid Build Coastguard Worker  *
29*495ae853SAndroid Build Coastguard Worker  * \date
30*495ae853SAndroid Build Coastguard Worker  *    18/12/2002
31*495ae853SAndroid Build Coastguard Worker  *
32*495ae853SAndroid Build Coastguard Worker  * \author  AI
33*495ae853SAndroid Build Coastguard Worker  **************************************************************************
34*495ae853SAndroid Build Coastguard Worker  */
35*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
36*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
37*495ae853SAndroid Build Coastguard Worker #include "ih264_platform_macros.h"
38*495ae853SAndroid Build Coastguard Worker #include "ih264d_structs.h"
39*495ae853SAndroid Build Coastguard Worker 
40*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
41*495ae853SAndroid Build Coastguard Worker /* Macros to get raster scan position of a block[8x8] / sub block[4x4]*/
42*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
43*495ae853SAndroid Build Coastguard Worker 
44*495ae853SAndroid Build Coastguard Worker #define GET_BLK_RASTER_POS_X(x)     ((x & 0x01) << 1)
45*495ae853SAndroid Build Coastguard Worker #define GET_BLK_RASTER_POS_Y(y)     ((y >> 1)   << 1)
46*495ae853SAndroid Build Coastguard Worker #define GET_SUB_BLK_RASTER_POS_X(x) ((x & 0x01))
47*495ae853SAndroid Build Coastguard Worker #define GET_SUB_BLK_RASTER_POS_Y(y) ((y >> 1))
48*495ae853SAndroid Build Coastguard Worker 
49*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
50*495ae853SAndroid Build Coastguard Worker /* Masks used in decoding of Macroblock                               */
51*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
52*495ae853SAndroid Build Coastguard Worker 
53*495ae853SAndroid Build Coastguard Worker #define LEFT_MB_AVAILABLE_MASK      0x01
54*495ae853SAndroid Build Coastguard Worker #define TOP_LEFT_MB_AVAILABLE_MASK  0x02
55*495ae853SAndroid Build Coastguard Worker #define TOP_MB_AVAILABLE_MASK       0x04
56*495ae853SAndroid Build Coastguard Worker #define TOP_RIGHT_MB_AVAILABLE_MASK 0x08
57*495ae853SAndroid Build Coastguard Worker 
58*495ae853SAndroid Build Coastguard Worker #define TOP_RT_SUBBLOCK_MASK_MOD               0xFFF7
59*495ae853SAndroid Build Coastguard Worker 
60*495ae853SAndroid Build Coastguard Worker #define TOP_RIGHT_DEFAULT_AVAILABLE            0x5750
61*495ae853SAndroid Build Coastguard Worker #define TOP_RIGHT_TOPR_AVAILABLE               0x0008
62*495ae853SAndroid Build Coastguard Worker #define TOP_RIGHT_TOP_AVAILABLE                0x0007
63*495ae853SAndroid Build Coastguard Worker 
64*495ae853SAndroid Build Coastguard Worker #define TOP_LEFT_DEFAULT_AVAILABLE            0xEEE0
65*495ae853SAndroid Build Coastguard Worker #define TOP_LEFT_TOPL_AVAILABLE               0x0001
66*495ae853SAndroid Build Coastguard Worker #define TOP_LEFT_TOP_AVAILABLE                0x000E
67*495ae853SAndroid Build Coastguard Worker #define TOP_LEFT_LEFT_AVAILABLE               0x1110
68*495ae853SAndroid Build Coastguard Worker 
69*495ae853SAndroid Build Coastguard Worker #define CHECK_MB_MAP(u4_mb_num, mb_map, u4_cond)                                                    \
70*495ae853SAndroid Build Coastguard Worker {                                                                                                   \
71*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_bit_number;                                                                      \
72*495ae853SAndroid Build Coastguard Worker         volatile UWORD8 *pu1_mb_flag;                                                                       \
73*495ae853SAndroid Build Coastguard Worker                                                                                                     \
74*495ae853SAndroid Build Coastguard Worker         u4_bit_number = u4_mb_num & 0x07;                                                           \
75*495ae853SAndroid Build Coastguard Worker         pu1_mb_flag    = (UWORD8 *)mb_map + (u4_mb_num >> 3);                                                       \
76*495ae853SAndroid Build Coastguard Worker                                                                                                     \
77*495ae853SAndroid Build Coastguard Worker         u4_cond = CHECKBIT((*pu1_mb_flag), u4_bit_number);                                              \
78*495ae853SAndroid Build Coastguard Worker }
79*495ae853SAndroid Build Coastguard Worker 
80*495ae853SAndroid Build Coastguard Worker #define CHECK_MB_MAP_BYTE(u4_mb_num, mb_map, u4_cond)                                               \
81*495ae853SAndroid Build Coastguard Worker {                                                                                                   \
82*495ae853SAndroid Build Coastguard Worker         volatile UWORD8 *pu1_mb_flag;                                                               \
83*495ae853SAndroid Build Coastguard Worker                                                                                                     \
84*495ae853SAndroid Build Coastguard Worker         pu1_mb_flag    = (UWORD8 *)mb_map + (u4_mb_num );                                           \
85*495ae853SAndroid Build Coastguard Worker                                                                                                     \
86*495ae853SAndroid Build Coastguard Worker         u4_cond = (*pu1_mb_flag);                                                                   \
87*495ae853SAndroid Build Coastguard Worker }
88*495ae853SAndroid Build Coastguard Worker 
89*495ae853SAndroid Build Coastguard Worker #define UPDATE_MB_MAP(u2_frm_wd_in_mbs, u2_mbx, u2_mby, mb_map, mb_count)                     \
90*495ae853SAndroid Build Coastguard Worker {                                                                                                   \
91*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_bit_number;                                                                      \
92*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_mb_number;                                                                       \
93*495ae853SAndroid Build Coastguard Worker                                                                                                     \
94*495ae853SAndroid Build Coastguard Worker         u4_mb_number    = u2_frm_wd_in_mbs * (u2_mby >> u1_mbaff) + u2_mbx;                   \
95*495ae853SAndroid Build Coastguard Worker                                                                                                     \
96*495ae853SAndroid Build Coastguard Worker         u4_bit_number = u4_mb_number & 0x07;                                                        \
97*495ae853SAndroid Build Coastguard Worker         /*                                                                                          \
98*495ae853SAndroid Build Coastguard Worker          * In case of MbAff, update the mb_map only if the entire MB is done. We can check that     \
99*495ae853SAndroid Build Coastguard Worker          * by checking if Y is odd, implying that this is the second row in the MbAff MB            \
100*495ae853SAndroid Build Coastguard Worker          */                                                                                         \
101*495ae853SAndroid Build Coastguard Worker         SET_BIT(mb_map[u4_mb_number >> 3], u4_bit_number);                                           \
102*495ae853SAndroid Build Coastguard Worker                                                                                                     \
103*495ae853SAndroid Build Coastguard Worker         if (1 == u1_mbaff)                                                                          \
104*495ae853SAndroid Build Coastguard Worker         {                                                                                           \
105*495ae853SAndroid Build Coastguard Worker             /*                                                                                      \
106*495ae853SAndroid Build Coastguard Worker              * If MBAFF u4_flag is set, set this MB and the MB just below this.                        \
107*495ae853SAndroid Build Coastguard Worker              * So, add frame width to the MB number and set that bit.                               \
108*495ae853SAndroid Build Coastguard Worker              */                                                                                     \
109*495ae853SAndroid Build Coastguard Worker             /*                                                                                      \
110*495ae853SAndroid Build Coastguard Worker             u4_mb_number    += u2_frm_wd_in_mbs;                                                  \
111*495ae853SAndroid Build Coastguard Worker                                                                                                     \
112*495ae853SAndroid Build Coastguard Worker             u4_bit_number = u4_mb_number & 0x07;                                                    \
113*495ae853SAndroid Build Coastguard Worker                                                                                                     \
114*495ae853SAndroid Build Coastguard Worker             SET_BIT(mb_map[u4_mb_number >> 3], u4_bit_number);                                       \
115*495ae853SAndroid Build Coastguard Worker             */                                                                                      \
116*495ae853SAndroid Build Coastguard Worker         }                                                                                           \
117*495ae853SAndroid Build Coastguard Worker                                                                                                     \
118*495ae853SAndroid Build Coastguard Worker         /*H264_DEC_DEBUG_PRINT("SETBIT: %d\n", u4_mb_number);*/                                     \
119*495ae853SAndroid Build Coastguard Worker         mb_count++;                                                                                 \
120*495ae853SAndroid Build Coastguard Worker }
121*495ae853SAndroid Build Coastguard Worker 
122*495ae853SAndroid Build Coastguard Worker #define UPDATE_MB_MAP_MBNUM(mb_map, u4_mb_number)                                                   \
123*495ae853SAndroid Build Coastguard Worker {                                                                                                   \
124*495ae853SAndroid Build Coastguard Worker         UWORD32 u4_bit_number;                                                                      \
125*495ae853SAndroid Build Coastguard Worker         volatile UWORD8 *pu1_mb_flag;                                                                       \
126*495ae853SAndroid Build Coastguard Worker                                                                                                     \
127*495ae853SAndroid Build Coastguard Worker         u4_bit_number = u4_mb_number & 0x07;                                                        \
128*495ae853SAndroid Build Coastguard Worker         pu1_mb_flag    = (UWORD8 *)mb_map + (u4_mb_number >> 3);                                                        \
129*495ae853SAndroid Build Coastguard Worker         /*                                                                                          \
130*495ae853SAndroid Build Coastguard Worker          * In case of MbAff, update the mb_map only if the entire MB is done. We can check that     \
131*495ae853SAndroid Build Coastguard Worker          * by checking if Y is odd, implying that this is the second row in the MbAff MB            \
132*495ae853SAndroid Build Coastguard Worker          */                                                                                         \
133*495ae853SAndroid Build Coastguard Worker         SET_BIT((*pu1_mb_flag), u4_bit_number);                                                          \
134*495ae853SAndroid Build Coastguard Worker }
135*495ae853SAndroid Build Coastguard Worker 
136*495ae853SAndroid Build Coastguard Worker #define UPDATE_MB_MAP_MBNUM_BYTE(mb_map, u4_mb_number)                                                  \
137*495ae853SAndroid Build Coastguard Worker {                                                                                                   \
138*495ae853SAndroid Build Coastguard Worker         volatile UWORD8 *pu1_mb_flag;                                                                       \
139*495ae853SAndroid Build Coastguard Worker                                                                                                     \
140*495ae853SAndroid Build Coastguard Worker         pu1_mb_flag    = (UWORD8 *)mb_map + (u4_mb_number);                                                     \
141*495ae853SAndroid Build Coastguard Worker         /*                                                                                          \
142*495ae853SAndroid Build Coastguard Worker          * In case of MbAff, update the mb_map only if the entire MB is done. We can check that     \
143*495ae853SAndroid Build Coastguard Worker          * by checking if Y is odd, implying that this is the second row in the MbAff MB            \
144*495ae853SAndroid Build Coastguard Worker          */                                                                                         \
145*495ae853SAndroid Build Coastguard Worker         (*pu1_mb_flag) = 1;                                                             \
146*495ae853SAndroid Build Coastguard Worker }
147*495ae853SAndroid Build Coastguard Worker 
148*495ae853SAndroid Build Coastguard Worker #define UPDATE_SLICE_NUM_MAP(slice_map, u4_mb_number,u2_slice_num)                                                  \
149*495ae853SAndroid Build Coastguard Worker {                                                                                                   \
150*495ae853SAndroid Build Coastguard Worker         volatile UWORD16 *pu2_slice_map;                                                               \
151*495ae853SAndroid Build Coastguard Worker                                                                                                     \
152*495ae853SAndroid Build Coastguard Worker         pu2_slice_map    = (UWORD16 *)slice_map + (u4_mb_number);                                         \
153*495ae853SAndroid Build Coastguard Worker         (*pu2_slice_map) = u2_slice_num;                                                              \
154*495ae853SAndroid Build Coastguard Worker }
155*495ae853SAndroid Build Coastguard Worker 
156*495ae853SAndroid Build Coastguard Worker #define GET_SLICE_NUM_MAP(slice_map, mb_number,u2_slice_num)                                                  \
157*495ae853SAndroid Build Coastguard Worker {                                                                                                   \
158*495ae853SAndroid Build Coastguard Worker         volatile UWORD16 *pu2_slice_map;                                                               \
159*495ae853SAndroid Build Coastguard Worker                                                                                                     \
160*495ae853SAndroid Build Coastguard Worker         pu2_slice_map    = (UWORD16 *)slice_map + (mb_number);                                         \
161*495ae853SAndroid Build Coastguard Worker         u2_slice_num = (*pu2_slice_map) ;                                                               \
162*495ae853SAndroid Build Coastguard Worker }
163*495ae853SAndroid Build Coastguard Worker 
164*495ae853SAndroid Build Coastguard Worker 
165*495ae853SAndroid Build Coastguard Worker #define GET_XPOS_PRED(u1_out,pkd_info)                        \
166*495ae853SAndroid Build Coastguard Worker {                                                               \
167*495ae853SAndroid Build Coastguard Worker     WORD32 bit_field;                                           \
168*495ae853SAndroid Build Coastguard Worker     bit_field = pkd_info & 0x3;                                 \
169*495ae853SAndroid Build Coastguard Worker     u1_out = bit_field;                                       \
170*495ae853SAndroid Build Coastguard Worker }
171*495ae853SAndroid Build Coastguard Worker 
172*495ae853SAndroid Build Coastguard Worker 
173*495ae853SAndroid Build Coastguard Worker #define GET_YPOS_PRED(u1_out,pkd_info)                        \
174*495ae853SAndroid Build Coastguard Worker {                                                               \
175*495ae853SAndroid Build Coastguard Worker     WORD32 bit_field;                                           \
176*495ae853SAndroid Build Coastguard Worker     bit_field = pkd_info >> 2;                                  \
177*495ae853SAndroid Build Coastguard Worker     u1_out = bit_field & 0x3;                                  \
178*495ae853SAndroid Build Coastguard Worker }
179*495ae853SAndroid Build Coastguard Worker 
180*495ae853SAndroid Build Coastguard Worker 
181*495ae853SAndroid Build Coastguard Worker 
182*495ae853SAndroid Build Coastguard Worker #define GET_WIDTH_PRED(u1_out,pkd_info)                        \
183*495ae853SAndroid Build Coastguard Worker {                                                               \
184*495ae853SAndroid Build Coastguard Worker     WORD32 bit_field;                                           \
185*495ae853SAndroid Build Coastguard Worker     bit_field = pkd_info >> 4;                                  \
186*495ae853SAndroid Build Coastguard Worker     bit_field = (bit_field & 0x3) << 1 ;                        \
187*495ae853SAndroid Build Coastguard Worker     u1_out = (bit_field == 0)?1:bit_field;                       \
188*495ae853SAndroid Build Coastguard Worker     }
189*495ae853SAndroid Build Coastguard Worker 
190*495ae853SAndroid Build Coastguard Worker #define GET_HEIGHT_PRED(u1_out,pkd_info)                        \
191*495ae853SAndroid Build Coastguard Worker {                                                               \
192*495ae853SAndroid Build Coastguard Worker     WORD32 bit_field;                                           \
193*495ae853SAndroid Build Coastguard Worker     bit_field = pkd_info >> 6;                                  \
194*495ae853SAndroid Build Coastguard Worker     bit_field = (bit_field & 0x3) << 1 ;                        \
195*495ae853SAndroid Build Coastguard Worker     u1_out = (bit_field == 0)?1:bit_field;                      \
196*495ae853SAndroid Build Coastguard Worker }
197*495ae853SAndroid Build Coastguard Worker 
198*495ae853SAndroid Build Coastguard Worker /*!
199*495ae853SAndroid Build Coastguard Worker  **************************************************************************
200*495ae853SAndroid Build Coastguard Worker  *   \brief   Masks for elements present in the first column but not on the
201*495ae853SAndroid Build Coastguard Worker  *   first row.
202*495ae853SAndroid Build Coastguard Worker  **************************************************************************
203*495ae853SAndroid Build Coastguard Worker  */
204*495ae853SAndroid Build Coastguard Worker #define FIRST_COL_NOT_FIRST_ROW             0xFAFB
205*495ae853SAndroid Build Coastguard Worker #define FIRST_ROW_MASK                      0xFFCC
206*495ae853SAndroid Build Coastguard Worker /*!
207*495ae853SAndroid Build Coastguard Worker  **************************************************************************
208*495ae853SAndroid Build Coastguard Worker  *   \brief   Mask for elements presen in the first row but not in the
209*495ae853SAndroid Build Coastguard Worker  *   last column.
210*495ae853SAndroid Build Coastguard Worker  **************************************************************************
211*495ae853SAndroid Build Coastguard Worker  */
212*495ae853SAndroid Build Coastguard Worker #define FIRST_ROW_NOT_LAST_COL             0xFFEC
213*495ae853SAndroid Build Coastguard Worker /*!
214*495ae853SAndroid Build Coastguard Worker  **************************************************************************
215*495ae853SAndroid Build Coastguard Worker  *   \brief   Mask for elements presen in the first row but not in the
216*495ae853SAndroid Build Coastguard Worker  *   first column.
217*495ae853SAndroid Build Coastguard Worker  **************************************************************************
218*495ae853SAndroid Build Coastguard Worker  */
219*495ae853SAndroid Build Coastguard Worker #define FIRST_ROW_NOT_FIRST_COL            0xFFCD
220*495ae853SAndroid Build Coastguard Worker /*!
221*495ae853SAndroid Build Coastguard Worker  **************************************************************************
222*495ae853SAndroid Build Coastguard Worker  *   \brief   Masks for the top right subMB of a 4x4 block
223*495ae853SAndroid Build Coastguard Worker  **************************************************************************
224*495ae853SAndroid Build Coastguard Worker  */
225*495ae853SAndroid Build Coastguard Worker #define TOP_RT_SUBBLOCK_MASK                0xFFDF
226*495ae853SAndroid Build Coastguard Worker /*!
227*495ae853SAndroid Build Coastguard Worker  **************************************************************************
228*495ae853SAndroid Build Coastguard Worker  *   \brief   Masks for the top left subMB of a 4x4 block
229*495ae853SAndroid Build Coastguard Worker  **************************************************************************
230*495ae853SAndroid Build Coastguard Worker  */
231*495ae853SAndroid Build Coastguard Worker #define TOP_LT_SUBBLOCK_MASK                0xFFFE
232*495ae853SAndroid Build Coastguard Worker /*!
233*495ae853SAndroid Build Coastguard Worker  **************************************************************************
234*495ae853SAndroid Build Coastguard Worker  *   \brief   Indicates if a subMB has a top right subMB available
235*495ae853SAndroid Build Coastguard Worker  **************************************************************************
236*495ae853SAndroid Build Coastguard Worker  */
237*495ae853SAndroid Build Coastguard Worker #define TOP_RT_SUBBLOCK_MB_MASK  0x5F4C
238*495ae853SAndroid Build Coastguard Worker 
239*495ae853SAndroid Build Coastguard Worker #define FIRST_COL_MASK           0xFAFA
240*495ae853SAndroid Build Coastguard Worker 
241*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
242*495ae853SAndroid Build Coastguard Worker /* Macros to calculate the current position of a MB wrt picture       */
243*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
244*495ae853SAndroid Build Coastguard Worker #define MB_LUMA_PIC_OFFSET(mb_x,mb_y,frmWidthY)   (((mb_y)*(frmWidthY) + (mb_x))<<4)
245*495ae853SAndroid Build Coastguard Worker #define MB_CHROMA_PIC_OFFSET(mb_x,mb_y,frmWidthUV) (((mb_y)*(frmWidthUV) + (mb_x))<<3)
246*495ae853SAndroid Build Coastguard Worker 
247*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
248*495ae853SAndroid Build Coastguard Worker /* Macros to calculate the current position of a MB wrt N[ Num coeff] Array */
249*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
250*495ae853SAndroid Build Coastguard Worker #define MB_PARAM_OFFSET(mb_x,mb_y,frmWidthInMbs,u1_mbaff,u1_topmb)  \
251*495ae853SAndroid Build Coastguard Worker         ((mb_x << u1_mbaff) + (1 - u1_topmb) + (mb_y * frmWidthInMbs))
252*495ae853SAndroid Build Coastguard Worker 
253*495ae853SAndroid Build Coastguard Worker UWORD32 ih264d_get_mb_info_cavlc_mbaff(dec_struct_t * ps_dec,
254*495ae853SAndroid Build Coastguard Worker                                        const UWORD16 ui16_curMbAddress,
255*495ae853SAndroid Build Coastguard Worker                                        dec_mb_info_t * ps_cur_mb_info,
256*495ae853SAndroid Build Coastguard Worker                                        UWORD32 u4_mbskip_run);
257*495ae853SAndroid Build Coastguard Worker UWORD32 ih264d_get_mb_info_cavlc_nonmbaff(dec_struct_t * ps_dec,
258*495ae853SAndroid Build Coastguard Worker                                           const UWORD16 ui16_curMbAddress,
259*495ae853SAndroid Build Coastguard Worker                                           dec_mb_info_t * ps_cur_mb_info,
260*495ae853SAndroid Build Coastguard Worker                                           UWORD32 u4_mbskip_run);
261*495ae853SAndroid Build Coastguard Worker 
262*495ae853SAndroid Build Coastguard Worker UWORD32 ih264d_get_mb_info_cabac_mbaff(dec_struct_t * ps_dec,
263*495ae853SAndroid Build Coastguard Worker                                        const UWORD16 ui16_curMbAddress,
264*495ae853SAndroid Build Coastguard Worker                                        dec_mb_info_t * ps_cur_mb_info,
265*495ae853SAndroid Build Coastguard Worker                                        UWORD32 u4_mbskip_run);
266*495ae853SAndroid Build Coastguard Worker 
267*495ae853SAndroid Build Coastguard Worker UWORD32 ih264d_get_mb_info_cabac_nonmbaff(dec_struct_t * ps_dec,
268*495ae853SAndroid Build Coastguard Worker                                           const UWORD16 ui16_curMbAddress,
269*495ae853SAndroid Build Coastguard Worker                                           dec_mb_info_t * ps_cur_mb_info,
270*495ae853SAndroid Build Coastguard Worker                                           UWORD32 u4_mbskip_run);
271*495ae853SAndroid Build Coastguard Worker 
272*495ae853SAndroid Build Coastguard Worker UWORD8 get_cabac_context_non_mbaff(dec_struct_t * ps_dec, UWORD16 u2_mbskip);
273*495ae853SAndroid Build Coastguard Worker 
274*495ae853SAndroid Build Coastguard Worker UWORD32 ih264d_get_cabac_context_mbaff(dec_struct_t * ps_dec,
275*495ae853SAndroid Build Coastguard Worker                                        dec_mb_info_t * ps_cur_mb_info,
276*495ae853SAndroid Build Coastguard Worker                                        UWORD32 u4_mbskip);
277*495ae853SAndroid Build Coastguard Worker 
278*495ae853SAndroid Build Coastguard Worker WORD32 PutMbToFrame(dec_struct_t * ps_dec);
279*495ae853SAndroid Build Coastguard Worker void ih264d_get_mbaff_neighbours(dec_struct_t * ps_dec,
280*495ae853SAndroid Build Coastguard Worker                                  dec_mb_info_t * ps_cur_mb_info,
281*495ae853SAndroid Build Coastguard Worker                                  UWORD8 uc_curMbFldDecFlag);
282*495ae853SAndroid Build Coastguard Worker 
283*495ae853SAndroid Build Coastguard Worker void ih264d_update_mbaff_left_nnz(dec_struct_t * ps_dec,
284*495ae853SAndroid Build Coastguard Worker                                   dec_mb_info_t * ps_cur_mb_info);
285*495ae853SAndroid Build Coastguard Worker void ih264d_transfer_mb_group_data(dec_struct_t * ps_dec,
286*495ae853SAndroid Build Coastguard Worker                                    const UWORD8 u1_num_mbs,
287*495ae853SAndroid Build Coastguard Worker                                    const UWORD8 u1_end_of_row, /* Cur n-Mb End of Row Flag */
288*495ae853SAndroid Build Coastguard Worker                                    const UWORD8 u1_end_of_row_next /* Next n-Mb End of Row Flag */
289*495ae853SAndroid Build Coastguard Worker                                    );
290*495ae853SAndroid Build Coastguard Worker 
291*495ae853SAndroid Build Coastguard Worker void ih264d_populate_mb_info_map(dec_struct_t *ps_dec,
292*495ae853SAndroid Build Coastguard Worker                                  dec_mb_info_t *ps_cur_mb_info,
293*495ae853SAndroid Build Coastguard Worker                                  UWORD16 u2_blk_x,
294*495ae853SAndroid Build Coastguard Worker                                  UWORD16 u2_blk_y,
295*495ae853SAndroid Build Coastguard Worker                                  UWORD8 u1_val);
296*495ae853SAndroid Build Coastguard Worker 
297*495ae853SAndroid Build Coastguard Worker //void FillRandomData(UWORD8 *pu1_buf, WORD32 u4_bufSize);
298*495ae853SAndroid Build Coastguard Worker 
299*495ae853SAndroid Build Coastguard Worker #endif /* _MB_UTILS_H_ */
300