/******************************************************************************
 *
 * 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
 *  ih264_structs.h
 *
 * @brief
 *  Structure definitions used in the code
 *
 * @author
 *  Ittiam
 *
 * @par List of Functions:
 *
 * @remarks
 *  None
 *
 *******************************************************************************
 */

#ifndef _IH264_STRUCTS_H_
#define _IH264_STRUCTS_H_

/** MB Type info for Intra MBs */
typedef struct
{
    UWORD32             u4_num_mbpart;
    MBPART_PREDMODE_T   e_mbpart_predmode;
    MBMODES_I16x16      e_intra_predmode;
    UWORD32             u4_cpb_chroma;
    UWORD32             u4_cpb_luma;
}intra_mbtype_info_t;

/** MB Type info for Inter MBs */
typedef struct
{
    UWORD32                 u4_num_mbpart;
    MBPART_PREDMODE_T       e_mbpart_predmode_0;
    MBPART_PREDMODE_T       e_mbpart_predmode_1;
    UWORD32                 u4_mbpart_wd;
    UWORD32                 u4_mbpart_ht;
}inter_mbtype_info_t;


/** Sub MB Type info for Inter MBs */
typedef struct
{
    UWORD32                 u4_num_mbpart;
    MBPART_PREDMODE_T       e_mbpart_predmode;
    UWORD32                 u4_mbpart_wd;
    UWORD32                 u4_mbpart_ht;
}submbtype_info_t;

/**
 * Picture buffer
 */
typedef struct
{
    UWORD8* pu1_luma;
    UWORD8* pu1_chroma;

    WORD32 i4_abs_poc;
    WORD32 i4_poc_lsb;


    /** Lower 32 bit of time stamp */
    UWORD32 u4_timestamp_low;

    /** Upper 32 bit of time stamp */
    UWORD32 u4_timestamp_high;

    WORD32 i4_used_as_ref;

    /**
     * frame_num in the slice header
     */
    WORD32 i4_frame_num;

    /**
     * Long-term frame idx
     * TODO: store in frame_num
     */
    WORD32 i4_long_term_frame_idx;

    /*
     *  0: Top Field
     *  1: Bottom Field
     */
    WORD8   i1_field_type;

    /**
     * buffer ID from frame buffer manager
     */
    WORD32 i4_buf_id;

} pic_buf_t;


/**
 * Reference List
 */
typedef struct
{
    void *pv_pic_buf;

    void *pv_mv_buf;

} ref_list_t;


/**
 * Motion vector
 */
typedef struct
{
    /**
     * Horizontal Motion Vector
     */
    WORD16 i2_mvx;

    /**
     * Vertical Motion Vector
     */
    WORD16 i2_mvy;
} mv_t;

/*****************************************************************************/
/* Following results in packed 48 bit structure. If mv_t included            */
/*  ref_pic_buf_id, then 8 bits will be wasted for each mv for aligning.     */
/*  Also using mv_t as elements directly instead of a pointer to l0 and l1   */
/*  mvs. Since pointer takes 4 bytes and MV itself is 4 bytes. It does not   */
/*  really help using pointers.                                              */
/*****************************************************************************/

/**
 * PU Motion Vector info
 */
typedef struct
{
    /**
     *  L0 Motion Vector
     */
    mv_t s_l0_mv;

    /**
     *  L1 Motion Vector
     */
    mv_t s_l1_mv;

    /**
     *  L0 Ref index
     */
    WORD8   i1_l0_ref_idx;

    /**
     *  L1 Ref index
     */
    WORD8   i1_l1_ref_idx;

    /**
     *  L0 Ref Pic Buf ID
     */
    WORD8 i1_l0_ref_pic_buf_id;

    /**
     *  L1 Ref Pic Buf ID
     */
    WORD8 i1_l1_ref_pic_buf_id;

} pu_mv_t;

/**
 * PU information
 */
typedef struct
{

    /**
     *  Motion Vectors
     */
    pu_mv_t     s_mv;

    /**
     *  PU X position in terms of min PU (4x4) units
     */
    UWORD32     b2_pos_x        : 2;

    /**
     *  PU Y position in terms of min PU (4x4) units
     */
    UWORD32     b2_pos_y        : 2;

    /**
     *  PU width in pixels = (b2_wd + 1) << 2
     */
    UWORD32     b2_wd           : 2;

    /**
     *  PU height in pixels = (b2_ht + 1) << 2
     */
    UWORD32     b2_ht           : 2;

    /**
     *  Intra or Inter flag for each partition - 0 or 1
     */
    UWORD32     b1_intra_flag   : 1;

    /**
     *  PRED_L0, PRED_L1, PRED_BI
     */
    UWORD32     b2_pred_mode    : 2;

} pu_t;


/**
 * MB information to be stored for entire frame
 */
typedef struct
{
    /**
     * Transform sizes 0: 4x4, 1: 8x8,
     */
    UWORD32     b1_trans_size : 1;

    /**
     * CBP - 4 bits for Y, 1 for U and 1 for V
     */
    UWORD32     b6_cbp: 6;

    /**
     * Intra pred sizes  0: 4x4, 1: 8x8, 2: 16x16
     */
    UWORD32     b2_intra_pred_size : 2;

    /**
     * Flag to signal if the current MB is IPCM
     */
    UWORD32     b1_ipcm : 1;

}mb_t;

/*****************************************************************************/
/* Info from last TU row of MB is stored in a row level neighbour buffer    */
/* , which will be used for Boundary Strength computation                    */
/*****************************************************************************/
/**
 *  MB neighbor info
 */
typedef struct
{
    /**
     *  Slice index of the mb
     */
    UWORD16 u2_slice_idx;

    /*************************************************************************/
    /* CBF of bottom TU row (replicated in 4 pixel boundary)                 */
    /* MSB contains CBF of first TU in the last row and LSB contains CBF     */
    /* of last TU in the last row                                            */
    /*************************************************************************/
    /**
     * CBF of bottom TU row
     */
    UWORD16 u2_packed_cbf;

    /*************************************************************************/
    /* QP of bottom TU row (replicated at 8 pixel boundary (Since QP can     */
    /* not change at less than min CU granularity)                           */
    /*************************************************************************/
    /**
     * QP of bottom TU row
     */
    UWORD8 u1_qp;

} mb_top_ny_info_t;

/**
 *  MB level context
 */
typedef struct _mb_ctxt_t
{
    /*************************************************************************/
    /* Tile boundary can be detected by looking at tile start x and tile     */
    /* start y.  And based on the tile, slice and frame boundary the         */
    /* following will be initialized.                                        */
    /*************************************************************************/
    /**
     *  Pointer to left MB
     */
    /*  If not available, this will be set to NULL   */
    struct _mb_ctxt_t *ps_mb_left;

    /**
     *  Pointer to top-left MB
     */
    /* If not available, this will be set to NULL   */
    mb_top_ny_info_t *ps_mb_ny_topleft;

    /**
     *  Pointer to top MB
     */
    /* If not available, this will be set to NULL  */
    mb_top_ny_info_t *ps_mb_ny_top;

    /**
     *  Pointer to top-right MB
     */
    /* If not available, this will be set to NULL */
    mb_top_ny_info_t *ps_mb_ny_topright;

    /*************************************************************************/
    /* Pointer to PU data.                                                   */
    /* This points to a MV Bank stored at frame level. Though this           */
    /* pointer can be derived by reading offset at frame level, it is        */
    /* stored here for faster access. Can be removed if storage of MB       */
    /* structure is critical                                                 */
    /*************************************************************************/
    /**
     * Pointer to PU data
     */
    pu_t *ps_pu;

    /*************************************************************************/
    /* Pointer to a PU map stored at frame level,                            */
    /* Though this pointer can be derived by multiplying MB address with    */
    /* number of minTUs in a MB, it is stored here for faster access.       */
    /* Can be removed if storage of MB structure is critical                */
    /*************************************************************************/
    /**
     * Pointer to a PU map stored at frame level
     */
    UWORD8 *pu1_pu_map;

    /**
     *  Number of TUs filled in as_tu
     */
    /*************************************************************************/
    /* Having the first entry as 32 bit data, helps in keeping each of       */
    /* the structures aligned to 32 bits at MB level                        */
    /*************************************************************************/
    WORD32 i4_tu_cnt;

    /**
     *  Pointer to transform coeff data
     */
    /*************************************************************************/
    /* Following format is repeated for every coded TU                       */
    /* Luma Block                                                            */
    /* num_coeffs      : 16 bits                                             */
    /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
    /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
    /* coeff_data      : Non zero coefficients                               */
    /* Cb Block (only for last TU in 4x4 case else for every luma TU)        */
    /* num_coeffs      : 16 bits                                             */
    /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
    /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
    /* coeff_data      : Non zero coefficients                               */
    /* Cr Block (only for last TU in 4x4 case else for every luma TU)        */
    /* num_coeffs      : 16 bits                                             */
    /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
    /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
    /* coeff_data      : Non zero coefficients                               */
    /*************************************************************************/
    void            *pv_coeff_data;

    /**
     *  Slice to which the MB belongs to
     */
    WORD32 i4_slice_idx;

    /**
     *  MB column position
     */
    WORD32 i4_pos_x;

    /**
     *  MB row position
     */
    WORD32 i4_pos_y;

    /**
     *  Number of PUs filled in ps_pu
     */
    WORD32 i4_pu_cnt;

    /**
     *  Index of current PU being processed in ps_pu
     */
    /*  Scratch variable set to 0 at the start of any PU processing function */
    WORD32 i4_pu_idx;

    /**
     * Vertical Boundary strength
     */
    /* Two bits per edge.
    Stored in format. BS[15] | BS[14] | .. |BS[0]*/
    UWORD32 *pu4_vert_bs;

    /**
     * Horizontal Boundary strength
     */

    /* Two bits per edge.
    Stored in format. BS[15] | BS[14] | .. |BS[0]*/
    UWORD32 *pu4_horz_bs;

    /**
     *  Qp array stored for each 8x8 pixels
     */
    UWORD8 *pu1_qp;

    /**
     *  Pointer to current frame's pu_t array
     */
    pu_t *ps_frm_pu;

    /**
     * Pointer to current frame's pu_t index array, which stores starting index
     * of pu_t for every MB
     */
    UWORD32 *pu4_frm_pu_idx;

    /**
     *  Pointer to current frame's pu map array
     */
    UWORD8 *pu1_frm_pu_map;

    /*************************************************************************/
    /* Need to add encoder specific elements for identifying the order of    */
    /* coding for CU, TU and PU if any                                       */
    /*************************************************************************/
} mb_ctxt_t;

/*************************************************************************/
/* The following describes how each of the CU cases are handled          */
/*************************************************************************/

/*************************************************************************/
/* For SKIP MB                                                           */
/* One Inter PU with appropriate MV                                      */
/* One TU which says CBP is zero and size is 16x16                       */
/*************************************************************************/

/*************************************************************************/
/* For Inter MB                                                          */
/* M Inter PU with appropriate MVs (M between 1 to 4)                    */
/* Number of TUs derived based on transform size                         */
/*************************************************************************/

/*************************************************************************/
/* For Intra MB                                                          */
/* Number of TUs derived based on transform size                         */
/* N Intra Modes are signaled along with coeff data at the start        */
/*************************************************************************/

/*************************************************************************/
/* For Intra PCM MB                                                      */
/* One TU which says ipcm is 1                                           */
/*************************************************************************/



/**
 * Structure to hold quantization parameters of an mb
 */
typedef struct
{

    /*
     * mb qp
     */
    UWORD8 u1_mb_qp;

    /*
     * mb qp / 6
     */
    UWORD8 u1_qp_div;

    /*
     * mb qp mod 6
     */
    UWORD8 u1_qp_rem;

    /*
     * QP bits
     */
    UWORD8  u1_qbits;

    /*
     * forward scale matrix
     */
    const UWORD16 *pu2_scale_mat;

    /*
     * threshold matrix for quantization
     */
    UWORD16 *pu2_thres_mat;

    /*
     * Threshold to compare the sad with
     */
    UWORD16 *pu2_sad_thrsh;

    /*
     * qp dependent rounding constant
     */
    UWORD32 u4_dead_zone;

    /*
     *  inverse scale matrix
     */
    const UWORD16 *pu2_iscale_mat;

    /*
     * Weight matrix in iquant
     */
    UWORD16 *pu2_weigh_mat;

}quant_params_t;

/**
 * Structure to hold Profile tier level info for a given layer
 */

typedef struct
{
    /**
     *  NAL unit type
     */
    WORD8 i1_nal_unit_type;

    /**
     * NAL ref idc
     */
    WORD8 i1_nal_ref_idc;


} nal_header_t;

/**
 * HRD parameters Info
 */
typedef struct
{
    /**
     * Specifies the number of alternative CPB specifications in the
     * bitstream
     */
    UWORD8 u1_cpb_cnt_minus1;

    /**
    * (together with bit_rate_value_minus1) specifies the
    * maximum input bit rate of the i-th CPB
    */
    UWORD32 u4_bit_rate_scale;

    /**
    * (together with cpb_size_du_value_minus1) specifies
    * CPB size of the i-th CPB when the CPB operates
    * at the access unit level
    */
    UWORD32 u4_cpb_size_scale;

    /**
     *  (together with bit_rate_scale) specifies the
     *  maximum input bit rate for the i-th CPB
     */
    UWORD32 au4_bit_rate_value_minus1[32];
    /**
     *  together with cpb_size_scale to specify the
     *  CPB size when the CPB operates at the access unit level.
     */
    UWORD32 au4_cpb_size_value_minus1[32];

    /**
     * if 1, specifies that the HSS operates in a constant bit rate (CBR) mode
     * if 0, specifies that the HSS operates in a intermittent bit rate (CBR) mode
     */
    UWORD8  au1_cbr_flag[32];


    /**
    * specifies the length, in bits for initial cpb delay (nal/vcl)syntax in bp sei
    */
    UWORD8  u1_initial_cpb_removal_delay_length_minus1;

    /**
    * specifies the length, in bits for the cpb delay syntax in pt_sei
    */
    UWORD8  u1_cpb_removal_delay_length_minus1;

    /**
    * specifies the length, in bits, of the pic_dpb_output_delay syntax element in the pt SEI message
    */
    UWORD8  u1_dpb_output_delay_length_minus1;

    /**
     * Specifies length of the time offset parameter
     */
    UWORD8  u1_time_offset_length;

}hrd_params_t;


/**
 * Structure to hold VUI parameters Info
 */
typedef struct
{
    /**
    *  indicates the presence of aspect_ratio
    */
    UWORD8 u1_aspect_ratio_info_present_flag;

    /**
    *  specifies the aspect ratio of the luma samples
    */
    UWORD8 u1_aspect_ratio_idc;

    /**
    *  width of the luma samples. user dependent
    */
    UWORD16 u2_sar_width;

    /**
    *  Height of the luma samples. user dependent
    */
    UWORD16 u2_sar_height;

    /**
    * if 1, specifies that the overscan_appropriate_flag is present
    * if 0, the preferred display method for the video signal is unspecified
    */
    UWORD8 u1_overscan_info_present_flag;

    /**
    * if 1,indicates that the cropped decoded pictures output
    * are suitable for display using overscan
    */
    UWORD8 u1_overscan_appropriate_flag;

    /**
    * if 1 specifies that video_format, video_full_range_flag and
    * colour_description_present_flag are present
    */
    UWORD8 u1_video_signal_type_present_flag;

    /**
    * pal, secam, ntsc, ...
    */
    UWORD8 u1_video_format;

    /**
    * indicates the black level and range of the luma and chroma signals
    */
    UWORD8 u1_video_full_range_flag;

    /**
    * if 1,to 1 specifies that colour_primaries, transfer_characteristics
    * and matrix_coefficients are present
    */
    UWORD8 u1_colour_description_present_flag;

    /**
    * indicates the chromaticity coordinates of the source primaries
    */
    UWORD8 u1_colour_primaries;

    /**
    * indicates the opto-electronic transfer characteristic of the source picture
    */
    UWORD8 u1_transfer_characteristics;

    /**
    * the matrix coefficients used in deriving luma and chroma signals
    * from the green, blue, and red primaries
    */
    UWORD8 u1_matrix_coefficients;

    /**
    * if 1, specifies that chroma_sample_loc_type_top_field and
    * chroma_sample_loc_type_bottom_field are present
    */
    UWORD8 u1_chroma_loc_info_present_flag;

    /**
    * location of chroma samples
    */
    UWORD8 u1_chroma_sample_loc_type_top_field;

    UWORD8 u1_chroma_sample_loc_type_bottom_field;

    /**
    *   Indicates the presence of the
    *   num_units_in_ticks, time_scale flag
    */
    UWORD8 u1_vui_timing_info_present_flag;

    /**
    *   Number of units that
    *   correspond to one increment of the
    *   clock. Indicates the  resolution
    */
    UWORD32 u4_vui_num_units_in_tick;

    /**
    *   The number of time units that pass in one second
    */
    UWORD32 u4_vui_time_scale;

    /**
     *   Flag indicating that time difference between two frames is a constant
     */
    UWORD8 u1_fixed_frame_rate_flag;

    /**
     *   Indicates the presence of NAL HRD parameters
     */
    UWORD8 u1_nal_hrd_parameters_present_flag;

    /**
     *   NAL level HRD parameters
     */
    hrd_params_t s_nal_hrd_parameters;

    /**
     *   Indicates the presence of VCL HRD parameters
     */
    UWORD8 u1_vcl_hrd_parameters_present_flag;

    /**
     *   VCL level HRD parameters
     */
    hrd_params_t s_vcl_hrd_parameters;

    /**
     *  Specifies the HRD operational mode
     */
    UWORD8 u1_low_delay_hrd_flag;

    /**
     * Indicates presence of SEI messages which include pic_struct syntax element
     */
    UWORD8 u1_pic_struct_present_flag;

    /**
    * 1, specifies that the following cvs bitstream restriction parameters are present
    */
    UWORD8 u1_bitstream_restriction_flag;

    /**
    * if 0, indicates that no pel outside the pic boundaries and
    * no sub-pels derived using pels outside the pic boundaries is used for inter prediction
    */
    UWORD8 u1_motion_vectors_over_pic_boundaries_flag;

    /**
    * Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units
    * associated with any coded picture
    */
    UWORD8 u1_max_bytes_per_pic_denom;

    /**
    *  Indicates an upper bound for the number of bits of coding_unit() data
    */
    UWORD8 u1_max_bits_per_mb_denom;

    /**
    * Indicate the maximum absolute value of a decoded horizontal MV component
    * in quarter-pel luma units
    */
    UWORD8 u1_log2_max_mv_length_horizontal;

    /**
    * Indicate the maximum absolute value of a decoded vertical MV component
    * in quarter-pel luma units
    */
    UWORD8 u1_log2_max_mv_length_vertical;

    /**
     *  Max number of frames that are not synchronized in display and decode order
     */
    UWORD8 u1_num_reorder_frames;

    /**
     * specifies required size of the HRD DPB in units of frame buffers.
     */
     UWORD8 u1_max_dec_frame_buffering;

} vui_t;


/**
 * Structure to hold SPS info
 */
typedef struct
{
    /**
     *  profile_idc
     */
    UWORD8 u1_profile_idc;

    /** constraint_set0_flag */
    UWORD8 u1_constraint_set0_flag;

    /** constraint_set1_flag */
    UWORD8 u1_constraint_set1_flag;

    /** constraint_set2_flag */
    UWORD8 u1_constraint_set2_flag;

    /** constraint_set3_flag */
    UWORD8 u1_constraint_set3_flag;

    /**
     *  level_idc
     */
    UWORD8 u1_level_idc;

    /**
     *  seq_parameter_set_id
     */
    UWORD8 u1_sps_id;


    /**
     *  chroma_format_idc
     */
    UWORD8 u1_chroma_format_idc;

    /**
     *  residual_colour_transform_flag
     */
    WORD8 i1_residual_colour_transform_flag;

    /**
     *  bit_depth_luma_minus8
     */
    WORD8 i1_bit_depth_luma;

    /**
     *  bit_depth_chroma_minus8
     */
    WORD8 i1_bit_depth_chroma;

    /**
     *  qpprime_y_zero_transform_bypass_flag
     */
    WORD8 i1_qpprime_y_zero_transform_bypass_flag;

    /**
     *  seq_scaling_matrix_present_flag
     */
    WORD8 i1_seq_scaling_matrix_present_flag;

    /**
     *  seq_scaling_list_present_flag
     */
    WORD8 ai1_seq_scaling_list_present_flag[8];

    /**
     *  log2_max_frame_num_minus4
     */
    WORD8 i1_log2_max_frame_num;

    /**
     *  MaxFrameNum in the standard
     *  1 << i1_log2_max_frame_num
     */
    WORD32 i4_max_frame_num;

    /**
     *  pic_order_cnt_type
     */
    WORD8 i1_pic_order_cnt_type;

    /**
     *  log2_max_pic_order_cnt_lsb_minus4
     */
    WORD8 i1_log2_max_pic_order_cnt_lsb;

    /**
     * MaxPicOrderCntLsb in the standard.
     * 1 << log2_max_pic_order_cnt_lsb_minus4
     */
    WORD32 i4_max_pic_order_cnt_lsb;

    /**
     *  delta_pic_order_always_zero_flag
     */
    WORD8 i1_delta_pic_order_always_zero_flag;

    /**
     *  offset_for_non_ref_pic
     */
    WORD32 i4_offset_for_non_ref_pic;

    /**
     *  offset_for_top_to_bottom_field
     */
    WORD32 i4_offset_for_top_to_bottom_field;

    /**
     *  num_ref_frames_in_pic_order_cnt_cycle
     */
    UWORD8 u1_num_ref_frames_in_pic_order_cnt_cycle;

    /**
     * Offset_for_ref_frame
     */
    WORD32 ai4_offset_for_ref_frame[256];

    /**
     *  max_num_ref_frames
     */
    UWORD8 u1_max_num_ref_frames;

    /**
     *  gaps_in_frame_num_value_allowed_flag
     */
    WORD8 i1_gaps_in_frame_num_value_allowed_flag;

    /**
     *  pic_width_in_mbs_minus1
     */
    WORD16 i2_pic_width_in_mbs_minus1;

    /**
     *  pic_height_in_map_units_minus1
     */
    WORD16 i2_pic_height_in_map_units_minus1;

    /**
     *  frame_mbs_only_flag
     */
    WORD8 i1_frame_mbs_only_flag;

    /**
     *  mb_adaptive_frame_field_flag
     */
    WORD8 i1_mb_adaptive_frame_field_flag;

    /**
     *  direct_8x8_inference_flag
     */
    WORD8 i1_direct_8x8_inference_flag;

    /**
     *  frame_cropping_flag
     */
    WORD8 i1_frame_cropping_flag;

    /**
     *  frame_crop_left_offset
     */
    WORD16 i2_frame_crop_left_offset;

    /**
     *  frame_crop_right_offset
     */
    WORD16 i2_frame_crop_right_offset;

    /**
     *  frame_crop_top_offset
     */
    WORD16 i2_frame_crop_top_offset;

    /**
     *  frame_crop_bottom_offset
     */
    WORD16 i2_frame_crop_bottom_offset;

    /**
     *  vui_parameters_present_flag
     */
    WORD8 i1_vui_parameters_present_flag;

    /**
     * vui_parameters_Structure_info
     */
    vui_t s_vui_parameters;

    /**
     * Flag to give status of SPS structure
     */
    WORD8 i1_sps_valid;

    /**
     * Coded Picture width
     */
    WORD32 i2_pic_wd;

    /**
     * Coded Picture height
     */
    WORD32 i2_pic_ht;

    /**
     *  Picture width in MB units
     */

    WORD16 i2_pic_wd_in_mb;

    /**
     *  Picture height in MB units
     */

    WORD16 i2_pic_ht_in_mb;

    /**
     * useDefaultScalingMatrixFlag
     */
    WORD8 ai1_use_default_scaling_matrix_flag[8];

    /**
     * 4x4 Scaling lists after inverse zig zag scan
     */
    UWORD16 au2_4x4_weight_scale[6][16];

    /**
     * 4x4 Scaling lists after inverse zig zag scan
     */
    UWORD16 au2_8x8_weight_scale[2][64];

} sps_t;


/**
 * Structure to hold PPS info
 */
typedef struct
{
    /**
     *  pic_parameter_set_id
     */
    UWORD8 u1_pps_id;

    /**
     *  seq_parameter_set_id
     */
    UWORD8 u1_sps_id;

    /**
     *   Entropy coding : 0-VLC; 1 - CABAC
     */
    UWORD8 u1_entropy_coding_mode_flag;

    /*
     * Pic order present flag
     */
    UWORD8 u1_pic_order_present_flag;

    /*
     * Number of slice groups
     */
    UWORD8 u1_num_slice_groups;

    /*
     * Slice group map type
     */
    UWORD8 u1_slice_group_map_type;

    /*
     * Maximum reference picture index in the reference list 0 : range [0 - 31]
     */
    WORD8 i1_num_ref_idx_l0_default_active;

    /*
     * Maximum reference picture index in the reference list 1 : range [0 - 31]
     */
    WORD8 i1_num_ref_idx_l1_default_active;

    /**
     *  weighted_pred_flag
     */
    WORD8 i1_weighted_pred_flag;

    /**
     *  weighted_bipred_flag
     */
    WORD8 i1_weighted_bipred_idc;

    /**
     *  pic_init_qp_minus26
     */
    WORD8 i1_pic_init_qp;

    /**
     *  pic_init_qs_minus26
     */
    WORD8 i1_pic_init_qs;

    /*
     * Chroma QP offset w.r.t QPY {-12,12}
     */
    WORD8  i1_chroma_qp_index_offset;

    /**
     *  deblocking_filter_control_present_flag
     */
    WORD8 i1_deblocking_filter_control_present_flag;

    /**
     *  constrained_intra_pred_flag
     */
    WORD8 i1_constrained_intra_pred_flag;

    /**
     *  redundant_pic_cnt_present_flag
     */
    WORD8 i1_redundant_pic_cnt_present_flag;

    /**
     *  transform_8x8_mode_flag
     */
    WORD8 i1_transform_8x8_mode_flag;

    /**
     *  pic_scaling_matrix_present_flag
     */
    WORD8 i1_pic_scaling_matrix_present_flag;

    /*
     *  Second chroma QP offset
     */
    WORD8  i1_second_chroma_qp_index_offset;


    /**
     * useDefaultScalingMatrixFlag
     */
    WORD8 ai1_use_default_scaling_matrix_flag[8];

    /**
     * 4x4 Scaling lists after inverse zig zag scan
     */
    UWORD16 au2_4x4_weight_scale[6][16];

    /**
     * 4x4 Scaling lists after inverse zig zag scan
     */
    UWORD16 au2_8x8_weight_scale[2][64];


    /**
     *  pic_scaling_list_present_flag
     */
    WORD8 ai1_pic_scaling_list_present_flag[8];

    /**
     * Flag to give status of PPS structure
     */
    WORD8   i1_pps_valid;


} pps_t;

/**
 * MMCO commands and params.
 */
typedef struct
{
    /* memory management control operation command */
    UWORD8 u1_memory_management_control_operation;

    /*
     * Contains difference of pic nums of short-term pic/frame
     * 1. To signal it as "unused for reference" if mmco = 1
     * 2. To signal it as "used for long-term reference" if mmco = 3
     */
    UWORD32 u4_difference_of_pic_nums_minus1;

    /* Long-term pic num to be set as "unused for reference" */
    UWORD8 u1_long_term_pic_num;

    /*
     * Assign a long-term idx to a picture as follows
     * 1. Assign to a short-term pic if mmco = 3
     * 2. Assign to the current pic if mmco = 6
     */
    UWORD8 u1_long_term_frame_idx;

    /*
     * The max long-term idx. The long-term pics having idx above
     * are set as "unused for reference
     */
    UWORD8 u1_max_long_term_frame_idx_plus1;

}mmco_prms_t;

/**
 * Structure to hold Reference picture list modification info
 */
typedef struct
{
    /* ref_pic_list_modification_flag_l0 */
    WORD8 i1_ref_pic_list_modification_flag_l0;

    /* Modification required in list0 */
    WORD8 i1_modification_of_pic_nums_idc_l0[MAX_MODICATION_IDC];

    /*
     * The absolute difference between the picture number of
     * the picture being moved to the current index in
     * list0 and the picture number prediction value
     */
    UWORD32 u4_abs_diff_pic_num_minus1_l0[MAX_MODICATION_IDC];

    /*
     * The long-term picture number of the picture being moved
     * to the current index in list0
     */
    UWORD8 u1_long_term_pic_num_l0[MAX_MODICATION_IDC];

    /* ref_pic_list_modification_flag_l1 */
    WORD8 i1_ref_pic_list_modification_flag_l1;

    /* Modification required in list1 */
    WORD8 i1_modification_of_pic_nums_idc_l1[MAX_MODICATION_IDC];

    /*
     * The absolute difference between the picture number of
     * the picture being moved to the current index in
     * list1 and the picture number prediction value
     */
    UWORD32 u4_abs_diff_pic_num_minus1_l1[MAX_MODICATION_IDC];

    /*
     * The long-term picture number of the picture being moved
     * to the current index in list1
     */
   UWORD8 u1_long_term_pic_num_l1[MAX_MODICATION_IDC];
}rplm_t;

/**
 * Structure to hold Slice Header info
 */
typedef struct
{

    /*
     *  nal_unit_type
     */
    WORD8  i1_nal_unit_type;

    /*
     *  nal_unit_idc
     */
    WORD8  i1_nal_unit_idc;

    /*
     *  first_mb_in_slice
     */
    UWORD16   u2_first_mb_in_slice;

    /*
     *  slice_type
     */
    UWORD8   u1_slice_type;

    /*
     *  pic_parameter_set_id
     */
    UWORD8   u1_pps_id;

    /*
     *  frame_num
     */
    WORD32 i4_frame_num;

    /*
     *  field_pic_flag
     */
    WORD8   i1_field_pic_flag;

    /*
     *  bottom_field_flag
     */
    WORD8   i1_bottom_field_flag;

    /*
     *  second_field
     */
    WORD8   i1_second_field_flag;

    /*
     *  idr_pic_id
     */
    UWORD16 u2_idr_pic_id ;

    /*
     *  pic_order_cnt_lsb
     */
    UWORD16 i4_pic_order_cnt_lsb;

    /*
     *  delta_pic_order_cnt_bottom
     */
    WORD32  i4_delta_pic_order_cnt_bottom;

    /*
     *  delta_pic_order_cnt
     */
    WORD32   ai4_delta_pic_order_cnt[2];

    /*
     *  redundant_pic_cnt
     */
    UWORD8   u1_redundant_pic_cnt;

    /*
     *  direct_spatial_mv_pred_flag
     */
    UWORD8   u1_direct_spatial_mv_pred_flag;

    /*
     *  num_ref_idx_active_override_flag
     */
    UWORD8   u1_num_ref_idx_active_override_flag;

    /*
     *  num_ref_idx_l0_active
     */
    WORD8   i1_num_ref_idx_l0_active;

    /*
     *  num_ref_idx_l1_active_minus1
     */
    WORD8   i1_num_ref_idx_l1_active;

    /*
     * ref_pic_list_reordering_flag_l0
     */
    UWORD8  u1_ref_idx_reordering_flag_l0;

    /*
     * ref_pic_list_reordering_flag_l1
     */
    UWORD8  u1_ref_idx_reordering_flag_l1;

    /**
     *  Reference prediction list modification
     */
    rplm_t s_rplm;

    /**
     * L0 Reference pic lists
     */
    ref_list_t as_ref_pic_list0[MAX_DPB_SIZE];

    /**
     * L1 Reference pic lists
     */
    ref_list_t as_ref_pic_list1[MAX_DPB_SIZE];

    /*
     * no_output_of_prior_pics_flag
     */
    UWORD8   u1_no_output_of_prior_pics_flag;

    /*
     * long_term_reference_flag
     */
    UWORD8   u1_long_term_reference_flag;

    /*
     * adaptive_ref_pic_marking_mode_flag
     */
    UWORD8   u1_adaptive_ref_pic_marking_mode_flag;

    /*
     * Array to structures to store mmco commands
     * and parameters.
     */
    mmco_prms_t as_mmco_prms[MAX_MMCO_COMMANDS];

    /*
     *  entropy_coding_mode_flag
     */
    WORD8   u1_entropy_coding_mode_flag;

    /*
     *  cabac_init_idc
     */
    WORD8   i1_cabac_init_idc;

    /*
     *  i1_slice_qp
     */
    WORD8   i1_slice_qp;

    /*
     *  sp_for_switch_flag
     */
    UWORD8   u1_sp_for_switch_flag;

    /*
     *  slice_qs_delta
     */
    UWORD8   u1_slice_qs;

    /*
     *  disable_deblocking_filter_idc
     */
    WORD8   u1_disable_deblocking_filter_idc;

    /*
     *  slice_alpha_c0_offset_div2
     */
    WORD8   i1_slice_alpha_c0_offset_div2;

    /*
     *  slice_beta_offset_div2
     */
    WORD8   i1_slice_beta_offset_div2;

    /*
     *  num_slice_groups_minus1
     */
    WORD8   u1_num_slice_groups_minus1;

    /*
     *  slice_group_change_cycle
     */
    WORD8   u1_slice_group_change_cycle;

    /**
     * Start MB X
     */
    UWORD16 i2_mb_x;

    /**
     * Start MB Y
     */
    UWORD16 i2_mb_y;

    /**
     * Absolute POC. Contains minimum of top and bottom POC.
     */
    WORD32 i4_abs_pic_order_cnt;

    /**
     *  Absolute top POC. Contains top poc for frame or top
     *  field. Invalid for bottom field.
     */
    WORD32 i4_abs_top_pic_order_cnt;

    /**
     *  Absolute top POC. Contains bottom poc for frame or bottom
     *  field. Invalid for top field.
     */
    WORD32 i4_abs_bottom_pic_order_cnt;

    /** Flag signaling if the current slice is ref slice */
    UWORD8 i1_nal_ref_idc;

    /** Flag to indicate if the current slice is MBAFF Frame */
    UWORD8 u1_mbaff_frame_flag;

    /** luma_log2_weight_denom */
    UWORD8 u1_luma_log2_weight_denom;

    /** chroma_log2_weight_denom */
    UWORD8 u1_chroma_log2_weight_denom;

    /** luma_weight_l0_flag */
    UWORD8 au1_luma_weight_l0_flag[MAX_DPB_SIZE];

    /** luma_weight_l0 : (-128, 127 )is the range of weights
     * when weighted pred is enabled, 128 is default value */
    WORD16 ai2_luma_weight_l0[MAX_DPB_SIZE];

    /** luma_offset_l0 : (-128, 127 )is the range of offset
     * when weighted pred is enabled, 0 is default value */
    WORD8 ai1_luma_offset_l0[MAX_DPB_SIZE];

    /** chroma_weight_l0_flag */
    UWORD8 au1_chroma_weight_l0_flag[MAX_DPB_SIZE];

    /** chroma_weight_l0 : (-128, 127 )is the range of weights
     * when weighted pred is enabled, 128 is default value*/
    WORD16 ai2_chroma_weight_l0[MAX_DPB_SIZE][2];

    /** chroma_offset_l0 : (-128, 127 )is the range of offset
     * when weighted pred is enabled, 0 is default value*/
    WORD8 ai1_chroma_offset_l0[MAX_DPB_SIZE][2];

    /** luma_weight_l0_flag */
    UWORD8 au1_luma_weight_l1_flag[MAX_DPB_SIZE];

    /** luma_weight_l1 : (-128, 127 )is the range of weights
     * when weighted pred is enabled, 128 is default value */
    WORD16 ai2_luma_weight_l1[MAX_DPB_SIZE];

    /** luma_offset_l1 : (-128, 127 )is the range of offset
     * when weighted pred is enabled, 0 is default value */
    WORD8 ai1_luma_offset_l1[MAX_DPB_SIZE];

    /** chroma_weight_l1_flag */
    UWORD8 au1_chroma_weight_l1_flag[MAX_DPB_SIZE];

    /** chroma_weight_l1 : (-128, 127 )is the range of weights
     * when weighted pred is enabled, 128 is default value */
    WORD16 ai2_chroma_weight_l1[MAX_DPB_SIZE][2];

    /** chroma_offset_l1 :(-128, 127 )is the range of offset
     * when weighted pred is enabled, 0 is default value */
    WORD8 ai1_chroma_offset_l1[MAX_DPB_SIZE][2];
}slice_header_t;


/*****************************************************************************/
/* The following can be used to type cast coefficient data that is stored    */
/*  per subblock. Note that though i2_level is shown as an array that        */
/*  holds 16 coefficients, only the first few entries will be valid. Next    */
/*  subblocks data starts after the valid number of coefficients. Number     */
/*  of non-zero coefficients will be derived using number of non-zero bits   */
/*  in sig coeff map                                                         */
/*****************************************************************************/

/**
 * Structure to hold coefficient info for a 2x2 chroma DC transform
 */
typedef struct
{
    /**
     * significant coefficient map
     */
    UWORD8 u1_sig_coeff_map;

    /**
     * sub block position
     */
    UWORD8 u1_subblk_pos;

    /**
     * holds coefficients
     */
    WORD16  ai2_level[2 * 2];
}tu_sblk2x2_coeff_data_t;

/**
 * Structure to hold coefficient info for a 4x4 transform
 */
typedef struct
{
    /**
     * significant coefficient map
     */
    UWORD16 u2_sig_coeff_map;

    /**
     * sub block position
     */
    UWORD16 u2_subblk_pos;

    /**
     * holds coefficients
     */
    WORD16  ai2_level[SUBBLK_COEFF_CNT];
}tu_sblk4x4_coeff_data_t;

/**
 * Structure to hold coefficient info for a 8x8 transform
 */
typedef struct
{

    /**
     * significant coefficient map
     */
    UWORD32 au4_sig_coeff_map[2];

    /**
     * sub block position
     */
    UWORD16 u2_subblk_pos;

    /**
     * holds coefficients
     */
    WORD16  ai2_level[TRANS_SIZE_8 * TRANS_SIZE_8];
}tu_blk8x8_coeff_data_t;


/**
 * Structure to hold coefficient info for a 16x16 IPCM MB
 */
typedef struct
{
    /**
     * holds coefficients
     */
    UWORD8  au1_level[MB_SIZE * MB_SIZE * 3 / 2];
}tu_ipcm_coeff_data_t;


typedef struct
{
    /**
     * Transform sizes 0: 4x4, 1: 8x8,
     */
    UWORD32     b1_trans_size : 1;

    /**
     * Flag to signal if the current MB is IPCM
     */
    UWORD32     b1_ipcm : 1;

    /**
     * Intra pred sizes  0: 4x4, 1: 8x8, 2: 16x16
     */
    UWORD32     b2_intra_pred_size : 2;

    /**
     * Chroma intra mode
     */
    UWORD32     b2_intra_chroma_pred_mode: 2;

    /**
     * Number of coded subblocks in the current MB, for which
     * tu data is sent. Maximum of 27 subblocks in the following
     * order.
     * 1 4x4 luma DC(for intra16x16),
     * 16 4x4 luma,
     * 2 2x2 chroma DC,
     * 8 4x4 chroma,
     */
    WORD32      b5_num_coded_sblks: 5;

    /**
     * Flag to signal if 4x4 subblock for DC values (in INTRA 16x16 MB)
     * is coded
     */
    UWORD32     b1_luma_dc_coded: 1;

    /**
     * Flag to signal if 4x4 subblock for DC values (in INTRA 16x16 MB)
     * is coded
     */
    UWORD32     b1_chroma_dc_coded: 1;

    /**
     * CSBP - 16 bits, 1 bit for each 4x4
     * for intra16x16 mb_type only ac coefficients are
     */
    UWORD32     b16_luma_csbp: 16;

    /**
     * CSBP - 16 bits, 1 bit for each 4x4
     * for intra16x16 mb_type only ac coefficients are
     */
    UWORD32     b8_chroma_csbp: 8;

    /**
     * Luma Intra pred modes,
     * Based on intra pred size either 16, 4 or 1 entry will be
     * populated below.
     */
    UWORD8     au1_luma_intra_modes[16];

}intra_mb_t;


typedef struct
{
    /**
     * Transform sizes 0: 4x4, 1: 8x8,
     */
    UWORD8     b1_trans_size : 1;


    /**
     * Skip flag
     */
    UWORD8     b1_skip : 1;


    /**
     * Number of coded subblocks in the current MB, for which
     * tu data is sent. Maximum of 26 subblocks in the following
     * order.
     * 16 4x4 luma,
     * 2 2x2 chroma DC,
     * 8 4x4 chroma,
     */
    WORD32      b5_num_coded_sblks: 5;

    /**
     * CSBP - 16 bits, 1 bit for each 4x4
     * for intra16x16 mb_type only ac coefficients are
     */
    UWORD32     b16_luma_csbp: 16;

    /**
     * CSBP - 16 bits, 1 bit for each 4x4
     * for intra16x16 mb_type only ac coefficients are
     */
    UWORD32     b16_chroma_csbp: 8;
}inter_mb_t;

#endif /* _IH264_STRUCTS_H_ */
