/******************************************************************************
 *
 * 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 Name         : ih264e.h                                    */
/*                                                                           */
/*  Description       : This file contains all the necessary structure and   */
/*                      enumeration definitions needed for the Application   */
/*                      Program Interface(API) of the Ittiam MPEG4        */
/*                      Encoder on Cortex A8 - Neon platform                 */
/*                                                                           */
/*  List of Functions : ih264e_api_function                              */
/*                                                                           */
/*  Issues / Problems : None                                                 */
/*                                                                           */
/*  Revision History  :                                                      */
/*                                                                           */
/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
/*         26 08 2010   100239(RCY)     Draft                                */
/*                                                                           */
/*****************************************************************************/

#ifndef _IH264E_H_
#define _IH264E_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "iv2.h"
#include "ive2.h"
/*****************************************************************************/
/* API Function Prototype                                                    */
/*****************************************************************************/
IV_STATUS_T ih264e_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op);

/*****************************************************************************/
/* Enums                                                                     */
/*****************************************************************************/
typedef enum
{
    IH264E_CMD_CTL_SET_ME_INFO_ENABLE,
}IH264E_CMD_CTL_SUB_CMDS;


/*****************************************************************************/
/* Extended Structures                                                       */
/*****************************************************************************/

/*****************************************************************************/
/*  Get Number of Memory Records                                             */
/*****************************************************************************/


typedef struct
{
    iv_num_mem_rec_ip_t                    s_ive_ip;
}ih264e_num_mem_rec_ip_t;


typedef struct
{
    iv_num_mem_rec_op_t                    s_ive_op;
}ih264e_num_mem_rec_op_t;


/*****************************************************************************/
/*  Fill Memory Records                                                      */
/*****************************************************************************/


typedef struct
{
    iv_fill_mem_rec_ip_t                   s_ive_ip;
}ih264e_fill_mem_rec_ip_t;


typedef struct
{
    iv_fill_mem_rec_op_t                   s_ive_op;
}ih264e_fill_mem_rec_op_t;

/*****************************************************************************/
/*  Retrieve Memory Records                                                  */
/*****************************************************************************/


typedef struct
{
    iv_retrieve_mem_rec_ip_t               s_ive_ip;
}ih264e_retrieve_mem_rec_ip_t;


typedef struct
{
    iv_retrieve_mem_rec_op_t               s_ive_op;
}ih264e_retrieve_mem_rec_op_t;


/*****************************************************************************/
/*   Initialize encoder                                                      */
/*****************************************************************************/

typedef struct
{
    ive_init_ip_t                           s_ive_ip;
}ih264e_init_ip_t;


typedef struct
{
    ive_init_op_t                           s_ive_op;
}ih264e_init_op_t;


/*****************************************************************************/
/*   Queue Input raw buffer - Send the YUV buffer to be encoded              */
/*****************************************************************************/
typedef struct
{
    ive_queue_inp_ip_t                      s_ive_ip;
}ih264e_queue_inp_ip_t;

typedef struct
{
    ive_queue_inp_op_t                      s_ive_op;
}ih264e_queue_inp_op_t;

/*****************************************************************************/
/*   Dequeue Input raw buffer - Get free YUV buffer from the encoder         */
/*****************************************************************************/
typedef struct
{
    ive_dequeue_inp_ip_t                      s_ive_ip;
}ih264e_dequeue_inp_ip_t;

typedef struct
{
    ive_dequeue_inp_op_t                      s_ive_op;
}ih264e_dequeue_inp_op_t;


/*****************************************************************************/
/*   Queue Output bitstream buffer - Send the bistream buffer to be filled   */
/*****************************************************************************/
typedef struct
{
    ive_queue_out_ip_t                      s_ive_ip;
}ih264e_queue_out_ip_t;

typedef struct
{
    ive_queue_out_op_t                      s_ive_op;
}ih264e_queue_out_op_t;

/*****************************************************************************/
/* Dequeue Output bitstream buffer - Get the bistream buffer filled          */
/*****************************************************************************/
typedef struct
{
    ive_dequeue_out_ip_t                      s_ive_ip;
}ih264e_dequeue_out_ip_t;

typedef struct
{
    ive_dequeue_out_op_t                      s_ive_op;
}ih264e_dequeue_out_op_t;


/*****************************************************************************/
/* Get Recon data - Get the reconstructed data from encoder                  */
/*****************************************************************************/
typedef struct
{
    ive_get_recon_ip_t                        s_ive_ip;
}ih264e_get_recon_ip_t;

typedef struct
{
    ive_get_recon_op_t                        s_ive_op;
}ih264e_get_recon_op_t;
/*****************************************************************************/
/*   Video control  Flush                                                    */
/*****************************************************************************/


typedef struct
{
    ive_ctl_flush_ip_t                      s_ive_ip;
}ih264e_ctl_flush_ip_t;


typedef struct
{
    ive_ctl_flush_op_t                      s_ive_op;
}ih264e_ctl_flush_op_t;

/*****************************************************************************/
/*   Video control reset                                                     */
/*****************************************************************************/


typedef struct
{
    ive_ctl_reset_ip_t                      s_ive_ip;
}ih264e_ctl_reset_ip_t;


typedef struct
{
    ive_ctl_reset_op_t                      s_ive_op;
}ih264e_ctl_reset_op_t;


/*****************************************************************************/
/*   Video control:Get Buf Info                                              */
/*****************************************************************************/


typedef struct
{
    ive_ctl_getbufinfo_ip_t             s_ive_ip;
}ih264e_ctl_getbufinfo_ip_t;



typedef struct
{
    ive_ctl_getbufinfo_op_t             s_ive_op;
}ih264e_ctl_getbufinfo_op_t;



/*****************************************************************************/
/*   Video control:Get Version Info                                          */
/*****************************************************************************/


typedef struct
{
    ive_ctl_getversioninfo_ip_t         s_ive_ip;
}ih264e_ctl_getversioninfo_ip_t;



typedef struct
{
    ive_ctl_getversioninfo_op_t         s_ive_op;
}ih264e_ctl_getversioninfo_op_t;

/*****************************************************************************/
/*   Video control:Set default params                                       */
/*****************************************************************************/


typedef struct
{
    ive_ctl_setdefault_ip_t         s_ive_ip;
}ih264e_ctl_setdefault_ip_t;



typedef struct
{
    ive_ctl_setdefault_op_t         s_ive_op;
}ih264e_ctl_setdefault_op_t;

/*****************************************************************************/
/*   Video control  Set IPE params                                           */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_ipe_params_ip_t     s_ive_ip;
}ih264e_ctl_set_ipe_params_ip_t;

typedef struct
{
    ive_ctl_set_ipe_params_op_t     s_ive_op;
}ih264e_ctl_set_ipe_params_op_t;

/*****************************************************************************/
/*   Video control  Set Frame dimensions                                     */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_dimensions_ip_t     s_ive_ip;
}ih264e_ctl_set_dimensions_ip_t;

typedef struct
{
    ive_ctl_set_dimensions_op_t     s_ive_op;
}ih264e_ctl_set_dimensions_op_t;

/*****************************************************************************/
/*   Video control  Set Frame rates                                          */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_frame_rate_ip_t     s_ive_ip;
}ih264e_ctl_set_frame_rate_ip_t;
typedef struct
{
    ive_ctl_set_frame_rate_op_t     s_ive_op;
}ih264e_ctl_set_frame_rate_op_t;


/*****************************************************************************/
/*   Video control  Set Bitrate                                              */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_bitrate_ip_t        s_ive_ip;
}ih264e_ctl_set_bitrate_ip_t;

typedef struct
{
    ive_ctl_set_bitrate_op_t        s_ive_op;
}ih264e_ctl_set_bitrate_op_t;


/*****************************************************************************/
/*   Video control  Set Frame type                                           */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_frame_type_ip_t     s_ive_ip;
}ih264e_ctl_set_frame_type_ip_t;

typedef struct
{
    ive_ctl_set_frame_type_op_t     s_ive_op;
}ih264e_ctl_set_frame_type_op_t;

/*****************************************************************************/
/*   Video control  Set Encode mode                                          */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_enc_mode_ip_t       s_ive_ip;
}ih264e_ctl_set_enc_mode_ip_t;

typedef struct
{
    ive_ctl_set_enc_mode_op_t       s_ive_op;
}ih264e_ctl_set_enc_mode_op_t;

/*****************************************************************************/
/*   Video control  Set QP                                                   */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_qp_ip_t             s_ive_ip;
}ih264e_ctl_set_qp_ip_t;

typedef struct
{
    ive_ctl_set_qp_op_t             s_ive_op;
}ih264e_ctl_set_qp_op_t;

/*****************************************************************************/
/*   Video control  Set AIR params                                           */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_air_params_ip_t     s_ive_ip;
}ih264e_ctl_set_air_params_ip_t;

typedef struct
{
    ive_ctl_set_air_params_op_t     s_ive_op;
}ih264e_ctl_set_air_params_op_t;

/*****************************************************************************/
/*   Video control  Set VBV params                                           */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_vbv_params_ip_t     s_ive_ip;
}ih264e_ctl_set_vbv_params_ip_t;

typedef struct
{
    ive_ctl_set_vbv_params_op_t     s_ive_op;
}ih264e_ctl_set_vbv_params_op_t;

/*****************************************************************************/
/*   Video control  Set Processor Details                                    */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_num_cores_ip_t      s_ive_ip;
}ih264e_ctl_set_num_cores_ip_t;

typedef struct
{
    ive_ctl_set_num_cores_op_t      s_ive_op;
}ih264e_ctl_set_num_cores_op_t;

/*****************************************************************************/
/*   Video control  Set Motion estimation params                             */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_me_params_ip_t      s_ive_ip;
}ih264e_ctl_set_me_params_ip_t;

typedef struct
{
    ive_ctl_set_me_params_op_t      s_ive_op;
}ih264e_ctl_set_me_params_op_t;

/*****************************************************************************/
/*   Video control  Set GOP params                                           */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_gop_params_ip_t     s_ive_ip;
}ih264e_ctl_set_gop_params_ip_t;

typedef struct
{
    ive_ctl_set_gop_params_op_t     s_ive_op;
}ih264e_ctl_set_gop_params_op_t;

/*****************************************************************************/
/*   Video control  Set Deblock params                                       */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_deblock_params_ip_t s_ive_ip;
}ih264e_ctl_set_deblock_params_ip_t;

typedef struct
{
    ive_ctl_set_deblock_params_op_t s_ive_op;
}ih264e_ctl_set_deblock_params_op_t;

/*****************************************************************************/
/*   Video control  Set Profile params                                       */
/*****************************************************************************/
typedef struct
{
    ive_ctl_set_profile_params_ip_t s_ive_ip;
}ih264e_ctl_set_profile_params_ip_t;

typedef struct
{
    ive_ctl_set_profile_params_op_t s_ive_op;
}ih264e_ctl_set_profile_params_op_t;

/*****************************************************************************/
/*   Synchronous video encode call                                           */
/*****************************************************************************/
typedef struct
{
    ive_video_encode_ip_t s_ive_ip;
}ih264e_video_encode_ip_t;

typedef struct
{
    ive_video_encode_op_t s_ive_op;
}ih264e_video_encode_op_t;


/*****************************************************************************/
/*   Video usability information                                             */
/*****************************************************************************/
typedef struct
{
    /** size of the structure  */
    UWORD32                                     u4_size;

    /** Command type : IVE_CMD_VIDEO_CTL  */
    IVE_API_COMMAND_TYPE_T                      e_cmd;

    /** Sub command type : IVE_CMD_CTL_SET_GOP_PARAMS */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** indicates the presence of aspect_ratio */
    UWORD8                                      u1_aspect_ratio_info_present_flag;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}ih264e_vui_ip_t;

typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

    /** Return error code                                               */
    UWORD32                                     u4_error_code;
}ih264e_vui_op_t;

/*****************************************************************************/
/*    Video control  Set SEI MDCV params                                     */
/*****************************************************************************/
typedef struct
{
    /** size of the structure                                             */
    UWORD32                                     u4_size;

    /** Command type : IVE_CMD_VIDEO_CTL                                  */
    IVE_API_COMMAND_TYPE_T                      e_cmd;

    /** Sub command type : IVE_CMD_CTL_SET_SEI_MDCV_PARAMS                */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** mastering display color volume info present flag                  */
    UWORD8                                      u1_sei_mdcv_params_present_flag;

    /** Array to store the display_primaries_x values                     */
    UWORD16                                     au2_display_primaries_x[3];

    /** Array to store the display_primaries_y values                     */
    UWORD16                                     au2_display_primaries_y[3];

    /** Variable to store the white point x value                         */
    UWORD16                                     u2_white_point_x;

    /** Variable to store the white point y value                         */
    UWORD16                                     u2_white_point_y;

    /** Variable to store the max display mastering luminance value       */
    UWORD32                                     u4_max_display_mastering_luminance;

    /** Variable to store the min display mastering luminance value       */
    UWORD32                                     u4_min_display_mastering_luminance;

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

}ih264e_ctl_set_sei_mdcv_params_ip_t;

typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

    /** Return error code                                               */
    UWORD32                                     u4_error_code;

}ih264e_ctl_set_sei_mdcv_params_op_t;

/*****************************************************************************/
/*    Video control  Set SEI CLL params                                      */
/*****************************************************************************/
typedef struct
{
    /** size of the structure                                             */
    UWORD32                                     u4_size;

    /** Command type : IVE_CMD_VIDEO_CTL                                  */
    IVE_API_COMMAND_TYPE_T                      e_cmd;

    /** Sub command type : IVE_CMD_CTL_SET_SEI_CLL_PARAMS                 */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** content light level info present flag                             */
    UWORD8                                      u1_sei_cll_params_present_flag;

    /** The maximum pixel intensity of all samples                        */
    UWORD16                                     u2_max_content_light_level;

    /** The average pixel intensity of all samples                        */
    UWORD16                                     u2_max_pic_average_light_level;

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

}ih264e_ctl_set_sei_cll_params_ip_t;

typedef struct
{
    /** size of the structure                                             */
    UWORD32                                     u4_size;

    /** Return error code                                                 */
    UWORD32                                     u4_error_code;

}ih264e_ctl_set_sei_cll_params_op_t;

/*****************************************************************************/
/*    Video control  Set SEI AVE params                                      */
/*****************************************************************************/
typedef struct
{
    /** size of the structure                                             */
    UWORD32                                     u4_size;

    /** Command type : IVE_CMD_VIDEO_CTL                                  */
    IVE_API_COMMAND_TYPE_T                      e_cmd;

    /** Sub command type : IVE_CMD_CTL_SET_SEI_AVE_PARAMS                 */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** ambient viewing environment info present flag                     */
    UWORD8                                      u1_sei_ave_params_present_flag;

    /** specifies the environmental illluminance of the ambient viewing
     * environment                                                        */
    UWORD32                                     u4_ambient_illuminance;

    /** specify the normalized x chromaticity coordinates of the
     * environmental ambient light in the nominal viewing environment     */
    UWORD16                                     u2_ambient_light_x;

    /** specify the normalized y chromaticity coordinates of the
     * environmental ambient light in the nominal viewing environment     */
    UWORD16                                     u2_ambient_light_y;

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

}ih264e_ctl_set_sei_ave_params_ip_t;

typedef struct
{
    /** size of the structure                                             */
    UWORD32                                     u4_size;

    /** Return error code                                                 */
    UWORD32                                     u4_error_code;

}ih264e_ctl_set_sei_ave_params_op_t;

/*****************************************************************************/
/*    Video control  Set SEI CCV params                                      */
/*****************************************************************************/
typedef struct
{
    /** size of the structure                                             */
    UWORD32                                     u4_size;

    /** Command type : IVE_CMD_VIDEO_CTL                                  */
    IVE_API_COMMAND_TYPE_T                      e_cmd;

    /** Sub command type : IVE_CMD_CTL_SET_SEI_CCV_PARAMS                 */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** content color volume info present flag                            */
    UWORD8                                      u1_sei_ccv_params_present_flag;

    /** Flag used to control persistence of CCV SEI messages              */
    UWORD8                                      u1_ccv_cancel_flag;

    /** specifies the persistence of the CCV SEI message for the
     * current layer                                                      */
    UWORD8                                      u1_ccv_persistence_flag;

    /** specifies the presence of syntax elements ccv_primaries_x
     * and ccv_primaries_y                                                */
    UWORD8                                      u1_ccv_primaries_present_flag;

    /** specifies that the syntax element ccv_min_luminance_value
     * is present                                                         */
    UWORD8                                      u1_ccv_min_luminance_value_present_flag;

    /** specifies that the syntax element ccv_max_luminance_value
     *  is present                                                        */
    UWORD8                                      u1_ccv_max_luminance_value_present_flag;

    /** specifies that the syntax element ccv_avg_luminance_value
     *  is present                                                        */
    UWORD8                                      u1_ccv_avg_luminance_value_present_flag;

    /** shall be equal to 0 in bitstreams conforming to this version.
     * Other values for reserved_zero_2bits are reserved for future use   */
    UWORD8                                      u1_ccv_reserved_zero_2bits;

    /** specify the normalized x chromaticity coordinates of the colour
     * primary component c of the nominal content colour volume           */
    WORD32                                      ai4_ccv_primaries_x[3];

    /** specify the normalized y chromaticity coordinates of the colour
     * primary component c of the nominal content colour volume           */
    WORD32                                      ai4_ccv_primaries_y[3];

    /** specifies the normalized minimum luminance value                  */
    UWORD32                                     u4_ccv_min_luminance_value;

    /** specifies the normalized maximum luminance value                  */
    UWORD32                                     u4_ccv_max_luminance_value;

    /** specifies the normalized average luminance value                  */
    UWORD32                                     u4_ccv_avg_luminance_value;

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

}ih264e_ctl_set_sei_ccv_params_ip_t;

typedef struct
{
    /** size of the structure                                             */
    UWORD32                                     u4_size;

    /** Return error code                                                 */
    UWORD32                                     u4_error_code;

}ih264e_ctl_set_sei_ccv_params_op_t;


/* The enum values should not have greater than 8 bits as this is assigned to WORD8 */
typedef enum
{
    INTRA16x16 = 0,
    INTRA4x4,
    INTER16x16
}IV_MB_TYPE_T;

/*****************************************************************************/
/*   Pic info structures                                                     */
/*****************************************************************************/
typedef struct
{
    /** Qp  */
    UWORD32                                     u4_qp;

    /** Pic Type */
    IV_PICTURE_CODING_TYPE_T                    e_frame_type;

}ih264e_pic_info1_t;

typedef struct
{
    /** Qp  */
    UWORD32                                     u4_qp;

    /** Pic Type */
    IV_PICTURE_CODING_TYPE_T                    e_frame_type;

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

}ih264e_pic_info2_t;


/*****************************************************************************/
/*   MB info structures                                                     */
/*****************************************************************************/
typedef struct
{
    /** MV X    */
    WORD16                                  i2_mv_x;

    /** MV Y    */
    WORD16                                  i2_mv_y;
}ih264e_mv_t;

typedef struct
{
    /** Intra / Inter    */
    WORD8                                       i1_mb_type;
    union
    {
        ih264e_mv_t                                 as_mv[1];

        /** Intra mode */
        WORD8                                       ai1_intra_mode[1];
    };
}ih264e_mb_info1_t;

typedef struct
{
    /** Intra / Inter    */
    WORD8                                       i1_mb_type;


    /** SAD     */
    UWORD16                                     u2_sad;

    union
    {
        ih264e_mv_t                                 as_mv[1];

        /** Intra mode */
        WORD8                                       ai1_intra_mode[1];
    };


}ih264e_mb_info2_t;

typedef struct
{
    /** Intra / Inter    */
    WORD8                                       i1_mb_type;

    union
    {
        ih264e_mv_t                                 as_mv[4];

        /** Intra mode */
        WORD8                                       ai1_intra_mode[16];
    };

}ih264e_mb_info3_t;

typedef struct
{
    /** Intra / Inter    */
    WORD8                                       i1_mb_type;

    /** Intra Mode      */
    WORD8                                       i1_intra_mode;

    /** SAD     */
    UWORD16                                     u2_sad;

    union
    {
        ih264e_mv_t                                 as_mv[16];

        /** Intra mode */
        WORD8                                       ai1_intra_mode[16];
    };



}ih264e_mb_info4_t;

/* Add any new structures to the following union. It is used to calculate the max size needed for allocation of memory */
typedef struct
{
    union
    {
        ih264e_mb_info1_t               s_mb_info1;
        ih264e_mb_info2_t               s_mb_info2;
        ih264e_mb_info3_t               s_mb_info3;
        ih264e_mb_info4_t               s_mb_info4;
    };
}ih264e_mb_info_t;

#ifdef __cplusplus
} /* closing brace for extern "C" */
#endif
#endif /* _IH264E_H_ */
