/******************************************************************************
 *
 * 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
*  ive2.h
*
* @brief
* This file contains all the necessary structure and  enumeration
* definitions needed for the Application  Program Interface(API) of the
* Ittiam Video Encoders  This is version 2
*
* @author
* Ittiam
*
* @par List of Functions:
*
* @remarks
* None
*
*******************************************************************************
*/

#ifndef _IVE2_H_
#define _IVE2_H_

/*****************************************************************************/
/* Constant Macros                                                           */
/*****************************************************************************/

/** Maximum number of components in I/O Buffers                             */
#define IVE_MAX_IO_BUFFER_COMPONENTS   4

/** Maximum number of reference pictures                                    */
#define IVE_MAX_REF 16

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

/** Slice modes */
typedef enum
{
    IVE_SLICE_MODE_NA           = 0x7FFFFFFF,
    IVE_SLICE_MODE_NONE         = 0x0,

    IVE_SLICE_MODE_BYTES        = 0x1,
    IVE_SLICE_MODE_BLOCKS       = 0x2,
}IVE_SLICE_MODE_T;

/** Adaptive Intra refresh modes */
typedef enum
{
    IVE_AIR_MODE_NA             = 0x7FFFFFFF,
    IVE_AIR_MODE_NONE           = 0x0,
    IVE_AIR_MODE_CYCLIC         = 0x1,
    IVE_AIR_MODE_RANDOM         = 0x2,
    IVE_AIR_MODE_DISTORTION     = 0x3,
}IVE_AIR_MODE_T;

/** Rate control modes   */
typedef enum
{
  IVE_RC_NA                     = 0x7FFFFFFF,
  IVE_RC_NONE                   = 0x0,
  IVE_RC_STORAGE                = 0x1,
  IVE_RC_CBR_NON_LOW_DELAY      = 0x2,
  IVE_RC_CBR_LOW_DELAY          = 0x3,
  IVE_RC_TWOPASS                = 0x4,
  IVE_RC_RATECONTROLPRESET_DEFAULT = IVE_RC_STORAGE
}IVE_RC_MODE_T;

/** Encoder mode */
typedef enum
{
    IVE_ENC_MODE_NA                          = 0x7FFFFFFF,
    IVE_ENC_MODE_HEADER                      = 0x1,
    IVE_ENC_MODE_PICTURE                     = 0x0,
    IVE_ENC_MODE_DEFAULT                     = IVE_ENC_MODE_PICTURE,
}IVE_ENC_MODE_T;

/** Speed Config */
typedef enum IVE_SPEED_CONFIG
{
  IVE_QUALITY_DUMMY                         = 0x7FFFFFFF,
  IVE_CONFIG                                = 0,
  IVE_SLOWEST                               = 1,
  IVE_NORMAL                                = 2,
  IVE_FAST                                  = 3,
  IVE_HIGH_SPEED                            = 4,
  IVE_FASTEST                               = 5,
}IVE_SPEED_CONFIG;

/** API command type                                   */
typedef enum
{
    IVE_CMD_VIDEO_NA                          = 0x7FFFFFFF,
    IVE_CMD_VIDEO_CTL                         = IV_CMD_EXTENSIONS + 1,
    IVE_CMD_VIDEO_ENCODE,
    IVE_CMD_QUEUE_INPUT,
    IVE_CMD_DEQUEUE_INPUT,
    IVE_CMD_QUEUE_OUTPUT,
    IVE_CMD_DEQUEUE_OUTPUT,
    IVE_CMD_GET_RECON,
}IVE_API_COMMAND_TYPE_T;

/** Video Control API command type            */
typedef enum
{
    IVE_CMD_CT_NA                           = 0x7FFFFFFF,
    IVE_CMD_CTL_SETDEFAULT                  = 0x0,
    IVE_CMD_CTL_SET_DIMENSIONS              = 0x1,
    IVE_CMD_CTL_SET_FRAMERATE               = 0x2,
    IVE_CMD_CTL_SET_BITRATE                 = 0x3,
    IVE_CMD_CTL_SET_FRAMETYPE               = 0x4,
    IVE_CMD_CTL_SET_QP                      = 0x5,
    IVE_CMD_CTL_SET_ENC_MODE                = 0x6,
    IVE_CMD_CTL_SET_VBV_PARAMS              = 0x7,
    IVE_CMD_CTL_SET_AIR_PARAMS              = 0x8,
    IVE_CMD_CTL_SET_ME_PARAMS               = 0X9,
    IVE_CMD_CTL_SET_GOP_PARAMS              = 0XA,
    IVE_CMD_CTL_SET_PROFILE_PARAMS          = 0XB,
    IVE_CMD_CTL_SET_DEBLOCK_PARAMS          = 0XC,
    IVE_CMD_CTL_SET_IPE_PARAMS              = 0XD,
    IVE_CMD_CTL_SET_VUI_PARAMS              = 0XE,
    IVE_CMD_CTL_SET_NUM_CORES               = 0x30,
    IVE_CMD_CTL_RESET                       = 0xA0,
    IVE_CMD_CTL_FLUSH                       = 0xB0,
    IVE_CMD_CTL_GETBUFINFO                  = 0xC0,
    IVE_CMD_CTL_GETVERSION                  = 0xC1,
    IVE_CMD_CTL_CODEC_SUBCMD_START          = 0x100,
}IVE_CONTROL_API_COMMAND_TYPE_T;

/* IVE_ERROR_BITS_T: A UWORD32 container will be used for reporting the error*/
/* code to the application. The first 8 bits starting from LSB have been     */
/* reserved for the codec to report internal error details. The rest of the  */
/* bits will be generic for all video encoders and each bit has an associated*/
/* meaning as mentioned below. The unused bit fields are reserved for future */
/* extenstions and will be zero in the current implementation                */
typedef enum {

    /* Bit 8 - Unsupported input parameter or configuration.                 */
    IVE_UNSUPPORTEDPARAM                        = 0x8,

    /* Bit 9 - Fatal error (stop the codec).If there is an                  */
    /* error and this bit is not set, the error is a recoverable one.       */
    IVE_FATALERROR                              = 0x9,

    IVE_ERROR_BITS_T_DUMMY_ELEMENT              = 0x7FFFFFFF
}IVE_ERROR_BITS_T;

/* IVE_ERROR_CODES_T: The list of error codes depicting the possible error  */
/* scenarios that can be encountered while encoding                         */
typedef enum
{

    IVE_ERR_NA                                                  = 0x7FFFFFFF,
    IVE_ERR_NONE                                                = 0x00,
    IVE_ERR_INVALID_API_CMD                                     = 0x01,
    IVE_ERR_INVALID_API_SUB_CMD                                 = 0x02,
    IVE_ERR_IP_GET_MEM_REC_API_STRUCT_SIZE_INCORRECT            = 0x03,
    IVE_ERR_OP_GET_MEM_REC_API_STRUCT_SIZE_INCORRECT            = 0x04,
    IVE_ERR_IP_FILL_MEM_REC_API_STRUCT_SIZE_INCORRECT           = 0x05,
    IVE_ERR_OP_FILL_MEM_REC_API_STRUCT_SIZE_INCORRECT           = 0x06,
    IVE_ERR_IP_INIT_API_STRUCT_SIZE_INCORRECT                   = 0x07,
    IVE_ERR_OP_INIT_API_STRUCT_SIZE_INCORRECT                   = 0x08,
    IVE_ERR_IP_RETRIEVE_MEM_REC_API_STRUCT_SIZE_INCORRECT       = 0x09,
    IVE_ERR_OP_RETRIEVE_MEM_REC_API_STRUCT_SIZE_INCORRECT       = 0x0A,
    IVE_ERR_IP_ENCODE_API_STRUCT_SIZE_INCORRECT                 = 0x0B,
    IVE_ERR_OP_ENCODE_API_STRUCT_SIZE_INCORRECT                 = 0x0C,
    IVE_ERR_IP_CTL_SETDEF_API_STRUCT_SIZE_INCORRECT             = 0x0D,
    IVE_ERR_OP_CTL_SETDEF_API_STRUCT_SIZE_INCORRECT             = 0x0E,
    IVE_ERR_IP_CTL_GETBUFINFO_API_STRUCT_SIZE_INCORRECT         = 0x0F,
    IVE_ERR_OP_CTL_GETBUFINFO_API_STRUCT_SIZE_INCORRECT         = 0x10,
    IVE_ERR_IP_CTL_GETVERSION_API_STRUCT_SIZE_INCORRECT         = 0x11,
    IVE_ERR_OP_CTL_GETVERSION_API_STRUCT_SIZE_INCORRECT         = 0x12,
    IVE_ERR_IP_CTL_FLUSH_API_STRUCT_SIZE_INCORRECT              = 0x13,
    IVE_ERR_OP_CTL_FLUSH_API_STRUCT_SIZE_INCORRECT              = 0x14,
    IVE_ERR_IP_CTL_RESET_API_STRUCT_SIZE_INCORRECT              = 0x15,
    IVE_ERR_OP_CTL_RESET_API_STRUCT_SIZE_INCORRECT              = 0x16,
    IVE_ERR_IP_CTL_SETCORES_API_STRUCT_SIZE_INCORRECT           = 0x17,
    IVE_ERR_OP_CTL_SETCORES_API_STRUCT_SIZE_INCORRECT           = 0x18,
    IVE_ERR_IP_CTL_SETDIM_API_STRUCT_SIZE_INCORRECT             = 0x19,
    IVE_ERR_OP_CTL_SETDIM_API_STRUCT_SIZE_INCORRECT             = 0x1A,
    IVE_ERR_IP_CTL_SETFRAMERATE_API_STRUCT_SIZE_INCORRECT       = 0x1B,
    IVE_ERR_OP_CTL_SETFRAMERATE_API_STRUCT_SIZE_INCORRECT       = 0x1C,
    IVE_ERR_IP_CTL_SETBITRATE_API_STRUCT_SIZE_INCORRECT         = 0x1D,
    IVE_ERR_OP_CTL_SETBITRATE_API_STRUCT_SIZE_INCORRECT         = 0x1E,
    IVE_ERR_IP_CTL_SETFRAMETYPE_API_STRUCT_SIZE_INCORRECT       = 0x1F,
    IVE_ERR_OP_CTL_SETFRAMETYPE_API_STRUCT_SIZE_INCORRECT       = 0x20,
    IVE_ERR_IP_CTL_SETMEPARAMS_API_STRUCT_SIZE_INCORRECT        = 0x21,
    IVE_ERR_OP_CTL_SETMEPARAMS_API_STRUCT_SIZE_INCORRECT        = 0x22,
    IVE_ERR_IP_CTL_SETIPEPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x23,
    IVE_ERR_OP_CTL_SETIPEPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x24,
    IVE_ERR_IP_CTL_SETGOPPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x25,
    IVE_ERR_OP_CTL_SETGOPPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x26,
    IVE_ERR_IP_CTL_SETDEBLKPARAMS_API_STRUCT_SIZE_INCORRECT     = 0x27,
    IVE_ERR_OP_CTL_SETDEBLKPARAMS_API_STRUCT_SIZE_INCORRECT     = 0x28,
    IVE_ERR_IP_CTL_SETQPPARAMS_API_STRUCT_SIZE_INCORRECT        = 0x29,
    IVE_ERR_OP_CTL_SETQPPARAMS_API_STRUCT_SIZE_INCORRECT        = 0x2A,
    IVE_ERR_FILL_NUM_MEM_RECS_POINTER_NULL                      = 0x2B,
    IVE_ERR_NUM_MEM_REC_NOT_SUFFICIENT                          = 0x2C,
    IVE_ERR_MEM_REC_STRUCT_SIZE_INCORRECT                       = 0x2D,
    IVE_ERR_MEM_REC_BASE_POINTER_NULL                           = 0x2E,
    IVE_ERR_MEM_REC_OVERLAP_ERR                                 = 0x2F,
    IVE_ERR_MEM_REC_INSUFFICIENT_SIZE                           = 0x30,
    IVE_ERR_MEM_REC_ALIGNMENT_ERR                               = 0x31,
    IVE_ERR_MEM_REC_INCORRECT_TYPE                              = 0x32,
    IVE_ERR_HANDLE_NULL                                         = 0x33,
    IVE_ERR_HANDLE_STRUCT_SIZE_INCORRECT                        = 0x34,
    IVE_ERR_API_FUNCTION_PTR_NULL                               = 0x35,
    IVE_ERR_INVALID_CODEC_HANDLE                                = 0x36,
    IVE_ERR_CTL_GET_VERSION_BUFFER_IS_NULL                      = 0x37,
    IVE_ERR_IP_CTL_SETAIRPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x38,
    IVE_ERR_OP_CTL_SETAIRPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x39,
    IVE_ERR_IP_CTL_SETENCMODE_API_STRUCT_SIZE_INCORRECT         = 0x3A,
    IVE_ERR_OP_CTL_SETENCMODE_API_STRUCT_SIZE_INCORRECT         = 0x3B,
    IVE_ERR_IP_CTL_SETVBVPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x3C,
    IVE_ERR_OP_CTL_SETVBVPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x3D,
    IVE_ERR_IP_CTL_SETPROFILE_API_STRUCT_SIZE_INCORRECT         = 0x3E,
    IVE_ERR_OP_CTL_SETPROFILE_API_STRUCT_SIZE_INCORRECT         = 0x3F,
    IVE_ERR_IP_CTL_SET_VUI_STRUCT_SIZE_INCORRECT                = 0x40,
    IVE_ERR_OP_CTL_SET_VUI_STRUCT_SIZE_INCORRECT                = 0x41,
}IVE_ERROR_CODES_T;


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

/** Input structure : Initialize the encoder                                */
typedef struct
{
    /** size of the structure                                               */
    UWORD32                                 u4_size;

    /** Command type                                                        */
    IV_API_COMMAND_TYPE_T                   e_cmd;

    /** Number of memory records                                            */
    UWORD32                                 u4_num_mem_rec;

    /** pointer to array of memrecords structures should be filled by codec
    with details of memory resource requirements                            */
    iv_mem_rec_t                            *ps_mem_rec;

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

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

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

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

    /** Maximum level supported                                             */
    UWORD32                                 u4_max_level;

    /** Input color format                                                  */
    IV_COLOR_FORMAT_T                       e_inp_color_fmt;

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

    /** Recon color format                                                  */
    IV_COLOR_FORMAT_T                       e_recon_color_fmt;

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


}ive_init_ip_t;

/** Output structure : Initialize the encoder                           */
typedef struct
{
    /** Size of the structure                                           */
    UWORD32                                 u4_size;

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


/*****************************************************************************/
/*   Video Encode - Deprecated                                               */
/*****************************************************************************/

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

    IVE_API_COMMAND_TYPE_T                  e_cmd;

    /** Descriptor for input raw buffer                                 */
    iv_raw_buf_t                            s_inp_buf;

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

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

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

    /** Lower 32bits of input time stamp                                */
    UWORD32                                 u4_timestamp_low;

    /** Upper 32bits of input time stamp                                */
    UWORD32                                 u4_timestamp_high;

    /** Flag to indicate if this is the last input in the stream       */
    UWORD32                                 u4_is_last;

    /** Descriptor for output bit-stream buffer                         */
    iv_bits_buf_t                           s_out_buf;

    /** Descriptor for recon buffer                                     */
    iv_raw_buf_t                            s_recon_buf;

}ive_video_encode_ip_t;


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

    /** error code                                                      */
    UWORD32                                 u4_error_code;

    /* Output present                                                   */
    WORD32                                  output_present;

    /* dump recon                                                       */
    WORD32                                  dump_recon;

    /* encoded frame type                                               */
    UWORD32                                 u4_encoded_frame_type;

    /** Flag to indicate if this is the last output from the encoder    */
    UWORD32                                 u4_is_last;

    /** Lower 32bits of input time stamp                                */
    UWORD32                                 u4_timestamp_low;

    /** Upper 32bits of input time stamp                                */
    UWORD32                                 u4_timestamp_high;

    /** Descriptor for input raw buffer freed from codec                */
    iv_raw_buf_t                            s_inp_buf;

    /** Descriptor for output bit-stream buffer                         */
    iv_bits_buf_t                           s_out_buf;

    /** Descriptor for recon buffer                                     */
    iv_raw_buf_t                            s_recon_buf;

}ive_video_encode_op_t;

/*****************************************************************************/
/*   Queue Input raw buffer - Send the YUV buffer to be encoded              */
/*****************************************************************************/
/** Input structure : Queue input buffer to the encoder                 */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                 u4_size;

    /** Command : IVE_CMD_QUEUE_INPUT                                   */
    IVE_API_COMMAND_TYPE_T                  e_cmd;

    /** Descriptor for input raw buffer                                 */
    iv_raw_buf_t                            s_inp_buf;

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

    /** Lower 32bits of input time stamp                                */
    UWORD32                                 u4_timestamp_low;

    /** Upper 32bits of input time stamp                                */
    UWORD32                                 u4_timestamp_high;


    /** Flag to enable/disable blocking the current API call            */
    UWORD32                                 u4_is_blocking;

    /** Flag to indicate if this is the last input in the stream       */
    UWORD32                                 u4_is_last;

}ive_queue_inp_ip_t;

/** Input structure : Queue output buffer to the encoder                */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                 u4_size;

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

/*****************************************************************************/
/*   Dequeue Input raw buffer - Get free YUV buffer from the encoder         */
/*****************************************************************************/
/** Input structure : Dequeue input buffer from the encoder             */

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

    /** Command: IVE_CMD_DEQUEUE_INPUT                                  */
    IVE_API_COMMAND_TYPE_T                  e_cmd;

    /** Flag to enable/disable blocking the current API call            */
    UWORD32                                 u4_is_blocking;

}ive_dequeue_inp_ip_t;

/** Output structure : Dequeue input buffer from the encoder            */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                 u4_size;

    /** Return error code                                               */
    UWORD32                                 u4_error_code;

    /** Buffer descriptor of the buffer returned from encoder           */
    iv_raw_buf_t                            s_inp_buf;

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

    /** Lower 32bits of input time stamp                                */
    UWORD32                                 u4_timestamp_low;

    /** Upper 32bits of input time stamp                                */
    UWORD32                                 u4_timestamp_high;

    /** Flag to indicate if this is the last input in the stream       */
    UWORD32                                 u4_is_last;


}ive_dequeue_inp_op_t;

/*****************************************************************************/
/*   Queue Output bitstream buffer - Send the bistream buffer to be filled   */
/*****************************************************************************/
/** Input structure : Queue output buffer to the encoder                 */

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

    /** Command : IVE_CMD_QUEUE_OUTPUT                                  */
    IVE_API_COMMAND_TYPE_T                  e_cmd;

    /** Descriptor for output bit-stream buffer                         */
    iv_bits_buf_t                           s_out_buf;

    /** Flag to enable/disable blocking the current API call            */
    UWORD32                                 u4_is_blocking;

    /** Flag to indicate if this is the last output in the stream       */
    UWORD32                                 u4_is_last;

}ive_queue_out_ip_t;

/** Output structure : Queue output buffer to the encoder               */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                 u4_size;

    /** Return error code                                               */
    UWORD32                                 u4_error_code;

}ive_queue_out_op_t;


/*****************************************************************************/
/* Dequeue Output bitstream buffer - Get the bistream buffer filled          */
/*****************************************************************************/
/** Input structure : Dequeue output buffer from the encoder            */

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

    /** Command : IVE_CMD_DEQUEUE_OUTPUT                                */
    IVE_API_COMMAND_TYPE_T                  e_cmd;

    /** Flag to enable/disable blocking the current API call            */
    UWORD32                                 u4_is_blocking;
}ive_dequeue_out_ip_t;

/** Output structure : Dequeue output buffer from the encoder           */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                 u4_size;

    /** Return error code                                               */
    UWORD32                                 u4_error_code;

    /** Descriptor for output bit-stream buffer                         */
    iv_bits_buf_t                           s_out_buf;

    /** Lower 32bits of timestamp corresponding to this buffer           */
    UWORD32                                 u4_timestamp_low;

    /** Upper 32bits of timestamp corresponding to this buffer           */
    UWORD32                                 u4_timestamp_high;

    /** Flag to indicate if this is the last output in the stream       */
    UWORD32                                 u4_is_last;

}ive_dequeue_out_op_t;

/*****************************************************************************/
/* Get Recon data - Get the reconstructed data from encoder                  */
/*****************************************************************************/
/** Input structure : Get recon data from the encoder                   */

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

    /** Command : IVE_CMD_GET_RECON                                     */
    IVE_API_COMMAND_TYPE_T                  e_cmd;

    /** Flag to enable/disable blocking the current API call            */
    UWORD32                                 u4_is_blocking;

    /** Descriptor for recon buffer                                     */
    iv_raw_buf_t                            s_recon_buf;

    /** Flag to indicate if this is the last recon in the stream       */
    UWORD32                                 u4_is_last;

}ive_get_recon_ip_t;

/** Output structure : Get recon data from the encoder                  */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                 u4_size;

    /** Return error code                                               */
    UWORD32                                 u4_error_code;

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

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

    /** Flag to indicate if this is the last recon in the stream       */
    UWORD32                                 u4_is_last;

}ive_get_recon_op_t;

/*****************************************************************************/
/*   Video control  Flush                                                    */
/*****************************************************************************/

/** Input structure : Flush all the buffers from the encoder            */
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_FLUSH                            */
    IVE_CONTROL_API_COMMAND_TYPE_T          e_sub_cmd;
}ive_ctl_flush_ip_t;

/** Output structure : Flush all the buffers from the encoder           */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                 u4_size;

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

/*****************************************************************************/
/*   Video control reset                                                     */
/*****************************************************************************/
/** Input structure : Reset the encoder                                 */
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_RESET                            */
    IVE_CONTROL_API_COMMAND_TYPE_T          e_sub_cmd;
}ive_ctl_reset_ip_t;

/** Output structure : Reset the encoder                                */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                 u4_size;

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

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

/** Input structure : Get encoder buffer requirements                   */
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_GETBUFINFO                       */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

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

    /** Input color format                                                  */
    IV_COLOR_FORMAT_T                           e_inp_color_fmt;

}ive_ctl_getbufinfo_ip_t;

/** Output structure : Get encoder buffer requirements                  */
typedef struct
{
    /** size of the structure                                           */
    UWORD32 u4_size;

    /** Return error code                                               */
    UWORD32 u4_error_code;

    /** Minimum number of input buffers required for codec              */
    UWORD32 u4_min_inp_bufs;

    /** Minimum number of output buffers required for codec             */
    UWORD32 u4_min_out_bufs;

    /** Number of components in input buffers required for codec        */
    UWORD32 u4_inp_comp_cnt;

    /** Number of components in output buffers required for codec       */
    UWORD32 u4_out_comp_cnt;

    /** Minimum sizes of each component in input buffer required        */
    UWORD32 au4_min_in_buf_size[IVE_MAX_IO_BUFFER_COMPONENTS];

    /** Minimum sizes of each component in output buffer  required      */
    UWORD32 au4_min_out_buf_size[IVE_MAX_IO_BUFFER_COMPONENTS];

}ive_ctl_getbufinfo_op_t;




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

/** Input structure : Get encoder version 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_GETVERSION                       */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** Buffer where version info will be returned                      */
    UWORD8                                      *pu1_version;

    /** Size of the buffer allocated for version info                   */
    UWORD32                                     u4_version_bufsize;
}ive_ctl_getversioninfo_ip_t;

/** Output structure : Get encoder version information                  */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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


/*****************************************************************************/
/*   Video control:set  default params                                       */
/*****************************************************************************/
/** Input structure : Set default encoder parameters                    */
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_SETDEFAULT                       */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

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

}ive_ctl_setdefault_ip_t;

/** Output structure : Set default encoder parameters                   */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set Frame dimensions                                     */
/*****************************************************************************/

/** Input structure : Set frame dimensions                              */
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_DIMENSIONS                   */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** Input width                                                     */
    UWORD32                                     u4_wd;

    /** Input height                                                    */
    UWORD32                                     u4_ht;

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

}ive_ctl_set_dimensions_ip_t;

/** Output structure : Set frame dimensions                             */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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


/*****************************************************************************/
/*   Video control  Set Frame rates                                          */
/*****************************************************************************/

/** Input structure : Set frame rate                                    */
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_FRAMERATE                   */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** Source frame rate                                               */
    UWORD32                                     u4_src_frame_rate;

    /** Target frame rate                                               */
    UWORD32                                     u4_tgt_frame_rate;

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

}ive_ctl_set_frame_rate_ip_t;

/** Output structure : Set frame rate                                    */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set Bitrate                                              */
/*****************************************************************************/

/** Input structure : Set bitrate                                       */
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_BITRATE                      */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

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

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

}ive_ctl_set_bitrate_ip_t;

/** Output structure : Set bitrate                                      */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set Frame type                                           */
/*****************************************************************************/

/** Input structure : Set frametype                                     */
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_FRAMETYPE                    */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

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

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

}ive_ctl_set_frame_type_ip_t;

/** Output structure : Set frametype                                     */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set Encode mode                                          */
/*****************************************************************************/

/** Input structure : Set encode mode                                   */
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_ENC_MODE                    */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** Encoder mode                                                    */
    IVE_ENC_MODE_T                              e_enc_mode;

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

}ive_ctl_set_enc_mode_ip_t;

/** Output structure : Set encode mode                                  */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

    /** Return error code                                               */
    UWORD32                                     u4_error_code;

}ive_ctl_set_enc_mode_op_t;

/*****************************************************************************/
/*   Video control  Set QP                                                   */
/*****************************************************************************/

/** Input structure : Set QP                                            */
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_QP                           */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

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

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


}ive_ctl_set_qp_ip_t;

/** Output structure : Set QP                                           */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set AIR params                                           */
/*****************************************************************************/

/** Input structure : Set AIR 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_AIR_PARAMS                   */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

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

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

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


}ive_ctl_set_air_params_ip_t;

/** Output structure : Set AIR params                                   */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set VBV params                                           */
/*****************************************************************************/

/** Input structure : Set VBV 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_VBV_PARAMS                   */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** VBV buffer delay                                                */
    UWORD32                                     u4_vbv_buffer_delay;

    /** VBV buffer size                                                 */
    UWORD32                                     u4_vbv_buf_size;

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


}ive_ctl_set_vbv_params_ip_t;

/** Output structure : Set VBV params                                   */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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


/*****************************************************************************/
/*   Video control  Set Processor Details                                    */
/*****************************************************************************/

/** Input structure : Set processor details                             */
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_NUM_CORES                    */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** Total number of cores to be used                                */
    UWORD32                                     u4_num_cores;

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

}ive_ctl_set_num_cores_ip_t;

/** Output structure : Set processor details                            */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set Intra Prediction estimation params                   */
/*****************************************************************************/

/** Input structure : Set IPE 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_IPE_PARAMS                   */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

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

    /** Flag to enable/disable pre-enc stage of Intra Pred estimation   */
    UWORD32                                     u4_pre_enc_ipe;

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

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

    /** Constrained intra pred flag                                     */
    UWORD32                                     u4_constrained_intra_pred;

}ive_ctl_set_ipe_params_ip_t;

/** Output structure : Set IPE Params                                   */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set Motion estimation params                             */
/*****************************************************************************/

/** Input structure : Set ME 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_ME_PARAMS                    */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** Flag to enable/disable pre-enc stage of Motion estimation       */
    UWORD32                                     u4_pre_enc_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 fast SAD approximation                   */
    UWORD32                                     u4_enable_fast_sad;

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

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

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

}ive_ctl_set_me_params_ip_t;

/** Output structure : Set ME Params                                    */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set GOP params                                           */
/*****************************************************************************/

/** Input structure : Set GOP 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_GOP_PARAMS                   */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** I frame interval                                                */
    UWORD32                                     u4_i_frm_interval;

    /** IDR frame interval                                              */
    UWORD32                                     u4_idr_frm_interval;

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

}ive_ctl_set_gop_params_ip_t;

/** Output structure : Set GOP params                                   */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set Deblock params                                       */
/*****************************************************************************/

/** Input structure : Set Deblock 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_GOP_PARAMS                   */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

    /** Disable deblock level (0: Enable completely, 3: Disable completely */
    UWORD32                                     u4_disable_deblock_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;

}ive_ctl_set_deblock_params_ip_t;

/** Output structure : Set Deblock Params                               */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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

/*****************************************************************************/
/*   Video control  Set Profile params                                       */
/*****************************************************************************/

/** Input structure : Set Profile 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_PROFILE_PARAMS               */
    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;

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

    /** Entropy coding mode flag: 0-CAVLC, 1-CABAC                       */
    UWORD32                                 u4_entropy_coding_mode;

}ive_ctl_set_profile_params_ip_t;

/** Output structure : Set Profile Params                               */
typedef struct
{
    /** size of the structure                                           */
    UWORD32                                     u4_size;

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


#endif /* _IVE2_H_ */