1*abb65b4bSAndroid Build Coastguard Worker /* 2*abb65b4bSAndroid Build Coastguard Worker * Copyright (c) 2022 Samsung Electronics Co., Ltd. 3*abb65b4bSAndroid Build Coastguard Worker * All Rights Reserved. 4*abb65b4bSAndroid Build Coastguard Worker * 5*abb65b4bSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*abb65b4bSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met: 7*abb65b4bSAndroid Build Coastguard Worker * 8*abb65b4bSAndroid Build Coastguard Worker * - Redistributions of source code must retain the above copyright notice, 9*abb65b4bSAndroid Build Coastguard Worker * this list of conditions and the following disclaimer. 10*abb65b4bSAndroid Build Coastguard Worker * 11*abb65b4bSAndroid Build Coastguard Worker * - Redistributions in binary form must reproduce the above copyright notice, 12*abb65b4bSAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation 13*abb65b4bSAndroid Build Coastguard Worker * and/or other materials provided with the distribution. 14*abb65b4bSAndroid Build Coastguard Worker * 15*abb65b4bSAndroid Build Coastguard Worker * - Neither the name of the copyright owner, nor the names of its contributors 16*abb65b4bSAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 17*abb65b4bSAndroid Build Coastguard Worker * without specific prior written permission. 18*abb65b4bSAndroid Build Coastguard Worker * 19*abb65b4bSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20*abb65b4bSAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*abb65b4bSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*abb65b4bSAndroid Build Coastguard Worker * ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23*abb65b4bSAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*abb65b4bSAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*abb65b4bSAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*abb65b4bSAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*abb65b4bSAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*abb65b4bSAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*abb65b4bSAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 30*abb65b4bSAndroid Build Coastguard Worker */ 31*abb65b4bSAndroid Build Coastguard Worker 32*abb65b4bSAndroid Build Coastguard Worker #ifndef __OAPV_H__3342320849320483827648324783920483920432847382948__ 33*abb65b4bSAndroid Build Coastguard Worker #define __OAPV_H__3342320849320483827648324783920483920432847382948__ 34*abb65b4bSAndroid Build Coastguard Worker 35*abb65b4bSAndroid Build Coastguard Worker #ifdef __cplusplus 36*abb65b4bSAndroid Build Coastguard Worker extern "C" { 37*abb65b4bSAndroid Build Coastguard Worker #endif 38*abb65b4bSAndroid Build Coastguard Worker 39*abb65b4bSAndroid Build Coastguard Worker #ifdef OAPV_STATIC_DEFINE 40*abb65b4bSAndroid Build Coastguard Worker #define OAPV_EXPORT 41*abb65b4bSAndroid Build Coastguard Worker #else 42*abb65b4bSAndroid Build Coastguard Worker #include <oapv/oapv_exports.h> 43*abb65b4bSAndroid Build Coastguard Worker #endif 44*abb65b4bSAndroid Build Coastguard Worker 45*abb65b4bSAndroid Build Coastguard Worker 46*abb65b4bSAndroid Build Coastguard Worker /* size of macroblock */ 47*abb65b4bSAndroid Build Coastguard Worker #define OAPV_LOG2_MB (4) 48*abb65b4bSAndroid Build Coastguard Worker #define OAPV_LOG2_MB_W (4) 49*abb65b4bSAndroid Build Coastguard Worker #define OAPV_LOG2_MB_H (4) 50*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MB_W (1 << OAPV_LOG2_MB_W) 51*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MB_H (1 << OAPV_LOG2_MB_H) 52*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MB_D (OAPV_MB_W * OAPV_MB_H) 53*abb65b4bSAndroid Build Coastguard Worker 54*abb65b4bSAndroid Build Coastguard Worker /* size of block */ 55*abb65b4bSAndroid Build Coastguard Worker #define OAPV_LOG2_BLK (3) 56*abb65b4bSAndroid Build Coastguard Worker #define OAPV_LOG2_BLK_W (3) 57*abb65b4bSAndroid Build Coastguard Worker #define OAPV_LOG2_BLK_H (3) 58*abb65b4bSAndroid Build Coastguard Worker #define OAPV_BLK_W (1 << OAPV_LOG2_BLK) 59*abb65b4bSAndroid Build Coastguard Worker #define OAPV_BLK_H (1 << OAPV_LOG2_BLK) 60*abb65b4bSAndroid Build Coastguard Worker #define OAPV_BLK_D (OAPV_BLK_W * OAPV_BLK_H) 61*abb65b4bSAndroid Build Coastguard Worker 62*abb65b4bSAndroid Build Coastguard Worker /* maximum number of thread */ 63*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_THREADS (32) 64*abb65b4bSAndroid Build Coastguard Worker 65*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 66*abb65b4bSAndroid Build Coastguard Worker * return values and error code 67*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 68*abb65b4bSAndroid Build Coastguard Worker #define OAPV_OK (0) 69*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR (-1) /* generic error */ 70*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_INVALID_ARGUMENT (-101) 71*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_OUT_OF_MEMORY (-102) 72*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_REACHED_MAX (-103) 73*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_UNSUPPORTED (-104) 74*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_UNEXPECTED (-105) 75*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_UNSUPPORTED_COLORSPACE (-201) 76*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_MALFORMED_BITSTREAM (-202) 77*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_OUT_OF_BS_BUF (-203) /* too small bitstream buffer */ 78*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_NOT_FOUND (-204) 79*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_FAILED_SYSCALL (-301) /* failed system call */ 80*abb65b4bSAndroid Build Coastguard Worker #define OAPV_ERR_UNKNOWN (-32767) /* unknown error */ 81*abb65b4bSAndroid Build Coastguard Worker 82*abb65b4bSAndroid Build Coastguard Worker /* return value checking */ 83*abb65b4bSAndroid Build Coastguard Worker #define OAPV_SUCCEEDED(ret) ((ret) >= OAPV_OK) 84*abb65b4bSAndroid Build Coastguard Worker #define OAPV_FAILED(ret) ((ret) < OAPV_OK) 85*abb65b4bSAndroid Build Coastguard Worker 86*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 87*abb65b4bSAndroid Build Coastguard Worker * color spaces 88*abb65b4bSAndroid Build Coastguard Worker * - value format = (endian << 14) | (bit-depth << 8) | (color format) 89*abb65b4bSAndroid Build Coastguard Worker * - endian (1bit): little endian = 0, big endian = 1 90*abb65b4bSAndroid Build Coastguard Worker * - bit-depth (6bit): 0~63 91*abb65b4bSAndroid Build Coastguard Worker * - color format (8bit): 0~255 92*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 93*abb65b4bSAndroid Build Coastguard Worker /* color formats */ 94*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_UNKNOWN (0) /* unknown color format */ 95*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_YCBCR400 (10) /* Y only */ 96*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_YCBCR420 (11) /* YCbCr 420 */ 97*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_YCBCR422 (12) /* YCBCR 422 narrow chroma*/ 98*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_YCBCR444 (13) /* YCBCR 444*/ 99*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_YCBCR4444 (14) /* YCBCR 4444*/ 100*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_YCBCR422N OAPV_CF_YCBCR422 101*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_YCBCR422W (18) /* YCBCR422 wide chroma */ 102*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CF_PLANAR2 (20) /* Planar Y, Combined CB-CR, 422 */ 103*abb65b4bSAndroid Build Coastguard Worker 104*abb65b4bSAndroid Build Coastguard Worker /* macro for color space */ 105*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_GET_FORMAT(cs) (((cs) >> 0) & 0xFF) 106*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_GET_BIT_DEPTH(cs) (((cs) >> 8) & 0x3F) 107*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_GET_BYTE_DEPTH(cs) ((OAPV_CS_GET_BIT_DEPTH(cs) + 7) >> 3) 108*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_GET_ENDIAN(cs) (((cs) >> 14) & 0x1) 109*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_SET(f, bit, e) (((e) << 14) | ((bit) << 8) | (f)) 110*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_SET_FORMAT(cs, v) (((cs) & ~0xFF) | ((v) << 0)) 111*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_SET_BIT_DEPTH(cs, v) (((cs) & ~(0x3F << 8)) | ((v) << 8)) 112*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_SET_ENDIAN(cs, v) (((cs) & ~(0x1 << 14)) | ((v) << 14)) 113*abb65b4bSAndroid Build Coastguard Worker 114*abb65b4bSAndroid Build Coastguard Worker /* pre-defined color spaces */ 115*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_UNKNOWN OAPV_CS_SET(0, 0, 0) 116*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR400 OAPV_CS_SET(OAPV_CF_YCBCR400, 8, 0) 117*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR420 OAPV_CS_SET(OAPV_CF_YCBCR420, 8, 0) 118*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR422 OAPV_CS_SET(OAPV_CF_YCBCR422, 8, 0) 119*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR444 OAPV_CS_SET(OAPV_CF_YCBCR444, 8, 0) 120*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR4444 OAPV_CS_SET(OAPV_CF_YCBCR4444, 8, 0) 121*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR400_10LE OAPV_CS_SET(OAPV_CF_YCBCR400, 10, 0) 122*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR420_10LE OAPV_CS_SET(OAPV_CF_YCBCR420, 10, 0) 123*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR422_10LE OAPV_CS_SET(OAPV_CF_YCBCR422, 10, 0) 124*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR444_10LE OAPV_CS_SET(OAPV_CF_YCBCR444, 10, 0) 125*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR4444_10LE OAPV_CS_SET(OAPV_CF_YCBCR4444, 10, 0) 126*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR400_12LE OAPV_CS_SET(OAPV_CF_YCBCR400, 12, 0) 127*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR420_12LE OAPV_CS_SET(OAPV_CF_YCBCR420, 12, 0) 128*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR400_14LE OAPV_CS_SET(OAPV_CF_YCBCR400, 14, 0) 129*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_YCBCR420_14LE OAPV_CS_SET(OAPV_CF_YCBCR420, 14, 0) 130*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CS_P210 OAPV_CS_SET(OAPV_CF_PLANAR2, 10, 0) 131*abb65b4bSAndroid Build Coastguard Worker 132*abb65b4bSAndroid Build Coastguard Worker /* max number of color channel: YCbCr4444 -> 4 channels */ 133*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_CC (4) 134*abb65b4bSAndroid Build Coastguard Worker 135*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 136*abb65b4bSAndroid Build Coastguard Worker * config types 137*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 138*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_SET_QP (201) 139*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_SET_BPS (202) 140*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_SET_FPS_NUM (204) 141*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_SET_FPS_DEN (205) 142*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_SET_QP_MIN (208) 143*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_SET_QP_MAX (209) 144*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_SET_USE_FRM_HASH (301) 145*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_QP_MIN (600) 146*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_QP_MAX (601) 147*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_QP (602) 148*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_RCT (603) 149*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_BPS (604) 150*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_FPS_NUM (605) 151*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_FPS_DEN (606) 152*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_WIDTH (701) 153*abb65b4bSAndroid Build Coastguard Worker #define OAPV_CFG_GET_HEIGHT (702) 154*abb65b4bSAndroid Build Coastguard Worker 155*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 156*abb65b4bSAndroid Build Coastguard Worker * HLS configs 157*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 158*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_GRP_SIZE ((1 << 16) - 1) // 0xFFFF reserved 159*abb65b4bSAndroid Build Coastguard Worker 160*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 161*abb65b4bSAndroid Build Coastguard Worker * PBU types 162*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 163*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_RESERVED (0) 164*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_PRIMARY_FRAME (1) 165*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_NON_PRIMARY_FRAME (2) 166*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_PREVIEW_FRAME (25) 167*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_DEPTH_FRAME (26) 168*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_ALPHA_FRAME (27) 169*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_AU_INFO (65) 170*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_METADATA (66) 171*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_FILLER (67) 172*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_TYPE_UNKNOWN (-1) 173*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_NUMS (10) 174*abb65b4bSAndroid Build Coastguard Worker 175*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_FRAME_TYPE_NUM (5) 176*abb65b4bSAndroid Build Coastguard Worker 177*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 178*abb65b4bSAndroid Build Coastguard Worker * metadata types 179*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 180*abb65b4bSAndroid Build Coastguard Worker #define OAPV_METADATA_ITU_T_T35 (4) 181*abb65b4bSAndroid Build Coastguard Worker #define OAPV_METADATA_MDCV (5) 182*abb65b4bSAndroid Build Coastguard Worker #define OAPV_METADATA_CLL (6) 183*abb65b4bSAndroid Build Coastguard Worker #define OAPV_METADATA_FILLER (10) 184*abb65b4bSAndroid Build Coastguard Worker #define OAPV_METADATA_USER_DEFINED (170) 185*abb65b4bSAndroid Build Coastguard Worker 186*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 187*abb65b4bSAndroid Build Coastguard Worker * profiles 188*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 189*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PROFILE_422_10 (33) 190*abb65b4bSAndroid Build Coastguard Worker 191*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 192*abb65b4bSAndroid Build Coastguard Worker * optimization level control 193*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 194*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PRESET_FASTEST (0) 195*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PRESET_FAST (1) 196*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PRESET_MEDIUM (2) 197*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PRESET_SLOW (3) 198*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PRESET_PLACEBO (4) 199*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PRESET_DEFAULT OAPV_PRESET_MEDIUM 200*abb65b4bSAndroid Build Coastguard Worker 201*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 202*abb65b4bSAndroid Build Coastguard Worker * rate-control types 203*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 204*abb65b4bSAndroid Build Coastguard Worker #define OAPV_RC_CQP (0) 205*abb65b4bSAndroid Build Coastguard Worker #define OAPV_RC_ABR (1) 206*abb65b4bSAndroid Build Coastguard Worker 207*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 208*abb65b4bSAndroid Build Coastguard Worker * type and macro for media time 209*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 210*abb65b4bSAndroid Build Coastguard Worker typedef long long oapv_mtime_t; /* in 100-nanosec unit */ 211*abb65b4bSAndroid Build Coastguard Worker 212*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 213*abb65b4bSAndroid Build Coastguard Worker * image buffer format 214*abb65b4bSAndroid Build Coastguard Worker * 215*abb65b4bSAndroid Build Coastguard Worker * baddr 216*abb65b4bSAndroid Build Coastguard Worker * +---------------------------------------------------+ --- 217*abb65b4bSAndroid Build Coastguard Worker * | | ^ 218*abb65b4bSAndroid Build Coastguard Worker * | | | | 219*abb65b4bSAndroid Build Coastguard Worker * | a v | | 220*abb65b4bSAndroid Build Coastguard Worker * | --- +-----------------------------------+ --- | | 221*abb65b4bSAndroid Build Coastguard Worker * | ^ | (x, y) | y | | 222*abb65b4bSAndroid Build Coastguard Worker * | | | +---------------------------+ + --- | | 223*abb65b4bSAndroid Build Coastguard Worker * | | | | | | ^ | | 224*abb65b4bSAndroid Build Coastguard Worker * | | | | /\ | | | | | 225*abb65b4bSAndroid Build Coastguard Worker * | | | | / \ | | | | | 226*abb65b4bSAndroid Build Coastguard Worker * | | | | / \ | | | | | 227*abb65b4bSAndroid Build Coastguard Worker * | | | +--------------------+ | | | 228*abb65b4bSAndroid Build Coastguard Worker * | ah | | \ / | | h | e 229*abb65b4bSAndroid Build Coastguard Worker * | | | +----------------+ | | | 230*abb65b4bSAndroid Build Coastguard Worker * | | | | | | | | | | | 231*abb65b4bSAndroid Build Coastguard Worker * | | | | @ O O @ | | | | | 232*abb65b4bSAndroid Build Coastguard Worker * | | | | \ ~ / | | v | | 233*abb65b4bSAndroid Build Coastguard Worker * | | | +---------------------------+ | --- | | 234*abb65b4bSAndroid Build Coastguard Worker * | v | | | | 235*abb65b4bSAndroid Build Coastguard Worker * | --- +---+-------------------------------+ | | 236*abb65b4bSAndroid Build Coastguard Worker * | ->| x |<----------- w ----------->| | | 237*abb65b4bSAndroid Build Coastguard Worker * | |<--------------- aw -------------->| | | 238*abb65b4bSAndroid Build Coastguard Worker * | | v 239*abb65b4bSAndroid Build Coastguard Worker * +---------------------------------------------------+ --- 240*abb65b4bSAndroid Build Coastguard Worker * 241*abb65b4bSAndroid Build Coastguard Worker * |<---------------------- s ------------------------>| 242*abb65b4bSAndroid Build Coastguard Worker * 243*abb65b4bSAndroid Build Coastguard Worker * - x, y, w, aw, h, ah : unit of pixel 244*abb65b4bSAndroid Build Coastguard Worker * - s, e : unit of byte 245*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 246*abb65b4bSAndroid Build Coastguard Worker 247*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_imgb oapv_imgb_t; 248*abb65b4bSAndroid Build Coastguard Worker struct oapv_imgb { 249*abb65b4bSAndroid Build Coastguard Worker int cs; /* color space */ 250*abb65b4bSAndroid Build Coastguard Worker int np; /* number of plane */ 251*abb65b4bSAndroid Build Coastguard Worker /* width (in unit of pixel) */ 252*abb65b4bSAndroid Build Coastguard Worker int w[OAPV_MAX_CC]; 253*abb65b4bSAndroid Build Coastguard Worker /* height (in unit of pixel) */ 254*abb65b4bSAndroid Build Coastguard Worker int h[OAPV_MAX_CC]; 255*abb65b4bSAndroid Build Coastguard Worker /* X position of left top (in unit of pixel) */ 256*abb65b4bSAndroid Build Coastguard Worker int x[OAPV_MAX_CC]; 257*abb65b4bSAndroid Build Coastguard Worker /* Y postion of left top (in unit of pixel) */ 258*abb65b4bSAndroid Build Coastguard Worker int y[OAPV_MAX_CC]; 259*abb65b4bSAndroid Build Coastguard Worker /* buffer stride (in unit of byte) */ 260*abb65b4bSAndroid Build Coastguard Worker int s[OAPV_MAX_CC]; 261*abb65b4bSAndroid Build Coastguard Worker /* buffer elevation (in unit of byte) */ 262*abb65b4bSAndroid Build Coastguard Worker int e[OAPV_MAX_CC]; 263*abb65b4bSAndroid Build Coastguard Worker /* address of each plane */ 264*abb65b4bSAndroid Build Coastguard Worker void *a[OAPV_MAX_CC]; 265*abb65b4bSAndroid Build Coastguard Worker 266*abb65b4bSAndroid Build Coastguard Worker /* hash data for signature */ 267*abb65b4bSAndroid Build Coastguard Worker unsigned char hash[OAPV_MAX_CC][16]; 268*abb65b4bSAndroid Build Coastguard Worker 269*abb65b4bSAndroid Build Coastguard Worker /* time-stamps */ 270*abb65b4bSAndroid Build Coastguard Worker oapv_mtime_t ts[4]; 271*abb65b4bSAndroid Build Coastguard Worker 272*abb65b4bSAndroid Build Coastguard Worker int ndata[4]; /* arbitrary data, if needs */ 273*abb65b4bSAndroid Build Coastguard Worker void *pdata[4]; /* arbitrary adedress if needs */ 274*abb65b4bSAndroid Build Coastguard Worker 275*abb65b4bSAndroid Build Coastguard Worker /* aligned width (in unit of pixel) */ 276*abb65b4bSAndroid Build Coastguard Worker int aw[OAPV_MAX_CC]; 277*abb65b4bSAndroid Build Coastguard Worker /* aligned height (in unit of pixel) */ 278*abb65b4bSAndroid Build Coastguard Worker int ah[OAPV_MAX_CC]; 279*abb65b4bSAndroid Build Coastguard Worker 280*abb65b4bSAndroid Build Coastguard Worker /* left padding size (in unit of pixel) */ 281*abb65b4bSAndroid Build Coastguard Worker int padl[OAPV_MAX_CC]; 282*abb65b4bSAndroid Build Coastguard Worker /* right padding size (in unit of pixel) */ 283*abb65b4bSAndroid Build Coastguard Worker int padr[OAPV_MAX_CC]; 284*abb65b4bSAndroid Build Coastguard Worker /* up padding size (in unit of pixel) */ 285*abb65b4bSAndroid Build Coastguard Worker int padu[OAPV_MAX_CC]; 286*abb65b4bSAndroid Build Coastguard Worker /* bottom padding size (in unit of pixel) */ 287*abb65b4bSAndroid Build Coastguard Worker int padb[OAPV_MAX_CC]; 288*abb65b4bSAndroid Build Coastguard Worker 289*abb65b4bSAndroid Build Coastguard Worker /* address of actual allocated buffer */ 290*abb65b4bSAndroid Build Coastguard Worker void *baddr[OAPV_MAX_CC]; 291*abb65b4bSAndroid Build Coastguard Worker /* actual allocated buffer size */ 292*abb65b4bSAndroid Build Coastguard Worker int bsize[OAPV_MAX_CC]; 293*abb65b4bSAndroid Build Coastguard Worker 294*abb65b4bSAndroid Build Coastguard Worker /* life cycle management */ 295*abb65b4bSAndroid Build Coastguard Worker int refcnt; 296*abb65b4bSAndroid Build Coastguard Worker int (*addref)(oapv_imgb_t *imgb); 297*abb65b4bSAndroid Build Coastguard Worker int (*getref)(oapv_imgb_t *imgb); 298*abb65b4bSAndroid Build Coastguard Worker int (*release)(oapv_imgb_t *imgb); 299*abb65b4bSAndroid Build Coastguard Worker }; 300*abb65b4bSAndroid Build Coastguard Worker 301*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_frm oapv_frm_t; 302*abb65b4bSAndroid Build Coastguard Worker struct oapv_frm { 303*abb65b4bSAndroid Build Coastguard Worker oapv_imgb_t *imgb; 304*abb65b4bSAndroid Build Coastguard Worker int pbu_type; 305*abb65b4bSAndroid Build Coastguard Worker int group_id; 306*abb65b4bSAndroid Build Coastguard Worker }; 307*abb65b4bSAndroid Build Coastguard Worker 308*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_NUM_FRAMES (16) // max number of frames in an access unit 309*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_NUM_METAS (16) // max number of metadata in an access unit 310*abb65b4bSAndroid Build Coastguard Worker 311*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_frms oapv_frms_t; 312*abb65b4bSAndroid Build Coastguard Worker struct oapv_frms { 313*abb65b4bSAndroid Build Coastguard Worker int num_frms; // number of frames 314*abb65b4bSAndroid Build Coastguard Worker oapv_frm_t frm[OAPV_MAX_NUM_FRAMES]; // container of frames 315*abb65b4bSAndroid Build Coastguard Worker }; 316*abb65b4bSAndroid Build Coastguard Worker 317*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 318*abb65b4bSAndroid Build Coastguard Worker * Bitstream buffer 319*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 320*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_bitb oapv_bitb_t; 321*abb65b4bSAndroid Build Coastguard Worker struct oapv_bitb { 322*abb65b4bSAndroid Build Coastguard Worker /* user space address indicating buffer */ 323*abb65b4bSAndroid Build Coastguard Worker void *addr; 324*abb65b4bSAndroid Build Coastguard Worker /* physical address indicating buffer, if any */ 325*abb65b4bSAndroid Build Coastguard Worker void *pddr; 326*abb65b4bSAndroid Build Coastguard Worker /* byte size of buffer memory */ 327*abb65b4bSAndroid Build Coastguard Worker int bsize; 328*abb65b4bSAndroid Build Coastguard Worker /* byte size of bitstream in buffer */ 329*abb65b4bSAndroid Build Coastguard Worker int ssize; 330*abb65b4bSAndroid Build Coastguard Worker /* bitstream has an error? */ 331*abb65b4bSAndroid Build Coastguard Worker int err; 332*abb65b4bSAndroid Build Coastguard Worker /* arbitrary data, if needs */ 333*abb65b4bSAndroid Build Coastguard Worker int ndata[4]; 334*abb65b4bSAndroid Build Coastguard Worker /* arbitrary address, if needs */ 335*abb65b4bSAndroid Build Coastguard Worker void *pdata[4]; 336*abb65b4bSAndroid Build Coastguard Worker /* time-stamps */ 337*abb65b4bSAndroid Build Coastguard Worker oapv_mtime_t ts[4]; 338*abb65b4bSAndroid Build Coastguard Worker }; 339*abb65b4bSAndroid Build Coastguard Worker 340*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 341*abb65b4bSAndroid Build Coastguard Worker * brief information of frame 342*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 343*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_frm_info oapv_frm_info_t; 344*abb65b4bSAndroid Build Coastguard Worker struct oapv_frm_info { 345*abb65b4bSAndroid Build Coastguard Worker int w; 346*abb65b4bSAndroid Build Coastguard Worker int h; 347*abb65b4bSAndroid Build Coastguard Worker int cs; 348*abb65b4bSAndroid Build Coastguard Worker int pbu_type; 349*abb65b4bSAndroid Build Coastguard Worker int group_id; 350*abb65b4bSAndroid Build Coastguard Worker int profile_idc; 351*abb65b4bSAndroid Build Coastguard Worker int level_idc; 352*abb65b4bSAndroid Build Coastguard Worker int band_idc; 353*abb65b4bSAndroid Build Coastguard Worker int chroma_format_idc; 354*abb65b4bSAndroid Build Coastguard Worker int bit_depth; 355*abb65b4bSAndroid Build Coastguard Worker int capture_time_distance; 356*abb65b4bSAndroid Build Coastguard Worker }; 357*abb65b4bSAndroid Build Coastguard Worker 358*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_au_info oapv_au_info_t; 359*abb65b4bSAndroid Build Coastguard Worker struct oapv_au_info { 360*abb65b4bSAndroid Build Coastguard Worker int num_frms; // number of frames 361*abb65b4bSAndroid Build Coastguard Worker oapv_frm_info_t frm_info[OAPV_MAX_NUM_FRAMES]; 362*abb65b4bSAndroid Build Coastguard Worker }; 363*abb65b4bSAndroid Build Coastguard Worker 364*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 365*abb65b4bSAndroid Build Coastguard Worker * coding parameters 366*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 367*abb65b4bSAndroid Build Coastguard Worker typedef struct oapve_param oapve_param_t; 368*abb65b4bSAndroid Build Coastguard Worker struct oapve_param { 369*abb65b4bSAndroid Build Coastguard Worker /* profile_idc */ 370*abb65b4bSAndroid Build Coastguard Worker int profile_idc; 371*abb65b4bSAndroid Build Coastguard Worker /* level */ 372*abb65b4bSAndroid Build Coastguard Worker int level_idc; 373*abb65b4bSAndroid Build Coastguard Worker /* band */ 374*abb65b4bSAndroid Build Coastguard Worker int band_idc; 375*abb65b4bSAndroid Build Coastguard Worker /* width of input frame */ 376*abb65b4bSAndroid Build Coastguard Worker int w; 377*abb65b4bSAndroid Build Coastguard Worker /* height of input frame */ 378*abb65b4bSAndroid Build Coastguard Worker int h; 379*abb65b4bSAndroid Build Coastguard Worker /* frame rate (Hz) numerator, denominator */ 380*abb65b4bSAndroid Build Coastguard Worker int fps_num; 381*abb65b4bSAndroid Build Coastguard Worker int fps_den; 382*abb65b4bSAndroid Build Coastguard Worker /* rate control type */ 383*abb65b4bSAndroid Build Coastguard Worker int rc_type; 384*abb65b4bSAndroid Build Coastguard Worker /* quantization parameter (0 ~ 63)*/ 385*abb65b4bSAndroid Build Coastguard Worker int qp; 386*abb65b4bSAndroid Build Coastguard Worker /* quantization parameter offset for CB */ 387*abb65b4bSAndroid Build Coastguard Worker int qp_cb_offset; 388*abb65b4bSAndroid Build Coastguard Worker /* quantization parameter offset for CR */ 389*abb65b4bSAndroid Build Coastguard Worker int qp_cr_offset; 390*abb65b4bSAndroid Build Coastguard Worker /* bitrate (unit: kbps) */ 391*abb65b4bSAndroid Build Coastguard Worker int bitrate; 392*abb65b4bSAndroid Build Coastguard Worker /* use filler data for tight constant bitrate */ 393*abb65b4bSAndroid Build Coastguard Worker int use_filler; 394*abb65b4bSAndroid Build Coastguard Worker /* use filler quantization matrix */ 395*abb65b4bSAndroid Build Coastguard Worker int use_q_matrix; 396*abb65b4bSAndroid Build Coastguard Worker int q_matrix_y[OAPV_BLK_D]; 397*abb65b4bSAndroid Build Coastguard Worker int q_matrix_u[OAPV_BLK_D]; 398*abb65b4bSAndroid Build Coastguard Worker int q_matrix_v[OAPV_BLK_D]; 399*abb65b4bSAndroid Build Coastguard Worker int q_matrix_x[OAPV_BLK_D]; 400*abb65b4bSAndroid Build Coastguard Worker /* color space */ 401*abb65b4bSAndroid Build Coastguard Worker int csp; 402*abb65b4bSAndroid Build Coastguard Worker int tile_cols; 403*abb65b4bSAndroid Build Coastguard Worker int tile_rows; 404*abb65b4bSAndroid Build Coastguard Worker int tile_w_mb; 405*abb65b4bSAndroid Build Coastguard Worker int tile_h_mb; 406*abb65b4bSAndroid Build Coastguard Worker int preset; 407*abb65b4bSAndroid Build Coastguard Worker }; 408*abb65b4bSAndroid Build Coastguard Worker 409*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 410*abb65b4bSAndroid Build Coastguard Worker * description for encoder creation 411*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 412*abb65b4bSAndroid Build Coastguard Worker typedef struct oapve_cdesc oapve_cdesc_t; 413*abb65b4bSAndroid Build Coastguard Worker struct oapve_cdesc { 414*abb65b4bSAndroid Build Coastguard Worker int max_bs_buf_size; // max bitstream buffer size 415*abb65b4bSAndroid Build Coastguard Worker int max_num_frms; // max number of frames to be encoded 416*abb65b4bSAndroid Build Coastguard Worker int threads; // number of threads 417*abb65b4bSAndroid Build Coastguard Worker oapve_param_t param[OAPV_MAX_NUM_FRAMES]; // encoding parameters 418*abb65b4bSAndroid Build Coastguard Worker }; 419*abb65b4bSAndroid Build Coastguard Worker 420*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 421*abb65b4bSAndroid Build Coastguard Worker * encoding status 422*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 423*abb65b4bSAndroid Build Coastguard Worker typedef struct oapve_stat oapve_stat_t; 424*abb65b4bSAndroid Build Coastguard Worker struct oapve_stat { 425*abb65b4bSAndroid Build Coastguard Worker int write; // byte size of encoded bitstream 426*abb65b4bSAndroid Build Coastguard Worker oapv_au_info_t aui; // information of encoded frames 427*abb65b4bSAndroid Build Coastguard Worker int frm_size[OAPV_MAX_NUM_FRAMES]; // bitstream byte size of each frame 428*abb65b4bSAndroid Build Coastguard Worker }; 429*abb65b4bSAndroid Build Coastguard Worker 430*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 431*abb65b4bSAndroid Build Coastguard Worker * description for decoder creation 432*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 433*abb65b4bSAndroid Build Coastguard Worker typedef struct oapvd_cdesc oapvd_cdesc_t; 434*abb65b4bSAndroid Build Coastguard Worker struct oapvd_cdesc { 435*abb65b4bSAndroid Build Coastguard Worker int threads; // number of threads 436*abb65b4bSAndroid Build Coastguard Worker }; 437*abb65b4bSAndroid Build Coastguard Worker 438*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 439*abb65b4bSAndroid Build Coastguard Worker * decoding status 440*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 441*abb65b4bSAndroid Build Coastguard Worker typedef struct oapvd_stat oapvd_stat_t; 442*abb65b4bSAndroid Build Coastguard Worker struct oapvd_stat { 443*abb65b4bSAndroid Build Coastguard Worker int read; // byte size of decoded bitstream (read size) 444*abb65b4bSAndroid Build Coastguard Worker oapv_au_info_t aui; // information of decoded frames 445*abb65b4bSAndroid Build Coastguard Worker int frm_size[OAPV_MAX_NUM_FRAMES]; // bitstream byte size of each frame 446*abb65b4bSAndroid Build Coastguard Worker }; 447*abb65b4bSAndroid Build Coastguard Worker 448*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 449*abb65b4bSAndroid Build Coastguard Worker * metadata payload 450*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 451*abb65b4bSAndroid Build Coastguard Worker typedef struct oapvm_payload oapvm_payload_t; 452*abb65b4bSAndroid Build Coastguard Worker struct oapvm_payload { 453*abb65b4bSAndroid Build Coastguard Worker int group_id; // group ID 454*abb65b4bSAndroid Build Coastguard Worker int type; // payload type 455*abb65b4bSAndroid Build Coastguard Worker unsigned char uuid[16]; // UUID for user-defined metadata payload 456*abb65b4bSAndroid Build Coastguard Worker void *data; // address of metadata payload 457*abb65b4bSAndroid Build Coastguard Worker int data_size; // byte size of metadata payload 458*abb65b4bSAndroid Build Coastguard Worker }; 459*abb65b4bSAndroid Build Coastguard Worker 460*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 461*abb65b4bSAndroid Build Coastguard Worker * interface for metadata container 462*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 463*abb65b4bSAndroid Build Coastguard Worker typedef void *oapvm_t; /* instance identifier for OAPV metadata container */ 464*abb65b4bSAndroid Build Coastguard Worker 465*abb65b4bSAndroid Build Coastguard Worker oapvm_t OAPV_EXPORT oapvm_create(int *err); 466*abb65b4bSAndroid Build Coastguard Worker void OAPV_EXPORT oapvm_delete(oapvm_t mid); 467*abb65b4bSAndroid Build Coastguard Worker void OAPV_EXPORT oapvm_rem_all(oapvm_t mid); 468*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapvm_set(oapvm_t mid, int group_id, int type, void *data, int size, unsigned char *uuid); 469*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapvm_get(oapvm_t mid, int group_id, int type, void **data, int *size, unsigned char *uuid); 470*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapvm_rem(oapvm_t mid, int group_id, int type, unsigned char *uuid); 471*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapvm_set_all(oapvm_t mid, oapvm_payload_t *pld, int num_plds); 472*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapvm_get_all(oapvm_t mid, oapvm_payload_t *pld, int *num_plds); 473*abb65b4bSAndroid Build Coastguard Worker 474*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 475*abb65b4bSAndroid Build Coastguard Worker * interface for encoder 476*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 477*abb65b4bSAndroid Build Coastguard Worker typedef void *oapve_t; /* instance identifier for OAPV encoder */ 478*abb65b4bSAndroid Build Coastguard Worker 479*abb65b4bSAndroid Build Coastguard Worker oapve_t OAPV_EXPORT oapve_create(oapve_cdesc_t *cdesc, int *err); 480*abb65b4bSAndroid Build Coastguard Worker void OAPV_EXPORT oapve_delete(oapve_t eid); 481*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapve_config(oapve_t eid, int cfg, void *buf, int *size); 482*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapve_param_default(oapve_param_t *param); 483*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapve_encode(oapve_t eid, oapv_frms_t *ifrms, oapvm_t mid, oapv_bitb_t *bitb, oapve_stat_t *stat, oapv_frms_t *rfrms); 484*abb65b4bSAndroid Build Coastguard Worker 485*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 486*abb65b4bSAndroid Build Coastguard Worker * interface for decoder 487*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 488*abb65b4bSAndroid Build Coastguard Worker typedef void *oapvd_t; /* instance identifier for OAPV decoder */ 489*abb65b4bSAndroid Build Coastguard Worker 490*abb65b4bSAndroid Build Coastguard Worker oapvd_t OAPV_EXPORT oapvd_create(oapvd_cdesc_t *cdesc, int *err); 491*abb65b4bSAndroid Build Coastguard Worker void OAPV_EXPORT oapvd_delete(oapvd_t did); 492*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapvd_config(oapvd_t did, int cfg, void *buf, int *size); 493*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapvd_decode(oapvd_t did, oapv_bitb_t *bitb, oapv_frms_t *ofrms, oapvm_t mid, oapvd_stat_t *stat); 494*abb65b4bSAndroid Build Coastguard Worker 495*abb65b4bSAndroid Build Coastguard Worker /***************************************************************************** 496*abb65b4bSAndroid Build Coastguard Worker * interface for utility 497*abb65b4bSAndroid Build Coastguard Worker *****************************************************************************/ 498*abb65b4bSAndroid Build Coastguard Worker int OAPV_EXPORT oapvd_info(void *au, int au_size, oapv_au_info_t *aui); 499*abb65b4bSAndroid Build Coastguard Worker 500*abb65b4bSAndroid Build Coastguard Worker #ifdef __cplusplus 501*abb65b4bSAndroid Build Coastguard Worker } /* extern "C" */ 502*abb65b4bSAndroid Build Coastguard Worker #endif 503*abb65b4bSAndroid Build Coastguard Worker 504*abb65b4bSAndroid Build Coastguard Worker #endif /* __OAPV_H__3342320849320483827648324783920483920432847382948__ */ 505