Changeset 1313 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComRom.h


Ignore:
Timestamp:
13 Aug 2015, 17:38:13 (9 years ago)
Author:
tech
Message:

Merged 14.1-update-dev1@1312.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibCommon/TComRom.h

    r1196 r1313  
    22 * License, included below. This software may be subject to other third party
    33 * and contributor rights, including patent rights, and no such rights are
    4  * granted under this license. 
    5  *
    6 * Copyright (c) 2010-2015, ITU/ISO/IEC
     4 * granted under this license.
     5 *
     6 * Copyright (c) 2010-2015, ITU/ISO/IEC
    77 * All rights reserved.
    88 *
     
    3131 * THE POSSIBILITY OF SUCH DAMAGE.
    3232 */
    33 
    3433/** \file     TComRom.h
    3534    \brief    global variables & functions (header)
    3635*/
    37 
    3836#ifndef __TCOMROM__
    3937#define __TCOMROM__
    40 
    4138#include "CommonDef.h"
    42 #include "TypeDef.h"
    43 
    4439#include<stdio.h>
    4540#include<iostream>
    46 
    47 #if H_3D_DIM
     41#if NH_3D_DMM
    4842#include "TComWedgelet.h"
    4943#endif
    50 
    5144//! \ingroup TLibCommon
    5245//! \{
    53 
    54 // ====================================================================================================================
    55 // Macros
    56 // ====================================================================================================================
    57 
    58 #define     MAX_CU_DEPTH            6                           // log2(LCUSize)
    59 #define     MAX_CU_SIZE             (1<<(MAX_CU_DEPTH))         // maximum allowable size of CU
    60 #define     MIN_PU_SIZE             4
    61 #define     MAX_NUM_SPU_W           (MAX_CU_SIZE/MIN_PU_SIZE)   // maximum number of SPU in horizontal line
    62 
    6346// ====================================================================================================================
    6447// Initialize / destroy functions
    6548// ====================================================================================================================
    66 
    6749Void         initROM();
    6850Void         destroyROM();
    69 Void         initSigLastScan(UInt* pBuffD, UInt* pBuffH, UInt* pBuffV, Int iWidth, Int iHeight);
    7051// ====================================================================================================================
    7152// Data structure related table & variable
    7253// ====================================================================================================================
    73 
    7454// 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 
     55extern       UInt   g_auiZscanToRaster[ MAX_NUM_PART_IDXS_IN_CTU_WIDTH*MAX_NUM_PART_IDXS_IN_CTU_WIDTH ];
     56extern       UInt   g_auiRasterToZscan[ MAX_NUM_PART_IDXS_IN_CTU_WIDTH*MAX_NUM_PART_IDXS_IN_CTU_WIDTH ];
     57extern       UInt*  g_scanOrder[SCAN_NUMBER_OF_GROUP_TYPES][SCAN_NUMBER_OF_TYPES][ MAX_CU_DEPTH ][ MAX_CU_DEPTH ];
    7858Void         initZscanToRaster ( Int iMaxDepth, Int iDepth, UInt uiStartVal, UInt*& rpuiCurrIdx );
    7959Void         initRasterToZscan ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth         );
    80 
    8160// 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 
     61extern       UInt   g_auiRasterToPelX[ MAX_NUM_PART_IDXS_IN_CTU_WIDTH*MAX_NUM_PART_IDXS_IN_CTU_WIDTH ];
     62extern       UInt   g_auiRasterToPelY[ MAX_NUM_PART_IDXS_IN_CTU_WIDTH*MAX_NUM_PART_IDXS_IN_CTU_WIDTH ];
    8563Void         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 
     64extern const UInt g_auiPUOffset[NUMBER_OF_PART_SIZES];
     65extern const Int g_quantScales[SCALING_LIST_REM_NUM];             // Q(QP%6)
     66extern const Int g_invQuantScales[SCALING_LIST_REM_NUM];          // IQ(QP%6)
     67#if RExt__HIGH_PRECISION_FORWARD_TRANSFORM
     68static const Int g_transformMatrixShift[TRANSFORM_NUMBER_OF_DIRECTIONS] = { 14, 6 };
     69#else
     70static const Int g_transformMatrixShift[TRANSFORM_NUMBER_OF_DIRECTIONS] = {  6, 6 };
     71#endif
     72extern const TMatrixCoeff g_aiT4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4];
     73extern const TMatrixCoeff g_aiT8 [TRANSFORM_NUMBER_OF_DIRECTIONS][8][8];
     74extern const TMatrixCoeff g_aiT16[TRANSFORM_NUMBER_OF_DIRECTIONS][16][16];
     75extern const TMatrixCoeff g_aiT32[TRANSFORM_NUMBER_OF_DIRECTIONS][32][32];
    11376// ====================================================================================================================
    11477// Luma QP to Chroma QP mapping
    11578// ====================================================================================================================
    116 
    117 extern const UChar  g_aucChromaScale      [58];
    118 
     79static const Int chromaQPMappingTableSize = 58;
     80extern const UChar  g_aucChromaScale[NUM_CHROMA_FORMAT][chromaQPMappingTableSize];
    11981// ====================================================================================================================
    12082// Scanning order & context mapping table
    12183// ====================================================================================================================
    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
     84extern const UInt   ctxIndMap4x4[4*4];
     85extern const UInt   g_uiGroupIdx[ MAX_TU_SIZE ];
     86extern const UInt   g_uiMinInGroup[ LAST_SIGNIFICANT_GROUPS ];
     87// ====================================================================================================================
     88// Intra prediction table
     89// ====================================================================================================================
     90extern const UChar  g_aucIntraModeNumFast_UseMPM[MAX_CU_DEPTH];
     91extern const UChar  g_aucIntraModeNumFast_NotUseMPM[MAX_CU_DEPTH];
     92extern const UChar  g_chroma422IntraAngleMappingTable[NUM_INTRA_MODE];
    15393// ====================================================================================================================
    15494// Depth coding modes
    15595// ====================================================================================================================
    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
    16497extern const WedgeResolution                                 g_dmmWedgeResolution [6];
    16598extern const UChar                                           g_dmm1TabIdxBits     [6];
    166 extern const UChar                                           g_dmm3IntraTabIdxBits[6];
    167 
    16899extern Bool                                                  g_wedgePattern[32*32];
    169 
    170100extern       std::vector< std::vector<TComWedgelet> >        g_dmmWedgeLists;
    171 extern       std::vector< std::vector<TComWedgeRef> >        g_dmmWedgeRefLists;
    172101extern       std::vector< std::vector<TComWedgeNode> >       g_dmmWedgeNodeLists;
    173 
    174102Void initWedgeLists( Bool initNodeList = false );
    175103Void createWedgeList( UInt uiWidth, UInt uiHeight, std::vector<TComWedgelet> &racWedgeList, std::vector<TComWedgeRef> &racWedgeRefList, WedgeResolution eWedgeRes );
    176104Void addWedgeletToList( TComWedgelet cWedgelet, std::vector<TComWedgelet> &racWedgeList, std::vector<TComWedgeRef> &racWedgeRefList );
    177 #endif
    178 #endif
    179 
    180 // ==========================================
     105WedgeList*     getWedgeListScaled    ( UInt blkSize );
     106WedgeNodeList* 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// ====================================================================================================================
    181111// 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// ====================================================================================================================
     113extern const TMatrixCoeff g_as_DST_MAT_4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4];
    187114#if H_MV_HLS_PTL_LIMITS
    188115class TComGeneralTierAndLevelLimits
     
    203130    m_maxTileCols               ( maxTileCols                   );
    204131  {};
    205 
    206132  Int getMaxLumaPs                 ( ) { return m_maxLumaPs                 ; };
    207133  Int getMaxCPBMainTier            ( ) { return m_maxCPBMainTier            ; };
     
    210136  Int getMaxTileRows               ( ) { return m_maxTileRows               ; };
    211137  Int getMaxTileCols               ( ) { return m_maxTileCols               ; };
    212 
    213138private:
    214139  const Int m_maxLumaPs;
     
    219144  const Int m_maxTileCols;
    220145};
    221 
    222146extern std::map< Level::Name, TComGeneralTierAndLevelLimits > g_generalTierAndLevelLimits;   
    223 
    224147#endif
    225148// ====================================================================================================================
    226149// Misc.
    227150// ====================================================================================================================
    228 
    229151extern       Char   g_aucConvertToBit  [ MAX_CU_SIZE+1 ];   // from width to log2(width)-2
    230 
     152#if NH_MV
     153// Change later
    231154#ifndef ENC_DEC_TRACE
    232 #define ENC_DEC_TRACE   0 
    233 #endif
    234 
     155#define ENC_DEC_TRACE 0
     156#endif
     157#endif
    235158#if ENC_DEC_TRACE
    236159extern FILE*  g_hTrace;
     
    240163extern Bool   g_HLSTraceEnable;
    241164extern UInt64 g_nSymbolCounter;
    242 
    243165#define COUNTER_START    1
    244166#define COUNTER_END      0 //( UInt64(1) << 63 )
    245 
    246167#define DTRACE_CABAC_F(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%f", x );
    247168#define DTRACE_CABAC_V(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%d", x );
     
    251172#define DTRACE_CABAC_R( x,y ) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, x,    y );
    252173#define DTRACE_CABAC_N        if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "\n"    );
    253 
    254174#if H_MV_ENC_DEC_TRAC
    255175 extern Bool   g_traceCU;
    256  extern Bool   g_tracePU;
     176 extern Bool   g_tracePU ;
    257177 extern Bool   g_traceTU;
    258178 extern Bool   g_disableHLSTrace;       // USE g_HLSTraceEnable to toggle HLS trace. Not this one!
     
    263183 extern Bool   g_decTraceMvFromMerge;   // Trace motion vectors obtained from merge (decoder only)
    264184 extern Bool   g_decTracePicOutput;     // Trace output of pictures
    265  extern Bool   g_stopAtPos;             // Stop at position
     185 extern Bool   g_startStopTrace;             // Stop at position
    266186 extern Bool   g_outputPos;             // Output position
    267187 extern Bool   g_traceCameraParameters; // Trace camera parameters
    268188 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;
    270195#define DTRACE_CU(x,y)             writeToTraceFile( x,y, g_traceCU );
    271196#define DTRACE_PU(x,y)             writeToTraceFile( x,y, g_tracePU );
     
    275200#define DTRACE_TU_S(x)             writeToTraceFile( x,   g_traceTU );
    276201
     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 );
    277207 Void           writeToTraceFile( const Char* symbolName, Int val, Bool doIt );
    278208 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
    280225#endif
    281226#else
    282 
    283227#define DTRACE_CABAC_F(x)
    284228#define DTRACE_CABAC_V(x)
     
    288232#define DTRACE_CABAC_R( x,y )
    289233#define DTRACE_CABAC_N
    290 
    291 #if H_MV_ENC_DEC_TRAC
    292234#define DTRACE_CU(x,y) ;             
    293235#define DTRACE_PU(x,y) ;           
    294236#define DTRACE_TU(x,y) ;           
    295 
    296237#define DTRACE_CU_S(x) ;           
    297238#define DTRACE_PU_S(x) ;           
    298239#define DTRACE_TU_S(x) ;           
    299240
    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
     246const Char* nalUnitTypeToString(NalUnitType type);
     247extern const Char *MatrixType[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM];
     248extern const Char *MatrixType_DC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM];
     249extern const Int g_quantTSDefault4x4[4*4];
     250extern const Int g_quantIntraDefault8x8[8*8];
     251extern const Int g_quantInterDefault8x8[8*8];
     252extern const UInt g_scalingListSize [SCALING_LIST_SIZE_NUM];
     253extern const UInt g_scalingListSizeX[SCALING_LIST_SIZE_NUM];
    380254//! \}
    381 
    382255#endif  //__TCOMROM__
    383 
Note: See TracChangeset for help on using the changeset viewer.