libavc/encoder/ive2.h
Ram Mohan M 50fd862b8d libavcenc: Remove duplicate code and improve readability
This commit does not introduce any new functionality w.r.t previous
commit. But it fixes few things. They are listed below:
1. Guard Bands in header files are fixed
2. Header files contains function definition comments. These are same
as in source file. Maintaining same comment at two locations is
unnecessary. These are removed.
3. Improved consistency and code indentation
4. Removed comments that dont align with implementation
5. Grouped headers of a workspace together
2023-10-01 01:37:17 +05:30

1469 lines
62 KiB
C

/******************************************************************************
*
* 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
*
* @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_SET_SEI_SII_PARAMS = 0xD4,
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_ERR_IP_CTL_SET_SEI_SII_STRUCT_SIZE_INCORRECT = 0x4A,
IVE_ERR_OP_CTL_SET_SEI_SII_STRUCT_SIZE_INCORRECT = 0x4B,
}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_ */