HEVC Test Model (HM)  HM-16.3
TComPicSym.cpp
Go to the documentation of this file.
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-2015, ITU/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 ITU/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 
38 #include "TComPicSym.h"
40 #include "TComSlice.h"
41 
44 
45 // ====================================================================================================================
46 // Constructor / destructor / create / destroy
47 // ====================================================================================================================
48 
50 :m_frameWidthInCtus(0)
51 ,m_frameHeightInCtus(0)
52 ,m_uiMaxCUWidth(0)
53 ,m_uiMaxCUHeight(0)
54 ,m_uiMinCUWidth(0)
55 ,m_uiMinCUHeight(0)
56 ,m_uhTotalDepth(0)
57 ,m_numPartitionsInCtu(0)
58 ,m_numPartInCtuWidth(0)
59 ,m_numPartInCtuHeight(0)
60 ,m_numCtusInFrame(0)
61 ,m_apSlices()
62 ,m_pictureCtuArray(NULL)
63 ,m_numTileColumnsMinus1(0)
64 ,m_numTileRowsMinus1(0)
65 ,m_ctuTsToRsAddrMap(NULL)
66 ,m_puiTileIdxMap(NULL)
67 ,m_ctuRsToTsAddrMap(NULL)
68 ,m_saoBlkParams(NULL)
69 {}
70 
71 
72 Void TComPicSym::create ( const TComSPS &sps, const TComPPS &pps, UInt uiMaxWidth, UInt uiMaxHeight, UInt uiMaxDepth )
73 {
74  UInt i;
75  m_sps = sps;
76  m_pps = pps;
77 
78  const ChromaFormat chromaFormatIDC=sps.getChromaFormatIdc();
79  const Int iPicWidth = sps.getPicWidthInLumaSamples();
80  const Int iPicHeight = sps.getPicHeightInLumaSamples();
81 
82  m_uhTotalDepth = uiMaxDepth;
84 
85  m_uiMaxCUWidth = uiMaxWidth;
86  m_uiMaxCUHeight = uiMaxHeight;
87 
88  m_uiMinCUWidth = uiMaxWidth >> m_uhTotalDepth;
89  m_uiMinCUHeight = uiMaxHeight >> m_uhTotalDepth;
90 
91  m_numPartInCtuWidth = m_uiMaxCUWidth / m_uiMinCUWidth; // equivalent to 1<<m_uhTotalDepth
92  m_numPartInCtuHeight = m_uiMaxCUHeight / m_uiMinCUHeight; // equivalent to 1<<m_uhTotalDepth
93 
94  m_frameWidthInCtus = ( iPicWidth %m_uiMaxCUWidth ) ? iPicWidth /m_uiMaxCUWidth + 1 : iPicWidth /m_uiMaxCUWidth;
95  m_frameHeightInCtus = ( iPicHeight%m_uiMaxCUHeight ) ? iPicHeight/m_uiMaxCUHeight + 1 : iPicHeight/m_uiMaxCUHeight;
96 
99 
102 
103  for ( i=0; i<m_numCtusInFrame ; i++ )
104  {
105  m_pictureCtuArray[i] = new TComDataCU;
106  m_pictureCtuArray[i]->create( chromaFormatIDC, m_numPartitionsInCtu, m_uiMaxCUWidth, m_uiMaxCUHeight, false, m_uiMaxCUWidth >> m_uhTotalDepth
108  , true
109 #endif
110  );
111  }
112 
113  m_ctuTsToRsAddrMap = new UInt[m_numCtusInFrame+1];
115  m_ctuRsToTsAddrMap = new UInt[m_numCtusInFrame+1];
116 
117  for( i=0; i<m_numCtusInFrame; i++ )
118  {
119  m_ctuTsToRsAddrMap[i] = i;
120  m_ctuRsToTsAddrMap[i] = i;
121  }
122 
124 
125 
126  xInitTiles();
128 
129 }
130 
132 {
134 
135  for (Int i = 0; i < m_numCtusInFrame; i++)
136  {
138  delete m_pictureCtuArray[i];
139  m_pictureCtuArray[i] = NULL;
140  }
141  delete [] m_pictureCtuArray;
143 
144  delete [] m_ctuTsToRsAddrMap;
146 
147  delete [] m_puiTileIdxMap;
149 
150  delete [] m_ctuRsToTsAddrMap;
152 
153  if(m_saoBlkParams)
154  {
155  delete[] m_saoBlkParams; m_saoBlkParams = NULL;
156  }
157 }
158 
160 {
161  m_apSlices.push_back(new TComSlice);
162  m_apSlices.back()->setPPS(&m_pps);
163  m_apSlices.back()->setSPS(&m_sps);
164  if (m_apSlices.size()>=2)
165  {
166  m_apSlices.back()->copySliceInfo( m_apSlices[m_apSlices.size()-2] );
167  m_apSlices.back()->initSlice();
168  }
169 }
170 
172 {
173  for (UInt i = 0; i < UInt(m_apSlices.size()); i++)
174  {
175  delete m_apSlices[i];
176  }
177  m_apSlices.clear();
178 }
179 
181 {
182  //generate the Coding Order Map and Inverse Coding Order Map
183  for(Int ctuTsAddr=0, ctuRsAddr=0; ctuTsAddr<getNumberOfCtusInFrame(); ctuTsAddr++, ctuRsAddr = xCalculateNextCtuRSAddr(ctuRsAddr))
184  {
185  setCtuTsToRsAddrMap(ctuTsAddr, ctuRsAddr);
186  setCtuRsToTsAddrMap(ctuRsAddr, ctuTsAddr);
187  }
190 }
191 
193 {
194  //set NumColumnsMinus1 and NumRowsMinus1
197 
198  const Int numCols = m_pps.getNumTileColumnsMinus1() + 1;
199  const Int numRows = m_pps.getNumTileRowsMinus1() + 1;
200  const Int numTiles = numRows * numCols;
201 
202  // allocate memory for tile parameters
203  m_tileParameters.resize(numTiles);
204 
206  {
207  //set width and height for each (uniform) tile
208  for(Int row=0; row < numRows; row++)
209  {
210  for(Int col=0; col < numCols; col++)
211  {
212  const Int tileIdx = row * numCols + col;
213  m_tileParameters[tileIdx].setTileWidthInCtus( (col+1)*getFrameWidthInCtus( )/numCols - (col*getFrameWidthInCtus( ))/numCols );
214  m_tileParameters[tileIdx].setTileHeightInCtus( (row+1)*getFrameHeightInCtus()/numRows - (row*getFrameHeightInCtus())/numRows );
215  }
216  }
217  }
218  else
219  {
220  //set the width for each tile
221  for(Int row=0; row < numRows; row++)
222  {
223  Int cumulativeTileWidth = 0;
224  for(Int col=0; col < getNumTileColumnsMinus1(); col++)
225  {
226  m_tileParameters[row * numCols + col].setTileWidthInCtus( m_pps.getTileColumnWidth(col) );
227  cumulativeTileWidth += m_pps.getTileColumnWidth(col);
228  }
229  m_tileParameters[row * numCols + getNumTileColumnsMinus1()].setTileWidthInCtus( getFrameWidthInCtus()-cumulativeTileWidth );
230  }
231 
232  //set the height for each tile
233  for(Int col=0; col < numCols; col++)
234  {
235  Int cumulativeTileHeight = 0;
236  for(Int row=0; row < getNumTileRowsMinus1(); row++)
237  {
238  m_tileParameters[row * numCols + col].setTileHeightInCtus( m_pps.getTileRowHeight(row) );
239  cumulativeTileHeight += m_pps.getTileRowHeight(row);
240  }
241  m_tileParameters[getNumTileRowsMinus1() * numCols + col].setTileHeightInCtus( getFrameHeightInCtus()-cumulativeTileHeight );
242  }
243  }
244 
245 #if TILE_SIZE_CHECK
246  Int minWidth = 1;
247  Int minHeight = 1;
248  const Int profileIdc = m_sps.getPTL()->getGeneralPTL()->getProfileIdc();
249  if ( profileIdc == Profile::MAIN || profileIdc == Profile::MAIN10) //TODO: add more profiles to the tile-size check...
250  {
252  {
253  minHeight = 64 / g_uiMaxCUHeight;
254  minWidth = 256 / g_uiMaxCUWidth;
255  }
256  }
257  for(Int row=0; row < numRows; row++)
258  {
259  for(Int col=0; col < numCols; col++)
260  {
261  const Int tileIdx = row * numCols + col;
262  assert (m_tileParameters[tileIdx].getTileWidthInCtus() >= minWidth);
263  assert (m_tileParameters[tileIdx].getTileHeightInCtus() >= minHeight);
264  }
265  }
266 #endif
267 
268  //initialize each tile of the current picture
269  for( Int row=0; row < numRows; row++ )
270  {
271  for( Int col=0; col < numCols; col++ )
272  {
273  const Int tileIdx = row * numCols + col;
274 
275  //initialize the RightEdgePosInCU for each tile
276  Int rightEdgePosInCTU = 0;
277  for( Int i=0; i <= col; i++ )
278  {
279  rightEdgePosInCTU += m_tileParameters[row * numCols + i].getTileWidthInCtus();
280  }
281  m_tileParameters[tileIdx].setRightEdgePosInCtus(rightEdgePosInCTU-1);
282 
283  //initialize the BottomEdgePosInCU for each tile
284  Int bottomEdgePosInCTU = 0;
285  for( Int i=0; i <= row; i++ )
286  {
287  bottomEdgePosInCTU += m_tileParameters[i * numCols + col].getTileHeightInCtus();
288  }
289  m_tileParameters[tileIdx].setBottomEdgePosInCtus(bottomEdgePosInCTU-1);
290 
291  //initialize the FirstCUAddr for each tile
292  m_tileParameters[tileIdx].setFirstCtuRsAddr( (m_tileParameters[tileIdx].getBottomEdgePosInCtus() - m_tileParameters[tileIdx].getTileHeightInCtus() + 1) * getFrameWidthInCtus() +
293  m_tileParameters[tileIdx].getRightEdgePosInCtus() - m_tileParameters[tileIdx].getTileWidthInCtus() + 1);
294  }
295  }
296 
297  Int columnIdx = 0;
298  Int rowIdx = 0;
299 
300  //initialize the TileIdxMap
301  for( Int i=0; i<m_numCtusInFrame; i++)
302  {
303  for( Int col=0; col < numCols; col++)
304  {
305  if(i % getFrameWidthInCtus() <= m_tileParameters[col].getRightEdgePosInCtus())
306  {
307  columnIdx = col;
308  break;
309  }
310  }
311  for(Int row=0; row < numRows; row++)
312  {
313  if(i / getFrameWidthInCtus() <= m_tileParameters[row*numCols].getBottomEdgePosInCtus())
314  {
315  rowIdx = row;
316  break;
317  }
318  }
319  m_puiTileIdxMap[i] = rowIdx * numCols + columnIdx;
320  }
321 }
323 {
324  UInt nextCtuRsAddr;
325 
326  //get the tile index for the current CTU
327  const UInt uiTileIdx = getTileIdxMap(currCtuRsAddr);
328 
329  //get the raster scan address for the next CTU
330  if( currCtuRsAddr % m_frameWidthInCtus == getTComTile(uiTileIdx)->getRightEdgePosInCtus() && currCtuRsAddr / m_frameWidthInCtus == getTComTile(uiTileIdx)->getBottomEdgePosInCtus() )
331  //the current CTU is the last CTU of the tile
332  {
333  if(uiTileIdx+1 == getNumTiles())
334  {
335  nextCtuRsAddr = m_numCtusInFrame;
336  }
337  else
338  {
339  nextCtuRsAddr = getTComTile(uiTileIdx+1)->getFirstCtuRsAddr();
340  }
341  }
342  else //the current CTU is not the last CTU of the tile
343  {
344  if( currCtuRsAddr % m_frameWidthInCtus == getTComTile(uiTileIdx)->getRightEdgePosInCtus() ) //the current CTU is on the rightmost edge of the tile
345  {
346  nextCtuRsAddr = currCtuRsAddr + m_frameWidthInCtus - getTComTile(uiTileIdx)->getTileWidthInCtus() + 1;
347  }
348  else
349  {
350  nextCtuRsAddr = currCtuRsAddr + 1;
351  }
352  }
353 
354  return nextCtuRsAddr;
355 }
356 
358  Bool& isLeftAvail,
359  Bool& isRightAvail,
360  Bool& isAboveAvail,
361  Bool& isBelowAvail,
362  Bool& isAboveLeftAvail,
363  Bool& isAboveRightAvail,
364  Bool& isBelowLeftAvail,
365  Bool& isBelowRightAvail
366  )
367 {
368 
369  isLeftAvail = (ctuRsAddr % m_frameWidthInCtus != 0);
370  isRightAvail = (ctuRsAddr % m_frameWidthInCtus != m_frameWidthInCtus-1);
371  isAboveAvail = (ctuRsAddr >= m_frameWidthInCtus );
372  isBelowAvail = (ctuRsAddr < m_numCtusInFrame - m_frameWidthInCtus);
373  isAboveLeftAvail = (isAboveAvail && isLeftAvail);
374  isAboveRightAvail= (isAboveAvail && isRightAvail);
375  isBelowLeftAvail = (isBelowAvail && isLeftAvail);
376  isBelowRightAvail= (isBelowAvail && isRightAvail);
377 
378  Bool isLoopFiltAcrossTilePPS = getCtu(ctuRsAddr)->getSlice()->getPPS()->getLoopFilterAcrossTilesEnabledFlag();
379 
380  {
381  TComDataCU* ctuCurr = getCtu(ctuRsAddr);
382  TComDataCU* ctuLeft = isLeftAvail ?getCtu(ctuRsAddr-1):NULL;
383  TComDataCU* ctuRight = isRightAvail?getCtu(ctuRsAddr+1):NULL;
384  TComDataCU* ctuAbove = isAboveAvail?getCtu(ctuRsAddr-m_frameWidthInCtus):NULL;
385  TComDataCU* ctuBelow = isBelowAvail?getCtu(ctuRsAddr+m_frameWidthInCtus):NULL;
386  TComDataCU* ctuAboveLeft = isAboveLeftAvail ? getCtu(ctuRsAddr-m_frameWidthInCtus-1):NULL;
387  TComDataCU* ctuAboveRight = isAboveRightAvail? getCtu(ctuRsAddr-m_frameWidthInCtus+1):NULL;
388  TComDataCU* ctuBelowLeft = isBelowLeftAvail ? getCtu(ctuRsAddr+m_frameWidthInCtus-1):NULL;
389  TComDataCU* ctuBelowRight = isBelowRightAvail? getCtu(ctuRsAddr+m_frameWidthInCtus+1):NULL;
390 
391  {
392  //left
393  if(ctuLeft != NULL)
394  {
395  isLeftAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuLeft->getSlice()->getSliceCurStartCtuTsAddr())?ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag():true;
396  }
397  //above
398  if(ctuAbove != NULL)
399  {
400  isAboveAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuAbove->getSlice()->getSliceCurStartCtuTsAddr())?ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag():true;
401  }
402  //right
403  if(ctuRight != NULL)
404  {
405  isRightAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuRight->getSlice()->getSliceCurStartCtuTsAddr())?ctuRight->getSlice()->getLFCrossSliceBoundaryFlag():true;
406  }
407  //below
408  if(ctuBelow != NULL)
409  {
410  isBelowAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuBelow->getSlice()->getSliceCurStartCtuTsAddr())?ctuBelow->getSlice()->getLFCrossSliceBoundaryFlag():true;
411  }
412  //above-left
413  if(ctuAboveLeft != NULL)
414  {
415  isAboveLeftAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuAboveLeft->getSlice()->getSliceCurStartCtuTsAddr())?ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag():true;
416  }
417  //below-right
418  if(ctuBelowRight != NULL)
419  {
420  isBelowRightAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuBelowRight->getSlice()->getSliceCurStartCtuTsAddr())?ctuBelowRight->getSlice()->getLFCrossSliceBoundaryFlag():true;
421  }
422 
423  //above-right
424  if(ctuAboveRight != NULL)
425  {
426  Int curSliceStartTsAddr = ctuCurr->getSlice()->getSliceCurStartCtuTsAddr();
427  Int aboveRightSliceStartTsAddr = ctuAboveRight->getSlice()->getSliceCurStartCtuTsAddr();
428 
429  isAboveRightAvail = (curSliceStartTsAddr == aboveRightSliceStartTsAddr)?(true):
430  (
431  (curSliceStartTsAddr > aboveRightSliceStartTsAddr)?(ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag())
432  :(ctuAboveRight->getSlice()->getLFCrossSliceBoundaryFlag())
433  );
434  }
435  //below-left
436  if(ctuBelowLeft != NULL)
437  {
438  Int curSliceStartTsAddr = ctuCurr->getSlice()->getSliceCurStartCtuTsAddr();
439  Int belowLeftSliceStartTsAddr = ctuBelowLeft->getSlice()->getSliceCurStartCtuTsAddr();
440 
441  isBelowLeftAvail = (curSliceStartTsAddr == belowLeftSliceStartTsAddr)?(true):
442  (
443  (curSliceStartTsAddr > belowLeftSliceStartTsAddr)?(ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag())
444  :(ctuBelowLeft->getSlice()->getLFCrossSliceBoundaryFlag())
445  );
446  }
447  }
448 
449  if(!isLoopFiltAcrossTilePPS)
450  {
451  isLeftAvail = (!isLeftAvail ) ?false:(getTileIdxMap( ctuLeft->getCtuRsAddr() ) == getTileIdxMap( ctuRsAddr ));
452  isAboveAvail = (!isAboveAvail ) ?false:(getTileIdxMap( ctuAbove->getCtuRsAddr() ) == getTileIdxMap( ctuRsAddr ));
453  isRightAvail = (!isRightAvail ) ?false:(getTileIdxMap( ctuRight->getCtuRsAddr() ) == getTileIdxMap( ctuRsAddr ));
454  isBelowAvail = (!isBelowAvail ) ?false:(getTileIdxMap( ctuBelow->getCtuRsAddr() ) == getTileIdxMap( ctuRsAddr ));
455  isAboveLeftAvail = (!isAboveLeftAvail ) ?false:(getTileIdxMap( ctuAboveLeft->getCtuRsAddr() ) == getTileIdxMap( ctuRsAddr ));
456  isAboveRightAvail= (!isAboveRightAvail) ?false:(getTileIdxMap( ctuAboveRight->getCtuRsAddr() ) == getTileIdxMap( ctuRsAddr ));
457  isBelowLeftAvail = (!isBelowLeftAvail ) ?false:(getTileIdxMap( ctuBelowLeft->getCtuRsAddr() ) == getTileIdxMap( ctuRsAddr ));
458  isBelowRightAvail= (!isBelowRightAvail) ?false:(getTileIdxMap( ctuBelowRight->getCtuRsAddr() ) == getTileIdxMap( ctuRsAddr ));
459  }
460  }
461 
462 }
463 
464 
466 : m_tileWidthInCtus (0)
467 , m_tileHeightInCtus (0)
468 , m_rightEdgePosInCtus (0)
469 , m_bottomEdgePosInCtus (0)
470 , m_firstCtuRsAddr (0)
471 {
472 }
473 
475 {
476 }
Int getNumTileRowsMinus1() const
Definition: TComSlice.h:1139
sample adaptive offset class (header)
UInt getFirstCtuRsAddr() const
Definition: TComPicSym.h:79
UInt * m_ctuRsToTsAddrMap
for a given RS (Raster-Scan) address, returns the TS (Tile-Scan; coding order) address. cf CtbAddrRsToTs in specification.
Definition: TComPicSym.h:108
CU data structure class.
Definition: TComDataCU.h:64
TComPPS m_pps
Definition: TComPicSym.h:112
Int getNumTileColumnsMinus1() const
Definition: TComSlice.h:1135
void Void
Definition: TypeDef.h:285
Void create(ChromaFormat chromaFormatIDC, UInt uiNumPartition, UInt uiWidth, UInt uiHeight, Bool bDecSubCu, Int unitSize, Bool bGlobalRMARLBuffer=false)
Definition: TComDataCU.cpp:114
UInt * m_puiTileIdxMap
the map of the tile index relative to CTU raster scan address
Definition: TComPicSym.h:107
Void setNumTileRowsMinus1(Int i)
Definition: TComPicSym.h:117
Int getNumTileColumnsMinus1() const
Definition: TComPicSym.h:145
#define NULL
Definition: CommonDef.h:100
slice header and SPS class (header)
Void setNumTileColumnsMinus1(Int i)
Definition: TComPicSym.h:116
unsigned int UInt
Definition: TypeDef.h:297
Void allocateNewSlice()
Definition: TComPicSym.cpp:159
std::deque< TComSlice * > m_apSlices
Definition: TComPicSym.h:100
ChromaFormat getChromaFormatIdc() const
Definition: TComSlice.h:814
UInt m_numCtusInFrame
Definition: TComPicSym.h:98
UInt getTileRowHeight(UInt rowIdx) const
Definition: TComSlice.h:1141
UInt getFrameWidthInCtus() const
Definition: TComPicSym.h:128
Int getNumTileRowsMinus1() const
Definition: TComPicSym.h:146
Bool getTilesEnabledFlag() const
Definition: TComSlice.h:1131
picture symbol class (header)
ProfileTierLevel * getGeneralPTL()
Definition: TComSlice.h:261
UInt getTileWidthInCtus() const
Definition: TComPicSym.h:71
UInt getTileIdxMap(Int ctuRsAddr) const
Definition: TComPicSym.h:151
UInt m_uiMaxCUHeight
Definition: TComPicSym.h:90
bool Bool
Definition: TypeDef.h:286
UInt m_frameWidthInCtus
Definition: TComPicSym.h:86
TComDataCU ** m_pictureCtuArray
array of CU data.
Definition: TComPicSym.h:101
UInt g_uiMaxCUHeight
Definition: TComRom.cpp:252
#define ADAPTIVE_QP_SELECTION
G382: Adaptive reconstruction levels, non-normative part for adaptive QP selection.
Definition: TypeDef.h:148
UInt g_uiMaxCUWidth
Definition: TComRom.cpp:251
Int getNumTiles() const
Definition: TComPicSym.h:147
PPS class.
Definition: TComSlice.h:977
UInt & getCtuRsAddr()
Definition: TComDataCU.h:207
UInt getPicHeightInLumaSamples() const
Definition: TComSlice.h:824
Void xInitCtuTsRsAddrMaps()
Definition: TComPicSym.cpp:180
UInt m_uiMinCUWidth
Definition: TComPicSym.h:91
Bool getLFCrossSliceBoundaryFlag()
Definition: TComSlice.h:1519
Void destroy()
Definition: TComPicSym.cpp:131
const TComPTL * getPTL() const
Definition: TComSlice.h:943
ChromaFormat
chroma formats (according to semantics of chroma_format_idc)
Definition: TypeDef.h:352
const TComPPS * getPPS() const
Definition: TComSlice.h:1309
UInt getPicWidthInLumaSamples() const
Definition: TComSlice.h:822
Void create(const TComSPS &sps, const TComPPS &pps, UInt uiMaxWidth, UInt uiMaxHeight, UInt uiMaxDepth)
Definition: TComPicSym.cpp:72
UInt getTileColumnWidth(UInt columnIdx) const
Definition: TComSlice.h:1137
Profile::Name getProfileIdc() const
Definition: TComSlice.h:211
UInt getFrameHeightInCtus() const
Definition: TComPicSym.h:129
std::vector< TComTile > m_tileParameters
Definition: TComPicSym.h:105
TComDataCU * getCtu(UInt ctuRsAddr)
Definition: TComPicSym.h:133
UInt getSliceCurStartCtuTsAddr() const
Definition: TComSlice.h:1467
UChar m_uhTotalDepth
max. depth
Definition: TComPicSym.h:94
Void setCtuTsToRsAddrMap(Int ctuTsAddr, Int ctuRsAddr)
Definition: TComPicSym.h:118
TComSPS m_sps
Definition: TComPicSym.h:111
UInt m_numPartitionsInCtu
Definition: TComPicSym.h:95
UInt m_frameHeightInCtus
Definition: TComPicSym.h:87
UInt * m_ctuTsToRsAddrMap
for a given TS (Tile-Scan; coding order) address, returns the RS (Raster-Scan) address. cf CtbAddrTsToRs in specification.
Definition: TComPicSym.h:106
Void deriveLoopFilterBoundaryAvailibility(Int ctuRsAddr, Bool &isLeftAvail, Bool &isRightAvail, Bool &isAboveAvail, Bool &isBelowAvail, Bool &isAboveLeftAvail, Bool &isAboveRightAvail, Bool &isBelowLeftAvail, Bool &isBelowRightAvail)
Definition: TComPicSym.cpp:357
TComTile * getTComTile(UInt tileIdx)
Definition: TComPicSym.h:148
SAOBlkParam * m_saoBlkParams
Definition: TComPicSym.h:110
UInt getNumberOfCtusInFrame() const
Definition: TComPicSym.h:132
int Int
Definition: TypeDef.h:296
UInt xCalculateNextCtuRSAddr(UInt uiCurrCtuRSAddr)
Definition: TComPicSym.cpp:322
virtual ~TComTile()
Definition: TComPicSym.cpp:474
Void clearSliceBuffer()
Definition: TComPicSym.cpp:171
Bool getTileUniformSpacingFlag() const
Definition: TComSlice.h:1133
Void setCtuRsToTsAddrMap(Int ctuRsAddr, Int ctuTsOrder)
Definition: TComPicSym.h:119
UInt m_numPartInCtuHeight
Definition: TComPicSym.h:97
Bool getLoopFilterAcrossTilesEnabledFlag() const
Definition: TComSlice.h:1124
UInt m_uiMinCUHeight
Definition: TComPicSym.h:92
slice header class
Definition: TComSlice.h:1198
Void xInitTiles()
Definition: TComPicSym.cpp:192
UInt m_numPartInCtuWidth
Definition: TComPicSym.h:96
UInt m_uiMaxCUWidth
Definition: TComPicSym.h:89
TComSlice * getSlice()
Definition: TComDataCU.h:205
Void destroy()
Definition: TComDataCU.cpp:221
SPS class.
Definition: TComSlice.h:722