source: 3DVCSoftware/trunk/source/Lib/TLibCommon/TComRom.h @ 2

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

inital import

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