| /****************************************************************************** |
| * |
| * 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_ */ |