13749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/******************************************************************************
23749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
33749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Copyright (C) 2015 The Android Open Source Project
43749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
53749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Licensed under the Apache License, Version 2.0 (the "License");
63749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * you may not use this file except in compliance with the License.
73749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * You may obtain a copy of the License at:
83749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
93749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * http://www.apache.org/licenses/LICENSE-2.0
103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Unless required by applicable law or agreed to in writing, software
123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * distributed under the License is distributed on an "AS IS" BASIS,
133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * See the License for the specific language governing permissions and
153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * limitations under the License.
163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *****************************************************************************
183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*/
203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*******************************************************************************
233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K* @file
243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*  ih264e_cabac.c
253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*
263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K* @brief
273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*  Contains all functions to encode in CABAC entropy mode
283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*
293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*
303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K* @author
313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K* Doney Alex
323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*
333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K* @par List of Functions:
343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*
353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*
363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K* @remarks
373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*  None
383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*
393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*******************************************************************************
403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K*/
413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/*****************************************************************************/
433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/* File Includes                                                             */
443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/*****************************************************************************/
453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/* System include files */
473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include <stdio.h>
483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include <assert.h>
493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include <limits.h>
503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include <string.h>
513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/* User include files */
533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_config.h"
543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_typedefs.h"
553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "iv2.h"
563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ive2.h"
573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_debug.h"
583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_defs.h"
593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_defs.h"
603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_macros.h"
613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_error.h"
623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_bitstream.h"
633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ime_distortion_metrics.h"
643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ime_defs.h"
653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ime_structs.h"
663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_error.h"
673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_structs.h"
683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_trans_quant_itrans_iquant.h"
693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_inter_pred_filters.h"
703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_mem_fns.h"
713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_padding.h"
723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_platform_macros.h"
733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_intra_pred_filters.h"
743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_deblk_edge_filters.h"
753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_cabac_tables.h"
763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "irc_cntrl_param.h"
773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "irc_frame_info_collector.h"
783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_rate_control.h"
793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_cabac_structs.h"
803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_structs.h"
813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_cabac.h"
823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_encode_header.h"
833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_cavlc_tables.h"
843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_cavlc.h"
853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_statistics.h"
863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_trace.h"
873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/*****************************************************************************/
893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/* Function Definitions                                                      */
903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/*****************************************************************************/
913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Encodes mb_skip_flag  using CABAC entropy coding mode.
1003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u1_mb_skip_flag
1023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  mb_skip_flag
1033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
1053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
1063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u4_ctxidx_offset
1083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  ctxIdxOffset for mb_skip_flag context
1093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
1113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
1133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
1143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
1163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
1173749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_mb_skip(UWORD8 u1_mb_skip_flag,
1183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                     cabac_ctxt_t *ps_cabac_ctxt,
1193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                     UWORD32 u4_ctxidx_offset)
1203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
1213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u4_ctx_inc;
1233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 a, b;
1243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    a = ((ps_cabac_ctxt->ps_left_ctxt_mb_info->u1_mb_type & CAB_SKIP_MASK) ?
1253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    0 : 1);
1263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    b = ((ps_cabac_ctxt->ps_top_ctxt_mb_info->u1_mb_type & CAB_SKIP_MASK) ?
1273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    0 : 1);
1283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_ctx_inc = a + b;
1303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Encode the bin */
1313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ih264e_cabac_encode_bin(ps_cabac_ctxt,
1323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            (UWORD32) u1_mb_skip_flag,
1333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            ps_cabac_ctxt->au1_cabac_ctxt_table + u4_ctxidx_offset
1343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    + u4_ctx_inc);
1353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
1373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/* ! < Table 9-36 � Binarization for macroblock types in I slices  in ITU_T_H264-201402
1403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Bits 0-7 : binarised value
1413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Bits 8-15: length of binary sequence
1423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
1433749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic const UWORD32 u4_mb_type_intra[26] =
1443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    { 0x0100, 0x0620, 0x0621, 0x0622, 0x0623, 0x0748, 0x0749, 0x074a, 0x074b,
1453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K      0x074c, 0x074d, 0x074e, 0x074f, 0x0628, 0x0629, 0x062a, 0x062b, 0x0758,
1463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K      0x0759, 0x075a, 0x075b, 0x075c, 0x075d, 0x075e, 0x075f, 0x0203 };
1473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/* CtxInc for mb types */
1503749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic const UWORD32 u4_mb_ctxinc[2][26] =
1513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
1523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Intra CtxInc's */
1533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {   0x00,
1543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        0x03467, 0x03467, 0x03467, 0x03467, 0x034567, 0x034567, 0x034567,
1553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        0x034567, 0x034567, 0x034567, 0x034567, 0x034567, 0x03467, 0x03467,
1563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        0x03467, 0x03467, 0x034567, 0x034567, 0x034567, 0x034567, 0x034567,
1573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        0x034567, 0x034567, 0x034567, 0x00},
1583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Inter CtxInc's */
1593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {   0x00,
1603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        0x001233, 0x001233, 0x001233, 0x001233, 0x0012233, 0x0012233, 0x0012233,
1613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        0x0012233, 0x0012233, 0x0012233, 0x0012233, 0x0012233, 0x001233, 0x001233,
1623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        0x001233, 0x001233, 0x0012233, 0x0012233, 0x0012233, 0x0012233, 0x0012233,
1633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        0x0012233, 0x0012233, 0x0012233, 0x00}
1643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K};
1653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
1683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
1693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
1713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Encodes mb_type for an intra MB.
1723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u4_slice_type
1743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  slice type
1753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u4_intra_mb_type
1773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  MB type (Table 7-11)
1783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
1803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
1813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K ** @param[in] u4_ctxidx_offset
1833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  ctxIdxOffset for mb_type context
1843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
1863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
1883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
1893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
1913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
1923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1933749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_intra_mb_type(UWORD32 u4_slice_type,
1943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           UWORD32 u4_intra_mb_type,
1953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           cabac_ctxt_t *ps_cabac_ctxt,
1963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           UWORD32 u4_ctx_idx_offset)
1973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
1983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    encoding_envirnoment_t *ps_cab_enc_env = &(ps_cabac_ctxt->s_cab_enc_env);
2003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    bin_ctxt_model *pu1_mb_bin_ctxt, *pu1_bin_ctxt;
2013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_bin;
2023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_left_ctxt = ps_cabac_ctxt->ps_left_ctxt_mb_info;
2033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_top_ctxt = ps_cabac_ctxt->ps_top_ctxt_mb_info;
2043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_bins;
2053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_ctx_inc;
2063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i1_bins_len;
2073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_code_int_range;
2083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_code_int_low;
2093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD16 u2_quant_code_int_range;
2103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD16 u4_code_int_range_lps;
2113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i;
2123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_ctx_inc;
2133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_table_val;
2143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    pu1_mb_bin_ctxt = ps_cabac_ctxt->au1_cabac_ctxt_table + u4_ctx_idx_offset;
2163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_bins = u4_mb_type_intra[u4_intra_mb_type];
2183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    i1_bins_len = (WORD8) ((u4_bins >> 8) & 0x0f);
2193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_ctx_inc = u4_mb_ctxinc[(u4_slice_type != ISLICE)][u4_intra_mb_type];
2203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u1_ctx_inc = 0;
2213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (u4_slice_type == ISLICE)
2223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
2233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (ps_left_ctxt != ps_cabac_ctxt->ps_def_ctxt_mb_info)
2243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_ctx_inc += ((ps_left_ctxt->u1_mb_type != CAB_I4x4) ? 1 : 0);
2253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (ps_top_ctxt != ps_cabac_ctxt->ps_def_ctxt_mb_info)
2263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_ctx_inc += ((ps_top_ctxt->u1_mb_type != CAB_I4x4) ? 1 : 0);
2273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = (u4_ctx_inc | (u1_ctx_inc << ((i1_bins_len - 1) << 2)));
2293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
2303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
2313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
2323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_mb_bin_ctxt += 3;
2333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (u4_slice_type == BSLICE)
2343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            pu1_mb_bin_ctxt += 2;
2353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
2373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_code_int_range = ps_cab_enc_env->u4_code_int_range;
2393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_code_int_low = ps_cab_enc_env->u4_code_int_low;
2403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    for (i = (i1_bins_len - 1); i >= 0; i--)
2423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
2433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        WORD32 shift;
2443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_ctx_inc = ((u4_ctx_inc >> (i << 2)) & 0x0f);
2463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_bin = ((u4_bins >> i) & 0x01);
2473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encode the bin */
2483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_bin_ctxt = pu1_mb_bin_ctxt + u1_ctx_inc;
2493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (i != (i1_bins_len - 2))
2503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
2513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            WORD8 i1_mps = !!((*pu1_bin_ctxt) & (0x40));
2523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            WORD8 i1_state = (*pu1_bin_ctxt) & 0x3F;
2533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_quant_code_int_range = ((u4_code_int_range >> 6) & 0x03);
2553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_table_val =
2563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            gau4_ih264_cabac_table[i1_state][u2_quant_code_int_range];
2573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_code_int_range_lps = u4_table_val & 0xFF;
2583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_code_int_range -= u4_code_int_range_lps;
2603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (u1_bin != i1_mps)
2613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
2623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_code_int_low += u4_code_int_range;
2633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_code_int_range = u4_code_int_range_lps;
2643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (i1_state == 0)
2653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
2663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    /* MPS(CtxIdx) = 1 - MPS(CtxIdx) */
2673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    i1_mps = 1 - i1_mps;
2683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
2693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i1_state = (u4_table_val >> 15) & 0x3F;
2713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
2723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else
2733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
2743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i1_state = (u4_table_val >> 8) & 0x3F;
2753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
2773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            (*pu1_bin_ctxt) = (i1_mps << 6) | i1_state;
2793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
2803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
2813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
2823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_code_int_range -= 2;
2833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
2843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Renormalize */
2863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /*****************************************************************/
2873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Renormalization; calculate bits generated based on range(R)   */
2883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Note : 6 <= R < 512; R is 2 only for terminating encode       */
2893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /*****************************************************************/
2903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        GETRANGE(shift, u4_code_int_range);
2913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        shift = 9 - shift;
2923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_code_int_low <<= shift;
2933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_code_int_range <<= shift;
2943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* bits to be inserted in the bitstream */
2963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cab_enc_env->u4_bits_gen += shift;
2973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cab_enc_env->u4_code_int_range = u4_code_int_range;
2983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cab_enc_env->u4_code_int_low = u4_code_int_low;
2993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* generate stream when a byte is ready */
3013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (ps_cab_enc_env->u4_bits_gen > CABAC_BITS)
3023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
3033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_put_byte(ps_cabac_ctxt);
3043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_code_int_range = ps_cab_enc_env->u4_code_int_range;
3053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_code_int_low = ps_cab_enc_env->u4_code_int_low;
3063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
3083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
3093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
3103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
3143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
3153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
3173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Encodes prev_intra4x4_pred_mode_flag and
3183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  rem_intra4x4_pred_mode using CABAC entropy coding mode
3193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
3213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
3223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  @param[in] pu1_intra_4x4_modes
3243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to array containing prev_intra4x4_pred_mode_flag and
3253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  rem_intra4x4_pred_mode
3263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
3283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
3303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
3313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
3333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
3343749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_4x4mb_modes(cabac_ctxt_t *ps_cabac_ctxt,
3353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                         UWORD8 *pu1_intra_4x4_modes)
3363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
3373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 i;
3383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 byte;
3393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    for (i = 0; i < 16; i += 2)
3403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
3413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* sub blk idx 1 */
3423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        byte = *pu1_intra_4x4_modes++;
3433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (byte & 0x1)
3443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
3453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_bin(ps_cabac_ctxt,
3463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    1,
3473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt->au1_cabac_ctxt_table
3483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            + PREV_INTRA4X4_PRED_MODE_FLAG);
3493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
3503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
3513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
3523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Binarization is FL and Cmax=7 */
3533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_encode_decision_bins(byte & 0xF,
3543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        4,
3553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        0x05554,
3563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        4,
3573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt->au1_cabac_ctxt_table
3583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            + REM_INTRA4X4_PRED_MODE - 5,
3593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt);
3603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
3613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* sub blk idx 2 */
3623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        byte >>= 4;
3633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (byte & 0x1)
3643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
3653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_bin(ps_cabac_ctxt,
3663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    1,
3673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt->au1_cabac_ctxt_table
3683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            + PREV_INTRA4X4_PRED_MODE_FLAG);
3693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
3703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
3713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
3723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_encode_decision_bins(byte & 0xF,
3733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        4,
3743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        0x05554,
3753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        4,
3763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt->au1_cabac_ctxt_table
3773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            + REM_INTRA4X4_PRED_MODE - 5,
3783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt);
3793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
3803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
3813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
3823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
3863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
3873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
3893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Encodes chroma  intrapred mode for the MB.
3903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u1_chroma_pred_mode
3923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Chroma intr prediction mode
3933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
3953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
3963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
3983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
3993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
4003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
4013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
4023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
4033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
4043749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_chroma_predmode(UWORD8 u1_chroma_pred_mode,
4053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                             cabac_ctxt_t *ps_cabac_ctxt)
4063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
4073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i1_temp;
4093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_curr_ctxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info;
4103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_left_ctxt = ps_cabac_ctxt->ps_left_ctxt_mb_info;
4113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_top_ctxt = ps_cabac_ctxt->ps_top_ctxt_mb_info;
4123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_bins = 0;
4133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i1_bins_len = 1;
4143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_ctx_inc = 0;
4153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 a, b;
4163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    a = ((ps_left_ctxt->u1_intrapred_chroma_mode != 0) ? 1 : 0);
4173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    b = ((ps_top_ctxt->u1_intrapred_chroma_mode != 0) ? 1 : 0);
4183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Binarization is TU and Cmax=3 */
4203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_curr_ctxt->u1_intrapred_chroma_mode = u1_chroma_pred_mode;
4213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_ctx_inc = a + b;
4233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_ctx_inc = (u4_ctx_inc | 0x330);
4243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (u1_chroma_pred_mode)
4253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
4263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_bins = 1;
4273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        i1_temp = u1_chroma_pred_mode;
4283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        i1_temp--;
4293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Put a stream of 1's of length Chromaps_pred_mode_ctxt value */
4303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        while (i1_temp)
4313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
4323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_bins = (u4_bins | (1 << i1_bins_len));
4333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i1_bins_len++;
4343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i1_temp--;
4353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
4363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* If Chromaps_pred_mode_ctxt < Cmax i.e 3. Terminate put a zero */
4373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (u1_chroma_pred_mode < 3)
4383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
4393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i1_bins_len++;
4403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
4413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
4423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ih264e_encode_decision_bins(u4_bins,
4443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                i1_bins_len,
4453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                u4_ctx_inc,
4463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                3,
4473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt->au1_cabac_ctxt_table
4483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    + INTRA_CHROMA_PRED_MODE,
4493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt);
4503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
4523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
4553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
4563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
4573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
4583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Encodes CBP for the MB.
4593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
4603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u1_cbp
4613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  CBP for the MB
4623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
4633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
4643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
4653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
4663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
4673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
4683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
4693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
4703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
4713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
4723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
4733749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_cbp(UWORD32 u4_cbp, cabac_ctxt_t *ps_cabac_ctxt)
4743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
4753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_left_ctxt = ps_cabac_ctxt->ps_left_ctxt_mb_info;
4763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_top_ctxt = ps_cabac_ctxt->ps_top_ctxt_mb_info;
4773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i2_cbp_chroma, i, j;
4783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_ctxt_inc, u1_bin;
4793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 a, b;
4803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_ctx_inc;
4813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_bins;
4823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i1_bins_len;
4833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CBP Luma, FL, Cmax = 15, L = 4 */
4853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_ctx_inc = 0;
4863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_bins = 0;
4873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    i1_bins_len = 5;
4883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    for (i = 0; i < 4; i++)
4893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
4903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* calulate ctxtInc, depending on neighbour availability */
4913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* u1_ctxt_inc = CondTerm(A) + 2 * CondTerm(B);
4923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K         A: Left block and B: Top block */
4933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Check for Top availability */
4953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (i >> 1)
4963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
4973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            j = i - 2;
4983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Top is available always and it's current MB */
4993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            b = (((u4_cbp >> j) & 0x01) != 0 ? 0 : 1);
5003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
5013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
5023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
5033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* for blocks whose top reference is in another MB */
5043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
5053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                j = i + 2;
5063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                b = ((ps_top_ctxt->u1_cbp >> j) & 0x01) ? 0 : 1;
5073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
5083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
5093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
5103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Check for Left availability */
5113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (i & 0x01)
5123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
5133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Left is available always and it's current MB */
5143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            j = i - 1;
5153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            a = (((u4_cbp >> j) & 0x01) != 0 ? 0 : 1);
5163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
5173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
5183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
5193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
5203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                j = i + 1;
5213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                a = ((ps_left_ctxt->u1_cbp >> j) & 0x01) ? 0 : 1;
5223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
5233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
5243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_ctxt_inc = a + 2 * b;
5253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_bin = ((u4_cbp >> i) & 0x01);
5263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = (u4_ctx_inc | (u1_ctxt_inc << (i << 2)));
5273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_bins = (u4_bins | (u1_bin << i));
5283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
5293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
5303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CBP Chroma, TU, Cmax = 2 */
5313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    i2_cbp_chroma = u4_cbp >> 4;
5323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* calulate ctxtInc, depending on neighbour availability */
5333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    a = (ps_left_ctxt->u1_cbp > 15) ? 1 : 0;
5343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    b = (ps_top_ctxt->u1_cbp > 15) ? 1 : 0;
5353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
5363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u1_ctxt_inc = a + 2 * b;
5373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (i2_cbp_chroma)
5383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
5393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = u4_ctx_inc | ((4 + u1_ctxt_inc) << 16);
5403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_bins = (u4_bins | 0x10);
5413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* calulate ctxtInc, depending on neighbour availability */
5423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        a = (ps_left_ctxt->u1_cbp > 31) ? 1 : 0;
5433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        b = (ps_top_ctxt->u1_cbp > 31) ? 1 : 0;
5443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_ctxt_inc = a + 2 * b;
5453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = u4_ctx_inc | ((8 + u1_ctxt_inc) << 20);
5463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_bins = (u4_bins | (((i2_cbp_chroma >> 1) & 0x01) << i1_bins_len));
5473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        i1_bins_len++;
5483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
5493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
5503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
5513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = (u4_ctx_inc | ((4 + u1_ctxt_inc) << 16));
5523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
5533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ih264e_encode_decision_bins(u4_bins, i1_bins_len, u4_ctx_inc, 8,
5543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt->au1_cabac_ctxt_table + CBP_LUMA,
5553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt);
5563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
5573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
5583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
5593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
5603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
5613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
5623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
5633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Encodes mb_qp_delta for the MB.
5643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
5653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] i1_mb_qp_delta
5663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  mb_qp_delta
5673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
5683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
5693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
5703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
5713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
5723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
5733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
5743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
5753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
5763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
5773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
5783749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_mb_qp_delta(WORD8 i1_mb_qp_delta,
5793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                         cabac_ctxt_t *ps_cabac_ctxt)
5803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
5813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_code_num;
5823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_ctxt_inc;
5833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
5843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_ctx_inc;
5853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_bins;
5863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i1_bins_len;
5873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_ctx_inc, u1_bin;
5883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Range of ps_mb_qp_delta_ctxt= -26 to +25 inclusive */
5893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ASSERT((i1_mb_qp_delta < 26) && (i1_mb_qp_delta > -27));
5903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* if ps_mb_qp_delta_ctxt=0, then codeNum=0 */
5913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u1_code_num = 0;
5923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (i1_mb_qp_delta > 0)
5933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_code_num = (i1_mb_qp_delta << 1) - 1;
5943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else if (i1_mb_qp_delta < 0)
5953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_code_num = (ABS(i1_mb_qp_delta)) << 1;
5963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
5973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_ctx_inc = 0;
5983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_bins = 0;
5993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    i1_bins_len = 1;
6003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* calculate ctxtInc, depending on neighbour availability */
6013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u1_ctxt_inc = (!(!(ps_cabac_ctxt->i1_prevps_mb_qp_delta_ctxt)));
6023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_cabac_ctxt->i1_prevps_mb_qp_delta_ctxt = i1_mb_qp_delta;
6033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
6043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (u1_code_num == 0)
6053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
6063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* b0 */
6073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_bin = (UWORD8) (u4_bins);
6083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_ctx_inc = u1_ctxt_inc & 0x0f;
6093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encode the bin */
6103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_encode_bin(ps_cabac_ctxt,
6113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                u1_bin,
6123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt->au1_cabac_ctxt_table + MB_QP_DELTA
6133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        + u1_ctx_inc);
6143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
6153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
6163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
6173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
6183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* b0 */
6193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = u1_ctxt_inc;
6203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_bins = 1;
6213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_code_num--;
6223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (u1_code_num == 0)
6233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
6243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* b1 */
6253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_ctx_inc = (u4_ctx_inc | 0x20);
6263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i1_bins_len++;
6273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_encode_decision_bins(u4_bins, i1_bins_len, u4_ctx_inc, 3,
6283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt->au1_cabac_ctxt_table + MB_QP_DELTA,
6293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt);
6303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
6313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
6323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
6333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* b1 */
6343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_ctx_inc = (u4_ctx_inc | 0x20);
6353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_bins = (u4_bins | (1 << i1_bins_len));
6363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i1_bins_len++;
6373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_code_num--;
6383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* BinIdx from b2 onwards */
6393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (u1_code_num < 30)
6403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            { /* maximum i1_bins_len = 31 */
6413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                while (u1_code_num)
6423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
6433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_bins = (u4_bins | (1 << i1_bins_len));
6443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    i1_bins_len++;
6453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_code_num--;
6463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                };
6473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc = (u4_ctx_inc | 0x300);
6483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i1_bins_len++;
6493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_encode_decision_bins(u4_bins,
6503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            i1_bins_len,
6513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u4_ctx_inc,
6523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            2,
6533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt->au1_cabac_ctxt_table
6543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + MB_QP_DELTA,
6553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt);
6563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
6573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else
6583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
6593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* maximum i1_bins_len = 53 */
6603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_bins = 0xffffffff;
6613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i1_bins_len = 32;
6623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc = (u4_ctx_inc | 0x300);
6633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_code_num -= 30;
6643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_encode_decision_bins(u4_bins,
6653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            i1_bins_len,
6663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u4_ctx_inc,
6673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            2,
6683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt->au1_cabac_ctxt_table
6693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + MB_QP_DELTA,
6703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt);
6713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_bins = 0;
6723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i1_bins_len = 0;
6733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc = 0x033;
6743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                while (u1_code_num)
6753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
6763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_bins = (u4_bins | (1 << i1_bins_len));
6773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    i1_bins_len++;
6783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_code_num--;
6793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                };
6803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
6813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc = (u4_ctx_inc | 0x300);
6823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i1_bins_len++;
6833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_encode_decision_bins(u4_bins,
6843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            i1_bins_len,
6853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u4_ctx_inc,
6863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            1,
6873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt->au1_cabac_ctxt_table
6883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + MB_QP_DELTA,
6893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt);
6903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
6913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
6923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
6933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
6943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
6953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
6963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
6973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
6983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
6993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
7003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
7013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Encodes 4residual_block_cabac as defined in 7.3.5.3.3.
7023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] pi2_res_block
7043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  pointer to the array of residues
7053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in]  u1_nnz
7073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Number of non zero coeffs in the block
7083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u1_max_num_coeffs
7103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Max number of coeffs that can be there in the block
7113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u2_sig_coeff_map
7133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Significant coeff map
7143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u4_ctx_cat_offset
7163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  ctxIdxOffset for  absolute value contexts
7173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in]  pu1_ctxt_sig_coeff
7193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to residual state variables
7203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
7223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
7233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
7253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
7273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
7283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
7293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
7303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
7313749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_write_coeff4x4(WORD16 *pi2_res_block, UWORD8 u1_nnz,
7323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        UWORD8 u1_max_num_coeffs,
7333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        UWORD16 u2_sig_coeff_map,
7343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        UWORD32 u4_ctx_cat_offset,
7353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        bin_ctxt_model *pu1_ctxt_sig_coeff,
7363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        cabac_ctxt_t *ps_cabac_ctxt)
7373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
7383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
7393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i;
7403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD16 *pi16_coeffs;
7413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_sig_coeff, u4_bins;
7423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_ctx_inc;
7433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_last_sig_coef_index = (31 - CLZ(u2_sig_coeff_map));
7443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
7453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Always put Coded Block Flag as 1 */
7463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
7473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pi16_coeffs = pi2_res_block;
7483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
7493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bin_ctxt_model *pu1_bin_ctxt;
7503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 u1_bin, uc_last;
7513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
7523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i = 0;
7533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            pu1_bin_ctxt = pu1_ctxt_sig_coeff;
7543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_sig_coeff = 0;
7553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_bin = 1;
7563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if ((u1_last_sig_coef_index))
7573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
7583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_bin = !!(u2_sig_coeff_map & 01);
7593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
7603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            uc_last = 1;
7613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
7623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            do
7633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
7643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* Encode Decision */
7653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_bin(ps_cabac_ctxt, u1_bin, pu1_bin_ctxt);
7663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
7673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (u1_bin & uc_last)
7683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
7693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_sig_coeff = (u4_sig_coeff | (1 << i));
7703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    pu1_bin_ctxt = pu1_ctxt_sig_coeff + i
7713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    + LAST_SIGNIFICANT_COEFF_FLAG_FRAME
7723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    - SIGNIFICANT_COEFF_FLAG_FRAME;
7733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_bin = (i == u1_last_sig_coef_index);
7743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    uc_last = 0;
7753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
7763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                else
7773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
7783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    i = i + 1;
7793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    pu1_bin_ctxt = pu1_ctxt_sig_coeff + i;
7803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_bin = (i == u1_last_sig_coef_index);
7813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    uc_last = 1;
7823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    if ((i != u1_last_sig_coef_index))
7833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    {
7843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        u1_bin = !!((u2_sig_coeff_map >> i) & 01);
7853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    }
7863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
7873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }while (!((i > u1_last_sig_coef_index)
7883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            || (i > (u1_max_num_coeffs - 1))));
7893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
7903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
7913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encode coeff_abs_level_minus1 and coeff_sign_flag */
7923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
7933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 u1_sign;
7943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD16 u2_abs_level;
7953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 u1_abs_level_equal1 = 1, u1_abs_level_gt1 = 0;
7963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 u1_ctx_inc;
7973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 u1_coff;
7983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            WORD16 i2_sufs;
7993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            WORD8 i1_bins_len;
8003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i = u1_last_sig_coef_index;
8013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            pi16_coeffs = pi2_res_block + u1_nnz - 1;
8023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            do
8033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
8043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
8053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_sig_coeff = u4_sig_coeff & ((1 << i) - 1);
8063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_bins = 0;
8073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc = 0;
8083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    i1_bins_len = 1;
8093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    /* Encode the AbsLevelMinus1 */
8103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u2_abs_level = ABS(*(pi16_coeffs)) - 1;
8113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    /* CtxInc for bin0 */
8123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc = MIN(u1_abs_level_equal1, 4);
8133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    /* CtxInc for remaining */
8143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_ctx_inc = 5 + MIN(u1_abs_level_gt1, 4);
8153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc = u4_ctx_inc + (u1_ctx_inc << 4);
8163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    if (u2_abs_level)
8173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    {
8183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        u1_abs_level_gt1++;
8193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        u1_abs_level_equal1 = 0;
8203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    }
8213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    if (!u1_abs_level_gt1)
8223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        u1_abs_level_equal1++;
8233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_coff = 14;
8253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    if (u2_abs_level >= u1_coff)
8263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    {
8273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        /* Prefix TU i.e string of 14 1's */
8283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        u4_bins = 0x3fff;
8293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        i1_bins_len = 14;
8303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        ih264e_encode_decision_bins(u4_bins, i1_bins_len,
8313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    u4_ctx_inc, 1, ps_cabac_ctxt->au1_cabac_ctxt_table
8323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    + u4_ctx_cat_offset,
8333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    ps_cabac_ctxt);
8343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        /* Suffix, uses EncodeBypass */
8363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        i2_sufs = u2_abs_level - u1_coff;
8373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        u4_bins = ih264e_cabac_UEGk0_binarization(i2_sufs,
8393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                                  &i1_bins_len);
8403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        ih264e_cabac_encode_bypass_bins(ps_cabac_ctxt, u4_bins,
8423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                        i1_bins_len);
8433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    }
8453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    else
8463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    {
8473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        /* Prefix only */
8483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        u4_bins = (1 << u2_abs_level) - 1;
8493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        i1_bins_len = u2_abs_level + 1;
8503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        /* Encode Terminating bit */
8513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        ih264e_encode_decision_bins(u4_bins, i1_bins_len,
8523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    u4_ctx_inc, 1, ps_cabac_ctxt->au1_cabac_ctxt_table
8533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    + u4_ctx_cat_offset,
8543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    ps_cabac_ctxt);
8553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    }
8563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
8573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* encode coeff_sign_flag[i] */
8583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_sign = ((*pi16_coeffs) < 0) ? 1 : 0;
8590574be65f4b2376e32bdf979650d8e5f168b68b7Doney Alex                ih264e_cabac_encode_bypass_bin(ps_cabac_ctxt, u1_sign);
8603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i = CLZ(u4_sig_coeff);
8613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i = 31 - i;
8623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                pi16_coeffs--;
8633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }while (u4_sig_coeff);
8643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
8653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
8673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
8703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
8713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
8723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Write DC coeffs for intra predicted luma block
8733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
8743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_ent_ctxt
8753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to entropy context structure
8763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
8773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
8783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
8793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
8803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
8813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
8823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
8833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
8843749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_encode_residue_luma_dc(entropy_ctxt_t *ps_ent_ctxt)
8853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
8863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CABAC context */
8883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    cabac_ctxt_t *ps_cabac_ctxt = ps_ent_ctxt->ps_cabac;
8893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    tu_sblk_coeff_data_t *ps_mb_coeff_data;
8903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
8913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* packed residue */
8923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    void *pv_mb_coeff_data = ps_ent_ctxt->pv_mb_coeff_data;
8933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD16 u2_sig_coeff_map;
8943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD16 *pi2_res_block;
8953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_nnz;
8963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_cbf;
8973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_top_ctxt = ps_cabac_ctxt->ps_top_ctxt_mb_info;
8983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *p_CurCtxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info;
8993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    PARSE_COEFF_DATA_BLOCK_4x4(pv_mb_coeff_data, ps_mb_coeff_data, u1_nnz,
9013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                               u2_sig_coeff_map, pi2_res_block);
9023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u1_cbf = !!(u1_nnz);
9043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
9063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD32 u4_ctx_inc;
9073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 u1_a, u1_b;
9083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_a = ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] & 0x1;
9103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_b = ps_top_ctxt->u1_yuv_dc_csbp & 0x1;
9113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = u1_a + (u1_b << 1);
9123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_encode_bin(ps_cabac_ctxt,
9143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                u1_cbf,
9153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt->au1_cabac_ctxt_table + CBF
9163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        + (LUMA_DC_CTXCAT << 2) + u4_ctx_inc);
9173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
9183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Write coded_block_flag */
9203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (u1_cbf)
9213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
9223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_write_coeff4x4(pi2_res_block,
9233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                   u1_nnz,
9243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                   15,
9253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                   u2_sig_coeff_map,
9263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                   COEFF_ABS_LEVEL_MINUS1 + COEFF_ABS_LEVEL_CAT_0_OFFSET,
9273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                   ps_cabac_ctxt->au1_cabac_ctxt_table
9283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        + SIGNIFICANT_COEFF_FLAG_FRAME
9293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        + SIG_COEFF_CTXT_CAT_0_OFFSET,
9303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                   ps_cabac_ctxt);
9313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] |= 0x1;
9333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        p_CurCtxt->u1_yuv_dc_csbp |= 0x1;
9343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
9353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
9363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
9373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] &= 0x6;
9383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        p_CurCtxt->u1_yuv_dc_csbp &= 0x6;
9393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
9403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_ent_ctxt->pv_mb_coeff_data = pv_mb_coeff_data;
9423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
9433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
9483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
9493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
9503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Write chroma residues to the bitstream
9513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
9523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_ent_ctxt
9533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to entropy context structure
9543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
9553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u1_chroma_cbp
9563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * coded block pattern, chroma
9573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
9583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
9593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
9603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
9613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
9623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
9633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
9643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
9653749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_write_chroma_residue(entropy_ctxt_t *ps_ent_ctxt,
9663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                              UWORD8 u1_chroma_cbp)
9673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
9683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CABAC context */
9693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    cabac_ctxt_t *ps_cabac_ctxt = ps_ent_ctxt->ps_cabac;
9703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    tu_sblk_coeff_data_t *ps_mb_coeff_data;
9713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* packed residue */
9723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    void *pv_mb_coeff_data = ps_ent_ctxt->pv_mb_coeff_data;
9733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD16 u2_sig_coeff_map;
9743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_nnz;
9753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_top_ctxt_mb_info, *ps_curr_ctxt;
9763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_top_ctxt_mb_info = ps_cabac_ctxt->ps_top_ctxt_mb_info;
9783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_curr_ctxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info;
9793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /********************/
9813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Write Chroma DC */
9823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /********************/
9833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
9843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        WORD16 *pi2_res_block;
9853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 u1_left_dc_csbp, u1_top_dc_csbp, u1_uv, u1_cbf;
9863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_left_dc_csbp = (ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0]) >> 1;
9883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_top_dc_csbp = (ps_top_ctxt_mb_info->u1_yuv_dc_csbp) >> 1;
9893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
9903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        for (u1_uv = 0; u1_uv < 2; u1_uv++)
9913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
9923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            PARSE_COEFF_DATA_BLOCK_4x4(pv_mb_coeff_data, ps_mb_coeff_data,
9933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                       u1_nnz, u2_sig_coeff_map, pi2_res_block);
9943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_cbf = !!(u1_nnz);
9953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
9963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD8 u1_a, u1_b;
9973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD32 u4_ctx_inc;
9983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_a = (u1_left_dc_csbp >> u1_uv) & 0x01;
9993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_b = (u1_top_dc_csbp >> u1_uv) & 0x01;
10003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc = (u1_a + (u1_b << 1));
10013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_bin(ps_cabac_ctxt,
10033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        u1_cbf,
10043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt->au1_cabac_ctxt_table + CBF
10053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + (CHROMA_DC_CTXCAT << 2)
10063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + u4_ctx_inc);
10073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
10083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (u1_cbf)
10103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
10113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_write_coeff4x4(pi2_res_block,
10123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u1_nnz,
10133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            3,
10143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u2_sig_coeff_map,
10153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            COEFF_ABS_LEVEL_MINUS1
10163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + COEFF_ABS_LEVEL_CAT_3_OFFSET,
10173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                             ps_cabac_ctxt->au1_cabac_ctxt_table
10183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + SIGNIFICANT_COEFF_FLAG_FRAME
10193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + SIG_COEFF_CTXT_CAT_3_OFFSET,
10203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                              ps_cabac_ctxt);
10213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                SETBIT(u1_top_dc_csbp, u1_uv);
10233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                SETBIT(u1_left_dc_csbp, u1_uv);
10243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
10253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else
10263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
10273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                CLEARBIT(u1_top_dc_csbp, u1_uv);
10283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                CLEARBIT(u1_left_dc_csbp, u1_uv);
10293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
10303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
10313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /*************************************************************/
10323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /*      Update the DC csbp                                   */
10333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /*************************************************************/
10343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] &= 0x1;
10353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_yuv_dc_csbp &= 0x1;
10363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] |= (u1_left_dc_csbp << 1);
10373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_yuv_dc_csbp |= (u1_top_dc_csbp << 1);
10383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
10393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /*******************/
10403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Write Chroma AC */
10413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /*******************/
10423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
10433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (u1_chroma_cbp == 2)
10443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
10453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 u1_uv_blkno, u1_left_ac_csbp, u1_top_ac_csbp;
10463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            WORD16 *pi2_res_block;
10473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_left_ac_csbp = ps_cabac_ctxt->pu1_left_uv_ac_csbp[0];
10483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_top_ac_csbp = ps_top_ctxt_mb_info->u1_yuv_ac_csbp >> 4;
10493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            for (u1_uv_blkno = 0; u1_uv_blkno < 8; u1_uv_blkno++)
10513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
10523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD8 u1_cbf;
10533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD8 u1_b2b0, u1_b2b1;
10543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                PARSE_COEFF_DATA_BLOCK_4x4(pv_mb_coeff_data, ps_mb_coeff_data,
10553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           u1_nnz, u2_sig_coeff_map,
10563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           pi2_res_block);
10573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_cbf = !!(u1_nnz);
10593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_b2b0 = ((u1_uv_blkno & 0x4) >> 1) | (u1_uv_blkno & 0x1);
10603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_b2b1 = ((u1_uv_blkno & 0x4) >> 1)
10613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                | ((u1_uv_blkno & 0x2) >> 1);
10623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
10643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    UWORD8 u1_a, u1_b;
10653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    UWORD32 u4_ctx_inc;
10663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    /* write coded_block_flag */
10673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_a = (u1_left_ac_csbp >> u1_b2b1) & 0x1;
10683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_b = (u1_top_ac_csbp >> u1_b2b0) & 0x1;
10693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc = u1_a + (u1_b << 1);
10703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    ih264e_cabac_encode_bin(ps_cabac_ctxt,
10723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u1_cbf,
10733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt->au1_cabac_ctxt_table + CBF
10743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    + (CHROMA_AC_CTXCAT << 2)
10753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    + u4_ctx_inc);
10763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
10783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (u1_cbf)
10793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
10803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    ih264e_cabac_write_coeff4x4(pi2_res_block,
10813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                u1_nnz,
10823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                14,
10833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                u2_sig_coeff_map,
10843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                COEFF_ABS_LEVEL_MINUS1
10853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    + COEFF_ABS_LEVEL_CAT_4_OFFSET,
10863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                ps_cabac_ctxt->au1_cabac_ctxt_table
10873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    + +SIGNIFICANT_COEFF_FLAG_FRAME
10883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    + SIG_COEFF_CTXT_CAT_4_OFFSET,
10893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                ps_cabac_ctxt);
10903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    SETBIT(u1_left_ac_csbp, u1_b2b1);
10923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    SETBIT(u1_top_ac_csbp, u1_b2b0);
10933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
10943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                else
10953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
10963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    CLEARBIT(u1_left_ac_csbp, u1_b2b1);
10973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    CLEARBIT(u1_top_ac_csbp, u1_b2b0);
10983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
10993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
11003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
11013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /*************************************************************/
11023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /*      Update the AC csbp                                   */
11033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /*************************************************************/
11043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_cabac_ctxt->pu1_left_uv_ac_csbp[0] = u1_left_ac_csbp;
11053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_ac_csbp &= 0x0f;
11063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_ac_csbp |= (u1_top_ac_csbp << 4);
11073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
11083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
11093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
11103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_cabac_ctxt->pu1_left_uv_ac_csbp[0] = 0;
11113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_ac_csbp &= 0xf;
11123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
11133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
11143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_ent_ctxt->pv_mb_coeff_data = pv_mb_coeff_data;
11153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
11163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
11173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
11183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
11193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
11203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
11213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
11223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
11233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Encodes Residues for the MB as defined in 7.3.5.3
11243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
11253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_ent_ctxt
11263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to entropy context structure
11273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
11283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u1_cbp
11293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * coded block pattern
11303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
11313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u1_ctx_cat
11323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Context category, LUMA_AC_CTXCAT or LUMA_4x4_CTXCAT
11333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
11343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
11353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
11363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
11373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
11383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
11393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
11403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
11413749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_encode_residue(entropy_ctxt_t *ps_ent_ctxt,
11423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        UWORD32 u4_cbp, UWORD8 u1_ctx_cat)
11433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
11443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CABAC context */
11453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    cabac_ctxt_t *ps_cabac_ctxt = ps_ent_ctxt->ps_cabac;
11463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
11473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    tu_sblk_coeff_data_t *ps_mb_coeff_data;
11483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* packed residue */
11493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    void *pv_mb_coeff_data = ps_ent_ctxt->pv_mb_coeff_data;
11503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD16 u2_sig_coeff_map;
11513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_nnz;
11523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_curr_ctxt;
11533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_top_ctxt;
11543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_left_ac_csbp;
11553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 u1_top_ac_csbp;
11563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_ctx_idx_offset_sig_coef, u4_ctx_idx_offset_abs_lvl;
11573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_curr_ctxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info;
11583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_top_ctxt = ps_cabac_ctxt->ps_top_ctxt_mb_info;
11593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u1_left_ac_csbp = ps_cabac_ctxt->pu1_left_y_ac_csbp[0];
11603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u1_top_ac_csbp = ps_top_ctxt->u1_yuv_ac_csbp;
11613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
11623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (u4_cbp & 0xf)
11633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
11643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /*  Write luma residue  */
11653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 u1_offset;
11663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        WORD16 *pi2_res_block;
11673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 u1_subblk_num;
11683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (u1_ctx_cat == LUMA_AC_CTXCAT)
11693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
11703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_offset = 1;
11713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_ctx_idx_offset_sig_coef = SIG_COEFF_CTXT_CAT_1_OFFSET;
11723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_ctx_idx_offset_abs_lvl = COEFF_ABS_LEVEL_MINUS1
11733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                      + COEFF_ABS_LEVEL_CAT_1_OFFSET;
11743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
11753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
11763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
11773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_offset = 0;
11783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_ctx_idx_offset_sig_coef = SIG_COEFF_CTXT_CAT_2_OFFSET;
11793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_ctx_idx_offset_abs_lvl = COEFF_ABS_LEVEL_MINUS1
11803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        + COEFF_ABS_LEVEL_CAT_2_OFFSET;
11813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
11823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
11833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        for (u1_subblk_num = 0; u1_subblk_num < 16; u1_subblk_num++)
11843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
11853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 u1_b0, u1_b1, u1_b2, u1_b3, u1_b2b0, u1_b3b1, u1_b3b2;
11863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_b0 = (u1_subblk_num & 0x1);
11873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_b1 = (u1_subblk_num & 0x2) >> 1;
11883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_b2 = (u1_subblk_num & 0x4) >> 2;
11893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_b3 = (u1_subblk_num & 0x8) >> 3;
11903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_b2b0 = (u1_b2 << 1) | (u1_b0);
11913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_b3b1 = (u1_b3 << 1) | (u1_b1);
11923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_b3b2 = (u1_b3 << 1) | (u1_b2);
11933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
11943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (!((u4_cbp >> u1_b3b2) & 0x1))
11953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
11963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* ---------------------------------------------------------- */
11973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* The current block is not coded so skip all the sub block */
11983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* and set the pointer of scan level, csbp accrodingly      */
11993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* ---------------------------------------------------------- */
12003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                CLEARBIT(u1_top_ac_csbp, u1_b2b0);
12013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                CLEARBIT(u1_top_ac_csbp, (u1_b2b0 + 1));
12023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                CLEARBIT(u1_left_ac_csbp, u1_b3b1);
12033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                CLEARBIT(u1_left_ac_csbp, (u1_b3b1 + 1));
12043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
12053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_subblk_num += 3;
12063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
12073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else
12083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
12094b09a8c011279fd5bb29d238ebef17810e446783Martin Storsjo                UWORD8 u1_csbf;
12104b09a8c011279fd5bb29d238ebef17810e446783Martin Storsjo
12113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                PARSE_COEFF_DATA_BLOCK_4x4(pv_mb_coeff_data, ps_mb_coeff_data,
12123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           u1_nnz, u2_sig_coeff_map,
12133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           pi2_res_block);
12143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
12154b09a8c011279fd5bb29d238ebef17810e446783Martin Storsjo                u1_csbf = !!(u1_nnz);
12163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
12173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    UWORD8 u1_a, u1_b;
12183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    UWORD32 u4_ctx_inc;
12193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_b = (u1_top_ac_csbp >> u1_b2b0) & 0x01;
12203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_a = (u1_left_ac_csbp >> u1_b3b1) & 0x01;
12213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc = u1_a + (u1_b << 1);
12223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
12233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    /* Encode the bin */
12243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    ih264e_cabac_encode_bin(ps_cabac_ctxt,
12253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u1_csbf,
12263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt->au1_cabac_ctxt_table + CBF
12273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + (u1_ctx_cat << 2) + u4_ctx_inc);
12283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
12293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
12303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /**************************/
12313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* Write coded_block_flag */
12323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /**************************/
12333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (u1_csbf)
12343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
12353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    ih264e_cabac_write_coeff4x4(pi2_res_block,
12363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                u1_nnz,
12373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                (UWORD8) (15 - u1_offset),
12383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                u2_sig_coeff_map,
12393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                u4_ctx_idx_offset_abs_lvl,
12403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                ps_cabac_ctxt->au1_cabac_ctxt_table
12413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                    + SIGNIFICANT_COEFF_FLAG_FRAME
12423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                        + u4_ctx_idx_offset_sig_coef,
12433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                ps_cabac_ctxt);
12443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
12453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    SETBIT(u1_top_ac_csbp, u1_b2b0);
12463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    SETBIT(u1_left_ac_csbp, u1_b3b1);
12473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
12483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                else
12493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
12503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    CLEARBIT(u1_top_ac_csbp, u1_b2b0);
12513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    CLEARBIT(u1_left_ac_csbp, u1_b3b1);
12523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
12533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
12543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
12553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /**************************************************************************/
12563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /*                   Update the AC csbp                                   */
12573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /**************************************************************************/
12583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cabac_ctxt->pu1_left_y_ac_csbp[0] = u1_left_ac_csbp & 0xf;
12593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_top_ac_csbp &= 0x0f;
12603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_yuv_ac_csbp &= 0xf0;
12613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_yuv_ac_csbp |= u1_top_ac_csbp;
12623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
12633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
12643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
12653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cabac_ctxt->pu1_left_y_ac_csbp[0] = 0;
12663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_yuv_ac_csbp &= 0xf0;
12673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
12683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
12693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /*     Write chroma residue */
12703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
12713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_ent_ctxt->pv_mb_coeff_data = pv_mb_coeff_data;
12723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
12733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 u1_cbp_chroma;
12743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_cbp_chroma = u4_cbp >> 4;
12753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (u1_cbp_chroma)
12763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
12773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_write_chroma_residue(ps_ent_ctxt, u1_cbp_chroma);
12783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
12793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
12803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
12813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] &= 0x1;
12823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_dc_csbp &= 0x1;
12833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_cabac_ctxt->pu1_left_uv_ac_csbp[0] = 0;
12843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_ac_csbp &= 0xf;
12853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
12863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
12873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
12883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
12893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
12903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
12913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
12923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Encodes a Motion vector (9.3.3.1.1.7 )
12933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
12943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u1_mvd
12953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Motion vector to be encoded
12963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
12973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] u4_ctx_idx_offset
12983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * *  ctxIdxOffset for MV_X or MV_Ycontext
12993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
13003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in]  ui2_abs_mvd
13013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * sum of absolute value of corresponding neighboring motion vectors
13023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
13033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
13043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
13053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
13063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
13073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
13083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
13093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
13103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
13113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
13123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
13133749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_ctx_mvd(WORD16 u1_mvd, UWORD32 u4_ctx_idx_offset,
13143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                     UWORD16 ui2_abs_mvd,
13153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                     cabac_ctxt_t *ps_cabac_ctxt)
13163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
13173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8  u1_bin, u1_ctxt_inc;
13193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 k = 3, u1_coff = 9;
13203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD16 i2_abs_mvd, i2_sufs;
13213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_ctx_inc;
13223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_bins;
13233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 i1_bins_len;
13243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* if mvd < u1_coff
13263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K     only Prefix
13273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K     else
13283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K     Prefix + Suffix
13293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K     encode sign bit
13313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K     Prefix TU encoding Cmax =u1_coff and Suffix 3rd order Exp-Golomb
13333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K     */
13343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (ui2_abs_mvd < 3)
13363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = 0;
13373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else if (ui2_abs_mvd > 32)
13383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = 2;
13393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
13403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_ctx_inc = 1;
13413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_bins = 0;
13433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    i1_bins_len = 1;
13443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (u1_mvd == 0)
13463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
13473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_encode_bin(ps_cabac_ctxt,
13483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                0,
13493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt->au1_cabac_ctxt_table + u4_ctx_idx_offset
13503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        + u4_ctx_inc);
13513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
13523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
13533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
13543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        i2_abs_mvd = ABS(u1_mvd);
13553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (i2_abs_mvd >= u1_coff)
13563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
13573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Prefix TU i.e string of 9 1's */
13583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_bins = 0x1ff;
13593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i1_bins_len = 9;
13603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_ctx_inc = (u4_ctx_inc | 0x065430);
13613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_encode_decision_bins(u4_bins,
13633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        i1_bins_len,
13643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        u4_ctx_inc,
13653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        4,
13663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt->au1_cabac_ctxt_table
13673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            + u4_ctx_idx_offset,
13683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt);
13693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
13703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Suffix, uses EncodeBypass */
13713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_bins = 0;
13723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i1_bins_len = 0;
13733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i2_sufs = i2_abs_mvd - u1_coff;
13743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            while (1)
13753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
13763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (i2_sufs >= (1 << k))
13773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
13780574be65f4b2376e32bdf979650d8e5f168b68b7Doney Alex                    u4_bins = (u4_bins | (1 << (31 - i1_bins_len)));
13793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    i1_bins_len++;
13803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    i2_sufs = i2_sufs - (1 << k);
13813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    k++;
13823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
13833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                else
13843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
13853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    i1_bins_len++;
13863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    while (k--)
13873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    {
13883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        u1_bin = ((i2_sufs >> k) & 0x01);
13890574be65f4b2376e32bdf979650d8e5f168b68b7Doney Alex                        u4_bins = (u4_bins | (u1_bin << (31 - i1_bins_len)));
13903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        i1_bins_len++;
13913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    }
13923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    break;
13933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
13943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
13950574be65f4b2376e32bdf979650d8e5f168b68b7Doney Alex            u4_bins >>= (32 - i1_bins_len);
13963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_bypass_bins(ps_cabac_ctxt, u4_bins,
13973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            i1_bins_len);
13983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
13993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
14003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
14013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Prefix only */
14023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* b0 */
14033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_bins = 1;
14043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i2_abs_mvd--;
14053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_ctxt_inc = 3;
14063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            while (i2_abs_mvd)
14073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
14083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i2_abs_mvd--;
14093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_bins = (u4_bins | (1 << i1_bins_len));
14103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (u1_ctxt_inc <= 6)
14113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                {
14123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc = (u4_ctx_inc
14133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    | (u1_ctxt_inc << (i1_bins_len << 2)));
14143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u1_ctxt_inc++;
14153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                }
14163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i1_bins_len++;
14173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
14183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encode Terminating bit */
14193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (i1_bins_len <= 4)
14203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc = (u4_ctx_inc | (u1_ctxt_inc << (i1_bins_len << 2)));
14213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            i1_bins_len++;
14223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_encode_decision_bins(u4_bins,
14233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        i1_bins_len,
14243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        u4_ctx_inc,
14253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        4,
14263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt->au1_cabac_ctxt_table
14273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            + u4_ctx_idx_offset,
14283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt);
14293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
14303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* sign bit, uses EncodeBypass */
14313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (u1_mvd > 0)
14320574be65f4b2376e32bdf979650d8e5f168b68b7Doney Alex            ih264e_cabac_encode_bypass_bin(ps_cabac_ctxt, 0);
14333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
14340574be65f4b2376e32bdf979650d8e5f168b68b7Doney Alex            ih264e_cabac_encode_bypass_bin(ps_cabac_ctxt, 1);
14353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
14363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
14373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
14383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
14393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
14403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
14413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Encodes all motion vectors for a P16x16 MB
14423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
14433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
14443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
14453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
14463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] pi2_mv_ptr
14473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Pointer to array of motion vectors
14483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
14493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
14503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
14513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
14523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
14533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
14543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
14553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
14563749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_mvds_p16x16(cabac_ctxt_t *ps_cabac_ctxt,
14573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                         WORD16 *pi2_mv_ptr)
14583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
14593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
14603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
14613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Encode the differential component of the motion vectors */
14623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
14633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
14643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 u1_abs_mvd_x, u1_abs_mvd_y;
14653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 *pu1_top_mv_ctxt, *pu1_lft_mv_ctxt;
14663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        WORD16 u2_mv;
14673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_abs_mvd_x = 0;
14683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_abs_mvd_y = 0;
14693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_top_mv_ctxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info->u1_mv[0];
14703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_lft_mv_ctxt = ps_cabac_ctxt->pu1_left_mv_ctxt_inc[0];
14713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
14723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD16 u2_abs_mvd_x_a, u2_abs_mvd_x_b, u2_abs_mvd_y_a,
14733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            u2_abs_mvd_y_b;
14743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_x_b = (UWORD16) pu1_top_mv_ctxt[0];
14753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_y_b = (UWORD16) pu1_top_mv_ctxt[1];
14763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_x_a = (UWORD16) pu1_lft_mv_ctxt[0];
14773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_y_a = (UWORD16) pu1_lft_mv_ctxt[1];
14783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_mv = *(pi2_mv_ptr++);
14793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
14803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_ctx_mvd(u2_mv, MVD_X,
14813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    (UWORD16) (u2_abs_mvd_x_a + u2_abs_mvd_x_b),
14823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt);
14833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
14843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_abs_mvd_x = CLIP3(0, 127, ABS(u2_mv));
14853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_mv = *(pi2_mv_ptr++);
14863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
14873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_ctx_mvd(u2_mv, MVD_Y,
14883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    (UWORD16) (u2_abs_mvd_y_a + u2_abs_mvd_y_b),
14893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt);
14903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
14913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_abs_mvd_y = CLIP3(0, 127, ABS(u2_mv));
14923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
14933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /***************************************************************/
14943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Store abs_mvd_values cabac contexts                         */
14953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /***************************************************************/
14963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_top_mv_ctxt[0] = pu1_lft_mv_ctxt[0] = u1_abs_mvd_x;
14973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_top_mv_ctxt[1] = pu1_lft_mv_ctxt[1] = u1_abs_mvd_y;
14983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
14993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
15003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
15033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
15043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
15053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Encodes all motion vectors for a B MB (Assues that mbype is B_L0_16x16, B_L1_16x16 or B_Bi_16x16
15063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
15073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_cabac_ctxt
15083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Pointer to cabac context structure
15093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
15103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] pi2_mv_ptr
15113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Pointer to array of motion vectors
15123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
15133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns
15143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
15153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
15163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
15173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
15183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
15193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
15203749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic void ih264e_cabac_enc_mvds_b16x16(cabac_ctxt_t *ps_cabac_ctxt,
15213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                         WORD16 *pi2_mv_ptr,
15223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                         WORD32 i4_mb_part_pred_mode )
15233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
15243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Encode the differential component of the motion vectors */
15263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
15283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 u1_abs_mvd_x, u1_abs_mvd_y;
15293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        UWORD8 *pu1_top_mv_ctxt, *pu1_lft_mv_ctxt;
15303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        WORD16 u2_mv;
15313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_abs_mvd_x = 0;
15323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_abs_mvd_y = 0;
15333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_top_mv_ctxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info->u1_mv[0];
15343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_lft_mv_ctxt = ps_cabac_ctxt->pu1_left_mv_ctxt_inc[0];
15353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (i4_mb_part_pred_mode != PRED_L1)/* || PRED_BI */
15363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
15373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD16 u2_abs_mvd_x_a, u2_abs_mvd_x_b, u2_abs_mvd_y_a,
15383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            u2_abs_mvd_y_b;
15393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_x_b = (UWORD16) pu1_top_mv_ctxt[0];
15403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_y_b = (UWORD16) pu1_top_mv_ctxt[1];
15413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_x_a = (UWORD16) pu1_lft_mv_ctxt[0];
15423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_y_a = (UWORD16) pu1_lft_mv_ctxt[1];
15433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_mv = *(pi2_mv_ptr++);
15443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_ctx_mvd(u2_mv, MVD_X,
15463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    (UWORD16) (u2_abs_mvd_x_a + u2_abs_mvd_x_b),
15473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt);
15483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_abs_mvd_x = CLIP3(0, 127, ABS(u2_mv));
15503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_mv = *(pi2_mv_ptr++);
15513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_ctx_mvd(u2_mv, MVD_Y,
15533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    (UWORD16) (u2_abs_mvd_y_a + u2_abs_mvd_y_b),
15543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt);
15553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_abs_mvd_y = CLIP3(0, 127, ABS(u2_mv));
15573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
15583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /***************************************************************/
15593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Store abs_mvd_values cabac contexts                         */
15603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /***************************************************************/
15613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_top_mv_ctxt[0] = pu1_lft_mv_ctxt[0] = u1_abs_mvd_x;
15623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_top_mv_ctxt[1] = pu1_lft_mv_ctxt[1] = u1_abs_mvd_y;
15633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_abs_mvd_x = 0;
15653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u1_abs_mvd_y = 0;
15663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (i4_mb_part_pred_mode != PRED_L0)/* || PRED_BI */
15673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
15683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD16 u2_abs_mvd_x_a, u2_abs_mvd_x_b, u2_abs_mvd_y_a,
15693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            u2_abs_mvd_y_b;
15703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_x_b = (UWORD16) pu1_top_mv_ctxt[2];
15713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_y_b = (UWORD16) pu1_top_mv_ctxt[3];
15723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_x_a = (UWORD16) pu1_lft_mv_ctxt[2];
15733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_abs_mvd_y_a = (UWORD16) pu1_lft_mv_ctxt[3];
15743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_mv = *(pi2_mv_ptr++);
15753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_ctx_mvd(u2_mv, MVD_X,
15773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    (UWORD16) (u2_abs_mvd_x_a + u2_abs_mvd_x_b),
15783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt);
15793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_abs_mvd_x = CLIP3(0, 127, ABS(u2_mv));
15813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u2_mv = *(pi2_mv_ptr++);
15823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_ctx_mvd(u2_mv, MVD_Y,
15843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    (UWORD16) (u2_abs_mvd_y_a + u2_abs_mvd_y_b),
15853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt);
15863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_abs_mvd_y = CLIP3(0, 127, ABS(u2_mv));
15883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
15893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /***************************************************************/
15903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Store abs_mvd_values cabac contexts                         */
15913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /***************************************************************/
15923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_top_mv_ctxt[2] = pu1_lft_mv_ctxt[2] = u1_abs_mvd_x;
15933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_top_mv_ctxt[3] = pu1_lft_mv_ctxt[3] = u1_abs_mvd_y;
15943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
15953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
15963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
15993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
16003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
16013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
16023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
16033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  This function generates CABAC coded bit stream for an Intra Slice.
16043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
16053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @description
16063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  The mb syntax layer for intra slices constitutes luma mb mode, mb qp delta, coded block pattern, chroma mb mode and
16073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  luma/chroma residue. These syntax elements are written as directed by table
16083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  7.3.5 of h264 specification.
16093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
16103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_ent_ctxt
16113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  pointer to entropy context
16123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
16133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns error code
16143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
16153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks none
16163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
16173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
16183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
16193749f6f435e79624f72841e866245d84195551cdHarinarayanan K KIH264E_ERROR_T ih264e_write_islice_mb_cabac(entropy_ctxt_t *ps_ent_ctxt)
16203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
16213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* bit stream ptr */
16223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    bitstrm_t *ps_bitstream = ps_ent_ctxt->ps_bitstrm;
16233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CABAC context */
16243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    cabac_ctxt_t *ps_cabac_ctxt = ps_ent_ctxt->ps_cabac;
16253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* packed header data */
16263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 *pu1_byte = ps_ent_ctxt->pv_mb_header_data;
16273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_curr_ctxt;
16283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 mb_tpm, mb_type, cbp, chroma_intra_mode, luma_intra_mode;
16293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 mb_qp_delta;
16303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_cbp_l, u4_cbp_c;
16313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 byte_count = 0;
16323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 bitstream_start_offset, bitstream_end_offset;
16333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if ((ps_bitstream->u4_strm_buf_offset + MIN_STREAM_SIZE_MB)
16353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    >= ps_bitstream->u4_max_strm_size)
16363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
16373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* return without corrupting the buffer beyond its size */
16383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        return (IH264E_BITSTREAM_BUFFER_OVERFLOW);
16393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
16403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* mb header info */
16413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_tpm = *pu1_byte++;
16423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    byte_count++;
16433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    cbp = *pu1_byte++;
16443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    byte_count++;
16453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_qp_delta = *pu1_byte++;
16463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    byte_count++;
16473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* mb type */
16483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_type = mb_tpm & 0xF;
16493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ih264e_get_cabac_context(ps_ent_ctxt, mb_type);
16513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_curr_ctxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info;
16523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Starting bitstream offset for header in bits */
16543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    bitstream_start_offset = GET_NUM_BITS(ps_bitstream);
16553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_cbp_c = (cbp >> 4);
16563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    u4_cbp_l = (cbp & 0xF);
16573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (mb_type == I16x16)
16583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
16593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        luma_intra_mode = ((mb_tpm >> 4) & 3) + 1 + (u4_cbp_c << 2)
16603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        + (u4_cbp_l == 15) * 12;
16613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
16623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
16633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
16643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        luma_intra_mode = 0;
16653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
16663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    chroma_intra_mode = (mb_tpm >> 6);
16683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Encode Intra pred mode, Luma */
16703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ih264e_cabac_enc_intra_mb_type(ISLICE, luma_intra_mode, ps_cabac_ctxt,
16713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                   MB_TYPE_I_SLICE);
16723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (mb_type == I4x4)
16743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {   /* Encode 4x4 MB modes */
16753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_enc_4x4mb_modes(ps_cabac_ctxt, pu1_byte);
16763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        byte_count += 8;
16773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
16783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* Encode chroma mode */
16793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ih264e_cabac_enc_chroma_predmode(chroma_intra_mode, ps_cabac_ctxt);
16803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (mb_type != I16x16)
16823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    { /* Encode MB cbp */
16833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_enc_cbp(cbp, ps_cabac_ctxt);
16843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
16853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
16863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if ((cbp > 0) || (mb_type == I16x16))
16873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
16883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encode mb_qp_delta */
16893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_enc_mb_qp_delta(mb_qp_delta, ps_cabac_ctxt);
16903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Ending bitstream offset for header in bits */
16913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
16923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_ent_ctxt->u4_header_bits[0] += bitstream_end_offset
16933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        - bitstream_start_offset;
16943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Starting bitstream offset for residue */
16953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        bitstream_start_offset = bitstream_end_offset;
16963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type == I16x16)
16973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
16983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_I16x16;
16993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_cbp = cbp;
17003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_residue_luma_dc(ps_ent_ctxt);
17013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_residue(ps_ent_ctxt, cbp, LUMA_AC_CTXCAT);
17023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
17033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
17043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
17053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_cbp = cbp;
17063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = I4x4;
17073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_I4x4;
17083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_residue(ps_ent_ctxt, cbp, LUMA_4X4_CTXCAT);
17093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] &= 0x6;
17103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_cabac_ctxt->ps_curr_ctxt_mb_info->u1_yuv_dc_csbp &= 0x6;
17113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
17123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Ending bitstream offset for reside in bits */
17133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
17143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_ent_ctxt->u4_residue_bits[0] += bitstream_end_offset
17153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        - bitstream_start_offset;
17163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
17173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
17183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
17193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_yuv_ac_csbp = 0;
17203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_yuv_dc_csbp = 0;
17213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        *(ps_cabac_ctxt->pu1_left_uv_ac_csbp) = 0;
17223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        *(ps_cabac_ctxt->pu1_left_y_ac_csbp) = 0;
17233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        *(ps_cabac_ctxt->pu1_left_yuv_dc_csbp) = 0;
17243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Ending bitstream offset for header in bits */
17253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
17263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_ent_ctxt->u4_header_bits[0] += bitstream_end_offset
17273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        - bitstream_start_offset;
17283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Computing the number of used used for encoding the MB syntax */
17303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
17313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    memset(ps_curr_ctxt->u1_mv, 0, 16);
17323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    memset(ps_cabac_ctxt->pu1_left_mv_ctxt_inc, 0, 16);
17333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_cabac_ctxt->ps_curr_ctxt_mb_info->u1_cbp = cbp;
17343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_ent_ctxt->pv_mb_header_data = ((WORD8 *)ps_ent_ctxt->pv_mb_header_data) + byte_count;
17353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (mb_type == I16x16)
17363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
17373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_mb_type = CAB_I16x16;
17383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
17403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else
17413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
17423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_mb_type = CAB_I4x4;
17433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
17453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    return IH264E_SUCCESS;
17463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
17473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
17493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
17503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
17513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
17523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  This function generates CABAC coded bit stream for Inter slices
17533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
17543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @description
17553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  The mb syntax layer for inter slices constitutes luma mb mode, mb qp delta, coded block pattern, chroma mb mode and
17563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  luma/chroma residue. These syntax elements are written as directed by table
17573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  7.3.5 of h264 specification
17583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
17593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_ent_ctxt
17603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  pointer to entropy context
17613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
17623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns error code
17633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
17643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks none
17653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
17663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
17673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
17683749f6f435e79624f72841e866245d84195551cdHarinarayanan K KIH264E_ERROR_T ih264e_write_pslice_mb_cabac(entropy_ctxt_t *ps_ent_ctxt)
17693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
17703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* bit stream ptr */
17713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    bitstrm_t *ps_bitstream = ps_ent_ctxt->ps_bitstrm;
17723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CABAC context */
17733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    cabac_ctxt_t *ps_cabac_ctxt = ps_ent_ctxt->ps_cabac;
17743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_curr_ctxt;
17763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 bitstream_start_offset, bitstream_end_offset;
17783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 mb_tpm, mb_type, cbp, chroma_intra_mode, luma_intra_mode;
17793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 mb_qp_delta;
17803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_cbp_l, u4_cbp_c;
17813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 byte_count = 0;
17823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 *pu1_byte = ps_ent_ctxt->pv_mb_header_data;
17833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if ((ps_bitstream->u4_strm_buf_offset + MIN_STREAM_SIZE_MB)
17853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    >= ps_bitstream->u4_max_strm_size)
17863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
17873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* return without corrupting the buffer beyond its size */
17883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        return (IH264E_BITSTREAM_BUFFER_OVERFLOW);
17893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
17903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* mb header info */
17913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_tpm = *pu1_byte++;
17923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    byte_count++;
17933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
17943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* mb type */
17953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_type = mb_tpm & 0xF;
17963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CABAC contexts for the MB */
17973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ih264e_get_cabac_context(ps_ent_ctxt, mb_type);
17983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_curr_ctxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info;
17993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* if Intra MB */
18013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (mb_type == I16x16 || mb_type == I4x4)
18023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
18033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        cbp = *pu1_byte++;
18043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        byte_count++;
18053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        mb_qp_delta = *pu1_byte++;
18063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        byte_count++;
18073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Starting bitstream offset for header in bits */
18093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        bitstream_start_offset = GET_NUM_BITS(ps_bitstream);
18103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encode mb_skip_flag */
18123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_enc_mb_skip(0, ps_cabac_ctxt, MB_SKIP_FLAG_P_SLICE);
18133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_cbp_c = (cbp >> 4);
18143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_cbp_l = (cbp & 0xF);
18153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type == I16x16)
18163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
18173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            luma_intra_mode = ((mb_tpm >> 4) & 3) + 1 + (u4_cbp_c << 2)
18183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            + (u4_cbp_l == 15) * 12;
18193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
18213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
18223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            luma_intra_mode = 0;
18233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encode intra mb type */
18253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
18263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_bin(ps_cabac_ctxt,
18273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    1,
18283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    ps_cabac_ctxt->au1_cabac_ctxt_table
18293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        + MB_TYPE_P_SLICE);
18303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_intra_mb_type(PSLICE, (UWORD8) luma_intra_mode,
18323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           ps_cabac_ctxt, MB_TYPE_P_SLICE);
18333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type == I4x4)
18363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {   /* Intra 4x4 modes */
18373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_4x4mb_modes(ps_cabac_ctxt, pu1_byte);
18383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            byte_count += 8;
18393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        chroma_intra_mode = (mb_tpm >> 6);
18413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_enc_chroma_predmode(chroma_intra_mode, ps_cabac_ctxt);
18433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type != I16x16)
18453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
18463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* encode CBP */
18473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_cbp(cbp, ps_cabac_ctxt);
18483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if ((cbp > 0) || (mb_type == I16x16))
18513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
18523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_mb_qp_delta(mb_qp_delta, ps_cabac_ctxt);
18533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
18553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
18563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[0] += bitstream_end_offset
18573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
18583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Starting bitstream offset for residue */
18593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_start_offset = bitstream_end_offset;
18603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encoding Residue */
18623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (mb_type == I16x16)
18633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
18643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_mb_type = CAB_I16x16;
18653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_cbp = (UWORD8) cbp;
18663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_residue_luma_dc(ps_ent_ctxt);
18673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_residue(ps_ent_ctxt, cbp, LUMA_AC_CTXCAT);
18683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
18693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else
18703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
18713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_cbp = (UWORD8) cbp;
18723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_mb_type = I4x4;
18733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_mb_type = CAB_I4x4;
18743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_residue(ps_ent_ctxt, cbp, LUMA_4X4_CTXCAT);
18753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] &= 0x6;
18763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_cabac_ctxt->ps_curr_ctxt_mb_info->u1_yuv_dc_csbp &= 0x6;
18773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
18783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for reside in bits */
18803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
18813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_residue_bits[0] += bitstream_end_offset
18823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
18833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
18853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
18863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_ac_csbp = 0;
18873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_dc_csbp = 0;
18883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_uv_ac_csbp) = 0;
18893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_y_ac_csbp) = 0;
18903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_yuv_dc_csbp) = 0;
18913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
18923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
18933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[0] += bitstream_end_offset
18943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
18953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
18963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
18973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        memset(ps_curr_ctxt->u1_mv, 0, 16);
18983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        memset(ps_cabac_ctxt->pu1_left_mv_ctxt_inc, 0, 16);
18993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cabac_ctxt->ps_curr_ctxt_mb_info->u1_cbp = (UWORD8) cbp;
19003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type == I16x16)
19023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
19033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_I16x16;
19043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
19053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
19063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
19073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_I4x4;
19083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
19093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_ent_ctxt->pv_mb_header_data = ((WORD8 *)ps_ent_ctxt->pv_mb_header_data) + byte_count;
19113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        return IH264E_SUCCESS;
19133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
19143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else /* Inter MB */
19153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
19163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Starting bitstream offset for header in bits */
19173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        bitstream_start_offset = GET_NUM_BITS(ps_bitstream);
19183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encoding P16x16 */
19193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type != PSKIP)
19203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
19213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            cbp = *pu1_byte++;
19223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            byte_count++;
19233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            mb_qp_delta = *pu1_byte++;
19243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            byte_count++;
19253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encoding mb_skip */
19273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_mb_skip(0, ps_cabac_ctxt, MB_SKIP_FLAG_P_SLICE);
19283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encoding mb_type as P16x16 */
19303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
19313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD32 u4_ctx_inc_p;
19323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc_p = (0x010 + ((2) << 8));
19333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_encode_decision_bins(0, 3, u4_ctx_inc_p, 3,
19353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            &(ps_cabac_ctxt->au1_cabac_ctxt_table[MB_TYPE_P_SLICE]),
19363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt);
19373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
19383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_P;
19393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
19403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                WORD16 *pi2_mv_ptr = (WORD16 *) pu1_byte;
19413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                byte_count += 4;
19423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_mb_type = (ps_curr_ctxt->u1_mb_type
19433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            | CAB_NON_BD16x16);
19443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                 /* Encoding motion vector for P16x16 */
19453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_enc_mvds_p16x16(ps_cabac_ctxt, pi2_mv_ptr);
19463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
19473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encode CBP */
19483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_cbp(cbp, ps_cabac_ctxt);
19493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (cbp)
19513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
19523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* encode mb_qp_delta */
19533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_enc_mb_qp_delta(mb_qp_delta, ps_cabac_ctxt);
19543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
19553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
19573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
19583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[1] += bitstream_end_offset
19593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
19603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Starting bitstream offset for residue */
19613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_start_offset = bitstream_end_offset;
19623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
19643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else/* MB = PSKIP */
19653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
19663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_mb_skip(1, ps_cabac_ctxt, MB_SKIP_FLAG_P_SLICE);
19673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_P_SKIP;
19693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            (*ps_ent_ctxt->pi4_mb_skip_run)++;
19703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            memset(ps_curr_ctxt->u1_mv, 0, 16);
19723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            memset(ps_cabac_ctxt->pu1_left_mv_ctxt_inc, 0, 16);
19733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            cbp = 0;
19743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
19763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
19773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[1] += bitstream_end_offset
19783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
19793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Starting bitstream offset for residue */
19803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
19823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (cbp > 0)
19843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
19853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encode residue */
19863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_residue(ps_ent_ctxt, cbp, LUMA_4X4_CTXCAT);
19873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for reside in bits */
19883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
19893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_residue_bits[1] += bitstream_end_offset
19903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
19913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
19923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] &= 0x6;
19933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_dc_csbp &= 0x6;
19943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
19953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
19963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
19973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_ac_csbp = 0;
19983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_dc_csbp = 0;
19993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_uv_ac_csbp) = 0;
20003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_y_ac_csbp) = 0;
20013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_yuv_dc_csbp) = 0;
20023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
20033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_intrapred_chroma_mode = 0;
20043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_cbp = cbp;
20053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_ent_ctxt->pv_mb_header_data = ((WORD8 *)ps_ent_ctxt->pv_mb_header_data) + byte_count;
20063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        return IH264E_SUCCESS;
20073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
20083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
20093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/* ! < Table 9-37 � Binarization for macroblock types in B slices  in ITU_T_H264-201402
20123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Bits 0-7 : binarised value
20133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * Bits 8-15: length of binary sequence */
20143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20163749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic const UWORD32 u4_b_mb_type[27] = { 0x0100, 0x0301, 0x0305, 0x0603,
20173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                          0x0623, 0x0613, 0x0633, 0x060b,
20183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                          0x062b, 0x061b, 0x063b, 0x061f,
20193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                          0x0707, 0x0747, 0x0727, 0x0767,
20203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                          0x0717, 0x0757, 0x0737, 0x0777,
20213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                          0x070f, 0x074f, 0x063f };
20223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/* CtxInc for mb types in B slices */
20233749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kstatic const UWORD32 ui_b_mb_type_ctx_inc[27] = { 0x00, 0x0530, 0x0530,
20243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x0555430, 0x0555430,
20253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x0555430, 0x0555430,
20263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x0555430, 0x0555430,
20273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x0555430, 0x0555430,
20283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x0555430, 0x05555430,
20293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x05555430, 0x05555430,
20303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x05555430, 0x05555430,
20313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x05555430, 0x05555430,
20323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x05555430, 0x05555430,
20333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0x05555430, 0x0555430 };
20343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K/**
20363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
20373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
20383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
20393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  This function generates CABAC coded bit stream for B slices
20403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
20413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @description
20423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  The mb syntax layer for inter slices constitutes luma mb mode,
20433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  mb qp delta, coded block pattern, chroma mb mode and
20443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  luma/chroma residue. These syntax elements are written as directed by table
20453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  7.3.5 of h264 specification
20463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
20473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_ent_ctxt
20483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  pointer to entropy context
20493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
20503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @returns error code
20513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
20523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks none
20533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
20543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
20553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
20563749f6f435e79624f72841e866245d84195551cdHarinarayanan K KIH264E_ERROR_T ih264e_write_bslice_mb_cabac(entropy_ctxt_t *ps_ent_ctxt)
20573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K{
20583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* bit stream ptr */
20593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    bitstrm_t *ps_bitstream = ps_ent_ctxt->ps_bitstrm;
20603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CABAC context */
20613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    cabac_ctxt_t *ps_cabac_ctxt = ps_ent_ctxt->ps_cabac;
20623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_info_ctxt_t *ps_curr_ctxt;
20643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 bitstream_start_offset, bitstream_end_offset;
20663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 mb_tpm, mb_type, cbp, chroma_intra_mode, luma_intra_mode;
20673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD8 mb_qp_delta;
20683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD32 u4_cbp_l, u4_cbp_c;
20693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 byte_count = 0;
20703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    UWORD8 *pu1_byte = ps_ent_ctxt->pv_mb_header_data;
20713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if ((ps_bitstream->u4_strm_buf_offset + MIN_STREAM_SIZE_MB)
20733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    >= ps_bitstream->u4_max_strm_size)
20743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
20753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* return without corrupting the buffer beyond its size */
20763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        return (IH264E_BITSTREAM_BUFFER_OVERFLOW);
20773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
20783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* mb header info */
20793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_tpm = *pu1_byte++;
20803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    byte_count++;
20813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* mb type */
20833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    mb_type = mb_tpm & 0xF;
20843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* CABAC contexts for the MB */
20853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ih264e_get_cabac_context(ps_ent_ctxt, mb_type);
20863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    ps_curr_ctxt = ps_cabac_ctxt->ps_curr_ctxt_mb_info;
20873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* if Intra MB */
20893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    if (mb_type == I16x16 || mb_type == I4x4)
20903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
20913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        cbp = *pu1_byte++;
20923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        byte_count++;
20933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        mb_qp_delta = *pu1_byte++;
20943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        byte_count++;
20953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Starting bitstream offset for header in bits */
20973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        bitstream_start_offset = GET_NUM_BITS(ps_bitstream);
20983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
20993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encode mb_skip_flag */
21003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_enc_mb_skip(0, ps_cabac_ctxt, MB_SKIP_FLAG_B_SLICE);
21013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_cbp_c = (cbp >> 4);
21023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_cbp_l = (cbp & 0xF);
21033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type == I16x16)
21043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
21053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            luma_intra_mode = ((mb_tpm >> 4) & 3) + 1 + (u4_cbp_c << 2)
21063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            + (u4_cbp_l == 15) * 12;
21073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
21083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
21093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
21103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            luma_intra_mode = 0;
21113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
21123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encode intra mb type */
21133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
21143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            mb_info_ctxt_t *ps_left_ctxt = ps_cabac_ctxt->ps_left_ctxt_mb_info;
21153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            mb_info_ctxt_t *ps_top_ctxt = ps_cabac_ctxt->ps_top_ctxt_mb_info;
21163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD32 u4_ctx_inc = 0;
21173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (ps_left_ctxt != ps_cabac_ctxt->ps_def_ctxt_mb_info)
21193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc += ((ps_left_ctxt->u1_mb_type & CAB_BD16x16_MASK)
21203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                != CAB_BD16x16) ? 1 : 0;
21213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (ps_top_ctxt != ps_cabac_ctxt->ps_def_ctxt_mb_info)
21223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc += ((ps_top_ctxt->u1_mb_type & CAB_BD16x16_MASK)
21233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                != CAB_BD16x16) ? 1 : 0;
21243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Intra Prefix Only "111101" */
21263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_ctx_inc = (u4_ctx_inc | 0x05555430);
21273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_encode_decision_bins(0x2f,
21283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        6,
21293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        u4_ctx_inc,
21303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        3,
21313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt->au1_cabac_ctxt_table
21323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            + MB_TYPE_B_SLICE,
21333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                        ps_cabac_ctxt);
21343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_intra_mb_type(BSLICE, (UWORD8) luma_intra_mode,
21363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           ps_cabac_ctxt, MB_TYPE_B_SLICE);
21373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
21393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type == I4x4)
21413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        { /* Intra 4x4 modes */
21423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_4x4mb_modes(ps_cabac_ctxt, pu1_byte);
21433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            byte_count += 8;
21443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
21453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        chroma_intra_mode = (mb_tpm >> 6);
21463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ih264e_cabac_enc_chroma_predmode(chroma_intra_mode, ps_cabac_ctxt);
21483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type != I16x16)
21503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
21513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* encode CBP */
21523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_cbp(cbp, ps_cabac_ctxt);
21533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
21543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if ((cbp > 0) || (mb_type == I16x16))
21563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
21573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_mb_qp_delta(mb_qp_delta, ps_cabac_ctxt);
21583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
21603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
21613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[0] += bitstream_end_offset
21623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
21633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Starting bitstream offset for residue */
21643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_start_offset = bitstream_end_offset;
21653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encoding Residue */
21673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (mb_type == I16x16)
21683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
21693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_mb_type = CAB_I16x16;
21703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_cbp = (UWORD8) cbp;
21713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_residue_luma_dc(ps_ent_ctxt);
21723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_residue(ps_ent_ctxt, cbp, LUMA_AC_CTXCAT);
21733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
21743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            else
21753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
21763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_cbp = (UWORD8) cbp;
21773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_mb_type = I4x4;
21783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_mb_type = CAB_I4x4;
21793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_residue(ps_ent_ctxt, cbp, LUMA_4X4_CTXCAT);
21803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] &= 0x6;
21813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_cabac_ctxt->ps_curr_ctxt_mb_info->u1_yuv_dc_csbp &= 0x6;
21823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
21833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
21843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for reside in bits */
21853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
21863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_residue_bits[0] += bitstream_end_offset
21873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
21883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
21893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
21903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
21913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_ac_csbp = 0;
21923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_dc_csbp = 0;
21933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_uv_ac_csbp) = 0;
21943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_y_ac_csbp) = 0;
21953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_yuv_dc_csbp) = 0;
21963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
21973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
21983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[0] += bitstream_end_offset
21993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
22003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
22013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        memset(ps_curr_ctxt->u1_mv, 0, 16);
22033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        memset(ps_cabac_ctxt->pu1_left_mv_ctxt_inc, 0, 16);
22043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_cabac_ctxt->ps_curr_ctxt_mb_info->u1_cbp = (UWORD8) cbp;
22053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type == I16x16)
22073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
22083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_I16x16;
22093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
22103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
22113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
22123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_I4x4;
22133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
22143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_ent_ctxt->pv_mb_header_data = ((WORD8 *)ps_ent_ctxt->pv_mb_header_data) + byte_count;
22163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        return IH264E_SUCCESS;
22183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
22193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    else /* Inter MB */
22213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    {
22223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Starting bitstream offset for header in bits */
22233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        bitstream_start_offset = GET_NUM_BITS(ps_bitstream);
22243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Encoding B_Direct_16x16 */
22253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (mb_type == BDIRECT)
22263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
22273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            cbp = *pu1_byte++;
22283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            byte_count++;
22293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            mb_qp_delta = *pu1_byte++;
22303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            byte_count++;
22313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encoding mb_skip */
22333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_mb_skip(0, ps_cabac_ctxt, MB_SKIP_FLAG_B_SLICE);
22343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encoding mb_type as B_Direct_16x16 */
22363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
22373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                mb_info_ctxt_t *ps_left_ctxt =
22393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt->ps_left_ctxt_mb_info;
22403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                mb_info_ctxt_t *ps_top_ctxt = ps_cabac_ctxt->ps_top_ctxt_mb_info;
22413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD32 u4_ctx_inc = 0;
22423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (ps_left_ctxt != ps_cabac_ctxt->ps_def_ctxt_mb_info)
22443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc += ((ps_left_ctxt->u1_mb_type & CAB_BD16x16_MASK)
22453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    != CAB_BD16x16) ? 1 : 0;
22463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (ps_top_ctxt != ps_cabac_ctxt->ps_def_ctxt_mb_info)
22473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc += ((ps_top_ctxt->u1_mb_type & CAB_BD16x16_MASK)
22483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    != CAB_BD16x16) ? 1 : 0;
22493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* Encode the bin */
22503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_encode_bin(
22513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt,
22523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                0,
22533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt->au1_cabac_ctxt_table
22543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                + MB_TYPE_B_SLICE + u4_ctx_inc);
22553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
22573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_BD16x16;
22583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            memset(ps_curr_ctxt->u1_mv, 0, 16);
22593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            memset(ps_cabac_ctxt->pu1_left_mv_ctxt_inc, 0, 16);
22603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encode CBP */
22623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_cbp(cbp, ps_cabac_ctxt);
22633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (cbp)
22653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
22663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* encode mb_qp_delta */
22673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_enc_mb_qp_delta(mb_qp_delta, ps_cabac_ctxt);
22683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
22693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
22713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
22723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[1] += bitstream_end_offset
22733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
22743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Starting bitstream offset for residue */
22753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_start_offset = bitstream_end_offset;
22763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Starting bitstream offset for residue */
22773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
22793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else if (mb_type == BSKIP)/* MB = BSKIP */
22813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
22823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_mb_skip(1, ps_cabac_ctxt, MB_SKIP_FLAG_B_SLICE);
22833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_B_SKIP;
22853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            memset(ps_curr_ctxt->u1_mv, 0, 16);
22873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            memset(ps_cabac_ctxt->pu1_left_mv_ctxt_inc, 0, 16);
22883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            cbp = 0;
22893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
22913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
22923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[1] += bitstream_end_offset
22933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
22943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Starting bitstream offset for residue */
22953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
22973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
22983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else /* mbype is B_L0_16x16, B_L1_16x16 or B_Bi_16x16 */
22993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
23003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            WORD32 i4_mb_part_pred_mode = (mb_tpm >> 4);
23013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD32 u4_mb_type = mb_type - B16x16 + B_L0_16x16
23023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            + i4_mb_part_pred_mode;
23033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            cbp = *pu1_byte++;
23043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            byte_count++;
23053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            mb_qp_delta = *pu1_byte++;
23063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            byte_count++;
23073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encoding mb_skip */
23093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_mb_skip(0, ps_cabac_ctxt, MB_SKIP_FLAG_B_SLICE);
23103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encoding mb_type as B16x16 */
23123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
23133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                mb_info_ctxt_t *ps_left_ctxt =
23143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                ps_cabac_ctxt->ps_left_ctxt_mb_info;
23153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                mb_info_ctxt_t *ps_top_ctxt = ps_cabac_ctxt->ps_top_ctxt_mb_info;
23163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD32 u4_ctx_inc = 0;
23173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD32 u4_mb_type_bins = u4_b_mb_type[u4_mb_type];
23193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                UWORD32 u4_bin_len = (u4_mb_type_bins >> 8) & 0x0F;
23203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mb_type_bins = u4_mb_type_bins & 0xFF;
23213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (ps_left_ctxt != ps_cabac_ctxt->ps_def_ctxt_mb_info)
23233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc += ((ps_left_ctxt->u1_mb_type & CAB_BD16x16_MASK)
23243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    != CAB_BD16x16) ? 1 : 0;
23253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                if (ps_top_ctxt != ps_cabac_ctxt->ps_def_ctxt_mb_info)
23263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_ctx_inc += ((ps_top_ctxt->u1_mb_type & CAB_BD16x16_MASK)
23273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                    != CAB_BD16x16) ? 1 : 0;
23283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_ctx_inc = u4_ctx_inc | ui_b_mb_type_ctx_inc[u4_mb_type];
23303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_encode_decision_bins(u4_mb_type_bins,
23323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u4_bin_len,
23333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u4_ctx_inc,
23343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            u4_bin_len,
23353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            &(ps_cabac_ctxt->au1_cabac_ctxt_table[MB_TYPE_B_SLICE]),
23363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                            ps_cabac_ctxt);
23373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
23383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_mb_type = CAB_NON_BD16x16;
23403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
23413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                WORD16 *pi2_mv_ptr = (WORD16 *) pu1_byte;
23423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* Get the pred modes */
23433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                byte_count += 4 * (1 + (i4_mb_part_pred_mode == PRED_BI));
23453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_ctxt->u1_mb_type = (ps_curr_ctxt->u1_mb_type
23473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                | CAB_NON_BD16x16);
23483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* Encoding motion vector for B16x16 */
23493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_enc_mvds_b16x16(ps_cabac_ctxt, pi2_mv_ptr,
23503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                             i4_mb_part_pred_mode);
23513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
23523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encode CBP */
23533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_enc_cbp(cbp, ps_cabac_ctxt);
23543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            if (cbp)
23563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
23573749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* encode mb_qp_delta */
23583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ih264e_cabac_enc_mb_qp_delta(mb_qp_delta, ps_cabac_ctxt);
23593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
23603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for header in bits */
23623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
23633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_header_bits[1] += bitstream_end_offset
23643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
23653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Starting bitstream offset for residue */
23663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_start_offset = bitstream_end_offset;
23673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
23683749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (cbp > 0)
23703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
23713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Encode residue */
23723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ih264e_cabac_encode_residue(ps_ent_ctxt, cbp, LUMA_4X4_CTXCAT);
23733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Ending bitstream offset for reside in bits */
23743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            bitstream_end_offset = GET_NUM_BITS(ps_bitstream);
23753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_ent_ctxt->u4_residue_bits[1] += bitstream_end_offset
23763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            - bitstream_start_offset;
23773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
23783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_cabac_ctxt->pu1_left_yuv_dc_csbp[0] &= 0x6;
23793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_dc_csbp &= 0x6;
23803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
23813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else
23823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
23833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_ac_csbp = 0;
23843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_ctxt->u1_yuv_dc_csbp = 0;
23853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_uv_ac_csbp) = 0;
23863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_y_ac_csbp) = 0;
23873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            *(ps_cabac_ctxt->pu1_left_yuv_dc_csbp) = 0;
23883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
23893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_intrapred_chroma_mode = 0;
23903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_ctxt->u1_cbp = cbp;
23913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_ent_ctxt->pv_mb_header_data = ((WORD8 *)ps_ent_ctxt->pv_mb_header_data) + byte_count;
23923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        return IH264E_SUCCESS;
23933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    }
23943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K}
2395