source: 3DVCSoftware/branches/HTM-16.0-dev1/source/Lib/TLibCommon/TComRom.h @ 1394

Last change on this file since 1394 was 1394, checked in by tech, 9 years ago

Clean-up VSO.

  • Property svn:eol-style set to native
File size: 14.0 KB
RevLine 
[5]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
[1313]4 * granted under this license.
[5]5 *
[1313]6 * Copyright (c) 2010-2015, ITU/ISO/IEC
[5]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.
[56]17 *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
[5]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 */
[2]33/** \file     TComRom.h
34    \brief    global variables & functions (header)
35*/
36#ifndef __TCOMROM__
37#define __TCOMROM__
38#include "CommonDef.h"
39#include<stdio.h>
40#include<iostream>
[1313]41#if NH_3D_DMM
[2]42#include "TComWedgelet.h"
43#endif
[56]44//! \ingroup TLibCommon
45//! \{
[2]46// ====================================================================================================================
47// Initialize / destroy functions
48// ====================================================================================================================
49Void         initROM();
50Void         destroyROM();
51// ====================================================================================================================
52// Data structure related table & variable
53// ====================================================================================================================
54// flexible conversion from relative to absolute index
[1313]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 ];
[2]58Void         initZscanToRaster ( Int iMaxDepth, Int iDepth, UInt uiStartVal, UInt*& rpuiCurrIdx );
59Void         initRasterToZscan ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth         );
60// conversion of partition index to picture pel position
[1313]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 ];
[2]63Void         initRasterToPelXY ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth );
[1313]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];
[2]76// ====================================================================================================================
77// Luma QP to Chroma QP mapping
78// ====================================================================================================================
[1313]79static const Int chromaQPMappingTableSize = 58;
80extern const UChar  g_aucChromaScale[NUM_CHROMA_FORMAT][chromaQPMappingTableSize];
[2]81// ====================================================================================================================
82// Scanning order & context mapping table
83// ====================================================================================================================
[1313]84extern const UInt   ctxIndMap4x4[4*4];
85extern const UInt   g_uiGroupIdx[ MAX_TU_SIZE ];
86extern const UInt   g_uiMinInGroup[ LAST_SIGNIFICANT_GROUPS ];
[2]87// ====================================================================================================================
[1313]88// Intra prediction table
[2]89// ====================================================================================================================
[1313]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];
[1321]93#if NH_3D_DMM
[2]94// ====================================================================================================================
[608]95// Depth coding modes
[56]96// ====================================================================================================================
[608]97extern const WedgeResolution                                 g_dmmWedgeResolution [6];
98extern const UChar                                           g_dmm1TabIdxBits     [6];
[1039]99extern Bool                                                  g_wedgePattern[32*32];
[608]100extern       std::vector< std::vector<TComWedgelet> >        g_dmmWedgeLists;
101extern       std::vector< std::vector<TComWedgeNode> >       g_dmmWedgeNodeLists;
[622]102Void initWedgeLists( Bool initNodeList = false );
[56]103Void createWedgeList( UInt uiWidth, UInt uiHeight, std::vector<TComWedgelet> &racWedgeList, std::vector<TComWedgeRef> &racWedgeRefList, WedgeResolution eWedgeRes );
104Void addWedgeletToList( TComWedgelet cWedgelet, std::vector<TComWedgelet> &racWedgeList, std::vector<TComWedgeRef> &racWedgeRefList );
[1313]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; }
[56]109#endif
[1313]110// ====================================================================================================================
[2]111// Mode-Dependent DST Matrices
[1313]112// ====================================================================================================================
113extern const TMatrixCoeff g_as_DST_MAT_4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4];
[1386]114#if NH_MV_HLS_PTL_LIMITS
[1066]115class TComGeneralTierAndLevelLimits
116{
117public:
118  TComGeneralTierAndLevelLimits::TComGeneralTierAndLevelLimits
119  ( Int maxLumaPs, 
120    Int maxCPBMainTier, 
121    Int maxCPBHighTier, 
122    Int maxSliceSegmentsPerPicture, 
123    Int maxTileRows, 
124    Int maxTileCols )
125  : m_maxLumaPs                 ( maxLumaPs                     ),
126    m_maxCPBMainTier            ( maxCPBMainTier                ),
127    m_maxCPBHighTier            ( maxCPBHighTier                ),
128    m_maxSliceSegmentsPerPicture( maxSliceSegmentsPerPicture    ),
129    m_maxTileRows               ( maxTileRows                   ),
130    m_maxTileCols               ( maxTileCols                   );
131  {};
132  Int getMaxLumaPs                 ( ) { return m_maxLumaPs                 ; };
133  Int getMaxCPBMainTier            ( ) { return m_maxCPBMainTier            ; };
134  Int getMaxCPBHighTier            ( ) { return m_maxCPBHighTier            ; };
135  Int getMaxSliceSegmentsPerPicture( ) { return m_maxSliceSegmentsPerPicture; };
136  Int getMaxTileRows               ( ) { return m_maxTileRows               ; };
137  Int getMaxTileCols               ( ) { return m_maxTileCols               ; };
138private:
139  const Int m_maxLumaPs;
140  const Int m_maxCPBMainTier; 
141  const Int m_maxCPBHighTier;
142  const Int m_maxSliceSegmentsPerPicture; 
143  const Int m_maxTileRows; 
144  const Int m_maxTileCols; 
145};
146extern std::map< Level::Name, TComGeneralTierAndLevelLimits > g_generalTierAndLevelLimits;   
147#endif
[2]148// ====================================================================================================================
149// Misc.
150// ====================================================================================================================
[1386]151extern       SChar   g_aucConvertToBit  [ MAX_CU_SIZE+1 ];   // from width to log2(width)-2
[2]152#if ENC_DEC_TRACE
153extern FILE*  g_hTrace;
154extern Bool   g_bJustDoIt;
155extern const Bool g_bEncDecTraceEnable;
156extern const Bool g_bEncDecTraceDisable;
[608]157extern Bool   g_HLSTraceEnable;
[2]158extern UInt64 g_nSymbolCounter;
159#define COUNTER_START    1
160#define COUNTER_END      0 //( UInt64(1) << 63 )
161#define DTRACE_CABAC_F(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%f", x );
162#define DTRACE_CABAC_V(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%d", x );
[56]163#define DTRACE_CABAC_VL(x)    if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%lld", x );
[2]164#define DTRACE_CABAC_T(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%s", x );
165#define DTRACE_CABAC_X(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%x", x );
166#define DTRACE_CABAC_R( x,y ) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, x,    y );
167#define DTRACE_CABAC_N        if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "\n"    );
[1386]168#if NH_MV_ENC_DEC_TRAC
[608]169 extern Bool   g_traceCU; 
[1313]170 extern Bool   g_tracePU ; 
[608]171 extern Bool   g_traceTU; 
[622]172 extern Bool   g_disableHLSTrace;       // USE g_HLSTraceEnable to toggle HLS trace. Not this one!
[1179]173 extern Bool   g_disableNumbering;      // Don't print numbers to trace file
[622]174 extern UInt64 g_stopAtCounter;         // Counter to set breakpoint.
175 extern Bool   g_traceCopyBack;         // Output samples on copy back 
[964]176 extern Bool   g_decTraceDispDer;       // Trace derived disparity vectors (decoder only)
[622]177 extern Bool   g_decTraceMvFromMerge;   // Trace motion vectors obtained from merge (decoder only)
[964]178 extern Bool   g_decTracePicOutput;     // Trace output of pictures
[1313]179 extern Bool   g_startStopTrace;             // Stop at position
[872]180 extern Bool   g_outputPos;             // Output position
[1179]181 extern Bool   g_traceCameraParameters; // Trace camera parameters
182 extern Bool   g_encNumberOfWrittenBits;// Trace number of written bits
[1313]183 extern Bool   g_traceEncFracBits;      // Trace fractional bits
184 extern Bool   g_traceIntraSearchCost;  // Trace intra mode cost
185 extern Bool   g_traceRDCost;         
186 extern Bool   g_traceModeCheck; 
187 extern Bool   g_traceSAOCost; 
188 extern UInt   g_indent; 
[1321]189extern Bool   g_traceMotionInfoBeforUniPred; 
190 extern Bool   g_traceMergeCandListConst; 
191 extern Bool   g_traceSubPBMotion; 
192 extern Bool   g_traceBitsRead;
[608]193#define DTRACE_CU(x,y)             writeToTraceFile( x,y, g_traceCU );
194#define DTRACE_PU(x,y)             writeToTraceFile( x,y, g_tracePU );
195#define DTRACE_TU(x,y)             writeToTraceFile( x,y, g_traceTU );
196#define DTRACE_CU_S(x)             writeToTraceFile( x,   g_traceCU );
197#define DTRACE_PU_S(x)             writeToTraceFile( x,   g_tracePU );
198#define DTRACE_TU_S(x)             writeToTraceFile( x,   g_traceTU );
[1313]199#define D_DEC_INDENT( b )            decIndent        ( b );
200#define D_PRINT_INC_INDENT( b, str ) prinStrIncIndent( b, str );
201#define D_PRINT_INDENT( b, str )     printStrIndent   ( b, str);
[1386]202 Void           tracePSHeader   ( const TChar* psName, Int layerId ); 
203 Void           writeToTraceFile( const TChar* symbolName, Int val, Bool doIt );
204 Void           writeToTraceFile( const TChar* symbolName, Bool doIt );
[1313]205 UInt64         incSymbolCounter();         
206 Void           stopAtPos       ( Int poc, Int layerId, Int cuPelX, Int cuPelY, Int cuWidth, Int cuHeight );           
207 Void           printStr         ( std::string str );
208 Void           printStrIndent   ( Bool b, std::string str );
209 Void           prinStrIncIndent ( Bool b, std::string str );
210 Void           decIndent        ( Bool b );
211 template <typename T>
212 std::string n2s ( T Number )
213 {
214   std::ostringstream ss;
215   ss << Number;
216   return ss.str();
217 };
[608]218#endif
[2]219#else
220#define DTRACE_CABAC_F(x)
221#define DTRACE_CABAC_V(x)
[56]222#define DTRACE_CABAC_VL(x)
[2]223#define DTRACE_CABAC_T(x)
224#define DTRACE_CABAC_X(x)
225#define DTRACE_CABAC_R( x,y )
226#define DTRACE_CABAC_N
[1321]227#if NH_MV
[1196]228#define DTRACE_CU(x,y) ;             
229#define DTRACE_PU(x,y) ;           
230#define DTRACE_TU(x,y) ;           
231#define DTRACE_CU_S(x) ;           
232#define DTRACE_PU_S(x) ;           
233#define DTRACE_TU_S(x) ;           
[1313]234#define D_DEC_INDENT( b ) ;
235#define D_PRINT_INC_INDENT( b, str );
236#define D_PRINT_INDENT( b, str );
[2]237#endif
[1321]238#endif
[1386]239const TChar* nalUnitTypeToString(NalUnitType type);
240
241extern const TChar *MatrixType[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM];
242extern const TChar *MatrixType_DC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM];
[1313]243extern const Int g_quantTSDefault4x4[4*4];
244extern const Int g_quantIntraDefault8x8[8*8];
245extern const Int g_quantInterDefault8x8[8*8];
246extern const UInt g_scalingListSize [SCALING_LIST_SIZE_NUM];
247extern const UInt g_scalingListSizeX[SCALING_LIST_SIZE_NUM];
[56]248//! \}
[2]249#endif  //__TCOMROM__
Note: See TracBrowser for help on using the repository browser.