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

typedef struct _codec_t codec_t;
typedef struct _proc_t process_ctxt_t;

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

    /** SEI SII params flag                                              */
    UWORD8                                  u1_sei_sii_params_present_flag;

    /** SEI SII params info                                              */
    sei_sii_params_t                        s_sei_sii;

}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 recon                                        */
    UWORD32                                     u4_enable_recon;

    /** Flag to enable/disable quality metrics                              */
    UWORD32                                     u4_enable_quality_metrics;

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


/**
 *****************************************************************************
 * @brief  Structure to store psnr of the sequence
 *****************************************************************************
 */
typedef struct  {
    UWORD64 total_sse[3];
    double global_psnr[3];  // total_sse / total_samples
    double total_psnr[3];   // sum (per_frame_sse / per_frame_samples)
    double avg_psnr[3];     // total_psnr / total_frames
    UWORD32 total_samples[3];
    WORD32 total_frames;
} quality_stats_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
{
    /** Per pic PSNR */
    quality_stats_t s_pic_quality_stats;

    /** 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;
    WORD32 i4_mb_intra_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;

    /**
     * frame num backup (used in post enc skip case)
     */
    WORD32 i4_restore_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];

    /**
     * Structure for global PSNR
     */
    quality_stats_t s_global_quality_stats;

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

    /*
     * Intra MB Cost Map
     * Stores the intra cost of all mb of a frame
     */
    WORD32 *pi4_mb_intra_cost;

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