Changeset 1313 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComRom.h
- Timestamp:
- 13 Aug 2015, 17:38:13 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibCommon/TComRom.h
r1196 r1313 2 2 * License, included below. This software may be subject to other third party 3 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2015, ITU/ISO/IEC4 * granted under this license. 5 * 6 * Copyright (c) 2010-2015, ITU/ISO/IEC 7 7 * All rights reserved. 8 8 * … … 31 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 32 */ 33 34 33 /** \file TComRom.h 35 34 \brief global variables & functions (header) 36 35 */ 37 38 36 #ifndef __TCOMROM__ 39 37 #define __TCOMROM__ 40 41 38 #include "CommonDef.h" 42 #include "TypeDef.h"43 44 39 #include<stdio.h> 45 40 #include<iostream> 46 47 #if H_3D_DIM 41 #if NH_3D_DMM 48 42 #include "TComWedgelet.h" 49 43 #endif 50 51 44 //! \ingroup TLibCommon 52 45 //! \{ 53 54 // ====================================================================================================================55 // Macros56 // ====================================================================================================================57 58 #define MAX_CU_DEPTH 6 // log2(LCUSize)59 #define MAX_CU_SIZE (1<<(MAX_CU_DEPTH)) // maximum allowable size of CU60 #define MIN_PU_SIZE 461 #define MAX_NUM_SPU_W (MAX_CU_SIZE/MIN_PU_SIZE) // maximum number of SPU in horizontal line62 63 46 // ==================================================================================================================== 64 47 // Initialize / destroy functions 65 48 // ==================================================================================================================== 66 67 49 Void initROM(); 68 50 Void destroyROM(); 69 Void initSigLastScan(UInt* pBuffD, UInt* pBuffH, UInt* pBuffV, Int iWidth, Int iHeight);70 51 // ==================================================================================================================== 71 52 // Data structure related table & variable 72 53 // ==================================================================================================================== 73 74 54 // flexible conversion from relative to absolute index 75 extern UInt g_auiZscanToRaster[ MAX_NUM_ SPU_W*MAX_NUM_SPU_W];76 extern UInt g_auiRasterToZscan[ MAX_NUM_ SPU_W*MAX_NUM_SPU_W];77 55 extern UInt g_auiZscanToRaster[ MAX_NUM_PART_IDXS_IN_CTU_WIDTH*MAX_NUM_PART_IDXS_IN_CTU_WIDTH ]; 56 extern UInt g_auiRasterToZscan[ MAX_NUM_PART_IDXS_IN_CTU_WIDTH*MAX_NUM_PART_IDXS_IN_CTU_WIDTH ]; 57 extern UInt* g_scanOrder[SCAN_NUMBER_OF_GROUP_TYPES][SCAN_NUMBER_OF_TYPES][ MAX_CU_DEPTH ][ MAX_CU_DEPTH ]; 78 58 Void initZscanToRaster ( Int iMaxDepth, Int iDepth, UInt uiStartVal, UInt*& rpuiCurrIdx ); 79 59 Void initRasterToZscan ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth ); 80 81 60 // 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 61 extern UInt g_auiRasterToPelX[ MAX_NUM_PART_IDXS_IN_CTU_WIDTH*MAX_NUM_PART_IDXS_IN_CTU_WIDTH ]; 62 extern UInt g_auiRasterToPelY[ MAX_NUM_PART_IDXS_IN_CTU_WIDTH*MAX_NUM_PART_IDXS_IN_CTU_WIDTH ]; 85 63 Void initRasterToPelXY ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth ); 86 87 // global variable (LCU 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 #define MAX_TS_WIDTH 4 94 #define MAX_TS_HEIGHT 4 95 96 extern UInt g_auiPUOffset[8]; 97 98 #define QUANT_IQUANT_SHIFT 20 // Q(QP%6) * IQ(QP%6) = 2^20 99 #define QUANT_SHIFT 14 // Q(4) = 2^14 100 #define SCALE_BITS 15 // Inherited from TMuC, pressumably for fractional bit estimates in RDOQ 101 #define MAX_TR_DYNAMIC_RANGE 15 // Maximum transform dynamic range (excluding sign bit) 102 103 #define SHIFT_INV_1ST 7 // Shift after first inverse transform stage 104 #define SHIFT_INV_2ND 12 // Shift after second inverse transform stage 105 106 extern Int g_quantScales[6]; // Q(QP%6) 107 extern Int g_invQuantScales[6]; // IQ(QP%6) 108 extern const Short g_aiT4[4][4]; 109 extern const Short g_aiT8[8][8]; 110 extern const Short g_aiT16[16][16]; 111 extern const Short g_aiT32[32][32]; 112 64 extern const UInt g_auiPUOffset[NUMBER_OF_PART_SIZES]; 65 extern const Int g_quantScales[SCALING_LIST_REM_NUM]; // Q(QP%6) 66 extern const Int g_invQuantScales[SCALING_LIST_REM_NUM]; // IQ(QP%6) 67 #if RExt__HIGH_PRECISION_FORWARD_TRANSFORM 68 static const Int g_transformMatrixShift[TRANSFORM_NUMBER_OF_DIRECTIONS] = { 14, 6 }; 69 #else 70 static const Int g_transformMatrixShift[TRANSFORM_NUMBER_OF_DIRECTIONS] = { 6, 6 }; 71 #endif 72 extern const TMatrixCoeff g_aiT4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4]; 73 extern const TMatrixCoeff g_aiT8 [TRANSFORM_NUMBER_OF_DIRECTIONS][8][8]; 74 extern const TMatrixCoeff g_aiT16[TRANSFORM_NUMBER_OF_DIRECTIONS][16][16]; 75 extern const TMatrixCoeff g_aiT32[TRANSFORM_NUMBER_OF_DIRECTIONS][32][32]; 113 76 // ==================================================================================================================== 114 77 // Luma QP to Chroma QP mapping 115 78 // ==================================================================================================================== 116 117 extern const UChar g_aucChromaScale [58]; 118 79 static const Int chromaQPMappingTableSize = 58; 80 extern const UChar g_aucChromaScale[NUM_CHROMA_FORMAT][chromaQPMappingTableSize]; 119 81 // ==================================================================================================================== 120 82 // Scanning order & context mapping table 121 83 // ==================================================================================================================== 122 123 extern UInt* g_auiSigLastScan[ 3 ][ MAX_CU_DEPTH ]; // raster index from scanning index (diag, hor, ver) 124 125 extern const UInt g_uiGroupIdx[ 32 ]; 126 extern const UInt g_uiMinInGroup[ 10 ]; 127 128 extern const UInt g_sigLastScan8x8[ 3 ][ 4 ]; //!< coefficient group scan order for 8x8 TUs 129 extern UInt g_sigLastScanCG32x32[ 64 ]; 130 131 // ==================================================================================================================== 132 // ADI table 133 // ==================================================================================================================== 134 135 extern const UChar g_aucIntraModeNumFast[ MAX_CU_DEPTH ]; 136 137 // ==================================================================================================================== 138 // Bit-depth 139 // ==================================================================================================================== 140 141 extern Int g_bitDepthY; 142 extern Int g_bitDepthC; 143 extern UInt g_uiPCMBitDepthLuma; 144 extern UInt g_uiPCMBitDepthChroma; 145 146 // ==================================================================================================================== 147 // Texture type to integer mapping 148 // ==================================================================================================================== 149 150 extern const UChar g_aucConvertTxtTypeToIdx[4]; 151 152 #if H_3D_DIM 84 extern const UInt ctxIndMap4x4[4*4]; 85 extern const UInt g_uiGroupIdx[ MAX_TU_SIZE ]; 86 extern const UInt g_uiMinInGroup[ LAST_SIGNIFICANT_GROUPS ]; 87 // ==================================================================================================================== 88 // Intra prediction table 89 // ==================================================================================================================== 90 extern const UChar g_aucIntraModeNumFast_UseMPM[MAX_CU_DEPTH]; 91 extern const UChar g_aucIntraModeNumFast_NotUseMPM[MAX_CU_DEPTH]; 92 extern const UChar g_chroma422IntraAngleMappingTable[NUM_INTRA_MODE]; 153 93 // ==================================================================================================================== 154 94 // Depth coding modes 155 95 // ==================================================================================================================== 156 __inline Void mapDepthModeToIntraDir( UInt& intraMode ) { if( isDimMode( intraMode ) ) intraMode = DC_IDX; } 157 __inline Void mapDepthModeToIntraDir( Int& intraMode ) { if( isDimMode( intraMode ) ) intraMode = DC_IDX; } 158 159 #if H_3D_DIM_SDC || H_3D_DIM_DLT 160 __inline UInt numBitsForValue( UInt value ) { UInt bits = 0; while (value != 0) { value >>= 1; bits++; } return bits; }; 161 #endif 162 163 #if H_3D_DIM_DMM 96 #if NH_3D_DMM 164 97 extern const WedgeResolution g_dmmWedgeResolution [6]; 165 98 extern const UChar g_dmm1TabIdxBits [6]; 166 extern const UChar g_dmm3IntraTabIdxBits[6];167 168 99 extern Bool g_wedgePattern[32*32]; 169 170 100 extern std::vector< std::vector<TComWedgelet> > g_dmmWedgeLists; 171 extern std::vector< std::vector<TComWedgeRef> > g_dmmWedgeRefLists;172 101 extern std::vector< std::vector<TComWedgeNode> > g_dmmWedgeNodeLists; 173 174 102 Void initWedgeLists( Bool initNodeList = false ); 175 103 Void createWedgeList( UInt uiWidth, UInt uiHeight, std::vector<TComWedgelet> &racWedgeList, std::vector<TComWedgeRef> &racWedgeRefList, WedgeResolution eWedgeRes ); 176 104 Void addWedgeletToList( TComWedgelet cWedgelet, std::vector<TComWedgelet> &racWedgeList, std::vector<TComWedgeRef> &racWedgeRefList ); 177 #endif 178 #endif 179 180 // ========================================== 105 WedgeList* getWedgeListScaled ( UInt blkSize ); 106 WedgeNodeList* getWedgeNodeListScaled( UInt blkSize ); 107 __inline Void mapDmmToIntraDir( UInt& intraMode ) { if( isDmmMode( intraMode ) ) intraMode = DC_IDX; } 108 __inline Void mapDmmToIntraDir( Int& intraMode ) { if( isDmmMode( intraMode ) ) intraMode = DC_IDX; } 109 #endif 110 // ==================================================================================================================== 181 111 // Mode-Dependent DST Matrices 182 extern const Short g_as_DST_MAT_4 [4][4]; 183 extern const UChar g_aucDCTDSTMode_Vert[NUM_INTRA_MODE]; 184 extern const UChar g_aucDCTDSTMode_Hor[NUM_INTRA_MODE]; 185 // ========================================== 186 112 // ==================================================================================================================== 113 extern const TMatrixCoeff g_as_DST_MAT_4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4]; 187 114 #if H_MV_HLS_PTL_LIMITS 188 115 class TComGeneralTierAndLevelLimits … … 203 130 m_maxTileCols ( maxTileCols ); 204 131 {}; 205 206 132 Int getMaxLumaPs ( ) { return m_maxLumaPs ; }; 207 133 Int getMaxCPBMainTier ( ) { return m_maxCPBMainTier ; }; … … 210 136 Int getMaxTileRows ( ) { return m_maxTileRows ; }; 211 137 Int getMaxTileCols ( ) { return m_maxTileCols ; }; 212 213 138 private: 214 139 const Int m_maxLumaPs; … … 219 144 const Int m_maxTileCols; 220 145 }; 221 222 146 extern std::map< Level::Name, TComGeneralTierAndLevelLimits > g_generalTierAndLevelLimits; 223 224 147 #endif 225 148 // ==================================================================================================================== 226 149 // Misc. 227 150 // ==================================================================================================================== 228 229 151 extern Char g_aucConvertToBit [ MAX_CU_SIZE+1 ]; // from width to log2(width)-2 230 152 #if NH_MV 153 // Change later 231 154 #ifndef ENC_DEC_TRACE 232 #define ENC_DEC_TRACE 0233 #endif 234 155 #define ENC_DEC_TRACE 0 156 #endif 157 #endif 235 158 #if ENC_DEC_TRACE 236 159 extern FILE* g_hTrace; … … 240 163 extern Bool g_HLSTraceEnable; 241 164 extern UInt64 g_nSymbolCounter; 242 243 165 #define COUNTER_START 1 244 166 #define COUNTER_END 0 //( UInt64(1) << 63 ) 245 246 167 #define DTRACE_CABAC_F(x) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%f", x ); 247 168 #define DTRACE_CABAC_V(x) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%d", x ); … … 251 172 #define DTRACE_CABAC_R( x,y ) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, x, y ); 252 173 #define DTRACE_CABAC_N if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "\n" ); 253 254 174 #if H_MV_ENC_DEC_TRAC 255 175 extern Bool g_traceCU; 256 extern Bool g_tracePU ;176 extern Bool g_tracePU ; 257 177 extern Bool g_traceTU; 258 178 extern Bool g_disableHLSTrace; // USE g_HLSTraceEnable to toggle HLS trace. Not this one! … … 263 183 extern Bool g_decTraceMvFromMerge; // Trace motion vectors obtained from merge (decoder only) 264 184 extern Bool g_decTracePicOutput; // Trace output of pictures 265 extern Bool g_st opAtPos; // Stop at position185 extern Bool g_startStopTrace; // Stop at position 266 186 extern Bool g_outputPos; // Output position 267 187 extern Bool g_traceCameraParameters; // Trace camera parameters 268 188 extern Bool g_encNumberOfWrittenBits;// Trace number of written bits 269 189 extern Bool g_traceEncFracBits; // Trace fractional bits 190 extern Bool g_traceIntraSearchCost; // Trace intra mode cost 191 extern Bool g_traceRDCost; 192 extern Bool g_traceModeCheck; 193 extern Bool g_traceSAOCost; 194 extern UInt g_indent; 270 195 #define DTRACE_CU(x,y) writeToTraceFile( x,y, g_traceCU ); 271 196 #define DTRACE_PU(x,y) writeToTraceFile( x,y, g_tracePU ); … … 275 200 #define DTRACE_TU_S(x) writeToTraceFile( x, g_traceTU ); 276 201 202 #define D_DEC_INDENT( b ) decIndent ( b ); 203 #define D_PRINT_INC_INDENT( b, str ) prinStrIncIndent( b, str ); 204 #define D_PRINT_INDENT( b, str ) printStrIndent ( b, str); 205 206 Void tracePSHeader ( const Char* psName, Int layerId ); 277 207 Void writeToTraceFile( const Char* symbolName, Int val, Bool doIt ); 278 208 Void writeToTraceFile( const Char* symbolName, Bool doIt ); 279 Void stopAtPos ( Int poc, Int layerId, Int cuPelX, Int cuPelY, Int cuWidth, Int cuHeight ); 209 UInt64 incSymbolCounter(); 210 Void stopAtPos ( Int poc, Int layerId, Int cuPelX, Int cuPelY, Int cuWidth, Int cuHeight ); 211 212 Void printStr ( std::string str ); 213 Void printStrIndent ( Bool b, std::string str ); 214 Void prinStrIncIndent ( Bool b, std::string str ); 215 Void decIndent ( Bool b ); 216 217 template <typename T> 218 std::string n2s ( T Number ) 219 { 220 std::ostringstream ss; 221 ss << Number; 222 return ss.str(); 223 }; 224 280 225 #endif 281 226 #else 282 283 227 #define DTRACE_CABAC_F(x) 284 228 #define DTRACE_CABAC_V(x) … … 288 232 #define DTRACE_CABAC_R( x,y ) 289 233 #define DTRACE_CABAC_N 290 291 #if H_MV_ENC_DEC_TRAC292 234 #define DTRACE_CU(x,y) ; 293 235 #define DTRACE_PU(x,y) ; 294 236 #define DTRACE_TU(x,y) ; 295 296 237 #define DTRACE_CU_S(x) ; 297 238 #define DTRACE_PU_S(x) ; 298 239 #define DTRACE_TU_S(x) ; 299 240 300 #endif 301 #endif 302 303 304 #define SCALING_LIST_NUM 6 ///< list number for quantization matrix 305 #define SCALING_LIST_NUM_32x32 2 ///< list number for quantization matrix 32x32 306 #define SCALING_LIST_REM_NUM 6 ///< remainder of QP/6 307 #define SCALING_LIST_START_VALUE 8 ///< start value for dpcm mode 308 #define MAX_MATRIX_COEF_NUM 64 ///< max coefficient number for quantization matrix 309 #define MAX_MATRIX_SIZE_NUM 8 ///< max size number for quantization matrix 310 #define SCALING_LIST_DC 16 ///< default DC value 311 enum ScalingListSize 312 { 313 SCALING_LIST_4x4 = 0, 314 SCALING_LIST_8x8, 315 SCALING_LIST_16x16, 316 SCALING_LIST_32x32, 317 SCALING_LIST_SIZE_NUM 318 }; 319 static const Char MatrixType[4][6][20] = 320 { 321 { 322 "INTRA4X4_LUMA", 323 "INTRA4X4_CHROMAU", 324 "INTRA4X4_CHROMAV", 325 "INTER4X4_LUMA", 326 "INTER4X4_CHROMAU", 327 "INTER4X4_CHROMAV" 328 }, 329 { 330 "INTRA8X8_LUMA", 331 "INTRA8X8_CHROMAU", 332 "INTRA8X8_CHROMAV", 333 "INTER8X8_LUMA", 334 "INTER8X8_CHROMAU", 335 "INTER8X8_CHROMAV" 336 }, 337 { 338 "INTRA16X16_LUMA", 339 "INTRA16X16_CHROMAU", 340 "INTRA16X16_CHROMAV", 341 "INTER16X16_LUMA", 342 "INTER16X16_CHROMAU", 343 "INTER16X16_CHROMAV" 344 }, 345 { 346 "INTRA32X32_LUMA", 347 "INTER32X32_LUMA", 348 }, 349 }; 350 static const Char MatrixType_DC[4][12][22] = 351 { 352 { 353 }, 354 { 355 }, 356 { 357 "INTRA16X16_LUMA_DC", 358 "INTRA16X16_CHROMAU_DC", 359 "INTRA16X16_CHROMAV_DC", 360 "INTER16X16_LUMA_DC", 361 "INTER16X16_CHROMAU_DC", 362 "INTER16X16_CHROMAV_DC" 363 }, 364 { 365 "INTRA32X32_LUMA_DC", 366 "INTER32X32_LUMA_DC", 367 }, 368 }; 369 extern Int g_quantIntraDefault8x8[64]; 370 extern Int g_quantIntraDefault16x16[256]; 371 extern Int g_quantIntraDefault32x32[1024]; 372 extern Int g_quantInterDefault8x8[64]; 373 extern Int g_quantInterDefault16x16[256]; 374 extern Int g_quantInterDefault32x32[1024]; 375 extern Int g_quantTSDefault4x4[16]; 376 extern UInt g_scalingListSize [SCALING_LIST_SIZE_NUM]; 377 extern UInt g_scalingListSizeX[SCALING_LIST_SIZE_NUM]; 378 extern UInt g_scalingListNum [SCALING_LIST_SIZE_NUM]; 379 extern Int g_eTTable[4]; 241 #define D_DEC_INDENT( b ) ; 242 #define D_PRINT_INC_INDENT( b, str ); 243 #define D_PRINT_INDENT( b, str ); 244 245 #endif 246 const Char* nalUnitTypeToString(NalUnitType type); 247 extern const Char *MatrixType[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; 248 extern const Char *MatrixType_DC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; 249 extern const Int g_quantTSDefault4x4[4*4]; 250 extern const Int g_quantIntraDefault8x8[8*8]; 251 extern const Int g_quantInterDefault8x8[8*8]; 252 extern const UInt g_scalingListSize [SCALING_LIST_SIZE_NUM]; 253 extern const UInt g_scalingListSizeX[SCALING_LIST_SIZE_NUM]; 380 254 //! \} 381 382 255 #endif //__TCOMROM__ 383
Note: See TracChangeset for help on using the changeset viewer.