1 /* The copyright in this software is being made available under the BSD 2 * License, included below. This software may be subject to other third party 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2014, ITU/ISO/IEC 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the ITU/ISO/IEC nor the names of its contributors may 18 * be used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 /** \file TComRom.h 35 \brief global variables & functions (header) 36 */ 37 38 #ifndef __TCOMROM__ 39 #define __TCOMROM__ 40 41 #include "CommonDef.h" 42 43 #include<stdio.h> 44 #include<iostream> 45 46 //! \ingroup TLibCommon 47 //! \{ 48 49 // ==================================================================================================================== 50 // Macros 51 // ==================================================================================================================== 52 53 #define MAX_CU_DEPTH 6 // log2(CTUSize) 54 #define MAX_CU_SIZE (1<<(MAX_CU_DEPTH)) // maximum allowable size of CU, surely 64? (not 1<<7 = 128) 55 #define MIN_PU_SIZE 4 56 #define MIN_TU_SIZE 4 57 #define MAX_TU_SIZE 32 58 #define MAX_NUM_SPU_W (MAX_CU_SIZE/MIN_PU_SIZE) // maximum number of SPU in horizontal line 59 60 #define SCALING_LIST_REM_NUM 6 61 62 // ==================================================================================================================== 63 // Initialize / destroy functions 64 // ==================================================================================================================== 65 66 Void initROM(); 67 Void destroyROM(); 68 69 // ==================================================================================================================== 70 // Data structure related table & variable 71 // ==================================================================================================================== 72 73 // flexible conversion from relative to absolute index 74 extern UInt g_auiZscanToRaster[ MAX_NUM_SPU_W*MAX_NUM_SPU_W ]; 75 extern UInt g_auiRasterToZscan[ MAX_NUM_SPU_W*MAX_NUM_SPU_W ]; 76 extern UInt* g_scanOrder[SCAN_NUMBER_OF_GROUP_TYPES][SCAN_NUMBER_OF_TYPES][ MAX_CU_DEPTH ][ MAX_CU_DEPTH ]; 77 78 Void initZscanToRaster ( Int iMaxDepth, Int iDepth, UInt uiStartVal, UInt*& rpuiCurrIdx ); 79 Void initRasterToZscan ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth ); 80 81 // conversion of partition index to picture pel position 82 extern UInt g_auiRasterToPelX[ MAX_NUM_SPU_W*MAX_NUM_SPU_W ]; 83 extern UInt g_auiRasterToPelY[ MAX_NUM_SPU_W*MAX_NUM_SPU_W ]; 84 85 Void initRasterToPelXY ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth ); 86 87 // global variable (CTU width/height, max. CU depth) 88 extern UInt g_uiMaxCUWidth; 89 extern UInt g_uiMaxCUHeight; 90 extern UInt g_uiMaxCUDepth; 91 extern UInt g_uiAddCUDepth; 92 93 extern UInt g_auiPUOffset[NUMBER_OF_PART_SIZES]; 94 95 #define QUANT_SHIFT 14 // Q(4) = 2^14 96 #define IQUANT_SHIFT 6 97 #define SCALE_BITS 15 // Inherited from TMuC, pressumably for fractional bit estimates in RDOQ 98 99 extern Int g_maxTrDynamicRange[MAX_NUM_CHANNEL_TYPE]; 100 101 #define SQRT2 11585 102 #define SQRT2_SHIFT 13 103 #define INVSQRT2 11585 104 #define INVSQRT2_SHIFT 14 105 #define ADDITIONAL_MULTIPLIER_BITS 14 106 107 #define SHIFT_INV_1ST 7 // Shift after first inverse transform stage 108 #define SHIFT_INV_2ND 12 // Shift after second inverse transform stage 109 110 extern Int g_quantScales[SCALING_LIST_REM_NUM]; // Q(QP%6) 111 extern Int g_invQuantScales[SCALING_LIST_REM_NUM]; // IQ(QP%6) 112 113 #if RExt__HIGH_PRECISION_FORWARD_TRANSFORM 114 static const Int g_transformMatrixShift[TRANSFORM_NUMBER_OF_DIRECTIONS] = { 14, 6 }; 115 #else 116 static const Int g_transformMatrixShift[TRANSFORM_NUMBER_OF_DIRECTIONS] = { 6, 6 }; 117 #endif 118 119 extern const TMatrixCoeff g_aiT4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4]; 120 extern const TMatrixCoeff g_aiT8 [TRANSFORM_NUMBER_OF_DIRECTIONS][8][8]; 121 extern const TMatrixCoeff g_aiT16[TRANSFORM_NUMBER_OF_DIRECTIONS][16][16]; 122 extern const TMatrixCoeff g_aiT32[TRANSFORM_NUMBER_OF_DIRECTIONS][32][32]; 123 124 // ==================================================================================================================== 125 // Luma QP to Chroma QP mapping 126 // ==================================================================================================================== 127 128 static const Int chromaQPMappingTableSize = 58; 129 130 extern const UChar g_aucChromaScale[NUM_CHROMA_FORMAT][chromaQPMappingTableSize]; 131 132 // ==================================================================================================================== 133 // Entropy Coding 134 // ==================================================================================================================== 135 136 #define CONTEXT_STATE_BITS 6 137 #define LAST_SIGNIFICANT_GROUPS 10 138 139 // ==================================================================================================================== 140 // Scanning order & context mapping table 141 // ==================================================================================================================== 142 143 extern const UInt ctxIndMap4x4[4*4]; 144 145 extern const UInt g_uiGroupIdx[ MAX_TU_SIZE ]; 146 extern const UInt g_uiMinInGroup[ LAST_SIGNIFICANT_GROUPS ]; 147 148 // ==================================================================================================================== 149 // ADI table 150 // ==================================================================================================================== 151 152 extern const UChar g_aucIntraModeNumFast[MAX_CU_DEPTH]; 153 154 extern const UChar g_chroma422IntraAngleMappingTable[NUM_INTRA_MODE]; 155 156 // ==================================================================================================================== 157 // Bit-depth 158 // ==================================================================================================================== 159 160 extern Int g_bitDepth [MAX_NUM_CHANNEL_TYPE]; 161 extern Int g_PCMBitDepth[MAX_NUM_CHANNEL_TYPE]; 162 #if O0043_BEST_EFFORT_DECODING 163 extern Int g_bitDepthInStream [MAX_NUM_CHANNEL_TYPE]; // In the encoder, this is the same as g_bitDepth. In the decoder, this can vary from g_bitDepth if the decoder is forced to use 'best-effort decoding' at a particular bit-depth. 164 #endif 165 166 // ==================================================================================================================== 167 // Mode-Dependent DST Matrices 168 // ==================================================================================================================== 169 170 extern const TMatrixCoeff g_as_DST_MAT_4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4]; 171 172 // ==================================================================================================================== 173 // Misc. 174 // ==================================================================================================================== 175 176 extern Char g_aucConvertToBit [ MAX_CU_SIZE+1 ]; // from width to log2(width)-2 177 178 #ifndef ENC_DEC_TRACE 179 #define ENC_DEC_TRACE 0 180 #endif 181 182 183 #if ENC_DEC_TRACE 184 extern FILE* g_hTrace; 185 extern Bool g_bJustDoIt; 186 extern const Bool g_bEncDecTraceEnable; 187 extern const Bool g_bEncDecTraceDisable; 188 extern Bool g_HLSTraceEnable; 189 extern UInt64 g_nSymbolCounter; 190 191 #define COUNTER_START 1 192 #define COUNTER_END 0 //( UInt64(1) << 63 ) 193 194 #define DTRACE_CABAC_F(x) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%f", x ); 195 #define DTRACE_CABAC_V(x) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%d", x ); 196 #define DTRACE_CABAC_VL(x) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%lld", x ); 197 #define DTRACE_CABAC_T(x) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%s", x ); 198 #define DTRACE_CABAC_X(x) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%x", x ); 199 #define DTRACE_CABAC_R( x,y ) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, x, y ); 200 #define DTRACE_CABAC_N if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "\n" ); 201 202 #else 203 204 #define DTRACE_CABAC_F(x) 205 #define DTRACE_CABAC_V(x) 206 #define DTRACE_CABAC_VL(x) 207 #define DTRACE_CABAC_T(x) 208 #define DTRACE_CABAC_X(x) 209 #define DTRACE_CABAC_R( x,y ) 210 #define DTRACE_CABAC_N 211 212 #endif 213 214 215 #define SCALING_LIST_NUM (MAX_NUM_COMPONENT * NUMBER_OF_PREDICTION_MODES) ///< list number for quantization matrix 216 217 #define SCALING_LIST_START_VALUE 8 ///< start value for dpcm mode 218 #define MAX_MATRIX_COEF_NUM 64 ///< max coefficient number for quantization matrix 219 #define MAX_MATRIX_SIZE_NUM 8 ///< max size number for quantization matrix 220 #define SCALING_LIST_BITS 8 ///< bit depth of scaling list entries 221 #define LOG2_SCALING_LIST_NEUTRAL_VALUE 4 ///< log2 of the value that, when used in a scaling list, has no effect on quantisation 222 #define SCALING_LIST_DC 16 ///< default DC value 223 224 extern const Char *MatrixType[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; 225 extern const Char *MatrixType_DC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; 226 227 extern Int g_quantTSDefault4x4[4*4]; 228 extern Int g_quantIntraDefault8x8[8*8]; 229 extern Int g_quantInterDefault8x8[8*8]; 230 231 extern UInt g_scalingListSize [SCALING_LIST_SIZE_NUM]; 232 extern UInt g_scalingListSizeX[SCALING_LIST_SIZE_NUM]; 233 extern UInt g_scalingListNum [SCALING_LIST_SIZE_NUM]; 234 //! \} 235 236 #endif //__TCOMROM__ 237 238