You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
8.0 KiB
222 lines
8.0 KiB
/******************************************************************************
|
|
*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*****************************************************************************
|
|
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
|
|
*/
|
|
|
|
/**
|
|
*******************************************************************************
|
|
* @file
|
|
* ih264e_cabac_structs.h
|
|
*
|
|
* @brief
|
|
* This file contains cabac related structure definitions.
|
|
*
|
|
* @author
|
|
* Doney Alex
|
|
*
|
|
* @remarks
|
|
* none
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
|
|
#ifndef IH264E_CABAC_STRUCTS_H_
|
|
#define IH264E_CABAC_STRUCTS_H_
|
|
|
|
|
|
|
|
#define CABAC_INIT_IDC 2
|
|
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief typedef for context model
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* bits 0 to 5 :state
|
|
bit 6 :mps */
|
|
typedef UWORD8 bin_ctxt_model;
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief MB info for cabac
|
|
******************************************************************************
|
|
*/
|
|
typedef struct
|
|
{
|
|
/* Neighbour availability Variables needed to get CtxtInc, for CABAC */
|
|
UWORD8 u1_mb_type; /* !< macroblock type: I/P/B/SI/SP */
|
|
|
|
UWORD8 u1_cbp; /* !< Coded Block Pattern */
|
|
UWORD8 u1_intrapred_chroma_mode;
|
|
|
|
/*************************************************************************/
|
|
/* Arrangnment of AC CSBP */
|
|
/* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
|
|
/* CSBP: V1 V0 U1 U0 Y3 Y2 Y1 Y0 */
|
|
/*************************************************************************/
|
|
UWORD8 u1_yuv_ac_csbp;
|
|
/*************************************************************************/
|
|
/* Arrangnment of DC CSBP */
|
|
/* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
|
|
/* CSBP: x x x x x Vdc Udc Ydc */
|
|
/*************************************************************************/
|
|
UWORD8 u1_yuv_dc_csbp;
|
|
|
|
WORD8 i1_ref_idx[4];
|
|
UWORD8 u1_mv[4][4];
|
|
} mb_info_ctxt_t;
|
|
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief CSBP info for CABAC
|
|
******************************************************************************
|
|
*/
|
|
typedef struct
|
|
{
|
|
/*************************************************************************/
|
|
/* Arrangnment of Luma AC CSBP for leftMb */
|
|
/* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
|
|
/* CSBP: X X X X Y3 Y2 Y1 Y0 */
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/* Points either to u1_y_ac_csbp_top_mb or u1_y_ac_csbp_bot_mb */
|
|
/*************************************************************************/
|
|
UWORD8 u1_y_ac_csbp_top_mb;
|
|
UWORD8 u1_y_ac_csbp_bot_mb;
|
|
|
|
/*************************************************************************/
|
|
/* Arrangnment of Chroma AC CSBP for leftMb */
|
|
/* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
|
|
/* CSBP: X X X X V1 V0 U1 U0 */
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/* Points either to u1_uv_ac_csbp_top_mb or u1_uv_ac_csbp_bot_mb */
|
|
/*************************************************************************/
|
|
UWORD8 u1_uv_ac_csbp_top_mb;
|
|
UWORD8 u1_uv_ac_csbp_bot_mb;
|
|
|
|
/*************************************************************************/
|
|
/* Arrangnment of DC CSBP */
|
|
/* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
|
|
/* CSBP: x x x x x Vdc Udc Ydc */
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/* Points either to u1_yuv_dc_csbp_top_mb or u1_yuv_dc_csbp_bot_mb */
|
|
/*************************************************************************/
|
|
UWORD8 u1_yuv_dc_csbp_top_mb;
|
|
UWORD8 u1_yuv_dc_csbp_bot_mb;
|
|
} cab_csbp_t;
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief CABAC Encoding Environment
|
|
******************************************************************************
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
/** cabac interval start L */
|
|
UWORD32 u4_code_int_low;
|
|
|
|
/** cabac interval range R */
|
|
UWORD32 u4_code_int_range;
|
|
|
|
/** bytes_outsanding; number of 0xFF bits that occur during renorm
|
|
* These will be accumulated till the carry bit is knwon
|
|
*/
|
|
UWORD32 u4_out_standing_bytes;
|
|
|
|
/** bits generated during renormalization
|
|
* A byte is put to stream/u4_out_standing_bytes from u4_low(L) when
|
|
* u4_bits_gen exceeds 8
|
|
*/
|
|
UWORD32 u4_bits_gen;
|
|
} encoding_envirnoment_t;
|
|
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief CABAC Context structure : Variables to handle Cabac
|
|
******************************************************************************
|
|
*/
|
|
typedef struct
|
|
{
|
|
|
|
/* Base pointer to all the cabac contexts */
|
|
bin_ctxt_model au1_cabac_ctxt_table[NUM_CABAC_CTXTS];
|
|
|
|
|
|
cab_csbp_t s_lft_csbp;
|
|
|
|
/**
|
|
* pointer to Bitstream structure
|
|
*/
|
|
bitstrm_t *ps_bitstrm;
|
|
|
|
/* Pointer to mb_info_ctxt_t map_base */
|
|
mb_info_ctxt_t *ps_mb_map_ctxt_inc_base;
|
|
|
|
/* Pointer to encoding_envirnoment_t */
|
|
encoding_envirnoment_t s_cab_enc_env;
|
|
|
|
/* These things need to be updated at each MbLevel */
|
|
|
|
/* Prev ps_mb_qp_delta_ctxt */
|
|
WORD8 i1_prevps_mb_qp_delta_ctxt;
|
|
|
|
/* Pointer to mb_info_ctxt_t map */
|
|
mb_info_ctxt_t *ps_mb_map_ctxt_inc;
|
|
|
|
/* Pointer to default mb_info_ctxt_t */
|
|
mb_info_ctxt_t *ps_def_ctxt_mb_info;
|
|
|
|
/* Pointer to current mb_info_ctxt_t */
|
|
mb_info_ctxt_t *ps_curr_ctxt_mb_info;
|
|
|
|
/* Pointer to left mb_info_ctxt_t */
|
|
mb_info_ctxt_t *ps_left_ctxt_mb_info;
|
|
|
|
/* Pointer to top mb_info_ctxt_t */
|
|
mb_info_ctxt_t *ps_top_ctxt_mb_info;
|
|
|
|
/* Poniter to left csbp structure */
|
|
cab_csbp_t *ps_lft_csbp;
|
|
UWORD8 *pu1_left_y_ac_csbp;
|
|
UWORD8 *pu1_left_uv_ac_csbp;
|
|
UWORD8 *pu1_left_yuv_dc_csbp;
|
|
|
|
/***************************************************************************/
|
|
/* Ref_idx contexts are stored in the following way */
|
|
/* Array Idx 0,1 for reference indices in Forward direction */
|
|
/* Array Idx 2,3 for reference indices in backward direction */
|
|
/***************************************************************************/
|
|
/* Dimensions for u1_left_ref_ctxt_inc_arr is [2][4] for Mbaff:Top and Bot */
|
|
WORD8 i1_left_ref_idx_ctx_inc_arr[2][4];
|
|
WORD8 *pi1_left_ref_idx_ctxt_inc;
|
|
|
|
/* Dimensions for u1_left_mv_ctxt_inc_arr is [2][4][4] for Mbaff case */
|
|
UWORD8 u1_left_mv_ctxt_inc_arr[2][4][4];
|
|
UWORD8 (*pu1_left_mv_ctxt_inc)[4];
|
|
|
|
} cabac_ctxt_t;
|
|
|
|
#endif /* IH264E_CABAC_STRUCTS_H_ */
|