blob: f3f1bd97ad91851c6d9191ea2adb470d4494311a [file] [log] [blame]
/******************************************************************************
*
* 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_ */