1*495ae853SAndroid Build Coastguard Worker /****************************************************************************** 2*495ae853SAndroid Build Coastguard Worker * 3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project 4*495ae853SAndroid Build Coastguard Worker * 5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at: 8*495ae853SAndroid Build Coastguard Worker * 9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*495ae853SAndroid Build Coastguard Worker * 11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*495ae853SAndroid Build Coastguard Worker * limitations under the License. 16*495ae853SAndroid Build Coastguard Worker * 17*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*495ae853SAndroid Build Coastguard Worker */ 20*495ae853SAndroid Build Coastguard Worker /** 21*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 22*495ae853SAndroid Build Coastguard Worker * @file 23*495ae853SAndroid Build Coastguard Worker * ih264e_defs.h 24*495ae853SAndroid Build Coastguard Worker * 25*495ae853SAndroid Build Coastguard Worker * @brief 26*495ae853SAndroid Build Coastguard Worker * Declarations of common definitions used in the encoder library 27*495ae853SAndroid Build Coastguard Worker * 28*495ae853SAndroid Build Coastguard Worker * @author 29*495ae853SAndroid Build Coastguard Worker * ittiam 30*495ae853SAndroid Build Coastguard Worker * 31*495ae853SAndroid Build Coastguard Worker * @remarks 32*495ae853SAndroid Build Coastguard Worker * none 33*495ae853SAndroid Build Coastguard Worker * 34*495ae853SAndroid Build Coastguard Worker ******************************************************************************* 35*495ae853SAndroid Build Coastguard Worker */ 36*495ae853SAndroid Build Coastguard Worker 37*495ae853SAndroid Build Coastguard Worker #ifndef _IH264E_DEFS_H_ 38*495ae853SAndroid Build Coastguard Worker #define _IH264E_DEFS_H_ 39*495ae853SAndroid Build Coastguard Worker 40*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 41*495ae853SAndroid Build Coastguard Worker /* Function Macros */ 42*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 43*495ae853SAndroid Build Coastguard Worker 44*495ae853SAndroid Build Coastguard Worker /** 45*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 46*495ae853SAndroid Build Coastguard Worker * Macro to extract residue, nnz, significant coefficient map for a 4x4 blk 47*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 48*495ae853SAndroid Build Coastguard Worker */ 49*495ae853SAndroid Build Coastguard Worker #define PARSE_COEFF_DATA_BLOCK_4x4(pv_mb_coeff_data, ps_mb_coeff_data, u4_nnz, u4_sig_coeff_map, pi2_res_block) \ 50*495ae853SAndroid Build Coastguard Worker { \ 51*495ae853SAndroid Build Coastguard Worker ps_mb_coeff_data = pv_mb_coeff_data; \ 52*495ae853SAndroid Build Coastguard Worker u4_nnz = ps_mb_coeff_data->i4_sig_map_nnz & 0xff; \ 53*495ae853SAndroid Build Coastguard Worker if (u4_nnz) \ 54*495ae853SAndroid Build Coastguard Worker { \ 55*495ae853SAndroid Build Coastguard Worker u4_sig_coeff_map = ps_mb_coeff_data->i4_sig_map_nnz >> 16; \ 56*495ae853SAndroid Build Coastguard Worker pi2_res_block = ps_mb_coeff_data->ai2_residue; \ 57*495ae853SAndroid Build Coastguard Worker pv_mb_coeff_data = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz); \ 58*495ae853SAndroid Build Coastguard Worker } \ 59*495ae853SAndroid Build Coastguard Worker else \ 60*495ae853SAndroid Build Coastguard Worker { \ 61*495ae853SAndroid Build Coastguard Worker pv_mb_coeff_data = ps_mb_coeff_data->ai2_residue; \ 62*495ae853SAndroid Build Coastguard Worker } \ 63*495ae853SAndroid Build Coastguard Worker } 64*495ae853SAndroid Build Coastguard Worker 65*495ae853SAndroid Build Coastguard Worker /** 66*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 67*495ae853SAndroid Build Coastguard Worker * Macro to compute total size required to hold on set of scaling matrices 68*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 69*495ae853SAndroid Build Coastguard Worker */ 70*495ae853SAndroid Build Coastguard Worker #define SCALING_MAT_SIZE(m_scaling_mat_size) \ 71*495ae853SAndroid Build Coastguard Worker { \ 72*495ae853SAndroid Build Coastguard Worker m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4; \ 73*495ae853SAndroid Build Coastguard Worker m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8; \ 74*495ae853SAndroid Build Coastguard Worker m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16; \ 75*495ae853SAndroid Build Coastguard Worker m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32; \ 76*495ae853SAndroid Build Coastguard Worker } 77*495ae853SAndroid Build Coastguard Worker 78*495ae853SAndroid Build Coastguard Worker /** 79*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 80*495ae853SAndroid Build Coastguard Worker * @brief Macros to get raster scan position of a block[8x8] / sub block[4x4] 81*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 82*495ae853SAndroid Build Coastguard Worker */ 83*495ae853SAndroid Build Coastguard Worker #define GET_BLK_RASTER_POS_X(x) ((x & 0x01)) 84*495ae853SAndroid Build Coastguard Worker #define GET_BLK_RASTER_POS_Y(y) ((y >> 1)) 85*495ae853SAndroid Build Coastguard Worker #define GET_SUB_BLK_RASTER_POS_X(x) ((x & 0x01)) 86*495ae853SAndroid Build Coastguard Worker #define GET_SUB_BLK_RASTER_POS_Y(y) ((y >> 1)) 87*495ae853SAndroid Build Coastguard Worker 88*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 89*495ae853SAndroid Build Coastguard Worker /* Constant Macros */ 90*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 91*495ae853SAndroid Build Coastguard Worker 92*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 93*495ae853SAndroid Build Coastguard Worker /* Width and height restrictions */ 94*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 95*495ae853SAndroid Build Coastguard Worker /** 96*495ae853SAndroid Build Coastguard Worker * Minimum width supported by codec 97*495ae853SAndroid Build Coastguard Worker */ 98*495ae853SAndroid Build Coastguard Worker #define MIN_WD 16 99*495ae853SAndroid Build Coastguard Worker 100*495ae853SAndroid Build Coastguard Worker /** 101*495ae853SAndroid Build Coastguard Worker * Maximum width supported by codec 102*495ae853SAndroid Build Coastguard Worker */ 103*495ae853SAndroid Build Coastguard Worker 104*495ae853SAndroid Build Coastguard Worker /* changed by haining@ to support Nexus 6P screen size, was previously 1920 */ 105*495ae853SAndroid Build Coastguard Worker #define MAX_WD 2560 106*495ae853SAndroid Build Coastguard Worker 107*495ae853SAndroid Build Coastguard Worker /** 108*495ae853SAndroid Build Coastguard Worker * Minimum height supported by codec 109*495ae853SAndroid Build Coastguard Worker */ 110*495ae853SAndroid Build Coastguard Worker #define MIN_HT 16 111*495ae853SAndroid Build Coastguard Worker 112*495ae853SAndroid Build Coastguard Worker /** 113*495ae853SAndroid Build Coastguard Worker * Maximum height supported by codec 114*495ae853SAndroid Build Coastguard Worker */ 115*495ae853SAndroid Build Coastguard Worker 116*495ae853SAndroid Build Coastguard Worker /* changed by haining@ to support Nexus 6P screen size, was previously 1920 */ 117*495ae853SAndroid Build Coastguard Worker #define MAX_HT 2560 118*495ae853SAndroid Build Coastguard Worker 119*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 120*495ae853SAndroid Build Coastguard Worker /* Padding sizes */ 121*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 122*495ae853SAndroid Build Coastguard Worker /** 123*495ae853SAndroid Build Coastguard Worker * Padding used for top of the frame 124*495ae853SAndroid Build Coastguard Worker */ 125*495ae853SAndroid Build Coastguard Worker #define PAD_TOP 32 126*495ae853SAndroid Build Coastguard Worker 127*495ae853SAndroid Build Coastguard Worker /** 128*495ae853SAndroid Build Coastguard Worker * Padding used for bottom of the frame 129*495ae853SAndroid Build Coastguard Worker */ 130*495ae853SAndroid Build Coastguard Worker #define PAD_BOT 32 131*495ae853SAndroid Build Coastguard Worker 132*495ae853SAndroid Build Coastguard Worker /** 133*495ae853SAndroid Build Coastguard Worker * Padding used at left of the frame 134*495ae853SAndroid Build Coastguard Worker */ 135*495ae853SAndroid Build Coastguard Worker #define PAD_LEFT 32 136*495ae853SAndroid Build Coastguard Worker 137*495ae853SAndroid Build Coastguard Worker /** 138*495ae853SAndroid Build Coastguard Worker * Padding used at right of the frame 139*495ae853SAndroid Build Coastguard Worker */ 140*495ae853SAndroid Build Coastguard Worker #define PAD_RIGHT 32 141*495ae853SAndroid Build Coastguard Worker /** 142*495ae853SAndroid Build Coastguard Worker * Padding for width 143*495ae853SAndroid Build Coastguard Worker */ 144*495ae853SAndroid Build Coastguard Worker #define PAD_WD (PAD_LEFT + PAD_RIGHT) 145*495ae853SAndroid Build Coastguard Worker /** 146*495ae853SAndroid Build Coastguard Worker * Padding for height 147*495ae853SAndroid Build Coastguard Worker */ 148*495ae853SAndroid Build Coastguard Worker #define PAD_HT (PAD_TOP + PAD_BOT) 149*495ae853SAndroid Build Coastguard Worker 150*495ae853SAndroid Build Coastguard Worker /* 151*495ae853SAndroid Build Coastguard Worker * buffer width and height for half pel buffers 152*495ae853SAndroid Build Coastguard Worker */ 153*495ae853SAndroid Build Coastguard Worker #define HP_BUFF_WD 24 154*495ae853SAndroid Build Coastguard Worker #define HP_BUFF_HT 18 155*495ae853SAndroid Build Coastguard Worker 156*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 157*495ae853SAndroid Build Coastguard Worker /* Number of frame restrictions */ 158*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 159*495ae853SAndroid Build Coastguard Worker /** 160*495ae853SAndroid Build Coastguard Worker * Maximum number of reference pictures 161*495ae853SAndroid Build Coastguard Worker */ 162*495ae853SAndroid Build Coastguard Worker #define MAX_REF_PIC_CNT 2 163*495ae853SAndroid Build Coastguard Worker 164*495ae853SAndroid Build Coastguard Worker /** 165*495ae853SAndroid Build Coastguard Worker * Minimum number of reference pictures 166*495ae853SAndroid Build Coastguard Worker */ 167*495ae853SAndroid Build Coastguard Worker #define MIN_REF_PIC_CNT 1 168*495ae853SAndroid Build Coastguard Worker 169*495ae853SAndroid Build Coastguard Worker /** 170*495ae853SAndroid Build Coastguard Worker * Maximum number of B pictures between two I/P pictures 171*495ae853SAndroid Build Coastguard Worker */ 172*495ae853SAndroid Build Coastguard Worker #define MAX_NUM_BFRAMES 8 173*495ae853SAndroid Build Coastguard Worker 174*495ae853SAndroid Build Coastguard Worker /** 175*495ae853SAndroid Build Coastguard Worker * Maximum number of pictures in input queue 176*495ae853SAndroid Build Coastguard Worker */ 177*495ae853SAndroid Build Coastguard Worker #define MAX_NUM_INP_FRAMES ((MAX_NUM_BFRAMES) + 2) 178*495ae853SAndroid Build Coastguard Worker 179*495ae853SAndroid Build Coastguard Worker /** 180*495ae853SAndroid Build Coastguard Worker * Maximum number of reference buffers in DPB manager 181*495ae853SAndroid Build Coastguard Worker */ 182*495ae853SAndroid Build Coastguard Worker #define MAX_REF_CNT 32 183*495ae853SAndroid Build Coastguard Worker 184*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 185*495ae853SAndroid Build Coastguard Worker /* Minimum size of inter prediction unit supported by encoder */ 186*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 187*495ae853SAndroid Build Coastguard Worker #define ENC_MIN_PU_SIZE 16 188*495ae853SAndroid Build Coastguard Worker 189*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 190*495ae853SAndroid Build Coastguard Worker /* Num cores releated defs */ 191*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 192*495ae853SAndroid Build Coastguard Worker /** 193*495ae853SAndroid Build Coastguard Worker * Maximum number of cores 194*495ae853SAndroid Build Coastguard Worker */ 195*495ae853SAndroid Build Coastguard Worker #define MAX_NUM_CORES 8 196*495ae853SAndroid Build Coastguard Worker 197*495ae853SAndroid Build Coastguard Worker /** 198*495ae853SAndroid Build Coastguard Worker * Maximum number of threads for pixel processing 199*495ae853SAndroid Build Coastguard Worker */ 200*495ae853SAndroid Build Coastguard Worker #define MAX_PROCESS_THREADS MAX_NUM_CORES 201*495ae853SAndroid Build Coastguard Worker 202*495ae853SAndroid Build Coastguard Worker /** 203*495ae853SAndroid Build Coastguard Worker * Maximum process context sets 204*495ae853SAndroid Build Coastguard Worker * Used to stagger encoding of MAX_CTXT_SETS in parallel 205*495ae853SAndroid Build Coastguard Worker */ 206*495ae853SAndroid Build Coastguard Worker #define MAX_CTXT_SETS 1 207*495ae853SAndroid Build Coastguard Worker /** 208*495ae853SAndroid Build Coastguard Worker * Maximum number of contexts 209*495ae853SAndroid Build Coastguard Worker * Kept as twice the number of threads, to make it easier to initialize the contexts 210*495ae853SAndroid Build Coastguard Worker * from master thread 211*495ae853SAndroid Build Coastguard Worker */ 212*495ae853SAndroid Build Coastguard Worker #define MAX_PROCESS_CTXT MAX_NUM_CORES * MAX_CTXT_SETS 213*495ae853SAndroid Build Coastguard Worker 214*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 215*495ae853SAndroid Build Coastguard Worker /* Profile and level restrictions */ 216*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 217*495ae853SAndroid Build Coastguard Worker /** 218*495ae853SAndroid Build Coastguard Worker * Max level supported by the codec 219*495ae853SAndroid Build Coastguard Worker */ 220*495ae853SAndroid Build Coastguard Worker #define MAX_LEVEL IH264_LEVEL_51 221*495ae853SAndroid Build Coastguard Worker 222*495ae853SAndroid Build Coastguard Worker /** 223*495ae853SAndroid Build Coastguard Worker * Min level supported by the codec 224*495ae853SAndroid Build Coastguard Worker */ 225*495ae853SAndroid Build Coastguard Worker #define MIN_LEVEL IH264_LEVEL_10 226*495ae853SAndroid Build Coastguard Worker 227*495ae853SAndroid Build Coastguard Worker /** 228*495ae853SAndroid Build Coastguard Worker * Maximum number of slice headers that are held in memory simultaneously 229*495ae853SAndroid Build Coastguard Worker * For single core implementation only 1 slice header is enough. 230*495ae853SAndroid Build Coastguard Worker * But for multi-core parsing thread needs to ensure that slice headers are 231*495ae853SAndroid Build Coastguard Worker * stored till the last CB in a slice is decoded. 232*495ae853SAndroid Build Coastguard Worker * Parsing thread has to wait till last CB of a slice is consumed before reusing 233*495ae853SAndroid Build Coastguard Worker * overwriting the slice header 234*495ae853SAndroid Build Coastguard Worker * MAX_SLICE_HDR_CNT is assumed to be a power of 2 235*495ae853SAndroid Build Coastguard Worker */ 236*495ae853SAndroid Build Coastguard Worker 237*495ae853SAndroid Build Coastguard Worker #define LOG2_MAX_SLICE_HDR_CNT 8 238*495ae853SAndroid Build Coastguard Worker #define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT) 239*495ae853SAndroid Build Coastguard Worker 240*495ae853SAndroid Build Coastguard Worker /** 241*495ae853SAndroid Build Coastguard Worker * Generic declarations 242*495ae853SAndroid Build Coastguard Worker */ 243*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MAX_LEVEL 40 244*495ae853SAndroid Build Coastguard Worker #define DEFAULT_RECON_ENABLE 0 245*495ae853SAndroid Build Coastguard Worker #define DEFAULT_QUALITY_METRICS_ENABLE 0 246*495ae853SAndroid Build Coastguard Worker #define DEFAULT_RC IVE_RC_STORAGE 247*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MAX_FRAMERATE 120000 /* in ticks (1000 ticks = 1s) */ 248*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MAX_BITRATE 240000000 249*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MAX_NUM_BFRAMES 0 250*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MAX_SRCH_RANGE_X 256 251*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MAX_SRCH_RANGE_Y 256 252*495ae853SAndroid Build Coastguard Worker #define DEFAULT_SLICE_PARAM 256 253*495ae853SAndroid Build Coastguard Worker #define DEFAULT_SRC_FRAME_RATE 30000 /* in ticks (1000 ticks = 1s) */ 254*495ae853SAndroid Build Coastguard Worker #define DEFAULT_TGT_FRAME_RATE 30000 /* in ticks (1000 ticks = 1s) */ 255*495ae853SAndroid Build Coastguard Worker #define DEFAULT_BITRATE 6000000 256*495ae853SAndroid Build Coastguard Worker #define DEFAULT_QP_MIN 10 257*495ae853SAndroid Build Coastguard Worker #define DEFAULT_QP_MAX 51 258*495ae853SAndroid Build Coastguard Worker #define DEFAULT_I_QP 25 259*495ae853SAndroid Build Coastguard Worker #define DEFAULT_P_QP 28 260*495ae853SAndroid Build Coastguard Worker #define DEFAULT_B_QP 28 261*495ae853SAndroid Build Coastguard Worker #define DEFAULT_AIR_MODE IVE_AIR_MODE_NONE 262*495ae853SAndroid Build Coastguard Worker #define DEFAULT_AIR_REFRESH_PERIOD 30 263*495ae853SAndroid Build Coastguard Worker #define DEFAULT_VBV_DELAY 1000 264*495ae853SAndroid Build Coastguard Worker #define DEFAULT_VBV_SIZE 240000000 /* level 6.0 */ 265*495ae853SAndroid Build Coastguard Worker #define DEFAULT_NUM_CORES 1 266*495ae853SAndroid Build Coastguard Worker #define DEFAULT_ME_SPEED_PRESET 100 267*495ae853SAndroid Build Coastguard Worker #define DEFAULT_HPEL 1 268*495ae853SAndroid Build Coastguard Worker #define DEFAULT_QPEL 1 269*495ae853SAndroid Build Coastguard Worker #define DEFAULT_I4 1 270*495ae853SAndroid Build Coastguard Worker #define DEFAULT_I8 0 271*495ae853SAndroid Build Coastguard Worker #define DEFAULT_I16 1 272*495ae853SAndroid Build Coastguard Worker #define DEFAULT_ENABLE_FAST_SAD 0 273*495ae853SAndroid Build Coastguard Worker #define DEFAULT_ENABLE_SATQD 1 274*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MIN_SAD_ENABLE 0 275*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MIN_SAD_DISABLE -1 276*495ae853SAndroid Build Coastguard Worker #define DEFAULT_SRCH_RNG_X 64 277*495ae853SAndroid Build Coastguard Worker #define DEFAULT_SRCH_RNG_Y 64 278*495ae853SAndroid Build Coastguard Worker #define DEFAULT_I_INTERVAL 30 279*495ae853SAndroid Build Coastguard Worker #define DEFAULT_IDR_INTERVAL 1200 280*495ae853SAndroid Build Coastguard Worker #define DEFAULT_DISABLE_DEBLK_LEVEL 0 281*495ae853SAndroid Build Coastguard Worker #define DEFAULT_PROFILE IV_PROFILE_BASE 282*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MIN_INTRA_FRAME_RATE 1 283*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MAX_INTRA_FRAME_RATE 2147483647 284*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MIN_BUFFER_DELAY 30 285*495ae853SAndroid Build Coastguard Worker #define DEFAULT_MAX_BUFFER_DELAY 20000 286*495ae853SAndroid Build Coastguard Worker #define DEFAULT_STRIDE 0 287*495ae853SAndroid Build Coastguard Worker #define DEFAULT_PRE_ENC_ME 0 288*495ae853SAndroid Build Coastguard Worker #define DEFAULT_PRE_ENC_IPE 0 289*495ae853SAndroid Build Coastguard Worker #define DEFAULT_ENTROPY_CODING_MODE 0 290*495ae853SAndroid Build Coastguard Worker #define DEFAULT_CONSTRAINED_INTRAPRED 0 291*495ae853SAndroid Build Coastguard Worker 292*495ae853SAndroid Build Coastguard Worker /** Maximum number of entries in input buffer list */ 293*495ae853SAndroid Build Coastguard Worker #define MAX_INP_BUF_LIST_ENTRIES 32 294*495ae853SAndroid Build Coastguard Worker 295*495ae853SAndroid Build Coastguard Worker /** Maximum number of entries in output buffer list */ 296*495ae853SAndroid Build Coastguard Worker #define MAX_OUT_BUF_LIST_ENTRIES 32 297*495ae853SAndroid Build Coastguard Worker 298*495ae853SAndroid Build Coastguard Worker /** Maximum number of entries in recon buffer list used within the encoder */ 299*495ae853SAndroid Build Coastguard Worker #define MAX_REC_LIST_ENTRIES 16 300*495ae853SAndroid Build Coastguard Worker 301*495ae853SAndroid Build Coastguard Worker /** Number of buffers created to hold half-pel planes for every reference buffer */ 302*495ae853SAndroid Build Coastguard Worker #define HPEL_PLANES_CNT 1 303*495ae853SAndroid Build Coastguard Worker 304*495ae853SAndroid Build Coastguard Worker /** Number of buffers Needed for SUBPEL and BIPRED computation */ 305*495ae853SAndroid Build Coastguard Worker #define SUBPEL_BUFF_CNT 4 306*495ae853SAndroid Build Coastguard Worker 307*495ae853SAndroid Build Coastguard Worker #define NUM_RC_MEMTABS 17 308*495ae853SAndroid Build Coastguard Worker 309*495ae853SAndroid Build Coastguard Worker #define DISABLE_DEBLOCK_INTERVAL 8 310*495ae853SAndroid Build Coastguard Worker 311*495ae853SAndroid Build Coastguard Worker /** Mask value for PSNR. Needed when quality metrics is enabled */ 312*495ae853SAndroid Build Coastguard Worker #define QUALITY_MASK_PSNR 0x1 313*495ae853SAndroid Build Coastguard Worker 314*495ae853SAndroid Build Coastguard Worker /** 315*495ae853SAndroid Build Coastguard Worker **************************************************************************** 316*495ae853SAndroid Build Coastguard Worker * Number of buffers for I/O based on format 317*495ae853SAndroid Build Coastguard Worker **************************************************************************** 318*495ae853SAndroid Build Coastguard Worker */ 319*495ae853SAndroid Build Coastguard Worker 320*495ae853SAndroid Build Coastguard Worker /** Minimum number of input buffers */ 321*495ae853SAndroid Build Coastguard Worker #define MIN_INP_BUFS 2 322*495ae853SAndroid Build Coastguard Worker 323*495ae853SAndroid Build Coastguard Worker /** Minimum number of output buffers */ 324*495ae853SAndroid Build Coastguard Worker #define MIN_OUT_BUFS 1 325*495ae853SAndroid Build Coastguard Worker 326*495ae853SAndroid Build Coastguard Worker /** Minimum number of components in bitstream buffer */ 327*495ae853SAndroid Build Coastguard Worker #define MIN_BITS_BUFS_COMP 1 328*495ae853SAndroid Build Coastguard Worker 329*495ae853SAndroid Build Coastguard Worker /** Minimum number of components in raw buffer */ 330*495ae853SAndroid Build Coastguard Worker #define MIN_RAW_BUFS_420_COMP 3 331*495ae853SAndroid Build Coastguard Worker #define MIN_RAW_BUFS_422ILE_COMP 1 332*495ae853SAndroid Build Coastguard Worker #define MIN_RAW_BUFS_RGB565_COMP 1 333*495ae853SAndroid Build Coastguard Worker #define MIN_RAW_BUFS_RGBA8888_COMP 1 334*495ae853SAndroid Build Coastguard Worker #define MIN_RAW_BUFS_420SP_COMP 2 335*495ae853SAndroid Build Coastguard Worker 336*495ae853SAndroid Build Coastguard Worker /** Maximum number of active config paramter sets */ 337*495ae853SAndroid Build Coastguard Worker #define MAX_ACTIVE_CONFIG_PARAMS 32 338*495ae853SAndroid Build Coastguard Worker 339*495ae853SAndroid Build Coastguard Worker /** 340*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 341*495ae853SAndroid Build Coastguard Worker * @brief Thresholds for luma & chroma to determine if the 8x8 subblock needs 342*495ae853SAndroid Build Coastguard Worker * to be encoded or skipped 343*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 344*495ae853SAndroid Build Coastguard Worker */ 345*495ae853SAndroid Build Coastguard Worker #define LUMA_SUB_BLOCK_SKIP_THRESHOLD 4 346*495ae853SAndroid Build Coastguard Worker #define LUMA_BLOCK_SKIP_THRESHOLD 5 347*495ae853SAndroid Build Coastguard Worker #define CHROMA_BLOCK_SKIP_THRESHOLD 4 348*495ae853SAndroid Build Coastguard Worker 349*495ae853SAndroid Build Coastguard Worker /** 350*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 351*495ae853SAndroid Build Coastguard Worker * @brief defines the first byte of a NAL unit 352*495ae853SAndroid Build Coastguard Worker * forbidden zero bit - nal_ref_idc - nal_unit_type 353*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 354*495ae853SAndroid Build Coastguard Worker */ 355*495ae853SAndroid Build Coastguard Worker /* [0 - 11 - 00111] */ 356*495ae853SAndroid Build Coastguard Worker #define NAL_SPS_FIRST_BYTE 0x67 357*495ae853SAndroid Build Coastguard Worker 358*495ae853SAndroid Build Coastguard Worker /* [0 - 11 - 01000] */ 359*495ae853SAndroid Build Coastguard Worker #define NAL_PPS_FIRST_BYTE 0x68 360*495ae853SAndroid Build Coastguard Worker 361*495ae853SAndroid Build Coastguard Worker /* [0 - 11 - 00001] */ 362*495ae853SAndroid Build Coastguard Worker #define NAL_SLICE_FIRST_BYTE 0x61 363*495ae853SAndroid Build Coastguard Worker 364*495ae853SAndroid Build Coastguard Worker /* [0 - 00 - 00001] */ 365*495ae853SAndroid Build Coastguard Worker #define NAL_NON_REF_SLICE_FIRST_BYTE 0x01 366*495ae853SAndroid Build Coastguard Worker 367*495ae853SAndroid Build Coastguard Worker /* [0 - 11 - 00101] */ 368*495ae853SAndroid Build Coastguard Worker #define NAL_IDR_SLICE_FIRST_BYTE 0x65 369*495ae853SAndroid Build Coastguard Worker 370*495ae853SAndroid Build Coastguard Worker /* [0 - 00 - 01100] */ 371*495ae853SAndroid Build Coastguard Worker #define NAL_FILLER_FIRST_BYTE 0x0C 372*495ae853SAndroid Build Coastguard Worker 373*495ae853SAndroid Build Coastguard Worker /* [0 - 00 - 00110] */ 374*495ae853SAndroid Build Coastguard Worker #define NAL_SEI_FIRST_BYTE 0x06 375*495ae853SAndroid Build Coastguard Worker 376*495ae853SAndroid Build Coastguard Worker /** 377*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 378*495ae853SAndroid Build Coastguard Worker * @brief h264qp and linear qp map 379*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 380*495ae853SAndroid Build Coastguard Worker */ 381*495ae853SAndroid Build Coastguard Worker #define H264_MPEG_QP_MAP 255 382*495ae853SAndroid Build Coastguard Worker #define MPEG2_QP_ELEM (H264_MPEG_QP_MAP + 1) 383*495ae853SAndroid Build Coastguard Worker #define H264_QP_ELEM (MAX_H264_QP + 1) 384*495ae853SAndroid Build Coastguard Worker 385*495ae853SAndroid Build Coastguard Worker 386*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 387*495ae853SAndroid Build Coastguard Worker /* Enums */ 388*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 389*495ae853SAndroid Build Coastguard Worker 390*495ae853SAndroid Build Coastguard Worker /** 391*495ae853SAndroid Build Coastguard Worker *************************************************************************** 392*495ae853SAndroid Build Coastguard Worker * Enum to hold various mem records being request 393*495ae853SAndroid Build Coastguard Worker **************************************************************************** 394*495ae853SAndroid Build Coastguard Worker */ 395*495ae853SAndroid Build Coastguard Worker enum 396*495ae853SAndroid Build Coastguard Worker { 397*495ae853SAndroid Build Coastguard Worker /** 398*495ae853SAndroid Build Coastguard Worker * Codec Object at API level 399*495ae853SAndroid Build Coastguard Worker */ 400*495ae853SAndroid Build Coastguard Worker MEM_REC_IV_OBJ, 401*495ae853SAndroid Build Coastguard Worker 402*495ae853SAndroid Build Coastguard Worker /** 403*495ae853SAndroid Build Coastguard Worker * Codec context 404*495ae853SAndroid Build Coastguard Worker */ 405*495ae853SAndroid Build Coastguard Worker MEM_REC_CODEC, 406*495ae853SAndroid Build Coastguard Worker 407*495ae853SAndroid Build Coastguard Worker /** 408*495ae853SAndroid Build Coastguard Worker * Cabac context 409*495ae853SAndroid Build Coastguard Worker */ 410*495ae853SAndroid Build Coastguard Worker MEM_REC_CABAC, 411*495ae853SAndroid Build Coastguard Worker 412*495ae853SAndroid Build Coastguard Worker /** 413*495ae853SAndroid Build Coastguard Worker * Cabac context_mb_info 414*495ae853SAndroid Build Coastguard Worker */ 415*495ae853SAndroid Build Coastguard Worker MEM_REC_CABAC_MB_INFO, 416*495ae853SAndroid Build Coastguard Worker 417*495ae853SAndroid Build Coastguard Worker /** 418*495ae853SAndroid Build Coastguard Worker * entropy context 419*495ae853SAndroid Build Coastguard Worker */ 420*495ae853SAndroid Build Coastguard Worker MEM_REC_ENTROPY, 421*495ae853SAndroid Build Coastguard Worker 422*495ae853SAndroid Build Coastguard Worker /** 423*495ae853SAndroid Build Coastguard Worker * Buffer to hold coeff data 424*495ae853SAndroid Build Coastguard Worker */ 425*495ae853SAndroid Build Coastguard Worker MEM_REC_MB_COEFF_DATA, 426*495ae853SAndroid Build Coastguard Worker 427*495ae853SAndroid Build Coastguard Worker /** 428*495ae853SAndroid Build Coastguard Worker * Buffer to hold coeff data 429*495ae853SAndroid Build Coastguard Worker */ 430*495ae853SAndroid Build Coastguard Worker MEM_REC_MB_HEADER_DATA, 431*495ae853SAndroid Build Coastguard Worker 432*495ae853SAndroid Build Coastguard Worker /** 433*495ae853SAndroid Build Coastguard Worker * Motion vector bank 434*495ae853SAndroid Build Coastguard Worker */ 435*495ae853SAndroid Build Coastguard Worker MEM_REC_MVBANK, 436*495ae853SAndroid Build Coastguard Worker 437*495ae853SAndroid Build Coastguard Worker /** 438*495ae853SAndroid Build Coastguard Worker * Motion vector bits 439*495ae853SAndroid Build Coastguard Worker */ 440*495ae853SAndroid Build Coastguard Worker MEM_REC_MVBITS, 441*495ae853SAndroid Build Coastguard Worker 442*495ae853SAndroid Build Coastguard Worker /** 443*495ae853SAndroid Build Coastguard Worker * Overlay Intra Cost Map 444*495ae853SAndroid Build Coastguard Worker */ 445*495ae853SAndroid Build Coastguard Worker MEM_REC_INTRA_COST, 446*495ae853SAndroid Build Coastguard Worker 447*495ae853SAndroid Build Coastguard Worker /** 448*495ae853SAndroid Build Coastguard Worker * Holds mem records passed to the codec. 449*495ae853SAndroid Build Coastguard Worker */ 450*495ae853SAndroid Build Coastguard Worker MEM_REC_BACKUP, 451*495ae853SAndroid Build Coastguard Worker 452*495ae853SAndroid Build Coastguard Worker /** 453*495ae853SAndroid Build Coastguard Worker * Holds SPS 454*495ae853SAndroid Build Coastguard Worker */ 455*495ae853SAndroid Build Coastguard Worker MEM_REC_SPS, 456*495ae853SAndroid Build Coastguard Worker 457*495ae853SAndroid Build Coastguard Worker /** 458*495ae853SAndroid Build Coastguard Worker * Holds PPS 459*495ae853SAndroid Build Coastguard Worker */ 460*495ae853SAndroid Build Coastguard Worker MEM_REC_PPS, 461*495ae853SAndroid Build Coastguard Worker 462*495ae853SAndroid Build Coastguard Worker /** 463*495ae853SAndroid Build Coastguard Worker * Holds Slice Headers 464*495ae853SAndroid Build Coastguard Worker */ 465*495ae853SAndroid Build Coastguard Worker MEM_REC_SLICE_HDR, 466*495ae853SAndroid Build Coastguard Worker 467*495ae853SAndroid Build Coastguard Worker /** 468*495ae853SAndroid Build Coastguard Worker * Contains map indicating slice index per MB basis 469*495ae853SAndroid Build Coastguard Worker */ 470*495ae853SAndroid Build Coastguard Worker MEM_REC_SLICE_MAP, 471*495ae853SAndroid Build Coastguard Worker 472*495ae853SAndroid Build Coastguard Worker /** 473*495ae853SAndroid Build Coastguard Worker * Holds thread handles 474*495ae853SAndroid Build Coastguard Worker */ 475*495ae853SAndroid Build Coastguard Worker MEM_REC_THREAD_HANDLE, 476*495ae853SAndroid Build Coastguard Worker 477*495ae853SAndroid Build Coastguard Worker /** 478*495ae853SAndroid Build Coastguard Worker * Holds control call mutex 479*495ae853SAndroid Build Coastguard Worker */ 480*495ae853SAndroid Build Coastguard Worker MEM_REC_CTL_MUTEX, 481*495ae853SAndroid Build Coastguard Worker 482*495ae853SAndroid Build Coastguard Worker /** 483*495ae853SAndroid Build Coastguard Worker * Holds entropy call mutex 484*495ae853SAndroid Build Coastguard Worker */ 485*495ae853SAndroid Build Coastguard Worker MEM_REC_ENTROPY_MUTEX, 486*495ae853SAndroid Build Coastguard Worker 487*495ae853SAndroid Build Coastguard Worker /** 488*495ae853SAndroid Build Coastguard Worker * Holds memory for Process JOB Queue 489*495ae853SAndroid Build Coastguard Worker */ 490*495ae853SAndroid Build Coastguard Worker MEM_REC_PROC_JOBQ, 491*495ae853SAndroid Build Coastguard Worker 492*495ae853SAndroid Build Coastguard Worker /** 493*495ae853SAndroid Build Coastguard Worker * Holds memory for Entropy JOB Queue 494*495ae853SAndroid Build Coastguard Worker */ 495*495ae853SAndroid Build Coastguard Worker MEM_REC_ENTROPY_JOBQ, 496*495ae853SAndroid Build Coastguard Worker 497*495ae853SAndroid Build Coastguard Worker /** 498*495ae853SAndroid Build Coastguard Worker * Contains status map indicating processing status per MB basis 499*495ae853SAndroid Build Coastguard Worker */ 500*495ae853SAndroid Build Coastguard Worker MEM_REC_PROC_MAP, 501*495ae853SAndroid Build Coastguard Worker 502*495ae853SAndroid Build Coastguard Worker /** 503*495ae853SAndroid Build Coastguard Worker * Contains status map indicating deblocking status per MB basis 504*495ae853SAndroid Build Coastguard Worker */ 505*495ae853SAndroid Build Coastguard Worker MEM_REC_DBLK_MAP, 506*495ae853SAndroid Build Coastguard Worker 507*495ae853SAndroid Build Coastguard Worker /* 508*495ae853SAndroid Build Coastguard Worker * Contains AIR map and mask 509*495ae853SAndroid Build Coastguard Worker */ 510*495ae853SAndroid Build Coastguard Worker MEM_REC_AIR_MAP, 511*495ae853SAndroid Build Coastguard Worker 512*495ae853SAndroid Build Coastguard Worker /** 513*495ae853SAndroid Build Coastguard Worker * Contains status map indicating ME status per MB basis 514*495ae853SAndroid Build Coastguard Worker */ 515*495ae853SAndroid Build Coastguard Worker MEM_REC_ME_MAP, 516*495ae853SAndroid Build Coastguard Worker 517*495ae853SAndroid Build Coastguard Worker /** 518*495ae853SAndroid Build Coastguard Worker * Holds dpb manager context 519*495ae853SAndroid Build Coastguard Worker */ 520*495ae853SAndroid Build Coastguard Worker MEM_REC_DPB_MGR, 521*495ae853SAndroid Build Coastguard Worker 522*495ae853SAndroid Build Coastguard Worker /** 523*495ae853SAndroid Build Coastguard Worker * Holds intermediate buffers needed during processing stage 524*495ae853SAndroid Build Coastguard Worker * Memory for process contexts is allocated in this memtab 525*495ae853SAndroid Build Coastguard Worker */ 526*495ae853SAndroid Build Coastguard Worker MEM_REC_PROC_SCRATCH, 527*495ae853SAndroid Build Coastguard Worker 528*495ae853SAndroid Build Coastguard Worker /** 529*495ae853SAndroid Build Coastguard Worker * Holds buffers for vert_bs, horz_bs and QP (all frame level) 530*495ae853SAndroid Build Coastguard Worker */ 531*495ae853SAndroid Build Coastguard Worker MEM_REC_QUANT_PARAM, 532*495ae853SAndroid Build Coastguard Worker 533*495ae853SAndroid Build Coastguard Worker /** 534*495ae853SAndroid Build Coastguard Worker * Holds top row syntax information 535*495ae853SAndroid Build Coastguard Worker */ 536*495ae853SAndroid Build Coastguard Worker MEM_REC_TOP_ROW_SYN_INFO, 537*495ae853SAndroid Build Coastguard Worker 538*495ae853SAndroid Build Coastguard Worker /** 539*495ae853SAndroid Build Coastguard Worker * Holds buffers for vert_bs, horz_bs and QP (all frame level) 540*495ae853SAndroid Build Coastguard Worker */ 541*495ae853SAndroid Build Coastguard Worker MEM_REC_BS_QP, 542*495ae853SAndroid Build Coastguard Worker 543*495ae853SAndroid Build Coastguard Worker /** 544*495ae853SAndroid Build Coastguard Worker * Holds input buffer manager context 545*495ae853SAndroid Build Coastguard Worker */ 546*495ae853SAndroid Build Coastguard Worker MEM_REC_INP_PIC, 547*495ae853SAndroid Build Coastguard Worker 548*495ae853SAndroid Build Coastguard Worker /** 549*495ae853SAndroid Build Coastguard Worker * Holds output buffer manager context 550*495ae853SAndroid Build Coastguard Worker */ 551*495ae853SAndroid Build Coastguard Worker MEM_REC_OUT, 552*495ae853SAndroid Build Coastguard Worker 553*495ae853SAndroid Build Coastguard Worker /** 554*495ae853SAndroid Build Coastguard Worker * Holds picture buffer manager context and array of pic_buf_ts 555*495ae853SAndroid Build Coastguard Worker * Also holds reference picture buffers in non-shared mode 556*495ae853SAndroid Build Coastguard Worker */ 557*495ae853SAndroid Build Coastguard Worker MEM_REC_REF_PIC, 558*495ae853SAndroid Build Coastguard Worker 559*495ae853SAndroid Build Coastguard Worker /* 560*495ae853SAndroid Build Coastguard Worker * Mem record for color space conversion 561*495ae853SAndroid Build Coastguard Worker */ 562*495ae853SAndroid Build Coastguard Worker MEM_REC_CSC, 563*495ae853SAndroid Build Coastguard Worker 564*495ae853SAndroid Build Coastguard Worker /** 565*495ae853SAndroid Build Coastguard Worker * NMB info struct 566*495ae853SAndroid Build Coastguard Worker */ 567*495ae853SAndroid Build Coastguard Worker MEM_REC_MB_INFO_NMB, 568*495ae853SAndroid Build Coastguard Worker 569*495ae853SAndroid Build Coastguard Worker /** 570*495ae853SAndroid Build Coastguard Worker * Rate control of memory records. 571*495ae853SAndroid Build Coastguard Worker */ 572*495ae853SAndroid Build Coastguard Worker MEM_REC_RC, 573*495ae853SAndroid Build Coastguard Worker 574*495ae853SAndroid Build Coastguard Worker /** 575*495ae853SAndroid Build Coastguard Worker * Place holder to compute number of memory records. 576*495ae853SAndroid Build Coastguard Worker */ 577*495ae853SAndroid Build Coastguard Worker MEM_REC_CNT = MEM_REC_RC + NUM_RC_MEMTABS, 578*495ae853SAndroid Build Coastguard Worker 579*495ae853SAndroid Build Coastguard Worker /* 580*495ae853SAndroid Build Coastguard Worker * Do not add anything below 581*495ae853SAndroid Build Coastguard Worker */ 582*495ae853SAndroid Build Coastguard Worker }; 583*495ae853SAndroid Build Coastguard Worker 584*495ae853SAndroid Build Coastguard Worker /** 585*495ae853SAndroid Build Coastguard Worker **************************************************************************** 586*495ae853SAndroid Build Coastguard Worker * Disable deblock levels 587*495ae853SAndroid Build Coastguard Worker * Level 0 enables deblocking completely and level 4 disables completely 588*495ae853SAndroid Build Coastguard Worker * Other levels are intermediate values to control deblocking level 589*495ae853SAndroid Build Coastguard Worker **************************************************************************** 590*495ae853SAndroid Build Coastguard Worker */ 591*495ae853SAndroid Build Coastguard Worker enum 592*495ae853SAndroid Build Coastguard Worker { 593*495ae853SAndroid Build Coastguard Worker /** 594*495ae853SAndroid Build Coastguard Worker * Enable deblocking completely 595*495ae853SAndroid Build Coastguard Worker */ 596*495ae853SAndroid Build Coastguard Worker DISABLE_DEBLK_LEVEL_0, 597*495ae853SAndroid Build Coastguard Worker 598*495ae853SAndroid Build Coastguard Worker /** 599*495ae853SAndroid Build Coastguard Worker * Disable only within MB edges - Not supported currently 600*495ae853SAndroid Build Coastguard Worker */ 601*495ae853SAndroid Build Coastguard Worker DISABLE_DEBLK_LEVEL_1, 602*495ae853SAndroid Build Coastguard Worker 603*495ae853SAndroid Build Coastguard Worker /** 604*495ae853SAndroid Build Coastguard Worker * Enable deblocking once in DEBLOCK_INTERVAL number of pictures 605*495ae853SAndroid Build Coastguard Worker * and for I slices 606*495ae853SAndroid Build Coastguard Worker */ 607*495ae853SAndroid Build Coastguard Worker DISABLE_DEBLK_LEVEL_2, 608*495ae853SAndroid Build Coastguard Worker 609*495ae853SAndroid Build Coastguard Worker /** 610*495ae853SAndroid Build Coastguard Worker * Enable deblocking only for I slices 611*495ae853SAndroid Build Coastguard Worker */ 612*495ae853SAndroid Build Coastguard Worker DISABLE_DEBLK_LEVEL_3, 613*495ae853SAndroid Build Coastguard Worker 614*495ae853SAndroid Build Coastguard Worker /** 615*495ae853SAndroid Build Coastguard Worker * Disable deblocking completely 616*495ae853SAndroid Build Coastguard Worker */ 617*495ae853SAndroid Build Coastguard Worker DISABLE_DEBLK_LEVEL_4 618*495ae853SAndroid Build Coastguard Worker }; 619*495ae853SAndroid Build Coastguard Worker 620*495ae853SAndroid Build Coastguard Worker #endif /*_IH264E_DEFS_H_ */ 621