blob: 538bb1e808113ad4075c58fba10c20cbb628bb3c [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
* iv2.h
*
* @brief
* This file contains all the necessary structure and enumeration
* definitions needed for the Application Program Interface(API) of the
* Ittiam Video codecs This is version 2 of Ittiam Video API
*
* @author
* Ittiam
*
* @par List of Functions:
*
* @remarks
* None
*
*******************************************************************************
*/
#ifndef _IV2_H_
#define _IV2_H_
/*****************************************************************************/
/* Constant Macros */
/*****************************************************************************/
#define IV_MAX_RAW_COMPONENTS 4
/*****************************************************************************/
/* Typedefs */
/*****************************************************************************/
/*****************************************************************************/
/* Enums */
/*****************************************************************************/
/** Function status */
typedef enum{
IV_STATUS_NA = 0x7FFFFFFF,
IV_SUCCESS = 0x0,
IV_FAIL = 0x1,
}IV_STATUS_T;
/** Defines the types of memory */
typedef enum {
IV_NA_MEM_TYPE = 0x7FFFFFFF,
IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM = 0x0,
IV_EXTERNAL_CACHEABLE_SCRATCH_MEM = 0x1,
IV_EXTERNAL_NONCACHEABLE_PERSISTENT_MEM = 0x2,
IV_EXTERNAL_NONCACHEABLE_SCRATCH_MEM = 0x3,
IV_INTERNAL_CACHEABLE_PERSISTENT_MEM = 0x10,
IV_INTERNAL_CACHEABLE_SCRATCH_MEM = 0x11,
IV_INTERNAL_NONCACHEABLE_PERSISTENT_MEM = 0x12,
IV_INTERNAL_NONCACHEABLE_SCRATCH_MEM = 0x13,
}IV_MEM_TYPE_T;
/* The color formats used in video/image codecs */
typedef enum {
IV_CHROMA_NA = 0x7FFFFFFF,
IV_YUV_420P = 0x0,
IV_YUV_420SP_UV = 0x1,
IV_YUV_420SP_VU = 0x2,
IV_YUV_422P = 0x10,
IV_YUV_422IBE = 0x11,
IV_YUV_422ILE = 0x12,
IV_YUV_444P = 0x20,
IV_YUV_411P = 0x21,
IV_GRAY = 0x30,
IV_RGB_565 = 0x31,
IV_RGB_24 = 0x32,
IV_RGBA_8888 = 0x33
}IV_COLOR_FORMAT_T;
/** Frame/Field coding types */
typedef enum {
IV_NA_FRAME = 0x7FFFFFFF,
IV_I_FRAME = 0x0,
IV_P_FRAME = 0x1,
IV_B_FRAME = 0x2,
IV_IDR_FRAME = 0x3,
IV_II_FRAME = 0x4,
IV_IP_FRAME = 0x5,
IV_IB_FRAME = 0x6,
IV_PI_FRAME = 0x7,
IV_PP_FRAME = 0x8,
IV_PB_FRAME = 0x9,
IV_BI_FRAME = 0xa,
IV_BP_FRAME = 0xb,
IV_BB_FRAME = 0xc,
IV_MBAFF_I_FRAME = 0xd,
IV_MBAFF_P_FRAME = 0xe,
IV_MBAFF_B_FRAME = 0xf,
IV_MBAFF_IDR_FRAME = 0x10,
IV_NOT_CODED_FRAME = 0x11,
IV_FRAMETYPE_DEFAULT = IV_I_FRAME
}IV_PICTURE_CODING_TYPE_T;
/** Field type */
typedef enum {
IV_NA_FLD = 0x7FFFFFFF,
IV_TOP_FLD = 0x0,
IV_BOT_FLD = 0x1,
IV_FLD_TYPE_DEFAULT = IV_TOP_FLD
}IV_FLD_TYPE_T;
/** Video content type progressive/interlaced etc */
typedef enum {
IV_CONTENTTYPE_NA = 0x7FFFFFFF,
IV_PROGRESSIVE = 0x0,
IV_INTERLACED = 0x1,
IV_PROGRESSIVE_FRAME = 0x2,
IV_INTERLACED_FRAME = 0x3,
IV_INTERLACED_TOPFIELD = 0x4,
IV_INTERLACED_BOTTOMFIELD = 0x5,
IV_CONTENTTYPE_DEFAULT = IV_PROGRESSIVE,
}IV_CONTENT_TYPE_T;
/** Profile */
typedef enum
{
IV_PROFILE_NA = 0x7FFFFFFF,
IV_PROFILE_BASE = 0x0,
IV_PROFILE_MAIN = 0x1,
IV_PROFILE_HIGH = 0x2,
IV_PROFILE_SIMPLE = 0x100,
IV_PROFILE_ADVSIMPLE = 0x101,
IV_PROFILE_DEFAULT = IV_PROFILE_BASE,
}IV_PROFILE_T;
/** Architecture Enumeration */
typedef enum
{
ARCH_NA = 0x7FFFFFFF,
ARCH_ARM_NONEON = 0x0,
ARCH_ARM_A9Q,
ARCH_ARM_A9A,
ARCH_ARM_A9,
ARCH_ARM_A7,
ARCH_ARM_A5,
ARCH_ARM_A15,
ARCH_ARM_NEONINTR,
ARCH_X86_GENERIC,
ARCH_X86_SSSE3,
ARCH_X86_SSE42,
ARCH_ARM_A53,
ARCH_ARM_A57,
ARCH_ARM_V8_NEON
}IV_ARCH_T;
/** SOC Enumeration */
typedef enum
{
SOC_NA = 0x7FFFFFFF,
SOC_GENERIC = 0x0,
SOC_HISI_37X
}IV_SOC_T;
/** API command type */
typedef enum {
IV_CMD_NA = 0x7FFFFFFF,
IV_CMD_GET_NUM_MEM_REC = 0x0,
IV_CMD_FILL_NUM_MEM_REC = 0x1,
IV_CMD_RETRIEVE_MEMREC = 0x2,
IV_CMD_INIT = 0x3,
/* Do not add anything after the following entry */
IV_CMD_EXTENSIONS = 0x100
}IV_API_COMMAND_TYPE_T;
/*****************************************************************************/
/* Structure Definitions */
/*****************************************************************************/
/** This structure defines the handle for the codec instance */
typedef struct{
/** size of the structure */
UWORD32 u4_size;
/** Pointer to the API function pointer table of the codec */
void *pv_fxns;
/** Pointer to the handle of the codec */
void *pv_codec_handle;
}iv_obj_t;
/** This structure defines the memory record holder which will *
* be used by the codec to communicate its memory requirements to the *
* application through appropriate API functions */
typedef struct {
/** size of the structure */
UWORD32 u4_size;
/** Pointer to the memory allocated by the application */
void *pv_base;
/** u4_size of the memory to be allocated */
UWORD32 u4_mem_size;
/** Alignment of the memory pointer */
UWORD32 u4_mem_alignment;
/** Type of the memory to be allocated */
IV_MEM_TYPE_T e_mem_type;
}iv_mem_rec_t;
/** This structure defines attributes for the raw buffer */
typedef struct {
/** size of the structure */
UWORD32 u4_size;
/** Color format */
IV_COLOR_FORMAT_T e_color_fmt;
/** Pointer to each component */
void *apv_bufs[IV_MAX_RAW_COMPONENTS];
/** Width of each component */
UWORD32 au4_wd[IV_MAX_RAW_COMPONENTS];
/** Height of each component */
UWORD32 au4_ht[IV_MAX_RAW_COMPONENTS];
/** Stride of each component */
UWORD32 au4_strd[IV_MAX_RAW_COMPONENTS];
}iv_raw_buf_t;
/** This structure defines attributes for the bitstream buffer */
typedef struct
{
/** size of the structure */
UWORD32 u4_size;
/** Pointer to buffer */
void *pv_buf;
/** Number of valid bytes in the buffer */
UWORD32 u4_bytes;
/** Allocated size of the buffer */
UWORD32 u4_bufsize;
}iv_bits_buf_t;
/*****************************************************************************/
/* Get Number of Memory Records */
/*****************************************************************************/
/** Input structure : Get number of memory records */
typedef struct {
/** size of the structure */
UWORD32 u4_size;
/** Command type */
IV_API_COMMAND_TYPE_T e_cmd;
}iv_num_mem_rec_ip_t;
/** Output structure : Get number of memory records */
typedef struct{
/** size of the structure */
UWORD32 u4_size;
/** Return error code */
UWORD32 u4_error_code;
/** Number of memory records that will be used by the codec */
UWORD32 u4_num_mem_rec;
}iv_num_mem_rec_op_t;
/*****************************************************************************/
/* Fill Memory Records */
/*****************************************************************************/
/** Input structure : Fill memory records */
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;
/** Color format that codec supports for input/output */
IV_COLOR_FORMAT_T e_color_format;
/** 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;
}iv_fill_mem_rec_ip_t;
/** Output structure : Fill memory records */
typedef struct{
/** size of the structure */
UWORD32 u4_size;
/** Return error code */
UWORD32 u4_error_code;
/** no of memory record structures which are filled by codec */
UWORD32 u4_num_mem_rec;
}iv_fill_mem_rec_op_t;
/*****************************************************************************/
/* Retrieve Memory Records */
/*****************************************************************************/
/** Input structure : Retrieve memory records */
typedef struct {
/** size of the structure */
UWORD32 u4_size;
/** Command type */
IV_API_COMMAND_TYPE_T e_cmd;
/** array of structures where codec should fill with all memory requested earlier */
iv_mem_rec_t *ps_mem_rec;
}iv_retrieve_mem_rec_ip_t;
typedef struct{
/** size of the structure */
UWORD32 u4_size;
/** Return error code */
UWORD32 u4_error_code;
/** no of memory record structures which are filled by codec */
UWORD32 u4_num_mem_rec_filled;
}iv_retrieve_mem_rec_op_t;
#endif /* _IV2_H_ */