source: 3DVCSoftware/branches/0.2-HHI/source/Lib/TLibCommon/TComRom.h

Last change on this file was 5, checked in by hhi, 13 years ago

Clean version with cfg-files

  • Property svn:eol-style set to native
File size: 21.8 KB
Line 
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-2011, 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 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
35
36/** \file     TComRom.h
37    \brief    global variables & functions (header)
38*/
39
40#ifndef __TCOMROM__
41#define __TCOMROM__
42
43#include "CommonDef.h"
44
45#include<stdio.h>
46#include<iostream>
47
48
49#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
50#include "TComWedgelet.h"
51#endif
52
53// ====================================================================================================================
54// Macros
55// ====================================================================================================================
56
57#define     MAX_CU_DEPTH            7                           // log2(LCUSize)
58#define     MAX_CU_SIZE             (1<<(MAX_CU_DEPTH))         // maximum allowable size of CU
59#define     MIN_PU_SIZE             4
60#define     MAX_NUM_SPU_W           (MAX_CU_SIZE/MIN_PU_SIZE)   // maximum number of SPU in horizontal line
61
62// ====================================================================================================================
63// Initialize / destroy functions
64// ====================================================================================================================
65
66Void         initROM();
67Void         destroyROM();
68Void         initFrameScanXY( UInt* pBuff, UInt* pBuffX, UInt* pBuffY, Int iWidth, Int iHeight );
69#if QC_MDCS
70Void         initSigLastScan(UInt* pBuffZ, UInt* pBuffH, UInt* pBuffV, Int iWidth, Int iHeight, Int iDepth);
71#endif //QC_MDCS
72
73#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
74Void initWedgeLists();
75Void createWedgeList( UInt uiWidth, UInt uiHeight, std::vector<TComWedgelet> &racWedgeList, std::vector<TComWedgeRef> &racWedgeRefList, WedgeResolution eWedgeRes );
76#endif
77
78// ====================================================================================================================
79// Data structure related table & variable
80// ====================================================================================================================
81
82// flexible conversion from relative to absolute index
83extern       UInt   g_auiZscanToRaster[ MAX_NUM_SPU_W*MAX_NUM_SPU_W ];
84extern       UInt   g_auiRasterToZscan[ MAX_NUM_SPU_W*MAX_NUM_SPU_W ];
85
86Void         initZscanToRaster ( Int iMaxDepth, Int iDepth, UInt uiStartVal, UInt*& rpuiCurrIdx );
87Void         initRasterToZscan ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth         );
88
89// conversion of partition index to picture pel position
90extern       UInt   g_auiRasterToPelX[ MAX_NUM_SPU_W*MAX_NUM_SPU_W ];
91extern       UInt   g_auiRasterToPelY[ MAX_NUM_SPU_W*MAX_NUM_SPU_W ];
92
93Void         initRasterToPelXY ( UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxDepth );
94#if MTK_SAO
95Int  LevelRowCol2Idx(int level, int row, int col);
96void Idx2LevelRowCol(int idx, int *level, int *row, int *col);
97#endif
98
99// global variable (LCU width/height, max. CU depth)
100extern       UInt g_uiMaxCUWidth;
101extern       UInt g_uiMaxCUHeight;
102extern       UInt g_uiMaxCUDepth;
103extern       UInt g_uiAddCUDepth;
104
105extern       UInt g_auiPUOffset[4];
106
107#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
108extern       std::vector<std::vector<TComWedgelet> > g_aacWedgeLists;
109extern       std::vector<std::vector<TComWedgeRef> > g_aacWedgeRefLists;
110#endif
111
112#if E243_CORE_TRANSFORMS
113#define QUANT_IQUANT_SHIFT    20 // Q(QP%6) * IQ(QP%6) = 2^20
114#define QUANT_SHIFT           14 // Q(4) = 2^14
115#define SCALE_BITS            15 // Inherited from TMuC, pressumably for fractional bit estimates in RDOQ
116#define MAX_TR_DYNAMIC_RANGE  15 // Maximum transform dynamic range (excluding sign bit)
117
118#define SHIFT_INV_1ST          7 // Shift after first inverse transform stage
119#define SHIFT_INV_2ND         12 // Shift after second inverse transform stage
120
121extern UInt g_auiQ[6];             // Q(QP%6) 
122extern UInt g_auiIQ[6];            // IQ(QP%6)
123extern const short g_aiT4[4][4];
124extern const short g_aiT8[8][8];
125extern const short g_aiT16[16][16];
126extern const short g_aiT32[32][32];
127
128
129
130#endif
131
132// ====================================================================================================================
133// Quantization & DeQuantization
134// ====================================================================================================================
135
136extern       UInt   g_aiQuantCoef4      [6];
137extern       Int    g_aiDequantCoef4    [6];
138extern       UInt   g_aiQuantCoef       [6][16];
139extern       Int    g_aiDequantCoef     [6][16];
140extern       Int    g_aiDequantCoef64   [6][64];
141extern       UInt   g_aiQuantCoef64     [6][64];
142extern       UInt   g_aiQuantCoef256    [6][256];
143extern       UInt   g_aiDeQuantCoef256  [6][256];
144extern       UInt   g_aiQuantCoef1024   [6][1024];
145extern       UInt   g_aiDeQuantCoef1024 [6][1024];
146extern       UInt   g_aiQuantCoef4096   [6];
147extern       UInt   g_aiDeQuantCoef4096 [6];
148
149// ====================================================================================================================
150// Luma QP to Chroma QP mapping
151// ====================================================================================================================
152
153extern const UChar  g_aucChromaScale      [52];
154
155// ====================================================================================================================
156// Scanning order & context mapping table
157// ====================================================================================================================
158
159extern       UInt*  g_auiFrameScanXY[ MAX_CU_DEPTH  ];    // raster index     from scanning index
160extern       UInt*  g_auiFrameScanX [ MAX_CU_DEPTH  ];    // raster index (x) from scanning index
161extern       UInt*  g_auiFrameScanY [ MAX_CU_DEPTH  ];    // raster index (y) from scanning index
162extern       UInt   g_auiAntiScan8[64];                   // 2D context mapping for coefficients
163#if QC_MDCS
164extern       UInt*  g_auiSigLastScan[3][ MAX_CU_DEPTH ];  // raster index from scanning index (zigzag, hor, ver)
165#endif //QC_MDCS
166#if PCP_SIGMAP_SIMPLE_LAST
167extern       UInt   g_uiCtxXYOffset[ MAX_CU_DEPTH ];      //!< context offset for last pos coding
168extern       UInt   g_uiCtxXY      [ 31 ];                //!< context mapping for last pos coding
169#endif
170
171#if E253
172extern const UInt   g_auiGoRiceRange[4];                  //!< maximum value coded with Rice codes
173extern const UInt   g_auiGoRicePrefixLen[4];              //!< prefix length for each maximum value
174extern const UInt   g_aauiGoRiceUpdate[4][16];            //!< parameter update rules for Rice codes
175#endif
176
177// ====================================================================================================================
178// CAVLC table
179// ====================================================================================================================
180
181extern const UChar  g_aucCodeTable3[7][15];
182extern const UChar  g_aucLenTable3 [7][15];
183extern const UChar  g_aucCodeTableTZ4[3][4];
184extern const UChar  g_aucLenTableTZ4 [3][4];
185extern const UChar  g_aucCodeTableTZ16[15][16];
186extern const UChar  g_aucLenTableTZ16 [15][16];
187extern const UChar  g_aucCodeTableTO4[4][5];
188extern const UChar  g_aucLenTableTO4 [4][5];
189extern const UChar  g_aucACTab[6];
190extern const UChar  g_aucFrameBits[32];
191
192#if !CAVLC_COEF_LRG_BLK
193extern const UInt    g_auiLPTableE8[8][128];
194extern const UInt    g_auiLPTableD8[8][128];
195#endif
196extern const UInt    g_auiLPTableE4[3][32];
197extern const UInt    g_auiLPTableD4[3][32];
198extern const UInt    g_auiLastPosVlcIndex[10];
199extern const UInt    g_auiLastPosVlcNum[10][17];
200#if RUNLEVEL_TABLE_CUT
201extern const UInt    g_auiLumaRun8x8[28][29];
202#else
203extern const UInt    g_auiLumaRun8x8[29][2][64];
204#endif
205
206#if LCEC_INTRA_MODE
207#if MTK_DCM_MPM
208extern const UInt    g_auiIntraModeTableD17[2][16];
209extern const UInt    g_auiIntraModeTableE17[2][16];
210extern const UInt    g_auiIntraModeTableD34[2][33];
211extern const UInt    g_auiIntraModeTableE34[2][33];
212#else
213extern const UInt    g_auiIntraModeTableD17[16];
214extern const UInt    g_auiIntraModeTableE17[16];
215extern const UInt    g_auiIntraModeTableD34[33];
216extern const UInt    g_auiIntraModeTableE34[33];
217#endif
218#endif
219
220#if QC_MOD_LCEC
221extern const UInt    g_auiVlcTable8x8Inter[29];
222extern const UInt    g_auiVlcTable8x8Intra[29];
223#else
224extern const UInt    g_auiVlcTable8x8[28];
225#endif
226#if RUNLEVEL_TABLE_CUT
227extern const UInt    g_acstructLumaRun8x8[28][29];
228#else
229extern const LastCoeffStruct g_acstructLumaRun8x8[29][127];
230#endif
231
232#if CAVLC_COEF_LRG_BLK
233extern const UInt   g_auiVlcTable16x16Intra[29];
234extern const UInt   g_auiVlcTable16x16Inter[29];
235#endif
236
237#if LCEC_INTRA_MODE
238extern const UInt huff17_2[2][17];
239extern const UInt lengthHuff17_2[2][17];
240extern const UInt huff34_2[2][34];
241extern const UInt lengthHuff34_2[2][34];
242#endif
243
244#if QC_MOD_LCEC
245#if CAVLC_COEF_LRG_BLK
246extern const UInt   *g_pLumaRunTr14x4[5]; 
247extern const UInt   *g_pLumaRunTr18x8[5]; 
248#else
249extern const UInt    g_auiLumaRunTr14x4[5][15];
250extern const UInt    g_auiLumaRunTr18x8[5][29];
251#endif
252#endif
253#if CAVLC_RQT_CBP
254extern const UInt    g_auiCBP_YUV_TableE[4][8];
255extern const UInt    g_auiCBP_YUV_TableD[4][8];
256extern const UInt    g_auiCBP_YS_TableE[2][4];
257extern const UInt    g_auiCBP_YS_TableD[2][4];
258extern const UInt    g_auiCBP_YCS_TableE[2][8];
259extern const UInt    g_auiCBP_YCS_TableD[2][8];
260extern const UInt    g_auiCBP_YCS_Table[2][8];
261extern const UInt    g_auiCBP_YCS_TableLen[2][8];
262extern const UInt    g_auiCBP_YC_TableE[2][4];
263extern const UInt    g_auiCBP_YC_TableD[2][4];
264extern const UInt    g_auiCBP_4Y_TableE[2][15];
265extern const UInt    g_auiCBP_4Y_TableD[2][15];
266extern const UInt    g_auiCBP_4Y_VlcNum[15];
267#else
268extern const UInt    g_auiCBPTableE[2][8];
269extern const UInt    g_auiCBPTableD[2][8];
270extern const UInt    g_auiBlkCBPTableE[2][15];
271extern const UInt    g_auiBlkCBPTableD[2][15];
272extern const UInt    g_auiBlkCbpVlcNum[15];
273#endif//
274extern const UInt    g_auiCbpVlcNum[2][8];
275
276#if UNIFY_INTER_TABLE
277extern const UInt g_auiComMI1TableE[9];
278extern const UInt g_auiComMI1TableD[9];
279#else
280extern const UInt g_auiMI1TableE[8];
281extern const UInt g_auiMI1TableD[8];
282extern const UInt g_auiMI2TableE[15];
283extern const UInt g_auiMI2TableD[15];
284extern const UInt g_auiMITableVlcNum[15];
285
286extern const UInt g_auiMI1TableENoL1[8];
287extern const UInt g_auiMI1TableDNoL1[8];
288extern const UInt g_auiMI2TableENoL1[15];
289extern const UInt g_auiMI2TableDNoL1[15];
290
291#if MS_LCEC_ONE_FRAME
292extern const UInt g_auiMI1TableEOnly1Ref[8];
293extern const UInt g_auiMI1TableDOnly1Ref[8];
294extern const UInt g_auiMI1TableEOnly1RefNoL1[8];
295extern const UInt g_auiMI1TableDOnly1RefNoL1[8];
296#endif
297#endif
298
299#if QC_LCEC_INTER_MODE
300extern const UInt g_auiInterModeTableE[4][7];
301extern const UInt g_auiInterModeTableD[4][7];
302#endif
303// ====================================================================================================================
304// ADI table
305// ====================================================================================================================
306
307extern const UChar  g_aucIntraModeNumFast[7];
308
309// ====================================================================================================================
310// Angular Intra table
311// ====================================================================================================================
312
313extern const UChar g_aucIntraModeNumAng[7];
314extern const UChar g_aucIntraModeBitsAng[7];
315extern const UChar g_aucAngModeMapping[4][34];
316#if ADD_PLANAR_MODE
317extern const UChar g_aucAngIntraModeOrder[NUM_INTRA_MODE];
318#else
319extern const UChar g_aucAngIntraModeOrder[34];
320#endif
321
322#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
323extern const UChar g_aucWedgeFullBitsListIdx[7];
324extern const UChar g_aucIntraSizeIdxToWedgeSize[7];
325extern const WedgeResolution g_aeWedgeResolutionList[5];
326extern       double g_dDeltaDCsQuantOffset;
327#endif
328
329// ====================================================================================================================
330// Bit-depth
331// ====================================================================================================================
332
333extern       UInt g_uiBitDepth;
334extern       UInt g_uiBitIncrement;
335extern       UInt g_uiIBDI_MAX;
336extern       UInt g_uiBASE_MAX;
337
338// ====================================================================================================================
339// Texture type to integer mapping
340// ====================================================================================================================
341
342extern const UChar g_aucConvertTxtTypeToIdx[4];
343
344// ==========================================
345// Mode-Dependent DST Matrices
346#if INTRA_DST_TYPE_7
347extern const short g_as_DST_MAT_4 [4][4];
348#if ADD_PLANAR_MODE
349#if HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX
350extern const UChar g_aucDCTDSTMode_Vert[NUM_INTRA_MODE+8];
351extern const UChar g_aucDCTDSTMode_Hor[NUM_INTRA_MODE+8];
352#elif HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
353extern const UChar g_aucDCTDSTMode_Vert[NUM_INTRA_MODE+4];
354extern const UChar g_aucDCTDSTMode_Hor[NUM_INTRA_MODE+4];
355#else
356extern const UChar g_aucDCTDSTMode_Vert[NUM_INTRA_MODE];
357extern const UChar g_aucDCTDSTMode_Hor[NUM_INTRA_MODE];
358#endif
359#else
360#if HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX
361extern const UChar g_aucDCTDSTMode_Vert[34+8];
362extern const UChar g_aucDCTDSTMode_Hor[34+8];
363#elif HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
364extern const UChar g_aucDCTDSTMode_Vert[34+4];
365extern const UChar g_aucDCTDSTMode_Hor[34+4];
366#else
367extern const UChar g_aucDCTDSTMode_Vert[34];
368extern const UChar g_aucDCTDSTMode_Hor[34];
369#endif
370#endif
371#endif
372// ==========================================
373
374// ====================================================================================================================
375// Misc.
376// ====================================================================================================================
377
378#if QC_MOD_LCEC
379__inline UInt xRunLevelInd(Int lev, Int run, Int maxrun, UInt lrg1Pos)
380{
381  UInt cn;
382
383  if ( lrg1Pos > 0 )
384  {
385    if ( lev == 0 )
386    {
387      if ( run < lrg1Pos )
388        cn = run;
389      else
390        cn = (run << 1) - lrg1Pos + 1;
391    }
392    else
393    {
394      if ( run > (maxrun - (Int)lrg1Pos + 1) )
395        cn = maxrun + run + 2 ; 
396      else
397        cn = lrg1Pos + (run << 1);
398    }
399  }
400  else
401  {
402    cn = (run << 1);
403    if ( lev == 0 && run <= maxrun )
404    { 
405      cn++;
406    }
407  }
408  return(cn);
409}
410
411#if RUNLEVEL_TABLE_CUT
412/** Function for deriving codeword index in CAVLC run-level coding
413 * \param lev a value indicating coefficient level greater than one or not
414 * \param run length of run
415 * \param maxrun maximum length of run for a given coefficient location
416 * \returns the codeword index
417 * This function derives codeword index in CAVLC run-level coding .
418 */
419__inline UInt xRunLevelIndInter(Int lev, Int run, Int maxrun)
420{
421  UInt cn;
422 
423  if (maxrun < 28)
424  {
425    if (lev == 0)
426    {
427      cn = g_auiLumaRun8x8[maxrun][run];
428    }
429    else
430    {
431      cn = maxrun + g_auiLumaRun8x8[maxrun][run] + 1; 
432    }
433  }
434  else
435  {
436    if (lev == 0)
437    {
438      cn = run;
439    }
440    else
441    {
442      cn = maxrun + run + 2;
443    }
444  }
445
446  return(cn);
447}
448#endif
449#endif
450
451
452#if QC_MOD_LCEC_RDOQ
453__inline UInt xLeadingZeros(UInt uiCode)
454{
455  UInt uiCount = 0;
456  Int iDone = 0;
457 
458  if (uiCode)
459  {
460    while (!iDone)
461    {
462      uiCode >>= 1;
463      if (!uiCode) iDone = 1;
464      else uiCount++;
465    }
466  }
467  return uiCount;
468}
469#endif
470
471extern       Char   g_aucConvertToBit  [ MAX_CU_SIZE+1 ];   // from width to log2(width)-2
472
473#if CAVLC_COEF_LRG_BLK
474/** Function for deriving codeword index in coding last significant position and level information.
475 * \param lev a value indicating coefficient level greater than one or not
476 * \param last_pos last significant coefficient position
477 * \param N block size
478 * \returns the codeword index
479 * This function derives codeword index in coding last significant position and level information in CAVLC.
480 */
481__inline UInt xLastLevelInd(Int lev, Int last_pos, Int N)
482{
483  UInt cx;
484  UInt uiConvBit = g_aucConvertToBit[N]+2;
485
486  if (lev==0)
487  {
488    cx = ((last_pos + (last_pos>>uiConvBit))>>uiConvBit)+last_pos;
489  }
490  else
491  {
492    if (last_pos<N)
493    {
494      cx = (last_pos+1)<<uiConvBit;
495    }
496    else
497    {
498      cx = (0x01<<(uiConvBit<<1)) + last_pos;
499    }
500  }
501  return(cx);
502}
503
504__inline void xLastLevelIndInv(Int& lev, Int& last_pos, Int N, UInt cx)
505{
506  UInt uiConvBit = g_aucConvertToBit[N]+2;
507  Int N2 = 0x01<<(uiConvBit<<1);
508
509  if(cx <= N2+N)
510  {
511    if(cx && (cx&(N-1))==0)
512    {
513      lev = 1;
514      last_pos = (cx>>uiConvBit)-1;
515    }
516    else
517    {
518      lev = 0;
519      last_pos = cx - (cx>>uiConvBit);
520    }
521  }
522  else
523  {
524    lev = 1;
525    last_pos = cx - N2;
526  }
527}
528#endif
529
530
531#if CHROMA_CODEWORD_SWITCH
532extern const UChar ChromaMapping[2][5];
533#endif
534
535#if ADD_PLANAR_MODE
536__inline Void mapPlanartoDC( UChar& curDir ) { curDir = (curDir == PLANAR_IDX) ? 2 : curDir; }
537__inline Void mapPlanartoDC(  UInt& curDir ) { curDir = (curDir == PLANAR_IDX) ? 2 : curDir; }
538__inline Void mapPlanartoDC(   Int& curDir ) { curDir = (curDir == PLANAR_IDX) ? 2 : curDir; }
539#endif
540#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
541__inline Void mapDMMtoDC( UChar& curDir ) { curDir = (curDir > MAX_MODE_ID_INTRA_DIR) ? 2 : curDir; }
542__inline Void mapDMMtoDC(  UInt& curDir ) { curDir = (curDir > MAX_MODE_ID_INTRA_DIR) ? 2 : curDir; }
543__inline Void mapDMMtoDC(   Int& curDir ) { curDir = (curDir > MAX_MODE_ID_INTRA_DIR) ? 2 : curDir; }
544#endif
545
546
547#define ENC_DEC_TRACE 0
548
549
550#if ENC_DEC_TRACE
551extern FILE*  g_hTrace;
552extern Bool   g_bJustDoIt;
553extern const Bool g_bEncDecTraceEnable;
554extern const Bool g_bEncDecTraceDisable;
555extern UInt64 g_nSymbolCounter;
556
557#define COUNTER_START    1
558#define COUNTER_END      0 //( UInt64(1) << 63 )
559
560#define DTRACE_CABAC_F(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%f", x );
561#define DTRACE_CABAC_V(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%d", x );
562#define DTRACE_CABAC_T(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%s", x );
563#define DTRACE_CABAC_X(x)     if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "%x", x );
564#define DTRACE_CABAC_R( x,y ) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, x,    y );
565#define DTRACE_CABAC_N        if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "\n"    );
566
567#else
568
569#define DTRACE_CABAC_F(x)
570#define DTRACE_CABAC_V(x)
571#define DTRACE_CABAC_T(x)
572#define DTRACE_CABAC_X(x)
573#define DTRACE_CABAC_R( x,y )
574#define DTRACE_CABAC_N
575
576#endif
577#if CAVLC_COUNTER_ADAPT
578/** Function for codeword adaptation
579 * \param uiCodeIdx codeword index of the syntax element being coded
580 * \param pucTableCounter pointer to counter array
581 * \param rucTableCounterSum sum counter
582 * \param puiTableD pointer to table mapping codeword index to syntax element value
583 * \param puiTableE pointer to table mapping syntax element value to codeword index
584 * \param uiCounterNum number of counters
585 * \returns
586 * This function performs codeword adaptation.
587*/
588__inline Void adaptCodeword( UInt uiCodeIdx, UChar * pucTableCounter, UChar & rucTableCounterSum, UInt * puiTableD, UInt * puiTableE, UInt uiCounterNum )
589{
590  Bool bSwapping  = false;
591  UInt uiCodeword = puiTableD [uiCodeIdx];
592
593  UInt uiPrevCodeIdx   = (uiCodeIdx >= 1)? uiCodeIdx - 1 : 0;
594  UInt uiPrevCodeword  = puiTableD[uiPrevCodeIdx];
595
596  if ( uiCodeIdx < uiCounterNum ) 
597  {
598    pucTableCounter [uiCodeIdx] ++;
599
600    if (pucTableCounter[uiCodeIdx] >= pucTableCounter[uiPrevCodeIdx])
601    {
602      bSwapping = true;
603      UChar ucTempCounter             = pucTableCounter[uiCodeIdx];
604      pucTableCounter[uiCodeIdx]      = pucTableCounter[uiPrevCodeIdx];
605      pucTableCounter[uiPrevCodeIdx]  = ucTempCounter;
606    }
607
608    if ( rucTableCounterSum >= 15 )
609    {
610      rucTableCounterSum = 0;
611      for (UInt uiIdx = 0; uiIdx < uiCounterNum; uiIdx++)
612      {
613        pucTableCounter[uiIdx] >>= 1;
614      }
615    }
616    else
617    {
618      rucTableCounterSum ++;
619    }
620  }
621  else
622  {
623    bSwapping = true;
624  }
625
626  if ( bSwapping )
627  {
628    puiTableD[uiPrevCodeIdx] = uiCodeword;
629    puiTableD[uiCodeIdx    ] = uiPrevCodeword;
630
631    if  (puiTableE != NULL)
632    {
633      puiTableE[uiCodeword]     = uiPrevCodeIdx;
634      puiTableE[uiPrevCodeword] = uiCodeIdx;
635    }
636  }
637}
638#endif
639#endif  //__TCOMROM__
640
Note: See TracBrowser for help on using the repository browser.