/****************************************************************************** * * 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_SET_SEI_MDCV_PARAMS = 0xD0, IVE_CMD_CTL_SET_SEI_CLL_PARAMS = 0xD1, IVE_CMD_CTL_SET_SEI_AVE_PARAMS = 0xD2, IVE_CMD_CTL_SET_SEI_CCV_PARAMS = 0xD3, 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_ERR_IP_CTL_SET_SEI_MDCV_STRUCT_SIZE_INCORRECT = 0x42, IVE_ERR_OP_CTL_SET_SEI_MDCV_STRUCT_SIZE_INCORRECT = 0x43, IVE_ERR_IP_CTL_SET_SEI_CLL_STRUCT_SIZE_INCORRECT = 0x44, IVE_ERR_OP_CTL_SET_SEI_CLL_STRUCT_SIZE_INCORRECT = 0x45, IVE_ERR_IP_CTL_SET_SEI_AVE_STRUCT_SIZE_INCORRECT = 0x46, IVE_ERR_OP_CTL_SET_SEI_AVE_STRUCT_SIZE_INCORRECT = 0x47, IVE_ERR_IP_CTL_SET_SEI_CCV_STRUCT_SIZE_INCORRECT = 0x48, IVE_ERR_OP_CTL_SET_SEI_CCV_STRUCT_SIZE_INCORRECT = 0x49, }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_ */