Home | History | Annotate | Download | only in encoder
      1 /******************************************************************************
      2  *
      3  * Copyright (C) 2018 The Android Open Source Project
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at:
      8  *
      9  * http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  *
     17  *****************************************************************************
     18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
     19 */
     20 
     21 /**
     22 *******************************************************************************
     23 * @file
     24 *  ihevce_defs.h
     25 *
     26 * @brief
     27 *  Definitions used in the codec
     28 *
     29 * @author
     30 *  Ittiam
     31 *
     32 * @remarks
     33 *  None
     34 *
     35 *******************************************************************************
     36 */
     37 #ifndef _IHEVCE_DEFS_H_
     38 #define _IHEVCE_DEFS_H_
     39 
     40 /*****************************************************************************/
     41 /* Constant Macros                                                           */
     42 /*****************************************************************************/
     43 
     44 #define SINGLE_THREAD_INTERFACE 0
     45 
     46 #define DEFAULT_VPS_ID 0
     47 
     48 #define DEFAULT_SPS_ID 0
     49 
     50 #define DEFAULT_PPS_ID 0
     51 
     52 #define DEFAULT_CHROMA_FORMAT_IDC 1
     53 
     54 #define AMP_ENABLED 1
     55 
     56 #define AMP_DISABLED 0
     57 
     58 #define LISTS_MODIFICATION_ABSENT 0
     59 
     60 #define LISTS_MODIFICATION_PRESENT 1
     61 
     62 #define LONG_TERM_REF_PICS_PRESENT 1
     63 
     64 #define LONG_TERM_REF_PICS_ABSENT 0
     65 
     66 #define PCM_ENABLED 1
     67 
     68 #define PCM_DISABLED 0
     69 
     70 #define PCM_LOOP_FILTER_DISABLED 1
     71 
     72 #define PCM_LOOP_FILTER_ENABLED 0
     73 
     74 #define REF_PIC_LISTS_RESTRICTED 1
     75 
     76 #define REF_PIC_LISTS_UNRESTRICTED 0
     77 
     78 #define SCALING_LIST_DISABLED 0
     79 
     80 #define SCALING_LIST_ENABLED 1
     81 
     82 #define DEFAULT_SPS_MAX_SUB_LAYERS 1
     83 
     84 #define VPS_SUB_LAYER_ORDERING_INFO_PRESENT 1
     85 
     86 #define VPS_SUB_LAYER_ORDERING_INFO_ABSENT 0
     87 
     88 #define SPS_SUB_LAYER_ORDERING_INFO_PRESENT 1
     89 
     90 #define SPS_SUB_LAYER_ORDERING_INFO_ABSENT 0
     91 
     92 #define SCALING_LIST_DATA_PRESENT 1
     93 
     94 #define SCALING_LIST_DATA_ABSENT 0
     95 
     96 #define SPS_TEMPORAL_ID_NESTING_DONE 1
     97 
     98 #define NO_SPS_TEMPORAL_ID_NESTING_DONE 0
     99 
    100 #define STRONG_INTRA_SMOOTHING_FLAG_DISABLE 0
    101 
    102 #define STRONG_INTRA_SMOOTHING_FLAG_ENABLE 1
    103 
    104 #define DEFAULT_LOG2_MAX_POC_LSB 10
    105 
    106 #define DEFAULT_PIC_CROP_TOP_OFFSET 0
    107 
    108 #define DEFAULT_PIC_CROP_LEFT_OFFSET 0
    109 
    110 #define DEFAULT_PIC_CROP_RIGHT_OFFSET 0
    111 
    112 #define DEFAULT_PIC_CROP_BOTTOM_OFFSET 0
    113 
    114 #define DEFAULT_MAX_DEC_PIC_BUFFERING 8
    115 
    116 #define DEFAULT_MAX_NUM_REORDER_PICS 8
    117 
    118 #define DEFAULT_MAX_LATENCY_INCREASE 8
    119 
    120 #define HIGH_TIER 1
    121 
    122 #define MAIN_TIER 0
    123 
    124 #define DEFAULT_BETA_OFFSET 0
    125 
    126 #define CABAC_INIT_PRESENT 1
    127 
    128 #define CABAC_INIT_ABSENT 0
    129 
    130 #define CU_QP_DELTA_ENABLED 1
    131 
    132 #define CU_QP_DELTA_DISABLED 0
    133 
    134 #define MAX_MERGE_CANDIDATES 5
    135 
    136 #define CONSTR_IPRED_ENABLED 1
    137 
    138 #define CONSTR_IPRED_DISABLED 0
    139 
    140 #define DISABLE_DEBLOCKING_FLAG 1
    141 
    142 #define ENABLE_DEBLOCKING_FLAG 0
    143 
    144 #define DEBLOCKING_FILTER_CONTROL_PRESENT 1
    145 
    146 #define DEBLOCKING_FILTER_CONTROL_ABSENT 0
    147 
    148 #define DEBLOCKING_FILTER_OVERRIDE_ENABLED 1
    149 
    150 #define DEBLOCKING_FILTER_OVERRIDE_DISABLED 0
    151 
    152 #define DEPENDENT_SLICE_ENABLED 1
    153 
    154 #define DEPENDENT_SLICE_DISABLED 0
    155 
    156 #define DEFAULT_DIFF_CU_QP_DELTA_DEPTH 0
    157 
    158 #define ENTROPY_CODING_SYNC_ENABLED 1
    159 
    160 #define ENTROPY_CODING_SYNC_DISABLED 0
    161 
    162 #define ENTROPY_SLICE_ENABLED 1
    163 
    164 #define ENTROPY_SLICE_DISABLED 0
    165 
    166 #define DEFAULT_PARALLEL_MERGE_LEVEL 2
    167 
    168 #define DEFAULT_NUM_REF_IDX_L0_DEFAULT_ACTIVE 6
    169 
    170 #define DEFAULT_NUM_REF_IDX_L1_DEFAULT_ACTIVE 6
    171 
    172 #define NUM_TILES_COLS 0
    173 
    174 #define NUM_TILES_ROWS 0
    175 
    176 #define OUTPUT_FLAG_PRESENT 1
    177 
    178 #define OUTPUT_FLAG_ABSENT 0
    179 
    180 #define DEFAULT_PIC_CB_QP_OFFSET 0
    181 
    182 #define DEFAULT_PIC_CR_QP_OFFSET 0
    183 
    184 #define SLICE_LEVEL_CHROMA_QP_OFFSETS_PRESENT 1
    185 
    186 #define SLICE_LEVEL_CHROMA_QP_OFFSETS_ABSENT 0
    187 
    188 #define DEBLOCKING_FILTER_DISABLED 1
    189 
    190 #define DEBLOCKING_FILTER_ENABLED 0
    191 
    192 #define LF_ACROSS_SLICES_ENABLED 1
    193 
    194 #define LF_ACROSS_SLICES_DISABLED 0
    195 
    196 #define SAO_ENABLED 1
    197 
    198 #define SAO_DISABLED 0
    199 
    200 #define SCALING_LIST_DATA_PRESENT 1
    201 
    202 #define SCALING_LIST_DATA_ABSENT 0
    203 
    204 #define SIGN_DATA_HIDDEN 1
    205 
    206 #define SIGN_DATA_UNHIDDEN 0
    207 
    208 #define SLICE_EXTENSION_PRESENT 1
    209 
    210 #define SLICE_EXTENSION_ABSENT 0
    211 
    212 #define SLICE_HEADER_EXTENSION_PRESENT 1
    213 
    214 #define SLICE_HEADER_EXTENSION_ABSENT 0
    215 
    216 #define DEFAULT_TC_OFFSET 0
    217 
    218 #define TRANSFORM_SKIP_ENABLED 1
    219 
    220 #define TRANSFORM_SKIP_DISABLED 0
    221 
    222 #define TRANSFORM_BYPASS_ENABLED 1
    223 
    224 #define TRANSFORM_BYPASS_DISABLED 0
    225 
    226 #define SPACING_IS_UNIFORM 1
    227 
    228 #define SPACING_IS_NONUNIFORM 0
    229 
    230 #define TILES_ENABLED 1
    231 
    232 #define TILES_DISABLED 0
    233 
    234 #define TOTAL_NUM_TIERS 2
    235 
    236 #define TOTAL_NUM_LEVELS 13
    237 
    238 #define SET_CTB_ALIGN(x, y) ((((x) & ((y)-1)) == 0) ? 0 : (y) - ((x) & ((y)-1)))
    239 
    240 /* Enables HM-8.1 compatible stream, setting to 0 will make it 8.2 compatible*/
    241 #define HM_8DOT1_SYNTAX 0
    242 
    243 /* Enables cu level RD optimized encoding by computing cabac bits for the cu */
    244 #define RDOPT_ENABLE 1
    245 
    246 /* Enables inclusion of chroma coding cost for RD opt decisions */
    247 #define CHROMA_RDOPT_ENABLE 1
    248 
    249 /* Enables tu level zero cbf based RD optimized encoding */
    250 #define RDOPT_ZERO_CBF_ENABLE 1
    251 
    252 /* Enables bit savings in tu tree of inter cus by merging not coded child nodes to parent node */
    253 #define SHRINK_INTER_TUTREE 1
    254 
    255 /*  q format for lamba used in the encoder                                   */
    256 #define LAMBDA_Q_SHIFT 8
    257 
    258 /* If 0, Allign PIC Wd/ht to Min CU size  */
    259 /* If 1, Allign PIC Wd/ht to CTB size  */
    260 #define PIC_ALIGN_CTB_SIZE 0
    261 
    262 /** Enables DCT integer transform / Hadamard Transform based SATD evaluation
    263   * 1 : DCT integer Transform,  0 : Hadamard Transform
    264   */
    265 #define USE_EXACT_TFR 0
    266 
    267 /** Enable colocated PU population */
    268 #define ENABLE_COL_PU_POPULATION 1
    269 
    270 #define MAX_MVX_SUPPORTED_IN_COARSE_LAYER 128
    271 
    272 #define MAX_MVY_SUPPORTED_IN_COARSE_LAYER 64
    273 
    274 //ME_Experiments
    275 
    276 #define USE_4x4_IN_L1 0
    277 
    278 #define DIAMOND_GRID 1
    279 
    280 #define SUBPEL_DEDUPLICATE_ENABLE 1
    281 
    282 /** Enables CU delta QP population within a frame : Random for now */
    283 //#define RANDOM_CU_QP  0
    284 
    285 /**
    286  * @brief  Mapping of Minimum HEVC qp to MPEG2 QP
    287  */
    288 #define MIN_RC_QP (1)
    289 /**
    290  * @brief  Mapping of Maximum HEVC qp to MPEG2 QP
    291  */
    292 #define MAX_RC_QP (228)
    293 /**
    294  * @brief  Total NUmber of MPEG2 QPs
    295  */
    296 #define MPEG2_QP_ELEM (MAX_RC_QP + 1)
    297 /**
    298  * @brief  Total NUmber of HEVC QPs
    299  */
    300 #define HEVC_QP_ELEM (MAX_HEVC_QP_10bit + 1)
    301 
    302 #define QP_LEVEL_MOD_ACT_FACTOR 10
    303 
    304 #define TWO_POW_QP_LEVEL_MOD_ACT_FACTOR (1 << (QP_LEVEL_MOD_ACT_FACTOR))
    305 
    306 #define DEFAULT_NON_PACKED_CONSTRAINT_FLAG 1
    307 
    308 #define DEFAULT_FRAME_ONLY_CONSTRAINT_FLAG 0
    309 
    310 #define ENABLE_CU_TREE_CULLING (1 && ENABLE_4CTB_EVALUATION)
    311 
    312 #define RATIONALISE_NUM_RDO_MODES_IN_PQ_AND_HQ 1
    313 
    314 #define MAX_NUMBER_OF_INTER_RDOPT_CANDS_IN_PQ_AND_HQ 2
    315 
    316 #define MAX_NUMBER_OF_INTER_RDOPT_CANDS_IN_MS 2
    317 
    318 #define MAX_NUMBER_OF_INTER_RDOPT_CANDS_IN_HS_AND_XS 1
    319 
    320 #define BUFFER_SIZE_MULTIPLIER_IF_HBD 3
    321 
    322 /* If  */
    323 /* qp_bdoffset = 6 * (bit_depth - 8) */
    324 /* and */
    325 /* lambda = pow(2.0, (((i4_cur_frame_qp + qp_bdoffset - 12)) / 3)), */
    326 /* Then 'Lambda Types' are - */
    327 /* 0, when bit_depth_in_module = 8 => qp_bdoffset = 0 always */
    328 /* 1, when bit_depth_in_module > 8, => qp_bdoffset = value derived above */
    329 /* 2, when both of the lambdas referred to in the previous cases are required */
    330 
    331 #define PRE_ENC_LAMBDA_TYPE 0
    332 
    333 #define ENC_LAMBDA_TYPE 0
    334 
    335 #define IPE_LAMBDA_TYPE 0
    336 
    337 #define ME_LAMBDA_TYPE 0
    338 
    339 #define ENC_LOOP_LAMBDA_TYPE 2
    340 
    341 #define ENABLE_SSIM 0
    342 
    343 #define VUI_BIT_RATE_SCALE 6
    344 
    345 #define VUI_CPB_SIZE_SCALE 8
    346 
    347 #define ENABLE_REFINED_QP_MOD 1
    348 
    349 #if ENABLE_REFINED_QP_MOD
    350 /* to find the uncovered region (or new region) which will be used for reference for the upcoming pictures
    351     will be coded well to enhance coding efficiency*/
    352 #define ENABLE_TEMPORAL_WEIGHING 0
    353 
    354 /* to enable modulation factor  based on spatial variance when we calculate activity factor using
    355     the following equaltion
    356     act_factor = (m * c + a )/(c + m * a)*/
    357 // SATD_NOISE_FLOOR_THRESHOLD was earlier controlled using this
    358 #define ENABLE_QP_MOD_BASED_ON_SPATIAL_VARIANCE 0
    359 
    360 /* To enable the trace for delta Qp bits */
    361 #define QP_DELTA_BITS_TRACE
    362 
    363 /* to enable modulation based LAP2 average satd*/
    364 #define MODULATION_OVER_LAP 1
    365 
    366 /* 0 - Lamda and Qp are decoupled,
    367        1 - Lamda and Qp are coupled*/
    368 #define LAMDA_BASED_ON_QUANT 0
    369 
    370 /*
    371        0 - act_factor = (m * c + a )/(c + m * a)
    372            m = modulation factor
    373            c = cur satd
    374            a = average satd
    375        ----------------------------------------
    376        1 - act_factor = (c/a) ^ (s/3)
    377            s = strength
    378            c = cur satd
    379            a = average satd
    380     */
    381 #define LOGARITHMIC_MODULATION 1
    382 
    383 #define MEDIAN_ENABLE 1
    384 #define MIN_ENABLE 0
    385 
    386 /* well compensatable regions are not considered for
    387     QP modulation*/
    388 #define DISABLE_COMPENSATION 1
    389 
    390 #define CST_NOISE_THRSHLD 0
    391 
    392 /*decrease intra cu qp by 1 in Inter Pictures*/
    393 #define DECREASE_QP 0
    394 
    395 /*strength calculation based on deviation*/
    396 #define STRENGTH_BASED_ON_DEVIATION 1
    397 
    398 /*enable allow cliping of qctivity factor such that
    399     deviation of qp in modulation is controlled*/
    400 #define ALLOW_ACT_FACTOR_CLIP_IN_QP_MOD 1
    401 
    402 /*instead of avg activity use sqrt(avg of satd square)*/
    403 #define USE_SQRT_AVG_OF_SATD_SQR 1
    404 
    405 /*use sum of squared transform coeff*/
    406 #define USE_SQR_SATD_COEFF 0
    407 
    408 /*instead of L1 IPE SATD, use L1 CUR SATD*/
    409 #define USE_CUR_SATD 0  // else it will use satd of cur - pred
    410 
    411 /*use L0 CUR SATD */
    412 #define USE_CUR_L0_SATD 0
    413 
    414 /* strength based on only curr frame deviation else it is based on average over lap2 */
    415 #define STRENGTH_BASED_ON_CURR_FRM 0
    416 
    417 #define POW_OPT 1
    418 
    419 #else /*INITIAL QP MOD*/
    420 /*Same as 11_0 Mod version */
    421 // SATD_NOISE_FLOOR_THRESHOLD was earlier controlled using this
    422 #define ENABLE_QP_MOD_BASED_ON_SPATIAL_VARIANCE 0
    423 #define ENABLE_TEMPORAL_WEIGHING 0
    424 #define MODULATION_OVER_LAP 0
    425 #define LAMDA_BASED_ON_QUANT 1
    426 #define LOGARITHMIC_MODULATION 0
    427 #define MIN_ENABLE 1
    428 #define DISABLE_COMPENSATION 1
    429 #define CST_NOISE_THRSHLD 1
    430 #define DECREASE_QP 0
    431 #endif
    432 
    433 #define MASK_4AC 0xFFFFFFFEFEFEFCE0
    434 #define MASK_3AC 0xFFFFFFFFFEFEFCF0
    435 #define MASK_2AC 0xFFFFFFFFFFFEFCF8
    436 #define MASK_DC 0xFFFFFFFFFFFFFFFE
    437 #define I_PIC_LAMDA_MODIFIER 0.5
    438 #define CONST_LAMDA_MODIFIER 1
    439 #define NO_EXTRA_MULTIPLIER 1
    440 #define NEW_LAMDA_MODIFIER (!CONST_LAMDA_MODIFIER)
    441 #define LAMDA_MODIFIER(QP, Tid)                                                                    \
    442     (0.85 * pow(2.0, (Tid * (CLIP3(((QP + 5.0) / 25.0), 1.0, 2.0) - 1.0)) / 3.0))
    443 #define CONST_LAMDA_MOD_VAL (0.85)
    444 #define MEAN_BASED_QP_MOD 0
    445 
    446 #if MEDIAN_ENABLE
    447 #define MEDIAN_CU_TU 1
    448 #define MEDIAN_CU_TU_BY_2 3
    449 #define MEDIAN_CU_TU_BY_4 10
    450 #endif
    451 
    452 #if MIN_ENABLE
    453 #define MEDIAN_CU_TU 0
    454 #define MEDIAN_CU_TU_BY_2 0
    455 #define MEDIAN_CU_TU_BY_4 0
    456 #endif
    457 
    458 #define COMP_RATIO_NORM 5
    459 #define COMP_RATIO_MIN 0
    460 #define COMP_RATIO_MAX 3
    461 #define NOISE_THRE_MAP_TO_8 3
    462 
    463 #define REF_MOD_VARIANCE (0.6696)
    464 
    465 #define REF_MOD_DEVIATION (473.0)  //(0.6696) //
    466 #define NO_MOD_DEVIATION (220.0)
    467 #define BELOW_REF_DEVIATION (0.0)
    468 #define ABOVE_REF_DEVIATION (220.0)
    469 
    470 #define MIN_QP_MOD_OFFSET -10
    471 #define MAX_QP_MOD_OFFSET 3
    472 #define TOT_QP_MOD_OFFSET (MAX_QP_MOD_OFFSET - MIN_QP_MOD_OFFSET + 1)
    473 
    474 #define ENABLE_UNIFORM_CU_SIZE_16x16 0
    475 
    476 #define ENABLE_UNIFORM_CU_SIZE_8x8 0
    477 
    478 #define MAX_QP_BD_OFFSET 24
    479 
    480 // chroma mode index for derived from luma intra mode
    481 #define DM_CHROMA_IDX 36
    482 
    483 #define DISABLE_RDOQ 0
    484 
    485 #define DISABLE_SKIP_AND_MERGE_EVAL 0
    486 
    487 #define ENABLE_PICKING_4_BEST_IN_B_PIC_IN_ME 0
    488 
    489 #define ENABLE_TU_TREE_DETERMINATION_IN_RDOPT 0
    490 
    491 #define MAX_NUM_MIXED_MODE_INTER_RDO_CANDS (MAX_NUMBER_OF_INTER_RDOPT_CANDS_IN_PQ_AND_HQ * 2)
    492 
    493 #define MAX_NUM_CU_MERGE_SKIP_CAND (MAX_NUMBER_OF_INTER_RDOPT_CANDS_IN_PQ_AND_HQ + 1)
    494 
    495 #define NUM_MODE_COMBINATIONS_IN_INTER_CU_WITH_2_PUS 4
    496 
    497 /* +1 for skip candidate */
    498 #define MAX_NUM_INTER_RDO_CANDS                                                                    \
    499     (NUM_MODE_COMBINATIONS_IN_INTER_CU_WITH_2_PUS * MAX_NUMBER_OF_INTER_RDOPT_CANDS_IN_PQ_AND_HQ + \
    500      1)
    501 
    502 #define UNI_SATD_SCALE 1
    503 
    504 #define ENABLE_MIXED_INTER_MODE_EVAL 1
    505 
    506 #define DISABLE_SAO 0
    507 
    508 #define DISABLE_LUMA_SAO (0 || (DISABLE_SAO))
    509 
    510 #define DISABLE_CHROMA_SAO (0 || (DISABLE_SAO))
    511 
    512 #define MAX_NUM_INTER_CANDS_PQ 4 /*MAX_NUM_INTER_RDO_CANDS*/
    513 
    514 #define MAX_NUM_INTER_CANDS_HQ 4 /*MAX_NUM_INTER_RDO_CANDS*/
    515 
    516 #define MAX_NUM_INTER_CANDS_MS 3
    517 
    518 #define MAX_NUM_INTER_CANDS_HS 2
    519 
    520 #define MAX_NUM_INTER_CANDS_ES 2
    521 
    522 #define RESTRICT_NUM_INTER_CANDS_PER_PART_TYPE 0
    523 
    524 #define MAX_NUM_INTER_CANDS_PER_PART_TYPE 3
    525 
    526 #define PICK_ONLY_BEST_CAND_PER_PART_TYPE 0
    527 
    528 #define REUSE_ME_COMPUTED_ERROR_FOR_INTER_CAND_SIFTING 0
    529 
    530 #define DISABLE_SBH 0
    531 
    532 #define DISABLE_TMVP 0
    533 
    534 #define DISABLE_QUANT_ROUNDING 0
    535 
    536 #define ENABLE_SEPARATE_LUMA_CHROMA_INTRA_MODE 1
    537 
    538 #define FORCE_INTRA_TU_DEPTH_TO_0 0
    539 
    540 #define WEIGH_CHROMA_COST 1
    541 
    542 #define ENABLE_ZERO_CBF_IN_INTRA 0
    543 
    544 #define DISABLE_ZERO_ZBF_IN_INTER 0
    545 
    546 #define ENABLE_INTER_ZCU_COST 1
    547 
    548 #define ADAPT_COLOCATED_FROM_L0_FLAG 1
    549 
    550 #define CHROMA_COST_WEIGHING_FACTOR_Q_SHIFT 10
    551 
    552 #define ENABLE_SSD_CALC_RC 0
    553 
    554 #define SRC_PADDING_FOR_TRAQO 1
    555 
    556 #define ENABLE_CU_SPLIT_FLAG_RATE_ESTIMATION 1
    557 
    558 #define ZCBF_SKIP_DISTORTION_THRESHOLD (1.2)
    559 
    560 #define ENABLE_CHROMA_RDOPT_EVAL_IN_PQ 1
    561 
    562 #define ENABLE_CHROMA_RDOPT_EVAL_IN_HQ 1
    563 
    564 #define ENABLE_CHROMA_RDOPT_EVAL_IN_MS 1
    565 
    566 #define ENABLE_CHROMA_RDOPT_EVAL_IN_HS 0
    567 
    568 #define ENABLE_CHROMA_RDOPT_EVAL_IN_XS 0
    569 
    570 #define ENABLE_CHROMA_RDOPT_EVAL_IN_XS6 0
    571 
    572 #define ENABLE_ADDITIONAL_CHROMA_MODES_EVAL_IN_PQ                                                  \
    573     (1 && (ENABLE_CHROMA_RDOPT_EVAL_IN_PQ) && (ENABLE_SEPARATE_LUMA_CHROMA_INTRA_MODE))
    574 
    575 #define ENABLE_ADDITIONAL_CHROMA_MODES_EVAL_IN_HQ                                                  \
    576     (1 && (ENABLE_CHROMA_RDOPT_EVAL_IN_HQ) && (ENABLE_SEPARATE_LUMA_CHROMA_INTRA_MODE))
    577 
    578 #define ENABLE_ADDITIONAL_CHROMA_MODES_EVAL_IN_MS                                                  \
    579     (0 && (ENABLE_CHROMA_RDOPT_EVAL_IN_MS) && (ENABLE_SEPARATE_LUMA_CHROMA_INTRA_MODE))
    580 
    581 #define ENABLE_ADDITIONAL_CHROMA_MODES_EVAL_IN_HS                                                  \
    582     (0 && (ENABLE_CHROMA_RDOPT_EVAL_IN_HS) && (ENABLE_SEPARATE_LUMA_CHROMA_INTRA_MODE))
    583 
    584 #define ENABLE_ADDITIONAL_CHROMA_MODES_EVAL_IN_XS                                                  \
    585     (0 && (ENABLE_CHROMA_RDOPT_EVAL_IN_XS) && (ENABLE_SEPARATE_LUMA_CHROMA_INTRA_MODE))
    586 
    587 #define ENABLE_ADDITIONAL_CHROMA_MODES_EVAL_IN_XS6                                                 \
    588     (0 && (ENABLE_CHROMA_RDOPT_EVAL_IN_XS6) && (ENABLE_SEPARATE_LUMA_CHROMA_INTRA_MODE))
    589 
    590 #define RC_BUFFER_INFO 0
    591 
    592 #define DISABLE_SMP_IN_XS25 1
    593 
    594 #define DISABLE_64X64_BLOCK_MERGE_IN_ME_IN_XS25 1
    595 
    596 #define MAX_NUM_TU_RECUR_CANDS_IN_XS25 1
    597 
    598 #define MAX_NUM_CANDS_FOR_FPEL_REFINE_IN_XS25 1
    599 
    600 #define MAX_NUM_CONSTITUENT_MVS_TO_ENABLE_32MERGE_IN_XS25 4
    601 
    602 #define NUM_INIT_SEARCH_CANDS_IN_L1_AND_L2_ME_IN_XS25 2
    603 
    604 #define DISABLE_TOP_SYNC 0
    605 
    606 #define ENABLE_MULTI_THREAD_FILE_WRITES 0
    607 
    608 #define DISABLE_EARLY_ZCBF 0
    609 
    610 #define EARLY_CBF_ON 1
    611 
    612 #define DUMP_CBF_HIST_DATA 0
    613 
    614 #define ENABLE_INTRA_MODE_FILTERING_IN_XS25 1
    615 
    616 #define MAX_NUM_INTRA_MODES_PER_TU_DISTRIBUTION_IN_XS25 2
    617 
    618 #define MAX_NUM_REFS_IN_PPICS_IN_XS25 1
    619 
    620 #define USE_CONSTANT_LAMBDA_MODIFIER 0
    621 
    622 /* Actual Lambda in ME -> (100 - ME_LAMBDA_DISCOUNT) * lambda / 100 */
    623 #define ME_LAMBDA_DISCOUNT 0
    624 
    625 #define FORCE_AT_LEAST_1_UNICAND_IN_BPICS 0
    626 
    627 #define MULTI_REF_ENABLE 1
    628 
    629 #define PROHIBIT_INTRA_QUANT_ROUNDING_FACTOR_TO_DROP_BELOW_1BY3 0
    630 
    631 #define ENABLE_INTRA_GATING_FOR_HQ 0
    632 
    633 #define ADD_NOISE_TERM_TO_COST 1
    634 
    635 #define ALPHA_Q_FORMAT 4
    636 #define ALPHA_FOR_NOISE_TERM_IN_ME_P (1 << ((ALPHA_Q_FORMAT)-2))  //0.25
    637 #define ALPHA_FOR_NOISE_TERM_IN_ME_BREF (1 << ((ALPHA_Q_FORMAT)-2))  //0.25
    638 #define ALPHA_FOR_NOISE_TERM_IN_RDOPT_P (1 << ((ALPHA_Q_FORMAT)-2))
    639 
    640 #define ALPHA_FOR_NOISE_TERM (1 << ((ALPHA_Q_FORMAT)-2))
    641 
    642 #define ALPHA_FOR_NOISE_TERM_IN_ME (ALPHA_FOR_NOISE_TERM)
    643 
    644 #define ALPHA_FOR_NOISE_TERM_IN_RDOPT (ALPHA_FOR_NOISE_TERM)
    645 
    646 #define ALPHA_DISCOUNT_IN_REF_PICS_IN_RDOPT 50
    647 
    648 #define ALPHA_FOR_ZERO_CODING_DECISIONS (ALPHA_FOR_NOISE_TERM_IN_RDOPT)
    649 
    650 #define STIM_Q_FORMAT 8
    651 
    652 #define USE_NOISE_TERM_IN_L0_ME (1 && (ADD_NOISE_TERM_TO_COST))
    653 
    654 #define USE_NOISE_TERM_IN_ENC_LOOP (1 && (ADD_NOISE_TERM_TO_COST))
    655 
    656 #define COMPUTE_NOISE_TERM_AT_THE_TU_LEVEL (1 && (USE_NOISE_TERM_IN_ENC_LOOP))
    657 
    658 #define DISABLE_SUBPEL_REFINEMENT_WHEN_SRC_IS_NOISY (0 && (USE_NOISE_TERM_IN_L0_ME))
    659 
    660 #define USE_NOISE_TERM_DURING_BICAND_SEARCH (1 && (USE_NOISE_TERM_IN_L0_ME))
    661 
    662 #define DISABLE_BLK_MERGE_WHEN_NOISY (0 && (USE_NOISE_TERM_IN_L0_ME))
    663 
    664 /* Macros for Noise detection implmentation */
    665 #define NOISE_DETECT (ADD_NOISE_TERM_TO_COST)
    666 
    667 #define PSY_RD_DEBUG_CTBX 2048
    668 #define PSY_RD_DEBUG_CTBY 1600
    669 #define DEBUG_POC_NO 0
    670 
    671 #define DISABLE_LARGE_INTRA_PQ 1
    672 
    673 #define EVERYWHERE_NOISY 0
    674 
    675 #define DEBUG_PRINT_NOISE_SPATIAL 0
    676 
    677 #define DEBUG_PRINT_NOISE_TEMPORAL 0
    678 
    679 #define TEMPORAL_NOISE_DETECT (1 && (USE_NOISE_TERM_IN_L0_ME) && !(EVERYWHERE_NOISY))
    680 
    681 #define MIN_NOISY_BLOCKS_CNT_16x16 7
    682 
    683 #define ALTERNATE_METRIC 0
    684 
    685 #define PSY_STRENGTH_CHROMA 2  // 0.5 in Q2
    686 
    687 #define Q_PSY_STRENGTH_CHROMA 2
    688 
    689 #define PSY_STRENGTH 4  // 0.5 in Q2
    690 
    691 #define Q_PSY_STRENGTH 2
    692 
    693 /* between 0 and 100 */
    694 #define MIN_ENERGY_FOR_NOISE_PERCENT_16x16 20
    695 
    696 /* normalised value between 0 and 1 */
    697 #define MIN_VARIANCE_FOR_NOISE_16x16 0.6
    698 
    699 /* HAD size is restricted to square blocks only. so we specify only one dimension */
    700 #define HAD_BLOCK_SIZE_16x16 16
    701 
    702 #define MIN_NUM_COEFFS_ABOVE_AVG_16x16 41
    703 
    704 #define MIN_COEFF_AVG_ENERGY_16x16 0
    705 
    706 #define MIN_NOISY_BLOCKS_CNT_8x8 30
    707 
    708 /* between 0 and 100 */
    709 #define MIN_ENERGY_FOR_NOISE_PERCENT_8x8 20
    710 
    711 /* normalised value between 0 and 1 */
    712 #define MIN_VARIANCE_FOR_NOISE_8x8 0.6
    713 
    714 /* HAD size is restricted to square blocks only. so we specify only one dimension */
    715 #define HAD_BLOCK_SIZE_8x8 8
    716 
    717 #define MIN_NUM_COEFFS_ABOVE_AVG_8x8 17
    718 
    719 #define MIN_COEFF_AVG_ENERGY_8x8 0
    720 
    721 #define SATD_NOISE_FLOOR_THRESHOLD 16
    722 
    723 #define ENABLE_DEBUG_PRINTS_IN_ME 0
    724 
    725 #define RC_DEBUG_LEVEL_1 0
    726 
    727 #define RC_2PASS_GOP_DEBUG 0
    728 
    729 #define DUMP_NOISE_MAP 0
    730 
    731 #define DISABLE_SKIP 0
    732 
    733 #define DISABLE_NOISE_DETECTION_IN_P_PICS (0 && (NOISE_DETECT))
    734 
    735 #define MAX_LAYER_ID_OF_B_PICS_WITHOUT_NOISE_DETECTION                                             \
    736     ((1 == (DISABLE_NOISE_DETECTION_IN_P_PICS)) ? 0 : 0)
    737 
    738 #define DISABLE_INTRA_WHEN_NOISY (0 && (NOISE_DETECT))
    739 
    740 #define DISABLE_BIPRED_MODES_WHEN_NOISY (0 && (ADD_NOISE_TERM_TO_COST))
    741 
    742 #define TEMPORAL_VARIANCE_FACTOR 3  // in Q2
    743 
    744 #define Q_TEMPORAL_VARIANCE_FACTOR 2
    745 
    746 /* Actual Lambda -> (100 - ME_LAMBDA_DISCOUNT_WHEN_NOISY) * lambda / 100 */
    747 /*(((100 * (ALPHA_FOR_NOISE_TERM_IN_ME) + (1 << ((ALPHA_Q_FORMAT) - 1)))) >> (ALPHA_Q_FORMAT))*/
    748 #define ME_LAMBDA_DISCOUNT_WHEN_NOISY 50
    749 
    750 /*(((100 * (ALPHA_FOR_NOISE_TERM_IN_RDOPT) + (1 << ((ALPHA_Q_FORMAT) - 1)))) >> (ALPHA_Q_FORMAT))*/
    751 #define RDOPT_LAMBDA_DISCOUNT_WHEN_NOISY 25
    752 
    753 #define DISABLE_SKIP_AND_MERGE_WHEN_NOISY (0 && (USE_NOISE_TERM_IN_ENC_LOOP))
    754 
    755 #define NO_QP_OFFSET 0
    756 
    757 #define CONVERT_SSDS_TO_SPATIAL_DOMAIN (1 || (USE_NOISE_TERM_IN_ENC_LOOP))
    758 
    759 #define MAX_QP_WHERE_SPATIAL_SSD_ENABLED 18
    760 
    761 #define USE_RECON_TO_EVALUATE_STIM_IN_RDOPT (1 && (USE_NOISE_TERM_IN_ENC_LOOP))
    762 
    763 #define DISABLE_SAO_WHEN_NOISY (1 && (USE_NOISE_TERM_IN_ENC_LOOP))
    764 
    765 #define MAX_TU_SIZE_WHEN_NOISY 64
    766 
    767 #define RANDOMIZE_MERGE_IDX_WHEN_NOISY (0 && (USE_NOISE_TERM_IN_ENC_LOOP))
    768 
    769 #define MAX_CU_SIZE_WHERE_MERGE_AND_SKIPS_ENABLED_AND_WHEN_NOISY 64
    770 
    771 #define NUM_ELEMENTS_IN_RANDOMIZED_MERGE_IDX_LIST 113
    772 
    773 #define NUM_MERGE_INDICES_TO_PICK_WHEN_LIST_RANDOMIZED_MAXIDX4                                     \
    774     ((DISABLE_SKIP_AND_MERGE_WHEN_NOISY) ? 0 : 2)
    775 
    776 #define NUM_MERGE_INDICES_TO_PICK_WHEN_LIST_RANDOMIZED_MAXIDX3                                     \
    777     ((DISABLE_SKIP_AND_MERGE_WHEN_NOISY) ? 0 : 2)
    778 
    779 #define NUM_MERGE_INDICES_TO_PICK_WHEN_LIST_RANDOMIZED_MAXIDX2                                     \
    780     ((DISABLE_SKIP_AND_MERGE_WHEN_NOISY) ? 0 : 1)
    781 
    782 #define NUM_MERGE_INDICES_TO_PICK_WHEN_LIST_RANDOMIZED_MAXIDX1                                     \
    783     ((DISABLE_SKIP_AND_MERGE_WHEN_NOISY) ? 0 : 1)
    784 
    785 #define USE_NOISE_TERM_IN_ZERO_CODING_DECISION_ALGORITHMS                                          \
    786     (1 && (COMPUTE_NOISE_TERM_AT_THE_TU_LEVEL))
    787 
    788 #define BITPOS_IN_VQ_TOGGLE_FOR_CONTROL_TOGGLER 0
    789 
    790 #define BITPOS_IN_VQ_TOGGLE_FOR_ENABLING_NOISE_PRESERVATION 29
    791 
    792 #define BITPOS_IN_VQ_TOGGLE_FOR_ENABLING_PSYRDOPT_1 5
    793 #define BITPOS_IN_VQ_TOGGLE_FOR_ENABLING_PSYRDOPT_2 6
    794 #define BITPOS_IN_VQ_TOGGLE_FOR_ENABLING_PSYRDOPT_3 7
    795 
    796 #define MODULATE_LAMDA_WHEN_SPATIAL_MOD_ON 1
    797 
    798 #define MODULATE_LAMDA_WHEN_TRAQO_MOD_ON 1
    799 
    800 #define ENABLE_RUNTIME_ARCH_SWITCH 1
    801 
    802 #define DISABLE_8X8CUS_IN_NREFBPICS_IN_P6 1
    803 
    804 #define DISABLE_8X8CUS_IN_REFBPICS_IN_P6 (0 && (DISABLE_8X8CUS_IN_NREFBPICS_IN_P6))
    805 
    806 #define DISABLE_8X8CUS_IN_PPICS_IN_P6 (0 && (DISABLE_8X8CUS_IN_REFBPICS_IN_P6))
    807 
    808 #define L0ME_IN_OPENLOOP_MODE 0
    809 
    810 #define DISABLE_INTRAS_IN_BPIC 0
    811 
    812 #define MAX_RE_ENC 1
    813 
    814 #define ENABLE_RDO_BASED_TU_RECURSION 1
    815 
    816 #define ENABLE_TOP_DOWN_TU_RECURSION 1
    817 
    818 #define INCLUDE_CHROMA_DURING_TU_RECURSION (0 && (ENABLE_RDO_BASED_TU_RECURSION))
    819 
    820 #define PROCESS_GT_1CTB_VIA_CU_RECUR_IN_FAST_PRESETS (0)
    821 
    822 #define PROCESS_INTRA_AND_INTER_CU_TREES_SEPARATELY                                                \
    823     (0 && (PROCESS_GT_1CTB_VIA_CU_RECUR_IN_FAST_PRESETS))
    824 
    825 #define RESTRICT_NUM_PARTITION_LEVEL_L0ME_RESULTS_TO_1 1
    826 
    827 #define RESTRICT_NUM_PARTITION_LEVEL_L1ME_RESULTS_TO_1 1
    828 
    829 #define RESTRICT_NUM_PARTITION_LEVEL_L2ME_RESULTS_TO_1 1
    830 
    831 #define RESTRICT_NUM_SEARCH_CANDS_PER_SEARCH_CAND_LOC 1
    832 
    833 #define RESTRICT_NUM_2NX2N_TU_RECUR_CANDS 1
    834 
    835 /*****************************************************************************/
    836 /* Function Macros                                                           */
    837 /*****************************************************************************/
    838 
    839 #define CREATE_SUBBLOCK2CSBFID_MAP(map, numMapElements, transSize, csbfBufStride)                  \
    840     {                                                                                              \
    841         WORD32 i, j;                                                                               \
    842                                                                                                    \
    843         WORD32 i4NumSubBlocksPerRow = transSize / 4;                                               \
    844         WORD32 i4NumSubBlocksPerColumn = i4NumSubBlocksPerRow;                                     \
    845                                                                                                    \
    846         ASSERT(numMapElements >= i4NumSubBlocksPerRow * i4NumSubBlocksPerColumn);                  \
    847                                                                                                    \
    848         for(i = 0; i < i4NumSubBlocksPerColumn; i++)                                               \
    849         {                                                                                          \
    850             for(j = 0; j < i4NumSubBlocksPerRow; j++)                                              \
    851             {                                                                                      \
    852                 map[j + i * i4NumSubBlocksPerRow] = j + i * csbfBufStride;                         \
    853             }                                                                                      \
    854         }                                                                                          \
    855     }
    856 
    857 #define COPY_CABAC_STATES(dest, src, size)                                                         \
    858     {                                                                                              \
    859         memcpy(dest, src, size);                                                                   \
    860     }
    861 
    862 #define COPY_CABAC_STATES_FRM_CAB_COEFFX_PREFIX(dest, src, size)                                   \
    863     {                                                                                              \
    864         memcpy(dest, src, size);                                                                   \
    865     }
    866 
    867 #define PAD_BUF(pu1_start, stride, wd, ht, p_x, p_y, plane, function_pointer1, function_pointer2)  \
    868     {                                                                                              \
    869         function_pointer1(pu1_start, stride, ht, wd, p_x);                                         \
    870         function_pointer2((pu1_start) - (p_x), stride, ht, wd + ((p_x) << 1), p_y);                \
    871     }
    872 
    873 #define PAD_BUF_HOR(pu1_start, stride, ht, p_x, p_y, function_pointer)                             \
    874     {                                                                                              \
    875         function_pointer(pu1_start, stride, ht, p_x);                                              \
    876     }
    877 
    878 #define PAD_BUF_VER(pu1_start, stride, wd, p_x, p_y, function_pointer)                             \
    879     {                                                                                              \
    880         function_pointer(pu1_start, stride, wd, p_y);                                              \
    881     }
    882 
    883 #define POPULATE_PART_RESULTS(ps_part_results, ps_search_node)                                     \
    884     {                                                                                              \
    885         ps_part_results->i1_ref_idx = ps_search_node->i1_ref_idx;                                  \
    886         ps_part_results->i2_mv_x = ps_search_node->i2_mv_x;                                        \
    887         ps_part_results->i2_mv_y = ps_search_node->i2_mv_y;                                        \
    888         ps_part_results->i4_sad = ps_search_node->i4_sad;                                          \
    889     }
    890 
    891 #define GET_IDX_CIRCULAR_BUF(idx, increment, size)                                                 \
    892     {                                                                                              \
    893         if(increment < 0)                                                                          \
    894         {                                                                                          \
    895             idx += increment;                                                                      \
    896             if(idx < 0)                                                                            \
    897             {                                                                                      \
    898                 idx += size;                                                                       \
    899             }                                                                                      \
    900         }                                                                                          \
    901         else                                                                                       \
    902         {                                                                                          \
    903             idx += increment;                                                                      \
    904             if(idx >= size)                                                                        \
    905             {                                                                                      \
    906                 idx %= size;                                                                       \
    907             }                                                                                      \
    908         }                                                                                          \
    909     }
    910 
    911 #define CLIPUCHAR(x) CLIP3((x), 0, 255)
    912 
    913 #define CLIPUCHAR10BIT(x) CLIP3((x), 0, 1023)
    914 
    915 #define CEIL4(x) (((x + 3) >> 2) << 2)
    916 
    917 #define CEIL8(x) (((x + 7) >> 3) << 3)
    918 
    919 #define CEIL2(x) (((x + 1) >> 1) << 1)
    920 
    921 #define CEIL16(x) (((x) + 15) & (~15))
    922 
    923 #define CEIL_POW2(x, align) (((x) + (align)-1) & (~((align)-1)))
    924 
    925 #define PAD_SUBPEL PAD_BUF
    926 #define PAD_FPEL PAD_BUF
    927 #define PAD_FPEL_HOR PAD_BUF_HOR
    928 #define PAD_FPEL_VER PAD_BUF_VER
    929 
    930 /* Defining a printf macro: To disable all prints inside codec in release mode */
    931 #ifdef _DEBUG
    932 #define DBG_PRINTF(...) printf(__VA_ARGS__)
    933 #else
    934 #define DBG_PRINTF(...)
    935 #endif
    936 
    937 /*****************************************************************************/
    938 /* Enumerations                                                              */
    939 /*****************************************************************************/
    940 
    941 typedef enum
    942 {
    943     LEVEL1 = 30,
    944     LEVEL2 = 60,
    945     LEVEL2_1 = 63,
    946     LEVEL3 = 90,
    947     LEVEL3_1 = 93,
    948     LEVEL4 = 120,
    949     LEVEL4_1 = 123,
    950     LEVEL5 = 150,
    951     LEVEL5_1 = 153,
    952     LEVEL5_2 = 156,
    953     LEVEL6 = 180,
    954     LEVEL6_1 = 183,
    955     LEVEL6_2 = 186
    956 } LEVEL_T;
    957 
    958 typedef enum
    959 {
    960     LIST_0,
    961     LIST_1,
    962 
    963     NUM_REF_LISTS
    964 
    965 } REF_LISTS_t;
    966 
    967 typedef enum
    968 {
    969     NULL_PLANE = -1,
    970     U_PLANE = 0,
    971     V_PLANE = 1
    972 } CHROMA_PLANE_ID_T;
    973 
    974 typedef enum SSD_TYPE_T
    975 {
    976     NULL_TYPE = -1,
    977     SPATIAL_DOMAIN_SSD,
    978     FREQUENCY_DOMAIN_SSD
    979 
    980 } SSD_TYPE_T;
    981 
    982 #endif
    983