diff options
Diffstat (limited to 'encoder/iv2.h')
-rwxr-xr-x | encoder/iv2.h | 386 |
1 files changed, 386 insertions, 0 deletions
diff --git a/encoder/iv2.h b/encoder/iv2.h new file mode 100755 index 0000000..538bb1e --- /dev/null +++ b/encoder/iv2.h @@ -0,0 +1,386 @@ +/****************************************************************************** + * + * 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_ */ + |