You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
386 lines
15 KiB
386 lines
15 KiB
/****************************************************************************** |
|
* |
|
* 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_ */ |
|
|
|
|