/******************************************************************************
 *
 * 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_structs.h
*
* @brief
*  Structure definitions used in the encoder
*
* @author
*  Harish
*
* @remarks
*  None
*
*******************************************************************************
*/

#ifndef IH264E_STRUCTS_H_
#define IH264E_STRUCTS_H_

/*****************************************************************************/
/* Structure definitions                                                    */
/*****************************************************************************/

/* Early declaration of structs */
typedef struct _codec_t codec_t;
typedef struct _proc_t process_ctxt_t;


/*****************************************************************************/
/* Extern Function type definitions                                          */
/*****************************************************************************/

/**
******************************************************************************
 *  @brief      intra prediction filters leaf level
******************************************************************************
 */
typedef void (*pf_intra_pred)(UWORD8 *pu1_src, UWORD8 *pu1_dst,
                              WORD32 src_strd, WORD32 dst_strd,
                              WORD32 ui_neighboravailability);

/**
******************************************************************************
 *  @brief      inter prediction filters leaf level
******************************************************************************
 */

typedef void (*pf_inter_pred_luma_bilinear)(UWORD8 *pu1_src1, UWORD8 *pu1_src2, UWORD8 *pu1_dst,
                                            WORD32 src_strd1, WORD32 src_strd2, WORD32 dst_strd,
                                            WORD32 height, WORD32 width);

/**
******************************************************************************
 *  @brief      fwd transform leaf level
******************************************************************************
 */
typedef void (*pf_trans_quant)(UWORD8*pu1_src, UWORD8 *pu1_pred, WORD16 *pi2_out,
                               WORD32 i4_src_stride, UWORD32 u4_pred_stride, UWORD32 u4_dst_stride,
                               const UWORD16 *pu2_scale_mat, const UWORD16 *pu2_thresh_mat,
                               UWORD32 u4_qbit, UWORD32 u4_round_fact, UWORD8 *pu1_nnz);

typedef void (*pf_iquant_itrans)(WORD16 *pi2_src, UWORD8 *pu1_pred, UWORD8 *pu1_out,
                                 WORD32 i4_src_stride, UWORD32 u4_pred_stride, UWORD32 u4_out_stride,
                                 const UWORD16 *pu2_iscale_mat, const UWORD16 *pu2_weigh_mat,
                                 UWORD32 qp_div, WORD32 *pi4_tmp);

/**
******************************************************************************
 *  @brief      Padding leaf level
******************************************************************************
 */
typedef void (*pf_pad)(UWORD8 *pu1_src, WORD32 src_strd, WORD32 wd, WORD32 pad_size);

/**
******************************************************************************
 *  @brief      memory handling leaf level
******************************************************************************
 */
typedef void (*pf_memcpy)(UWORD8 *pu1_dst, UWORD8 *pu1_src, UWORD32 num_bytes);

typedef void (*pf_memset)(UWORD8 *pu1_dst, UWORD8 value, UWORD32 num_bytes);

typedef void (*pf_memcpy_mul8)(UWORD8 *pu1_dst, UWORD8 *pu1_src, UWORD32 num_bytes);

typedef void (*pf_memset_mul8)(UWORD8 *pu1_dst, UWORD8 value, UWORD32 num_bytes);

/**
******************************************************************************
 *  @brief      Sad computation
******************************************************************************
 */
typedef void (*pf_compute_sad)(UWORD8 *pu1_src, UWORD8 *pu1_est,
                               UWORD32 src_strd, UWORD32 est_strd,
                               WORD32 i4_max_sad, WORD32 *pi4_mb_distortion);

/**
******************************************************************************
 *  @brief     Intra mode eval:encoder level
******************************************************************************
 */
typedef void (*pf_evaluate_intra_modes)(UWORD8 *pu1_src, UWORD8 *pu1_ngbr_pels_i16, UWORD8 *pu1_dst,
                                        UWORD32 src_strd, UWORD32 dst_strd,
                                        WORD32 u4_n_avblty, UWORD32 *u4_intra_mode,
                                        WORD32 *pu4_sadmin,
                                        UWORD32 u4_valid_intra_modes);

typedef void (*pf_evaluate_intra_4x4_modes)(UWORD8 *pu1_src, UWORD8 *pu1_ngbr_pels, UWORD8 *pu1_dst,
                                            UWORD32 src_strd, UWORD32 dst_strd,
                                            WORD32 u4_n_avblty, UWORD32 *u4_intra_mode,
                                            WORD32 *pu4_sadmin,
                                            UWORD32 u4_valid_intra_modes, UWORD32 u4_lambda,
                                            UWORD32 u4_predictd_mode);

/**
******************************************************************************
 *  @brief     half_pel generation :encoder level
******************************************************************************
 */
typedef void (*pf_sixtapfilter_horz)(UWORD8 *pu1_src, UWORD8 *pu1_dst,
                                     WORD32 src_strd, WORD32 dst_strd);

typedef void (*pf_sixtap_filter_2dvh_vert)(UWORD8 *pu1_src, UWORD8 *pu1_dst1, UWORD8 *pu1_dst2,
                                           WORD32 src_strd, WORD32 dst_strd,
                                           WORD32 *pi16_pred1,
                                           WORD32 pi16_pred1_strd);
/**
******************************************************************************
 *  @brief     color space conversion
******************************************************************************
 */
typedef void (*pf_fmt_conv_420p_to_420sp)(UWORD8 *pu1_y_src, UWORD8 *pu1_u_src, UWORD8 *pu1_v_src,
                                          UWORD8 *pu1_y_dst, UWORD8 *pu1_uv_dst,
                                          UWORD16 u2_height, UWORD16 u2_width,
                                          UWORD16 src_y_strd, UWORD16 src_u_strd, UWORD16 src_v_strd,
                                          UWORD16 dst_y_strd, UWORD16 dst_uv_strd,
                                          UWORD32 convert_uv_only);

typedef void (*pf_fmt_conv_422ile_to_420sp)(UWORD8 *pu1_y_buf, UWORD8 *pu1_u_buf, UWORD8 *pu1_v_buf,
                                            UWORD8 *pu1_422i_buf,
                                            WORD32 u4_y_width, WORD32 u4_y_height, WORD32 u4_y_stride,
                                            WORD32 u4_u_stride, WORD32 u4_v_stride,
                                            WORD32 u4_422i_stride);



/**
******************************************************************************
 *  @brief     ME evaluation
******************************************************************************
 */
typedef void ih264e_compute_me_ft(process_ctxt_t *);

/**
******************************************************************************
 *  @brief     SKIP decision
******************************************************************************
 */
typedef WORD32 ih264e_skip_params_ft(process_ctxt_t *, WORD32);


/*****************************************************************************/
/* Enums                                                                     */
/*****************************************************************************/

/**
 ******************************************************************************
 *  @enum  CODEC_STATE_T
 *  @brief codec state
 ******************************************************************************
 */
typedef enum
{
    INIT_DONE,
    HEADER_DONE,
    FIRST_FRAME_DONE,
} CODEC_STATE_T;


/**
 ******************************************************************************
 *  @enum  JOBQ_CMD_T
 *  @brief list of job commands (used during job instantiation)
 ******************************************************************************
 */
typedef enum
{
    CMD_PROCESS,
    CMD_ENTROPY,
    CMD_FMTCONV,
    CMD_ME,
}JOBQ_CMD_T;


/*****************************************************************************/
/* Structures                                                                */
/*****************************************************************************/

/**
 * PU information
 */
typedef struct
{
    /**
     *  Motion Vector
     */
    mv_t s_mv;

    /**
     *  Ref index
     */
    WORD8   i1_ref_idx;

} enc_pu_mv_t;


/*
 * Total Pu info for an MB
 */
typedef struct
{

    /* Array with ME info for all lists */
    enc_pu_mv_t  s_me_info[2];

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

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

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

    /**
     *  PU height in pixels = (b4_ht + 1) << 2
     */
    UWORD32     b4_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;


} enc_pu_t;


typedef struct
{
    /** Descriptor of raw buffer                                     */
    iv_raw_buf_t                            s_raw_buf;

    /** Lower 32bits of time stamp corresponding to the above buffer */
    UWORD32                                 u4_timestamp_low;

    /** Upper 32bits of time stamp corresponding to the above buffer */
    UWORD32                                 u4_timestamp_high;

    /** Flag to indicate if the current buffer is last buffer */
    UWORD32                                 u4_is_last;

    /** Flag to indicate if mb info is sent along with input buffer     */
    UWORD32                                 u4_mb_info_type;

    /** Flag to indicate the size of mb info structure                  */
    UWORD32                                 u4_mb_info_size;

    /** Buffer containing mb info if mb_info_type is non-zero           */
    void                                    *pv_mb_info;

    /** Flag to indicate if pic info is sent along with input buffer     */
    UWORD32                                 u4_pic_info_type;

    /** Buffer containing pic info if mb_info_type is non-zero           */
    void                                    *pv_pic_info;

    /** SEI CCV params flag                                              */
    UWORD8                                  u1_sei_ccv_params_present_flag;

    /** SEI CCV params info                                              */
    sei_ccv_params_t                        s_sei_ccv;

}inp_buf_t;

typedef struct
{
    /** Descriptor of bitstream buffer                                     */
    iv_bits_buf_t                           s_bits_buf;

    /** Lower 32bits of time stamp corresponding to the above buffer */
    UWORD32                                 u4_timestamp_low;

    /** Upper 32bits of time stamp corresponding to the above buffer */
    UWORD32                                 u4_timestamp_high;

    /** Flag to indicate if the current buffer is last buffer */
    UWORD32                                 u4_is_last;

}out_buf_t;

typedef struct
{
    /** Descriptor of picture buffer                                     */
    pic_buf_t                               s_pic_buf;

    /** Lower 32bits of time stamp corresponding to the above buffer */
    UWORD32                                 u4_timestamp_low;

    /** Upper 32bits of time stamp corresponding to the above buffer */
    UWORD32                                 u4_timestamp_high;

    /** Flag to indicate if the current buffer is last buffer */
    UWORD32                                 u4_is_last;

    /** Picture count corresponding to current picture */
    WORD32                                  i4_pic_cnt;

}rec_buf_t;

typedef struct
{
    /** maximum width for which codec should request memory requirements    */
    UWORD32                                     u4_max_wd;

    /** maximum height for which codec should request memory requirements   */
    UWORD32                                     u4_max_ht;

    /** Maximum number of reference frames                                  */
    UWORD32                                     u4_max_ref_cnt;

    /** Maximum number of reorder frames                                    */
    UWORD32                                     u4_max_reorder_cnt;

    /** Maximum level supported                                             */
    UWORD32                                     u4_max_level;

    /** Input color format                                                  */
    IV_COLOR_FORMAT_T                           e_inp_color_fmt;

    /** Flag to enable/disable - To be used only for debugging/testing      */
    UWORD32                                     u4_enable_recon;

    /** Recon color format                                                  */
    IV_COLOR_FORMAT_T                           e_recon_color_fmt;

    /** Encoder Speed preset - Value between 0 (slowest) and 100 (fastest)  */
    IVE_SPEED_CONFIG                            u4_enc_speed_preset;

    /** Rate control mode                                                   */
    IVE_RC_MODE_T                               e_rc_mode;

    /** Maximum frame rate to be supported                                  */
    UWORD32                                     u4_max_framerate;

    /** Maximum bitrate to be supported                                     */
    UWORD32                                     u4_max_bitrate;

    /** Maximum number of consecutive  B frames                             */
    UWORD32                                     u4_num_bframes;

    /** Content type Interlaced/Progressive                                 */
    IV_CONTENT_TYPE_T                           e_content_type;

    /** Maximum search range to be used in X direction                      */
    UWORD32                                     u4_max_srch_rng_x;

    /** Maximum search range to be used in Y direction                      */
    UWORD32                                     u4_max_srch_rng_y;

    /** Slice Mode                                                          */
    IVE_SLICE_MODE_T                            e_slice_mode;

    /** Slice parameter                                                     */
    UWORD32                                     u4_slice_param;

    /** Processor architecture                                          */
    IV_ARCH_T                                   e_arch;

    /** SOC details                                                     */
    IV_SOC_T                                    e_soc;

    /** Input width to be sent in bitstream                                */
    UWORD32                                     u4_disp_wd;

    /** Input height to be sent in bitstream                               */
    UWORD32                                     u4_disp_ht;

    /** Input width                                                     */
    UWORD32                                     u4_wd;

    /** Input height                                                    */
    UWORD32                                     u4_ht;

    /** Input stride                                                    */
    UWORD32                                     u4_strd;

    /** Source frame rate                                               */
    UWORD32                                     u4_src_frame_rate;

    /** Target frame rate                                               */
    UWORD32                                     u4_tgt_frame_rate;

    /** Target bitrate in kilobits per second                           */
    UWORD32                                     u4_target_bitrate;

    /** Force current frame type                                        */
    IV_PICTURE_CODING_TYPE_T                    e_frame_type;

    /** Encoder mode                                                    */
    IVE_ENC_MODE_T                              e_enc_mode;

    /** Set initial Qp for I pictures                                   */
    UWORD32                                     u4_i_qp;

    /** Set initial Qp for P pictures                                   */
    UWORD32                                     u4_p_qp;

    /** Set initial Qp for B pictures                                   */
    UWORD32                                     u4_b_qp;

    /** Set minimum Qp for I pictures                                   */
    UWORD32                                     u4_i_qp_min;

    /** Set maximum Qp for I pictures                                   */
    UWORD32                                     u4_i_qp_max;

    /** Set minimum Qp for P pictures                                   */
    UWORD32                                     u4_p_qp_min;

    /** Set maximum Qp for P pictures                                   */
    UWORD32                                     u4_p_qp_max;

    /** Set minimum Qp for B pictures                                   */
    UWORD32                                     u4_b_qp_min;

    /** Set maximum Qp for B pictures                                   */
    UWORD32                                     u4_b_qp_max;

    /** Adaptive intra refresh mode                                     */
    IVE_AIR_MODE_T                              e_air_mode;

    /** Adaptive intra refresh period in frames                         */
    UWORD32                                     u4_air_refresh_period;

    /** VBV buffer delay                                                */
    UWORD32                                     u4_vbv_buffer_delay;

    /** VBV buffer size                                                 */
    UWORD32                                     u4_vbv_buf_size;

    /** Number of cores to be used                                      */
    UWORD32                                     u4_num_cores;

    /** ME speed preset - Value between 0 (slowest) and 100 (fastest)      */
    UWORD32                                     u4_me_speed_preset;

    /** Flag to enable/disable half pel motion estimation               */
    UWORD32                                     u4_enable_hpel;

    /** Flag to enable/disable quarter pel motion estimation            */
    UWORD32                                     u4_enable_qpel;

    /** Flag to enable/disable intra 4x4 analysis                       */
    UWORD32                                     u4_enable_intra_4x4;

    /** Flag to enable/disable intra 8x8 analysis                       */
    UWORD32                                     u4_enable_intra_8x8;

    /** Flag to enable/disable intra 16x16 analysis                     */
    UWORD32                                     u4_enable_intra_16x16;

    /** Flag to enable/disable fast SAD approximation                   */
    UWORD32                                     u4_enable_fast_sad;

    /*flag to enable/disable alternate reference frames                 */
    UWORD32                                     u4_enable_alt_ref;

    /*Flag to enable/disable computation of SATDQ in ME*/
    UWORD32                                     u4_enable_satqd;

    /*Minimum SAD to search for*/
    WORD32                                     i4_min_sad;

    /** Maximum search range in X direction for farthest reference      */
    UWORD32                                     u4_srch_rng_x;

    /** Maximum search range in Y direction for farthest reference      */
    UWORD32                                     u4_srch_rng_y;

    /** I frame interval                                                */
    UWORD32                                     u4_i_frm_interval;

    /** IDR frame interval                                              */
    UWORD32                                     u4_idr_frm_interval;

    /** Disable deblock level (0: Enable completely, 3: Disable completely */
    UWORD32                                     u4_disable_deblock_level;

    /** Profile                                                         */
    IV_PROFILE_T                                e_profile;

    /** Lower 32bits of time stamp corresponding to input buffer,
     * from which this command takes effect                             */
    UWORD32                                     u4_timestamp_low;

    /** Upper 32bits of time stamp corresponding to input buffer,
     * from which this command takes effect                             */
    UWORD32                                     u4_timestamp_high;

    /** Flag to say if the current config parameter set is valid
     * Will be zero to start with and will be set to 1, when configured
     * Once encoder uses the parameter set, this will be set to zero */
    UWORD32                                     u4_is_valid;

    /** Command associated with this config param set */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_cmd;

    /** Input width in mbs                                                    */
    UWORD32                                     i4_wd_mbs;

    /** Input height in mbs                                                   */
    UWORD32                                     i4_ht_mbs;

    /** entropy coding mode flag                                              */
    UWORD32                                     u4_entropy_coding_mode;

    /** enable weighted prediction                                            */
    UWORD32                                     u4_weighted_prediction;

    /** enable constrained intra prediction                                   */
    UWORD32                                     u4_constrained_intra_pred;

    /** Pic info type */
    UWORD32                                     u4_pic_info_type;
    /**
     * MB info type
     */
    UWORD32                                     u4_mb_info_type;

    /** VUI structure                                                         */
    vui_t                                       s_vui;

    /** SEI structure                                                         */
    sei_params_t                                s_sei;

}cfg_params_t;



/** Structure to hold format conversion context */
typedef struct
{
    /** Current row for which format conversion should be done */
    WORD32 i4_cur_row;

    /** Number of rows for which format conversion should be done */
    WORD32 i4_num_rows;

}fmt_conv_t;


/**
 * Structure to represent a processing job entry
 */
typedef struct
{
    /**
     * Command
     */
    WORD32 i4_cmd;

    /**
     * MB x of the starting MB
     */
    WORD16 i2_mb_x;

    /**
     * MB y of the starting MB
     */

    WORD16 i2_mb_y;

    /**
     * Number of MBs that need to be processed in this job
     */
    WORD16 i2_mb_cnt;

    /**
     * Process contexts base index
     * Will toggle between 0 and MAX_PROCESS_THREADS
     */
    WORD16 i2_proc_base_idx;

} job_t;


/**
 * Structure to represent a MV Bank buffer
 */
typedef struct
{
    /**
     *  Pointer to hold num PUs each MB in a picture
     */
    UWORD32 *pu4_mb_pu_cnt;

    /**
     * Pointer to hold enc_pu_t for each PU in a picture
     */
    enc_pu_t *ps_pic_pu;

    /**
     * Pointer to hold PU map for each MB in a picture
     */
    UWORD8 *pu1_pic_pu_map;

    /**
     * Pointer to hold the Slice map
     */
    UWORD16 *pu1_pic_slice_map;

    /**
     * Absolute POC for the current MV Bank
     */
    WORD32 i4_abs_poc;

    /**
     * Buffer Id
     */
    WORD32     i4_buf_id;

} mv_buf_t;


/**
 * Reference set containing pointers to MV buf and pic buf
 */
typedef struct
{
    /** Picture count */
    WORD32    i4_pic_cnt;

    /** POC */
    WORD32    i4_poc;

    /** picture buffer */
    pic_buf_t *ps_pic_buf;

    /** mv buffer */
    mv_buf_t  *ps_mv_buf;

}ref_set_t;

typedef struct
{

    /**
     * Pointer to current PPS
     */
    pps_t *ps_pps;

    /**
     * Pointer to current SPS
     */
    sps_t *ps_sps;

    /**
     * Pointer to current slice header structure
     */
    slice_header_t *ps_slice_hdr;

    /**
     * MB's x position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_x;

    /**
     * MB's y position within a picture in raster scan in MB units
     */

    WORD32 i4_mb_y;

    /**
     * Current PU structure - set to MB enc_pu_t pointer at the start of MB processing and incremented
     * for every TU
     */
    enc_pu_t *ps_pu;

    /**
     * Pointer to frame level enc_pu_t for the current frame being parsed
     * where MVs and Intra pred modes will be updated
     */
    enc_pu_t *ps_pic_pu;

    /**
     *  Pointer to hold num PUs each MB in a picture
     */
    UWORD32 *pu4_mb_pu_cnt;

    /** PU Index map per MB. The indices in this map are w.r.t picture pu array and not
     * w.r.t MB pu array.
     * This will be used during mv prediction and since neighbors will have different MB pu map
     * it will be easier if they all have indices w.r.t picture level PU array rather than MB level
     * PU array.
     * pu1_pic_pu_map is map w.r.t MB's enc_pu_t array
     */
    UWORD32 *pu4_pic_pu_idx_map;

    /**
      * Pointer to pu_map for the current frame being parsed
      * where MVs and Intra pred modes will be updated
      */
     UWORD8 *pu1_pic_pu_map;

     /**
      *  PU count in current MB
      */
     WORD32 i4_mb_pu_cnt;

     /**
      *  PU count in current MB
      */
     WORD32 i4_mb_start_pu_idx;

     /**
      *  Top availability for current MB level
      */
     UWORD8 u1_top_mb_avail;

     /**
      *  Top right availability for current MB level
      */
     UWORD8 u1_top_rt_mb_avail;
     /**
      *  Top left availability for current MB level
      */
     UWORD8 u1_top_lt_mb_avail;
     /**
      *  left availability for current MB level
      */
     UWORD8 u1_left_mb_avail;

}mv_ctxt_t;

typedef struct
{
    /**
     * MB's x position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_x;

    /**
     * MB's y position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_y;

    /**
     * MB's x position within a Slice in raster scan in MB units
     */
    WORD32 i4_mb_slice_x;

    /**
     * MB's y position within a Slice in raster scan in MB units
     */
    WORD32 i4_mb_slice_y;

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

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

    /**
     *  Qp array stored for each mb
     */
    UWORD8  *pu1_pic_qp;

}bs_ctxt_t;

typedef struct
{
    /**
     * MB's x position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_x;

    /**
     * MB's y position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_y;

    /**
     * structure that contains BS and QP frame level arrays
     */
    bs_ctxt_t s_bs_ctxt;

    /**
     * Pointer to 0th luma pixel in current pic
     */
    UWORD8 *pu1_cur_pic_luma;

    /**
     * Pointer to 0th chroma pixel in current pic
     */
    UWORD8 *pu1_cur_pic_chroma;

    /**
     *  Points to the array of slice indices which is used to identify the slice
     *  to which each MB in a frame belongs.
     */
    UWORD8 *pu1_slice_idx;

}deblk_ctxt_t;


/**
 ******************************************************************************
 *  @brief      Structure to hold data and flags for 'n' mb processing for
 *                deblocking , padding and half pel generation.
 ******************************************************************************
 */
typedef struct
{
    /**
     * MB's x position last processed + 1
     */
    WORD32 i4_mb_x;

    /**
     * MB's y position ,current processing.
     */
    WORD32 i4_mb_y;

    /**
     * Number of MBs processed in a stretch
     */
    WORD32 i4_n_mbs;

}n_mb_process_ctxt_t;


/**
******************************************************************************
 *  @brief      Structure to hold coefficient info for a 4x4 subblock.
 *  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
******************************************************************************
 */
typedef struct
{
    /**
     * significant coefficient map and nnz are packed in
     * to msb (2 bytes) and lsb (2 bytes) respectively
     */
    WORD32  i4_sig_map_nnz;

    /**
     * array of non zero residue coefficients
     */
    WORD16  ai2_residue[16];

}tu_sblk_coeff_data_t;

/**
******************************************************************************
 *  @brief      Structure contains few common state variables such as MB indices,
 *  current SPS, PPS etc which are to be used in the entropy thread. By keeping
 *  it a different structure it is being explicitly signaled that these
 * variables are specific to entropy threads context and other threads should
 * not update these elements
******************************************************************************
 */
typedef struct
{
    /**
     * Pointer to the cabac context
     */
    cabac_ctxt_t *ps_cabac;

    /**
     * start of frame / start of slice flag
     */
    WORD32 i4_sof;

    /**
     * end of frame / end of slice flag
     */
    WORD32 i4_eof;

    /**
     * generate header upon request
     */
    WORD32 i4_gen_header;

    /**
     *  seq_parameter_set_id
     */
    UWORD32 u4_sps_id;

    /**
     * Pointer to base of sequence parameter set structure array
     */
    sps_t *ps_sps_base;

    /**
     *  pic_parameter_set_id
     */
    UWORD32 u4_pps_id;

    /**
     * Pointer to base of Picture parameter set structure array
     */
    pps_t *ps_pps_base;

    /**
     * Current slice idx
     */
    WORD32 i4_cur_slice_idx;

    /**
     * Points to the array of slice indices which is used to identify the independent slice
     * to which each MB in a frame belongs.
     */
    UWORD8 *pu1_slice_idx;

    /**
     * Pointer to base of slice header structure array
     */
    slice_header_t *ps_slice_hdr_base;

    /**
     * entropy status
     */
    UWORD8  *pu1_entropy_map;

    /**
     * MB's x position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_x;

    /**
     * MB's y position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_y;

    /**
     * MB start address
     */
    WORD32 i4_mb_cnt;

    /**
     * MB start address
     */
    WORD32 i4_mb_start_add;

    /**
     * MB end address
     */
    WORD32 i4_mb_end_add;

    /**
     * Input width in mbs
     */
    WORD32 i4_wd_mbs;

    /**
     * Input height in mbs
     */
    WORD32 i4_ht_mbs;

    /**
     * Bitstream structure
     */
    bitstrm_t *ps_bitstrm;

    /**
     *  transform_8x8_mode_flag
     */
    WORD8 i1_transform_8x8_mode_flag;

    /**
     *  entropy_coding_mode_flag
     */
    WORD8 u1_entropy_coding_mode_flag;

    /**
     * Pointer to the top row nnz for luma
     */
    UWORD8 (*pu1_top_nnz_luma)[4];

    /**
     * left nnz for luma
     */
    UWORD32 u4_left_nnz_luma;

    /**
     * Pointer to zero runs before for the mb
     */
    UWORD8  au1_zero_run[16];

    /**
     * Pointer to the top row nnz for chroma
     */
    UWORD8 (*pu1_top_nnz_cbcr)[4];

    /**
     * left nnz for chroma
     */
    UWORD8 u4_left_nnz_cbcr;

    /**
     * Pointer frame level mb subblock coeff data
     */
    void *pv_pic_mb_coeff_data;

    /**
     * Pointer to mb subblock coeff data and number of subblocks and scan idx
     * Incremented each time a coded subblock is processed
     */
    void *pv_mb_coeff_data;

    /**
     * Pointer frame level mb header data
     */
    void *pv_pic_mb_header_data;

    /**
     * Pointer to mb header data and
     * incremented each time a coded mb is encoded
     */
    void *pv_mb_header_data;

    /**
     * Error code during parse stage
     */
    IH264E_ERROR_T i4_error_code;

    /**
     * Void pointer to job context
     */
    void *pv_proc_jobq, *pv_entropy_jobq;

    /**
     * Flag to signal end of frame
     */
    WORD32 i4_end_of_frame;

    /**
     * Abs POC count of the frame
     */
     WORD32 i4_abs_pic_order_cnt;

     /**
      * mb skip run
      */
     WORD32 *pi4_mb_skip_run;

     /**
      * Flag to signal end of sequence
      */
     UWORD32 u4_is_last;

     /**
      * Lower 32bits of time-stamp corresponding to the buffer being encoded
      */
     UWORD32 u4_timestamp_low;

     /**
      * Upper 32bits of time-stamp corresponding to the buffer being encoded
      */
     UWORD32 u4_timestamp_high;

     /**
      * Current Picture count - used for synchronization
      */
     WORD32  i4_pic_cnt;

     /**
      * Number of bits consumed by header for I and P mb types
      */
     UWORD32 u4_header_bits[MAX_MB_TYPE];

     /**
      * Number of bits consumed by residue for I and P mb types
      */
     UWORD32 u4_residue_bits[MAX_MB_TYPE];

} entropy_ctxt_t;

/**
******************************************************************************
*  @brief      macro block info.
******************************************************************************
*/
typedef struct
{
    /**
     * mb type
     */
    UWORD16 u2_is_intra;

    /**
     * mb type
     */
    UWORD16 u2_mb_type;

    /**
     * csbp
     */
    UWORD32 u4_csbp;

    /**
     * mb distortion
     */
    WORD32 i4_mb_distortion;

}mb_info_t;

/**
******************************************************************************
*  @brief     mb_hdr structures to access first few common elements of above
* structures
******************************************************************************
*/

typedef struct
{
    /**
     * mb type and mode
     */
    UWORD8 u1_mb_type_mode;

    /**
     * CBP
     */
    UWORD8 u1_cbp;

    /**
     * MB qp delta
     */
    UWORD8 u1_mb_qp_delta;

    /**
     * Element to align structure to 2 byte boundary
     */
    UWORD8 u1_pad;
}mb_hdr_common_t;

/**
******************************************************************************
*  @brief      macro block info for I4x4 MB
******************************************************************************
*/
typedef struct
{
    /**
     * Common MB header params
     */
    mb_hdr_common_t common;

    /**
     * Sub block modes, 2 modes per byte
     */
    UWORD8 au1_sub_blk_modes[8];
}mb_hdr_i4x4_t;

/**
******************************************************************************
*  @brief      macro block info for I8x8 MB
******************************************************************************
*/
typedef struct
{
    /**
     * Common MB header params
     */
    mb_hdr_common_t common;


    /**
     * Sub block modes, 2 modes per byte
     */
    UWORD8 au1_sub_blk_modes[2];
}mb_hdr_i8x8_t;

/**
******************************************************************************
*  @brief      macro block info for I16x16 MB
******************************************************************************
*/
typedef struct
{
    /**
     * Common MB header params
     */
    mb_hdr_common_t common;

}mb_hdr_i16x16_t;

/**
******************************************************************************
*  @brief      macro block info for P16x16 MB
******************************************************************************
*/
typedef struct
{
    /**
     * Common MB header params
     */
    mb_hdr_common_t common;

    /**
     * MV
     */
    WORD16 ai2_mv[2];
}mb_hdr_p16x16_t;

/**
******************************************************************************
*  @brief      macro block info for PSKIP MB
******************************************************************************
*/
typedef struct
{
    /**
     * Common MB header params
     */
    mb_hdr_common_t common;

}mb_hdr_pskip_t;

/**
******************************************************************************
*  @brief      macro block info for B16x16 MB
******************************************************************************
*/
typedef struct
{
    /**
     * Common MB header params
     */
    mb_hdr_common_t common;


    /**
     * MV
     */
    WORD16 ai2_mv[2][2];
}mb_hdr_b16x16_t;

/**
******************************************************************************
*  @brief      macro block info for BDIRECT MB
******************************************************************************
*/
typedef struct
{
    /**
     * Common MB header params
     */
    mb_hdr_common_t common;

}mb_hdr_bdirect_t;

/**
******************************************************************************
*  @brief      macro block info for PSKIP MB
******************************************************************************
*/
typedef struct
{
    /**
     * Common MB header params
     */
    mb_hdr_common_t common;

}mb_hdr_bskip_t;

/**
******************************************************************************
*  @brief      Union of mb_hdr structures for size calculation
*  and to access first few common elements
******************************************************************************
*/

typedef union
{
    mb_hdr_i4x4_t       mb_hdr_i4x4;
    mb_hdr_i8x8_t       mb_hdr_i8x8;
    mb_hdr_i16x16_t     mb_hdr_i16x16;
    mb_hdr_p16x16_t     mb_hdr_p16x16;
    mb_hdr_pskip_t      mb_hdr_pskip;
    mb_hdr_b16x16_t     mb_hdr_b16x16;
    mb_hdr_bdirect_t    mb_hdr_bdirect;
    mb_hdr_bskip_t      mb_hdr_bskip;
}mb_hdr_t;
/**
******************************************************************************
*  @brief      structure presenting the neighbor availability of a mb
*  or subblk or any other partition
******************************************************************************
*/
typedef struct
{
    /**
     * left blk/subblk/partition
     */
    UWORD8 u1_mb_a;

    /**
     * top blk/subblk/partition
     */
    UWORD8 u1_mb_b;

    /**
     * topright blk/subblk/partition
     */
    UWORD8 u1_mb_c;

    /**
     * topleft blk/subblk/partition
     */
    UWORD8 u1_mb_d;

}block_neighbors_t;

/**
 ******************************************************************************
 *  @brief      MB info  related variables used during NMB processing
 ******************************************************************************
 */
typedef struct
{
    UWORD32 u4_mb_type;
    UWORD32 u4_min_sad;
    UWORD32 u4_min_sad_reached;
    WORD32  i4_mb_cost;
    WORD32  i4_mb_distortion;

    enc_pu_mv_t as_skip_mv[4];

    enc_pu_mv_t as_pred_mv[2];

    block_neighbors_t s_ngbr_avbl;

    /*
     * Buffer to hold best subpel buffer in each MB of NMB
     */
    UWORD8 *pu1_best_sub_pel_buf;

    /*
     * Stride for subpel buffer
     */
    UWORD32 u4_bst_spel_buf_strd;

}mb_info_nmb_t;

/**
 ******************************************************************************
 *  @brief      Pixel processing thread context
 ******************************************************************************
 */
struct _proc_t
{
    /**
     * entropy context
     */
    entropy_ctxt_t s_entropy;

    /**
     * me context
     */
    me_ctxt_t s_me_ctxt;

    /**
     * Pointer to codec context
     */
    codec_t *ps_codec;

    /**
     * N mb process contest
     */
    n_mb_process_ctxt_t s_n_mb_ctxt;

    /**
     * Source pointer to current MB luma
     */
    UWORD8 *pu1_src_buf_luma;

    /**
     * Source pointer to current MB chroma
     */
    UWORD8 *pu1_src_buf_chroma;

    /**
     * Recon pointer to current MB luma
     */
    UWORD8 *pu1_rec_buf_luma;

    /**
     * Recon pointer to current MB chroma
     */
    UWORD8 *pu1_rec_buf_chroma;

    /**
     * Ref pointer to current MB luma
     */
    UWORD8 *apu1_ref_buf_luma[MAX_REF_PIC_CNT];

    /**
     * Ref pointer to current MB chroma
     */
    UWORD8 *apu1_ref_buf_chroma[MAX_REF_PIC_CNT];

    /**
     * pointer to luma plane of input buffer (base :: mb (0,0))
     */
    UWORD8 *pu1_src_buf_luma_base;

    /**
     * pointer to luma plane of reconstructed buffer (base :: mb (0,0))
     */
    UWORD8 *pu1_rec_buf_luma_base;

    /**
     * pointer to luma plane of ref buffer (base :: mb (0,0))
     */
    UWORD8 *apu1_ref_buf_luma_base[MAX_REF_PIC_CNT];

    /**
     * pointer to  chroma plane of input buffer (base :: mb (0,0))
     */
    UWORD8 *pu1_src_buf_chroma_base;

    /*
     * Buffer for color space conversion of luma
     */
    UWORD8 *pu1_y_csc_buf;

    /*
     * Buffer for color space conversion of luma
     */

    UWORD8 *pu1_uv_csc_buf;

    /**
     * pointer to  chroma plane of reconstructed buffer (base :: mb (0,0))
     */
    UWORD8 *pu1_rec_buf_chroma_base;

    /**
     * pointer to  chroma plane of reconstructed buffer (base :: mb (0,0))
     */
    UWORD8 *apu1_ref_buf_chroma_base[MAX_REF_PIC_CNT];

    /**
     * Pointer to ME NMB info
     */
    mb_info_nmb_t *ps_nmb_info;

    mb_info_nmb_t *ps_cur_mb;

    /**
     * source luma stride
     */
    WORD32 i4_src_strd;

    /**
     * source chroma stride
     */
    WORD32 i4_src_chroma_strd;

    /**
     * recon stride & ref stride
     * (strides for luma and chroma are the same)
     */
    WORD32 i4_rec_strd;

    /**
     * Offset for half pel x plane from the pic buf
     */
    UWORD32 u4_half_x_offset;

    /**
     * Offset for half pel y plane from half x plane
     */
    UWORD32 u4_half_y_offset;

    /**
     * Offset for half pel xy plane from half y plane
     */
    UWORD32 u4_half_xy_offset;

    /**
     * pred buffer pointer (temp buffer 1)
     */
    UWORD8 *pu1_pred_mb;

    /**
     * pred buffer pointer (prediction buffer for intra 16x16
     */
    UWORD8 *pu1_pred_mb_intra_16x16;

    /**
     * pred buffer pointer (prediction buffer for intra 16x16_plane
     */
    UWORD8 *pu1_pred_mb_intra_16x16_plane;

    /**
     * pred buffer pointer (prediction buffer for intra chroma
     */
    UWORD8 *pu1_pred_mb_intra_chroma;

    /**
     * pred buffer pointer (prediction buffer for intra chroma plane
     */
    UWORD8 *pu1_pred_mb_intra_chroma_plane;

    /**
     * temp. reference buffer ptr for intra 4x4 when rdopt is on
     */
    UWORD8 *pu1_ref_mb_intra_4x4;

    /**
     * prediction buffer stride
     */
    WORD32 i4_pred_strd;

    /**
     * transform buffer pointer (temp buffer 2)
     */
    WORD16 *pi2_res_buf;

    /**
     * temp. transform buffer ptr for intra 4x4 when rdopt is on
     */
    WORD16 *pi2_res_buf_intra_4x4;

    /**
     * transform buffer stride
     */
    WORD32 i4_res_strd;

    /**
     * scratch buffer for inverse transform (temp buffer 3)
     */
    void *pv_scratch_buff;

    /**
     * frame num
     */
    WORD32 i4_frame_num;

    /**
     * start address of frame / sub-frame
     */
    WORD32 i4_frame_strt_add;

    /**
     *  IDR pic
     */
    UWORD32 u4_is_idr;

    /**
     *  idr_pic_id
     */
    UWORD32 u4_idr_pic_id;

    /**
     * Input width in mbs
     */
    WORD32 i4_wd_mbs;

    /**
     * Input height in mbs
     */
    WORD32 i4_ht_mbs;

    /**
     *  slice_type
     */
    WORD32  i4_slice_type;

    /**
     * Current slice idx
     */
    WORD32 i4_cur_slice_idx;

    /**
     * MB's x position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_x;

    /**
     * MB's y position within a picture in raster scan in MB units
     */
    WORD32 i4_mb_y;

    /**
     * MB's x position within a Slice in raster scan in MB units
     */
    WORD32 i4_mb_slice_x;

    /**
     * MB's y position within a Slice in raster scan in MB units
     */
    WORD32 i4_mb_slice_y;

    /**
     *  mb type
     */
    UWORD32 u4_mb_type;

    /**
     *  is intra
     */
    UWORD32 u4_is_intra;

    /**
     * mb neighbor availability pointer
     */
    block_neighbors_t *ps_ngbr_avbl;

    /**
     * lambda (lagrange multiplier for cost computation)
     */
    UWORD32 u4_lambda;

    /**
     * mb distortion
     */
    WORD32 i4_mb_distortion;

    /**
     * mb cost
     */
    WORD32 i4_mb_cost;

    /********************************************************************/
    /* i4_ngbr_avbl_mb_16 - ngbr avbl of curr mb                        */
    /* i4_ngbr_avbl_sb_8 - ngbr avbl of all 8x8 sub blocks of curr mb   */
    /* i4_ngbr_avbl_sb_4 - ngbr avbl of all 4x4 sub blocks of curr mb   */
    /* i4_ngbr_avbl_mb_c - chroma ngbr avbl of curr mb                  */
    /********************************************************************/
    WORD32  i4_ngbr_avbl_16x16_mb;
    WORD32  ai4_neighbor_avail_8x8_subblks[4];
    UWORD8  au1_ngbr_avbl_4x4_subblks[16];
    WORD32  i4_chroma_neighbor_avail_8x8_mb;

    /**
     * array to store the mode of mb sub blocks
     */
    UWORD8  au1_intra_luma_mb_4x4_modes[16];

    /**
     * array to store the predicted mode of mb sub blks
     */
    UWORD8  au1_predicted_intra_luma_mb_4x4_modes[16];

    /**
     * macro block intra 16x16 mode
     */
    UWORD8  u1_l_i16_mode;

    /**
     * array to store the mode of the macro block intra 8x8 4 modes
     */
    UWORD8  au1_intra_luma_mb_8x8_modes[4];

    /**
     * intra chroma mb mode
     */
    UWORD8  u1_c_i8_mode;

    /********************************************************************/
    /* array to store pixels from the neighborhood for intra prediction */
    /* i16 - 16 left pels + 1 top left pel + 16 top pels = 33 pels      */
    /* i8 - 8 lpels + 1 tlpels + 8 tpels + 8 tr pels = 25 pels          */
    /* i4 - 4 lpels + 1 tlpels + 4 tpels + 4 tr pels = 13 pels          */
    /* ic - 8 left pels + 1 top left pel + 8 top pels )*2               */
    /********************************************************************/
    UWORD8 au1_ngbr_pels[34];

    /**
     * array for 8x8 intra pels filtering (temp buff 4)
     */
    UWORD8 au1_neighbor_pels_i8x8_unfiltered[25];

    /**
     * Number of sub partitons in the inter pred MB
     */
    UWORD32 u4_num_sub_partitions;

    /**
     *  Pointer to hold num PUs each MB in a picture
     */
    UWORD32 *pu4_mb_pu_cnt;

    /**
     * Pointer to the array of structures having motion vectors, size
     *  and position of sub partitions
     */
    enc_pu_t *ps_pu;

    /**
     * Pointer to the pu of current co-located MB in list 1
     */
    enc_pu_t *ps_colpu;

    /**
     * predicted motion vector
     */
    enc_pu_mv_t *ps_skip_mv;

    /**
     * predicted motion vector
     */
    enc_pu_mv_t *ps_pred_mv;

    /**
     * top row mb syntax information base
     * In normal working scenarios, for a given context set,
     * the mb syntax info pointer is identical across all process threads.
     * But when the hard bound on slices are enabled, in multi core, frame
     * is partitioned in to sections equal to set number of cores and each
     * partition is run independently. In this scenario, a ctxt set will alone
     * appear to run multiple frames at a time. For this to occur, the common
     * pointers across the proc ctxt should disappear.
     *
     * This is done by allocating MAX_PROCESS_THREADS memory and distributing
     * across individual ctxts when byte bnd per slice is enabled.
     */
    mb_info_t *ps_top_row_mb_syntax_ele_base;

    /**
     * top row mb syntax information
     */
    mb_info_t *ps_top_row_mb_syntax_ele;

    /**
     * left mb syntax information
     */
    mb_info_t s_left_mb_syntax_ele;

    /**
     * top left mb syntax information
     */
    mb_info_t s_top_left_mb_syntax_ele;

    /**
     * top left mb syntax information
     */

    mb_info_t s_top_left_mb_syntax_ME;

    /**
     * left mb motion vector
     */
    enc_pu_t s_left_mb_pu_ME;

    /**
     * top left mb motion vector
     */
    enc_pu_t s_top_left_mb_pu_ME;

    /**
     * mb neighbor availability pointer
     */
    block_neighbors_t s_ngbr_avbl;

    /**
     * In case the macroblock type is intra, the intra modes of all
     * partitions for the left mb are stored in the array below
     */
    UWORD8 au1_left_mb_intra_modes[16];

    /**
     * In case the macroblock type is intra, the intra modes of all
     * partitions for the top mb are stored in the array below
     *
     * In normal working scenarios, for a given context set,
     * the mb syntax info pointer is identical across all process threads.
     * But when the hard bound on slices are enabled, in multi core, frame
     * is partitioned in to sections equal to set number of cores and each
     * partition is run independently. In this scenario, a ctxt set will alone
     * appear to run multiple frames at a time. For this to occur, the common
     * pointers across the proc ctxt should disappear.
     *
     * This is done by allocating MAX_PROCESS_THREADS memory and distributing
     * across individual ctxts when byte bnd per slice is enabled.
     */
    UWORD8 *pu1_top_mb_intra_modes_base;

    /**
     * In case the macroblock type is intra, the intra modes of all
     * partitions for the top mb are stored in the array below
     */
    UWORD8 *pu1_top_mb_intra_modes;

    /**
     * left mb motion vector
     */
    enc_pu_t s_left_mb_pu;

    /**
     * top left mb motion vector
     */
    enc_pu_t s_top_left_mb_pu;

    /**
     * top row motion vector info
     *
     * In normal working scenarios, for a given context set,
     * the top row pu pointer is identical across all process threads.
     * But when the hard bound on slices are enabled, in multi core, frame
     * is partitioned in to sections equal to set number of cores and each
     * partition is run independently. In this scenario, a ctxt set will alone
     * appear to run multiple frames at a time. For this to occur, the common
     * pointers across the proc ctxt should disappear.
     *
     * This is done by allocating MAX_PROCESS_THREADS memory and distributing
     * across individual ctxts when byte bnd per slice is enabled.
     */
    enc_pu_t *ps_top_row_pu_base;

    /**
     * top row motion vector info
     */
    enc_pu_t *ps_top_row_pu;

    enc_pu_t *ps_top_row_pu_ME;

    /**
     * coded block pattern
     */
    UWORD32 u4_cbp;

    /**
     * csbp
     */
    UWORD32 u4_csbp;

    /**
     *  number of non zero coeffs
     */
    UWORD32 au4_nnz[5];

    /**
     *  number of non zero coeffs for intra 4x4 when rdopt is on
     */
    UWORD32 au4_nnz_intra_4x4[4];

    /**
     * frame qp & mb qp
     */
    UWORD32 u4_frame_qp, u4_mb_qp;

    /**
     * mb qp previous
     */
    UWORD32 u4_mb_qp_prev;

    /**
     * quantization parameters for luma & chroma planes
     */
    quant_params_t *ps_qp_params[3];

    /**
     * Pointer frame level mb subblock coeff data
     */
    void *pv_pic_mb_coeff_data;

    /**
     * Pointer to mb subblock coeff data and number of subblocks and scan idx
     * Incremented each time a coded subblock is processed
     */
    void *pv_mb_coeff_data;

    /**
     * Pointer frame level mb header data
     */
    void *pv_pic_mb_header_data;

    /**
     * Pointer to mb header data and
     * incremented each time a coded mb is encoded
     */
    void *pv_mb_header_data;

    /**
     * Signal that pic_init is called first time
     */
    WORD32 i4_first_pic_init;

    /**
     * Current MV Bank's buffer ID
     */
    WORD32 i4_cur_mv_bank_buf_id;

    /**
     * Void pointer to job context
     */
    void *pv_proc_jobq, *pv_entropy_jobq;

    /**
     * Number of MBs to be processed in the current Job
     */
    WORD32 i4_mb_cnt;

    /**
     * ID for the current context - Used for debugging
     */
    WORD32 i4_id;

    /**
     * Pointer to current picture buffer structure
     */
    pic_buf_t *ps_cur_pic;

    /**
     * Pointer to current picture's mv buffer structure
     */
    mv_buf_t *ps_cur_mv_buf;

    /**
     * Flag to indicate if ps_proc was initialized at least once in a frame.
     * This is needed to handle cases where a core starts to handle format
     * conversion jobs directly
     */
    WORD32 i4_init_done;

    /**
     * Process status: one byte per MB
     */
    UWORD8 *pu1_proc_map;

    /**
     * Deblk status: one byte per MB
     */
    UWORD8 *pu1_deblk_map;

    /**
     * Process status: one byte per MB
     */
    UWORD8 *pu1_me_map;

    /*
     * Intra refresh mask.
     * Indicates if an Mb is coded in intra mode within the current AIR interval
     * NOTE Refreshes after each AIR period
     * NOTE The map is shared between process
     */
    UWORD8 *pu1_is_intra_coded;

    /**
     * Disable deblock level (0: Enable completely, 3: Disable completely
     */
    UWORD32 u4_disable_deblock_level;

    /**
     * Pointer to the structure that contains deblock context
     */
    deblk_ctxt_t s_deblk_ctxt;

    /**
     * Points to the array of slice indices which is used to identify the independent
     * slice to which each MB in a frame belongs.
     */
    UWORD8 *pu1_slice_idx;

    /**
     * Pointer to base of slice header structure array
     */
    slice_header_t *ps_slice_hdr_base;

    /**
     * Number of mb's to process in one loop
     */
    WORD32 i4_nmb_ntrpy;

    /**
     * Number of mb's to process in one loop
     */
    UWORD32 u4_nmb_me;

    /**
     * Structure for current input buffer
     */
    inp_buf_t s_inp_buf;

    /**
     * api call cnt
     */
    WORD32 i4_encode_api_call_cnt;

    /**
     * Current Picture count - used for synchronization
     */
    WORD32 i4_pic_cnt;

    /**
      * Intermediate buffer for interpred leaf level functions
      */
    WORD32 ai16_pred1[HP_BUFF_WD * HP_BUFF_HT];

    /**
     * Reference picture for the current picture
     * TODO: Only 2 reference assumed currently
     */
    pic_buf_t *aps_ref_pic[MAX_REF_PIC_CNT];

    /**
     * Reference MV buff for the current picture
     */
    mv_buf_t *aps_mv_buf[MAX_REF_PIC_CNT];

    /**
     * frame info used by RC
     */
    frame_info_t s_frame_info;

    /*
     * NOTE NOT PERSISTANT INSIDE FUNCTIONS
     * Min sad for current MB
     * will be populated initially
     * Once a sad less than eq to u4_min_sad is reached, the value will be copied to the cariable
     */
    UWORD32  u4_min_sad;

    /*
     * indicates weather we have rached minimum sa or not
     */
    UWORD32 u4_min_sad_reached;

    /**
     * Current error code
     */
    WORD32 i4_error_code;

    /*
     * Enables or disables computation of recon
     */
    UWORD32 u4_compute_recon;

    /*
     * Temporary buffers to be used for subpel computation
     */
    UWORD8 *apu1_subpel_buffs[SUBPEL_BUFF_CNT];

    /*
     * Buffer holding best sub pel values
     */
    UWORD8 *pu1_best_subpel_buf;

    /*
     * Stride for buffer holding best sub pel
     */
    UWORD32 u4_bst_spel_buf_strd;

};

/**
 ******************************************************************************
 *  @brief      Rate control related variables
 ******************************************************************************
 */
typedef struct
{
    void *pps_rate_control_api;

    void *pps_frame_time;

    void *pps_time_stamp;

    void *pps_pd_frm_rate;

    /**
     * frame rate pull down
     */
    WORD32 pre_encode_skip[MAX_CTXT_SETS];

    /**
     * skip frame (cbr)
     */
    WORD32 post_encode_skip[MAX_CTXT_SETS];

    /**
     * rate control type
     */
    rc_type_e e_rc_type;

    /**
     * pic type
     */
    picture_type_e e_pic_type;

    /**
     * intra cnt in previous frame
     */
    WORD32 num_intra_in_prev_frame;

    /**
     * avg activity of prev frame
     */
    WORD32 i4_avg_activity;

}rate_control_ctxt_t;

/**
 * Codec context
 */
struct _codec_t
{
    /**
     * Id of current pic (input order)
     */
    WORD32 i4_poc;

    /**
     * Number of encode frame API calls made
     * This variable must only be used for context selection [Read only]
     */
    WORD32 i4_encode_api_call_cnt;

    /**
     * Number of pictures encoded
     */
    WORD32 i4_pic_cnt;

    /**
     * Number of threads created
     */
    WORD32 i4_proc_thread_cnt;

    /**
     * Mutex used to keep the control calls thread-safe
     */
    void *pv_ctl_mutex;

    /**
     * Current active config parameters
     */
    cfg_params_t s_cfg;

    /**
     * Array containing the config parameter sets
     */
    cfg_params_t as_cfg[MAX_ACTIVE_CONFIG_PARAMS];

    /**
     * Color format used by encoder internally
     */
    IV_COLOR_FORMAT_T e_codec_color_format;

    /**
     * recon stride
     * (strides for luma and chroma are the same)
     */
    WORD32 i4_rec_strd;

    /**
     * Flag to enable/disable deblocking of a frame
     */
    WORD32 i4_disable_deblk_pic;

    /**
     * Number of continuous frames where deblocking was disabled
     */
    WORD32 i4_disable_deblk_pic_cnt;

    /**
     * frame type
     */
    PIC_TYPE_T pic_type;

    /**
     * frame qp
     */
    UWORD32 u4_frame_qp;

    /**
     * frame num
     */
    WORD32 i4_frame_num;

    /**
     *  slice_type
     */
    WORD32  i4_slice_type;

    /*
     * Force current frame to specific type
     */
    IV_PICTURE_CODING_TYPE_T force_curr_frame_type;

    /**
     *  IDR pic
     */
    UWORD32 u4_is_idr;

    /**
     *  idr_pic_id
     */
    WORD32 i4_idr_pic_id;

    /**
     * Flush mode
     */
    WORD32 i4_flush_mode;

    /**
     * Encode header mode
     */
    WORD32 i4_header_mode;

    /**
     * Flag to indicate if header has already
     * been generated when i4_api_call_cnt 0
     */
    UWORD32 u4_header_generated;

    /**
     * Encode generate header
     */
    WORD32 i4_gen_header;

    /**
     * To signal successful completion of init
     */
    WORD32 i4_init_done;

    /**
     * To signal that at least one picture was decoded
     */
    WORD32 i4_first_pic_done;

    /**
     * Reset flag - Codec is reset if this flag is set
     */
    WORD32 i4_reset_flag;

    /**
     * Current error code
     */
    WORD32 i4_error_code;

    /**
     * threshold residue
     */
    WORD32 u4_thres_resi;

    /**
     * disable intra inter gating
     */
    UWORD32 u4_inter_gate;

    /**
     * Holds mem records passed during init.
     * This will be used to return the mem records during retrieve call
     */
    iv_mem_rec_t *ps_mem_rec_backup;

    /**
     * Flag to determine if the entropy thread is active
     */
    volatile UWORD32 au4_entropy_thread_active[MAX_CTXT_SETS];

    /**
     * Mutex used to keep the entropy calls thread-safe
     */
    void *pv_entropy_mutex;

    /**
     * Job queue buffer base
     */
    void *pv_proc_jobq_buf, *pv_entropy_jobq_buf;

    /**
     * Job Queue mem tab size
     */
    WORD32 i4_proc_jobq_buf_size, i4_entropy_jobq_buf_size;

    /**
     * Memory for MV Bank buffer manager
     */
    void *pv_mv_buf_mgr_base;

    /**
     * MV Bank buffer manager
     */
    void *pv_mv_buf_mgr;

    /**
     * Pointer to MV Buf structure array
     */
    void *ps_mv_buf;

    /**
     * Base address for Motion Vector bank buffer
     */
    void *pv_mv_bank_buf_base;

    /**
     * MV Bank size allocated
     */
    WORD32 i4_total_mv_bank_size;

    /**
     * Memory for Picture buffer manager for reference pictures
     */
    void *pv_ref_buf_mgr_base;

    /**
     * Picture buffer manager for reference pictures
     */
    void *pv_ref_buf_mgr;

    /**
     * Number of reference buffers added to the buffer manager
     */
    WORD32 i4_ref_buf_cnt;

    /**
     * Pointer to Pic Buf structure array
     */
    void *ps_pic_buf;

    /**
     * Base address for Picture buffer
     */
    void *pv_pic_buf_base;

    /**
     * Total pic buffer size allocated
     */
    WORD32 i4_total_pic_buf_size;

    /**
     * Memory for Buffer manager for output buffers
     */
     void *pv_out_buf_mgr_base;

    /**
     * Buffer manager for output buffers
     */
     void *pv_out_buf_mgr;

    /**
     * Current output buffer's buffer ID
     */
    WORD32 i4_out_buf_id;

    /**
     * Number of output buffers added to the buffer manager
     */
    WORD32 i4_out_buf_cnt;

    /**
     * Memory for Picture buffer manager for input buffers
     */
     void *pv_inp_buf_mgr_base;

    /**
     * Picture buffer manager for input buffers
     */
     void *pv_inp_buf_mgr;

    /**
     * Current input buffer's buffer ID
     */
    WORD32 i4_inp_buf_id;

    /**
     * Number of input buffers added to the buffer manager
     */
    WORD32 i4_inp_buf_cnt;

    /**
     * Current input buffer
     */
    pic_buf_t *ps_inp_buf;

    /**
     * Pointer to dpb manager structure
     */
    void *pv_dpb_mgr;

    /**
     * Pointer to base of Sequence parameter set structure array
     */
    sps_t *ps_sps_base;

    /**
     * Pointer to base of Picture parameter set structure array
     */
    pps_t *ps_pps_base;

    /**
     *  seq_parameter_set_id
     */
    WORD32 i4_sps_id;

    /**
     *  pic_parameter_set_id
     */
    WORD32 i4_pps_id;

    /**
     * Pointer to base of slice header structure array
     */
    slice_header_t *ps_slice_hdr_base;

    /**
     * packed residue coeff data size for 1 row of mbs
     */
    UWORD32 u4_size_coeff_data;

    /**
     * packed header data size for 1 row of mbs
     */
    UWORD32 u4_size_header_data;

    /**
     * Processing context - One for each processing thread
     * Create two sets, each set used for alternate frames
     */
    process_ctxt_t as_process[MAX_PROCESS_CTXT];

    /**
     * Thread handle for each of the processing threads
     */
    void *apv_proc_thread_handle[MAX_PROCESS_THREADS];

    /**
     * Thread created flag for each of the processing threads
     */
    WORD32 ai4_process_thread_created[MAX_PROCESS_THREADS];

    /**
     * Void pointer to process job context
     */
    void *pv_proc_jobq, *pv_entropy_jobq;

    /**
     * Number of MBs processed together for better instruction cache handling
     */
    WORD32 i4_proc_nmb;

    /**
     * Previous POC lsb
     */
    WORD32 i4_prev_poc_lsb;

    /**
     * Previous POC msb
     */
    WORD32 i4_prev_poc_msb;

    /**
     * Max POC lsb that has arrived till now
     */
    WORD32 i4_max_prev_poc_lsb;

    /**
     * Context for format conversion
     */
    fmt_conv_t s_fmt_conv;

    /**
     * Absolute pic order count
     */
    WORD32 i4_abs_pic_order_cnt;

    /**
     *  Pic order count of lsb
     */
    WORD32 i4_pic_order_cnt_lsb;

    /**
     * Array giving current picture being processed in each context set
     */
    WORD32 ai4_pic_cnt[MAX_CTXT_SETS];

    /*
     * Min sad to search for
     */
    UWORD32 u4_min_sad;

    /**
     * Reference picture set
     */
    ref_set_t as_ref_set[MAX_DPB_SIZE + MAX_CTXT_SETS];


    /*
     * Air pic cnt
     * Contains the number of pictures that have been encoded with air
     * This value is moudulo air refresh period
     */
    WORD32 i4_air_pic_cnt;

    /*
     * Intra refresh map
     * Stores the frames at which intra refresh should occur for a MB
     */
    UWORD16 *pu2_intr_rfrsh_map;

    /*
     * Indicates if the current frame is used as a reference frame
     */
    UWORD32 u4_is_curr_frm_ref;

    /*
     * Indicates if there can be non reference frames in the stream
     */
    WORD32 i4_non_ref_frames_in_stream;

    /*
     * Memory for color space conversion for luma plane
     */
    UWORD8 *pu1_y_csc_buf_base;

    /*
     * Memory for color space conversion foe chroma plane
     */
    UWORD8 *pu1_uv_csc_buf_base;

    /**
     * Function pointers for intra pred leaf level functions luma
     */
    pf_intra_pred apf_intra_pred_16_l[MAX_I16x16];
    pf_intra_pred apf_intra_pred_8_l[MAX_I8x8];
    pf_intra_pred apf_intra_pred_4_l[MAX_I4x4];

    /**
     * Function pointers for intra pred leaf level functions chroma
     */
    pf_intra_pred apf_intra_pred_c[MAX_CH_I8x8];

    /**
     * luma core coding function pointer
     */
    UWORD8 (*luma_energy_compaction[4])(process_ctxt_t *ps_proc);

    /**
     * chroma core coding function pointer
     */
    UWORD8 (*chroma_energy_compaction[2])(process_ctxt_t *ps_proc);

    /**
     * forward transform for intra blk of mb type 16x16
     */
    ih264_luma_16x16_resi_trans_dctrans_quant_ft *pf_resi_trans_dctrans_quant_16x16;

    /**
     * inverse transform for intra blk of mb type 16x16
     */
    ih264_luma_16x16_idctrans_iquant_itrans_recon_ft *pf_idctrans_iquant_itrans_recon_16x16;

    /**
     * forward transform for 4x4 blk luma
     */
    ih264_resi_trans_quant_ft *pf_resi_trans_quant_4x4;

    /**
     * forward transform for 4x4 blk luma
     */
    ih264_resi_trans_quant_ft *pf_resi_trans_quant_chroma_4x4;

    /*
     * hadamard transform and quant for a 4x4 block
     */
    ih264_hadamard_quant_ft *pf_hadamard_quant_4x4;

    /*
     *  hadamard transform and quant for a 4x4 block
     */
    ih264_hadamard_quant_ft *pf_hadamard_quant_2x2_uv;

    /**
     * inverse transform for 4x4 blk
     */
    ih264_iquant_itrans_recon_ft *pf_iquant_itrans_recon_4x4;

    /**
     * inverse transform for chroma 4x4 blk
     */
    ih264_iquant_itrans_recon_chroma_ft *pf_iquant_itrans_recon_chroma_4x4;

    /**
     * inverse transform for 4x4 blk with only single dc coeff
     */
    ih264_iquant_itrans_recon_ft *pf_iquant_itrans_recon_4x4_dc;

    /**
     * inverse transform for chroma 4x4 blk with only single dc coeff
     */
    ih264_iquant_itrans_recon_chroma_ft *pf_iquant_itrans_recon_chroma_4x4_dc;

    /*
     * Inverse hadamard transform and iquant for a 4x4 block
     */
    ih264_ihadamard_scaling_ft *pf_ihadamard_scaling_4x4;

    /*
     * Inverse hadamard transform and iquant for a 4x4 block
     */
    ih264_ihadamard_scaling_ft *pf_ihadamard_scaling_2x2_uv;

    /*
     * Function for interleave copy*
     */
    ih264_interleave_copy_ft *pf_interleave_copy;

    /**
     * forward transform for 8x8 blk
     */
    ih264_resi_trans_quant_ft *pf_resi_trans_quant_8x8;

    /**
     * inverse transform for 8x8 blk
     */
    /**
     * inverse transform for 4x4 blk
     */
    ih264_iquant_itrans_recon_ft *pf_iquant_itrans_recon_8x8;

    /**
     * forward transform for chroma MB
     */
    ih264_chroma_8x8_resi_trans_dctrans_quant_ft *pf_resi_trans_dctrans_quant_8x8_chroma;

    /**
     * inverse transform for chroma MB
     */
    ih264_idctrans_iquant_itrans_recon_ft *pf_idctrans_iquant_itrans_recon_8x8_chroma;

    /**
     * deblock vertical luma edge with blocking strength 4
     */
    ih264_deblk_edge_bs4_ft *pf_deblk_luma_vert_bs4;

    /**
     * deblock vertical chroma edge with blocking strength 4
     */
    ih264_deblk_chroma_edge_bs4_ft *pf_deblk_chroma_vert_bs4;

    /**
     * deblock vertical luma edge with blocking strength less than 4
     */
    ih264_deblk_edge_bslt4_ft *pf_deblk_luma_vert_bslt4;

    /**
     * deblock vertical chroma edge with blocking strength less than 4
     */
    ih264_deblk_chroma_edge_bslt4_ft *pf_deblk_chroma_vert_bslt4;

    /**
     * deblock horizontal luma edge with blocking strength 4
     */
    ih264_deblk_edge_bs4_ft *pf_deblk_luma_horz_bs4;

    /**
     * deblock horizontal chroma edge with blocking strength 4
     */
    ih264_deblk_chroma_edge_bs4_ft *pf_deblk_chroma_horz_bs4;

    /**
     * deblock horizontal luma edge with blocking strength less than 4
     */
    ih264_deblk_edge_bslt4_ft *pf_deblk_luma_horz_bslt4;

    /**
     * deblock horizontal chroma edge with blocking strength less than 4
     */
    ih264_deblk_chroma_edge_bslt4_ft *pf_deblk_chroma_horz_bslt4;


    /**
     * functions for padding
     */
    pf_pad pf_pad_top;
    pf_pad pf_pad_bottom;
    pf_pad pf_pad_left_luma;
    pf_pad pf_pad_left_chroma;
    pf_pad pf_pad_right_luma;
    pf_pad pf_pad_right_chroma;

    /**
     * Inter pred leaf level functions
     */
    ih264_inter_pred_luma_ft    *pf_inter_pred_luma_copy;
    ih264_inter_pred_luma_ft    *pf_inter_pred_luma_horz;
    ih264_inter_pred_luma_ft    *pf_inter_pred_luma_vert;
    pf_inter_pred_luma_bilinear  pf_inter_pred_luma_bilinear;
    ih264_inter_pred_chroma_ft  *pf_inter_pred_chroma;

    /**
     * fn ptrs for compute sad routines
     */
    ime_compute_sad_ft *apf_compute_sad_16x16[2];
    ime_compute_sad_ft *pf_compute_sad_16x8;


    /**
     * Function pointer for computing ME
     * 1 for PSLICE and 1 for BSLICE
     */
    ih264e_compute_me_ft *apf_compute_me[2];

    /**
     * Function pointers for computing SKIP parameters
     */
    ih264e_skip_params_ft *apf_find_skip_params_me[2];

    /**
     * fn ptrs for memory handling operations
     */
    pf_memcpy pf_mem_cpy;
    pf_memset pf_mem_set;
    pf_memcpy_mul8 pf_mem_cpy_mul8;
    pf_memset_mul8 pf_mem_set_mul8;

    /**
     * intra mode eval -encoder level function
     */
    pf_evaluate_intra_modes pf_ih264e_evaluate_intra16x16_modes;
    pf_evaluate_intra_modes pf_ih264e_evaluate_intra_chroma_modes;
    pf_evaluate_intra_4x4_modes pf_ih264e_evaluate_intra_4x4_modes;

    /* Half pel generation function - encoder level
     *
     */
    pf_sixtapfilter_horz pf_ih264e_sixtapfilter_horz;
    pf_sixtap_filter_2dvh_vert pf_ih264e_sixtap_filter_2dvh_vert;

    /**
     * color space conversion from YUV 420P to YUV 420Sp
     */
    pf_fmt_conv_420p_to_420sp pf_ih264e_conv_420p_to_420sp;


    /**
     * color space conversion from YUV 420P to YUV 420Sp
     */
    pf_fmt_conv_422ile_to_420sp pf_ih264e_fmt_conv_422i_to_420sp;

    /**
     * write mb layer for a given slice I, P, B
     */
    IH264E_ERROR_T (*pf_write_mb_syntax_layer[2][3]) ( entropy_ctxt_t *ps_ent_ctxt );

    /**
     * Output buffer
     */
    out_buf_t as_out_buf[MAX_CTXT_SETS];

    /**
     * recon buffer
     */
    rec_buf_t as_rec_buf[MAX_CTXT_SETS];

    /**
     * rate control context
     */
    rate_control_ctxt_t s_rate_control;

    /**
     * input buffer queue
     */
    inp_buf_t as_inp_list[MAX_NUM_INP_FRAMES];

    /**
     * Flag to indicate if any IDR requests are pending
     */
    WORD32 i4_pending_idr_flag;

    /**
    *Flag to indicate if we have recived the last input frame
    */
    WORD32 i4_last_inp_buff_received;

    /**
     * backup sei params for comparison
     */
    sei_params_t s_sei;

};

#endif /* IH264E_STRUCTS_H_ */
