source: SHVCSoftware/branches/SHM-dev/source/Lib/TLibCommon/TComPicSym.cpp @ 1502

Last change on this file since 1502 was 1502, checked in by seregin, 8 years ago

infer parameters in SPS after activation, fixing chroma scaling for non 4:2:0

  • Property svn:eol-style set to native
File size: 18.6 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-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
34/** \file     TComPicSym.cpp
35    \brief    picture symbol class
36*/
37
38#include "TComPicSym.h"
39#include "TComSampleAdaptiveOffset.h"
40#include "TComSlice.h"
41
42//! \ingroup TLibCommon
43//! \{
44
45// ====================================================================================================================
46// Constructor / destructor / create / destroy
47// ====================================================================================================================
48
49#if SVC_EXTENSION
50TComVPS TComPicSym::m_vps;
51#endif
52
53TComPicSym::TComPicSym()
54:m_frameWidthInCtus(0)
55,m_frameHeightInCtus(0)
56,m_uiMinCUWidth(0)
57,m_uiMinCUHeight(0)
58,m_uhTotalDepth(0)
59,m_numPartitionsInCtu(0)
60,m_numPartInCtuWidth(0)
61,m_numPartInCtuHeight(0)
62,m_numCtusInFrame(0)
63,m_apSlices()
64,m_pictureCtuArray(NULL)
65,m_numTileColumnsMinus1(0)
66,m_numTileRowsMinus1(0)
67,m_ctuTsToRsAddrMap(NULL)
68,m_puiTileIdxMap(NULL)
69,m_ctuRsToTsAddrMap(NULL)
70,m_saoBlkParams(NULL)
71#if ADAPTIVE_QP_SELECTION
72,m_pParentARLBuffer(NULL)
73#endif
74#if SVC_EXTENSION
75#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
76, m_piTileSetIdxMap(NULL)
77, m_pucTileSetType(NULL)
78, m_pbSkippedTileSetFlag(NULL)
79#endif
80#endif
81{}
82
83#if SVC_EXTENSION
84Void TComPicSym::create  ( const TComVPS& vps, const TComSPS &sps, const TComPPS &pps, UInt uiMaxDepth, const UInt layerId )
85{
86  m_vps = vps;
87#else
88Void TComPicSym::create  ( const TComSPS &sps, const TComPPS &pps, UInt uiMaxDepth )
89{
90#endif
91  UInt i;
92  m_sps = sps;
93  m_pps = pps;
94
95  const ChromaFormat chromaFormatIDC = sps.getChromaFormatIdc();
96  const Int iPicWidth      = sps.getPicWidthInLumaSamples();
97  const Int iPicHeight     = sps.getPicHeightInLumaSamples();
98
99  const UInt uiMaxCuWidth  = sps.getMaxCUWidth();
100  const UInt uiMaxCuHeight = sps.getMaxCUHeight();
101
102  m_uhTotalDepth       = uiMaxDepth;
103  m_numPartitionsInCtu = 1<<(m_uhTotalDepth<<1);
104
105  m_uiMinCUWidth       = uiMaxCuWidth  >> m_uhTotalDepth;
106  m_uiMinCUHeight      = uiMaxCuHeight >> m_uhTotalDepth;
107
108  m_numPartInCtuWidth  = uiMaxCuWidth  / m_uiMinCUWidth;  // equivalent to 1<<m_uhTotalDepth
109  m_numPartInCtuHeight = uiMaxCuHeight / m_uiMinCUHeight; // equivalent to 1<<m_uhTotalDepth
110
111  m_frameWidthInCtus   = ( iPicWidth %uiMaxCuWidth  ) ? iPicWidth /uiMaxCuWidth  + 1 : iPicWidth /uiMaxCuWidth;
112  m_frameHeightInCtus  = ( iPicHeight%uiMaxCuHeight ) ? iPicHeight/uiMaxCuHeight + 1 : iPicHeight/uiMaxCuHeight;
113
114  m_numCtusInFrame     = m_frameWidthInCtus * m_frameHeightInCtus;
115  m_pictureCtuArray    = new TComDataCU*[m_numCtusInFrame];
116
117  clearSliceBuffer();
118  allocateNewSlice();
119
120#if SVC_EXTENSION
121   m_apSlices.back()->setLayerId( layerId );
122#endif
123
124#if ADAPTIVE_QP_SELECTION
125  if (m_pParentARLBuffer == NULL)
126  {
127     m_pParentARLBuffer = new TCoeff[uiMaxCuWidth*uiMaxCuHeight*MAX_NUM_COMPONENT];
128  }
129#endif
130
131  for ( i=0; i<m_numCtusInFrame ; i++ )
132  {
133    m_pictureCtuArray[i] = new TComDataCU;
134    m_pictureCtuArray[i]->create( chromaFormatIDC, m_numPartitionsInCtu, uiMaxCuWidth, uiMaxCuHeight, false, uiMaxCuWidth >> m_uhTotalDepth
135#if ADAPTIVE_QP_SELECTION
136      , m_pParentARLBuffer
137#endif
138      );
139  }
140
141  m_ctuTsToRsAddrMap = new UInt[m_numCtusInFrame+1];
142  m_puiTileIdxMap    = new UInt[m_numCtusInFrame];
143  m_ctuRsToTsAddrMap = new UInt[m_numCtusInFrame+1];
144
145#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
146  m_piTileSetIdxMap = new Int[m_numCtusInFrame];
147  m_pucTileSetType = new UChar[m_numCtusInFrame];
148  m_pbSkippedTileSetFlag = new Bool[m_numCtusInFrame];
149#endif 
150
151  for( i=0; i<m_numCtusInFrame; i++ )
152  {
153    m_ctuTsToRsAddrMap[i] = i;
154    m_ctuRsToTsAddrMap[i] = i;
155  }
156
157  m_saoBlkParams = new SAOBlkParam[m_numCtusInFrame];
158
159
160  xInitTiles();
161  xInitCtuTsRsAddrMaps();
162
163}
164
165Void TComPicSym::destroy()
166{
167  clearSliceBuffer();
168
169  if (m_pictureCtuArray)
170  {
171    for (Int i = 0; i < m_numCtusInFrame; i++)
172    {
173      if (m_pictureCtuArray[i])
174      {
175        m_pictureCtuArray[i]->destroy();
176        delete m_pictureCtuArray[i];
177        m_pictureCtuArray[i] = NULL;
178      }
179    }
180    delete [] m_pictureCtuArray;
181    m_pictureCtuArray = NULL;
182  }
183
184  delete [] m_ctuTsToRsAddrMap;
185  m_ctuTsToRsAddrMap = NULL;
186
187  delete [] m_puiTileIdxMap;
188  m_puiTileIdxMap = NULL;
189#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
190  delete [] m_piTileSetIdxMap;
191  m_piTileSetIdxMap = NULL;
192  delete [] m_pucTileSetType;
193  m_pucTileSetType = NULL;
194  delete [] m_pbSkippedTileSetFlag;
195  m_pbSkippedTileSetFlag = NULL;
196#endif
197
198  delete [] m_ctuRsToTsAddrMap;
199  m_ctuRsToTsAddrMap = NULL;
200
201  if(m_saoBlkParams)
202  {
203    delete[] m_saoBlkParams; m_saoBlkParams = NULL;
204  }
205
206#if ADAPTIVE_QP_SELECTION
207  delete [] m_pParentARLBuffer;
208  m_pParentARLBuffer = NULL;
209#endif
210}
211
212Void TComPicSym::allocateNewSlice()
213{
214  m_apSlices.push_back(new TComSlice);
215  m_apSlices.back()->setPPS(&m_pps);
216  m_apSlices.back()->setSPS(&m_sps);
217#if SVC_EXTENSION
218  m_apSlices.back()->setVPS(&m_vps);
219#endif
220  if (m_apSlices.size()>=2)
221  {
222    m_apSlices.back()->copySliceInfo( m_apSlices[m_apSlices.size()-2] );
223#if SVC_EXTENSION
224    m_apSlices.back()->initSlice( m_apSlices[m_apSlices.size()-1]->getLayerId() );
225#else
226    m_apSlices.back()->initSlice();
227#endif
228  }
229}
230
231Void TComPicSym::clearSliceBuffer()
232{
233  for (UInt i = 0; i < UInt(m_apSlices.size()); i++)
234  {
235    delete m_apSlices[i];
236  }
237  m_apSlices.clear();
238}
239
240Void TComPicSym::xInitCtuTsRsAddrMaps()
241{
242  //generate the Coding Order Map and Inverse Coding Order Map
243  for(Int ctuTsAddr=0, ctuRsAddr=0; ctuTsAddr<getNumberOfCtusInFrame(); ctuTsAddr++, ctuRsAddr = xCalculateNextCtuRSAddr(ctuRsAddr))
244  {
245    setCtuTsToRsAddrMap(ctuTsAddr, ctuRsAddr);
246    setCtuRsToTsAddrMap(ctuRsAddr, ctuTsAddr);
247  }
248  setCtuTsToRsAddrMap(getNumberOfCtusInFrame(), getNumberOfCtusInFrame());
249  setCtuRsToTsAddrMap(getNumberOfCtusInFrame(), getNumberOfCtusInFrame());
250}
251
252Void TComPicSym::xInitTiles()
253{
254  //set NumColumnsMinus1 and NumRowsMinus1
255  setNumTileColumnsMinus1( m_pps.getNumTileColumnsMinus1() );
256  setNumTileRowsMinus1(    m_pps.getNumTileRowsMinus1()    );
257
258  const Int numCols = m_pps.getNumTileColumnsMinus1() + 1;
259  const Int numRows = m_pps.getNumTileRowsMinus1() + 1;
260  const Int numTiles = numRows * numCols;
261
262  // allocate memory for tile parameters
263  m_tileParameters.resize(numTiles);
264
265  if( m_pps.getTileUniformSpacingFlag() )
266  {
267    //set width and height for each (uniform) tile
268    for(Int row=0; row < numRows; row++)
269    {
270      for(Int col=0; col < numCols; col++)
271      {
272        const Int tileIdx = row * numCols + col;
273        m_tileParameters[tileIdx].setTileWidthInCtus(  (col+1)*getFrameWidthInCtus( )/numCols - (col*getFrameWidthInCtus( ))/numCols );
274        m_tileParameters[tileIdx].setTileHeightInCtus( (row+1)*getFrameHeightInCtus()/numRows - (row*getFrameHeightInCtus())/numRows );
275      }
276    }
277  }
278  else
279  {
280    //set the width for each tile
281    for(Int row=0; row < numRows; row++)
282    {
283      Int cumulativeTileWidth = 0;
284      for(Int col=0; col < getNumTileColumnsMinus1(); col++)
285      {
286        m_tileParameters[row * numCols + col].setTileWidthInCtus( m_pps.getTileColumnWidth(col) );
287        cumulativeTileWidth += m_pps.getTileColumnWidth(col);
288      }
289      m_tileParameters[row * numCols + getNumTileColumnsMinus1()].setTileWidthInCtus( getFrameWidthInCtus()-cumulativeTileWidth );
290    }
291
292    //set the height for each tile
293    for(Int col=0; col < numCols; col++)
294    {
295      Int cumulativeTileHeight = 0;
296      for(Int row=0; row < getNumTileRowsMinus1(); row++)
297      {
298        m_tileParameters[row * numCols + col].setTileHeightInCtus( m_pps.getTileRowHeight(row) );
299        cumulativeTileHeight += m_pps.getTileRowHeight(row);
300      }
301      m_tileParameters[getNumTileRowsMinus1() * numCols + col].setTileHeightInCtus( getFrameHeightInCtus()-cumulativeTileHeight );
302    }
303  }
304
305  // Tile size check
306  Int minWidth  = 1;
307  Int minHeight = 1;
308  const Int profileIdc = m_sps.getPTL()->getGeneralPTL()->getProfileIdc();
309  if (  profileIdc == Profile::MAIN || profileIdc == Profile::MAIN10) //TODO: add more profiles to the tile-size check...
310  {
311    if (m_pps.getTilesEnabledFlag())
312    {
313      minHeight = 64  / m_sps.getMaxCUHeight();
314      minWidth  = 256 / m_sps.getMaxCUWidth();
315    }
316  }
317  for(Int row=0; row < numRows; row++)
318  {
319    for(Int col=0; col < numCols; col++)
320    {
321      const Int tileIdx = row * numCols + col;
322      assert (m_tileParameters[tileIdx].getTileWidthInCtus() >= minWidth);
323      assert (m_tileParameters[tileIdx].getTileHeightInCtus() >= minHeight);
324    }
325  }
326
327  //initialize each tile of the current picture
328  for( Int row=0; row < numRows; row++ )
329  {
330    for( Int col=0; col < numCols; col++ )
331    {
332      const Int tileIdx = row * numCols + col;
333
334      //initialize the RightEdgePosInCU for each tile
335      Int rightEdgePosInCTU = 0;
336      for( Int i=0; i <= col; i++ )
337      {
338        rightEdgePosInCTU += m_tileParameters[row * numCols + i].getTileWidthInCtus();
339      }
340      m_tileParameters[tileIdx].setRightEdgePosInCtus(rightEdgePosInCTU-1);
341
342      //initialize the BottomEdgePosInCU for each tile
343      Int bottomEdgePosInCTU = 0;
344      for( Int i=0; i <= row; i++ )
345      {
346        bottomEdgePosInCTU += m_tileParameters[i * numCols + col].getTileHeightInCtus();
347      }
348      m_tileParameters[tileIdx].setBottomEdgePosInCtus(bottomEdgePosInCTU-1);
349
350      //initialize the FirstCUAddr for each tile
351      m_tileParameters[tileIdx].setFirstCtuRsAddr( (m_tileParameters[tileIdx].getBottomEdgePosInCtus() - m_tileParameters[tileIdx].getTileHeightInCtus() + 1) * getFrameWidthInCtus() +
352                                                    m_tileParameters[tileIdx].getRightEdgePosInCtus()  - m_tileParameters[tileIdx].getTileWidthInCtus()  + 1);
353    }
354  }
355
356  Int  columnIdx = 0;
357  Int  rowIdx = 0;
358
359  //initialize the TileIdxMap
360  for( Int i=0; i<m_numCtusInFrame; i++)
361  {
362    for( Int col=0; col < numCols; col++)
363    {
364      if(i % getFrameWidthInCtus() <= m_tileParameters[col].getRightEdgePosInCtus())
365      {
366        columnIdx = col;
367        break;
368      }
369    }
370    for(Int row=0; row < numRows; row++)
371    {
372      if(i / getFrameWidthInCtus() <= m_tileParameters[row*numCols].getBottomEdgePosInCtus())
373      {
374        rowIdx = row;
375        break;
376      }
377    }
378    m_puiTileIdxMap[i] = rowIdx * numCols + columnIdx;
379  }
380}
381UInt TComPicSym::xCalculateNextCtuRSAddr( UInt currCtuRsAddr )
382{
383  UInt  nextCtuRsAddr;
384
385  //get the tile index for the current CTU
386  const UInt uiTileIdx = getTileIdxMap(currCtuRsAddr);
387
388  //get the raster scan address for the next CTU
389  if( currCtuRsAddr % m_frameWidthInCtus == getTComTile(uiTileIdx)->getRightEdgePosInCtus() && currCtuRsAddr / m_frameWidthInCtus == getTComTile(uiTileIdx)->getBottomEdgePosInCtus() )
390  //the current CTU is the last CTU of the tile
391  {
392    if(uiTileIdx+1 == getNumTiles())
393    {
394      nextCtuRsAddr = m_numCtusInFrame;
395    }
396    else
397    {
398      nextCtuRsAddr = getTComTile(uiTileIdx+1)->getFirstCtuRsAddr();
399    }
400  }
401  else //the current CTU is not the last CTU of the tile
402  {
403    if( currCtuRsAddr % m_frameWidthInCtus == getTComTile(uiTileIdx)->getRightEdgePosInCtus() )  //the current CTU is on the rightmost edge of the tile
404    {
405      nextCtuRsAddr = currCtuRsAddr + m_frameWidthInCtus - getTComTile(uiTileIdx)->getTileWidthInCtus() + 1;
406    }
407    else
408    {
409      nextCtuRsAddr = currCtuRsAddr + 1;
410    }
411  }
412
413  return nextCtuRsAddr;
414}
415
416Void TComPicSym::deriveLoopFilterBoundaryAvailibility(Int ctuRsAddr,
417                                                      Bool& isLeftAvail,
418                                                      Bool& isRightAvail,
419                                                      Bool& isAboveAvail,
420                                                      Bool& isBelowAvail,
421                                                      Bool& isAboveLeftAvail,
422                                                      Bool& isAboveRightAvail,
423                                                      Bool& isBelowLeftAvail,
424                                                      Bool& isBelowRightAvail
425                                                      )
426{
427
428  isLeftAvail      = (ctuRsAddr % m_frameWidthInCtus != 0);
429  isRightAvail     = (ctuRsAddr % m_frameWidthInCtus != m_frameWidthInCtus-1);
430  isAboveAvail     = (ctuRsAddr >= m_frameWidthInCtus );
431  isBelowAvail     = (ctuRsAddr <  m_numCtusInFrame - m_frameWidthInCtus);
432  isAboveLeftAvail = (isAboveAvail && isLeftAvail);
433  isAboveRightAvail= (isAboveAvail && isRightAvail);
434  isBelowLeftAvail = (isBelowAvail && isLeftAvail);
435  isBelowRightAvail= (isBelowAvail && isRightAvail);
436
437  Bool isLoopFiltAcrossTilePPS = getCtu(ctuRsAddr)->getSlice()->getPPS()->getLoopFilterAcrossTilesEnabledFlag();
438
439  {
440    TComDataCU* ctuCurr  = getCtu(ctuRsAddr);
441    TComDataCU* ctuLeft  = isLeftAvail ?getCtu(ctuRsAddr-1):NULL;
442    TComDataCU* ctuRight = isRightAvail?getCtu(ctuRsAddr+1):NULL;
443    TComDataCU* ctuAbove = isAboveAvail?getCtu(ctuRsAddr-m_frameWidthInCtus):NULL;
444    TComDataCU* ctuBelow = isBelowAvail?getCtu(ctuRsAddr+m_frameWidthInCtus):NULL;
445    TComDataCU* ctuAboveLeft  = isAboveLeftAvail ? getCtu(ctuRsAddr-m_frameWidthInCtus-1):NULL;
446    TComDataCU* ctuAboveRight = isAboveRightAvail? getCtu(ctuRsAddr-m_frameWidthInCtus+1):NULL;
447    TComDataCU* ctuBelowLeft  = isBelowLeftAvail ? getCtu(ctuRsAddr+m_frameWidthInCtus-1):NULL;
448    TComDataCU* ctuBelowRight = isBelowRightAvail? getCtu(ctuRsAddr+m_frameWidthInCtus+1):NULL;
449
450    {
451      //left
452      if(ctuLeft != NULL)
453      {
454        isLeftAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuLeft->getSlice()->getSliceCurStartCtuTsAddr())?ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag():true;
455      }
456      //above
457      if(ctuAbove != NULL)
458      {
459        isAboveAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuAbove->getSlice()->getSliceCurStartCtuTsAddr())?ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag():true;
460      }
461      //right
462      if(ctuRight != NULL)
463      {
464        isRightAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuRight->getSlice()->getSliceCurStartCtuTsAddr())?ctuRight->getSlice()->getLFCrossSliceBoundaryFlag():true;
465      }
466      //below
467      if(ctuBelow != NULL)
468      {
469        isBelowAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuBelow->getSlice()->getSliceCurStartCtuTsAddr())?ctuBelow->getSlice()->getLFCrossSliceBoundaryFlag():true;
470      }
471      //above-left
472      if(ctuAboveLeft != NULL)
473      {
474        isAboveLeftAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuAboveLeft->getSlice()->getSliceCurStartCtuTsAddr())?ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag():true;
475      }
476      //below-right
477      if(ctuBelowRight != NULL)
478      {
479        isBelowRightAvail = (ctuCurr->getSlice()->getSliceCurStartCtuTsAddr() != ctuBelowRight->getSlice()->getSliceCurStartCtuTsAddr())?ctuBelowRight->getSlice()->getLFCrossSliceBoundaryFlag():true;
480      }
481
482      //above-right
483      if(ctuAboveRight != NULL)
484      {
485        Int curSliceStartTsAddr  = ctuCurr->getSlice()->getSliceCurStartCtuTsAddr();
486        Int aboveRightSliceStartTsAddr = ctuAboveRight->getSlice()->getSliceCurStartCtuTsAddr();
487
488        isAboveRightAvail = (curSliceStartTsAddr == aboveRightSliceStartTsAddr)?(true):
489          (
490          (curSliceStartTsAddr > aboveRightSliceStartTsAddr)?(ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag())
491          :(ctuAboveRight->getSlice()->getLFCrossSliceBoundaryFlag())
492          );
493      }
494      //below-left
495      if(ctuBelowLeft != NULL)
496      {
497        Int curSliceStartTsAddr       = ctuCurr->getSlice()->getSliceCurStartCtuTsAddr();
498        Int belowLeftSliceStartTsAddr = ctuBelowLeft->getSlice()->getSliceCurStartCtuTsAddr();
499
500        isBelowLeftAvail = (curSliceStartTsAddr == belowLeftSliceStartTsAddr)?(true):
501          (
502          (curSliceStartTsAddr > belowLeftSliceStartTsAddr)?(ctuCurr->getSlice()->getLFCrossSliceBoundaryFlag())
503          :(ctuBelowLeft->getSlice()->getLFCrossSliceBoundaryFlag())
504          );
505      }
506    }
507
508    if(!isLoopFiltAcrossTilePPS)
509    {
510      isLeftAvail      = (!isLeftAvail      ) ?false:(getTileIdxMap( ctuLeft->getCtuRsAddr()         ) == getTileIdxMap( ctuRsAddr ));
511      isAboveAvail     = (!isAboveAvail     ) ?false:(getTileIdxMap( ctuAbove->getCtuRsAddr()        ) == getTileIdxMap( ctuRsAddr ));
512      isRightAvail     = (!isRightAvail     ) ?false:(getTileIdxMap( ctuRight->getCtuRsAddr()        ) == getTileIdxMap( ctuRsAddr ));
513      isBelowAvail     = (!isBelowAvail     ) ?false:(getTileIdxMap( ctuBelow->getCtuRsAddr()        ) == getTileIdxMap( ctuRsAddr ));
514      isAboveLeftAvail = (!isAboveLeftAvail ) ?false:(getTileIdxMap( ctuAboveLeft->getCtuRsAddr()    ) == getTileIdxMap( ctuRsAddr ));
515      isAboveRightAvail= (!isAboveRightAvail) ?false:(getTileIdxMap( ctuAboveRight->getCtuRsAddr()   ) == getTileIdxMap( ctuRsAddr ));
516      isBelowLeftAvail = (!isBelowLeftAvail ) ?false:(getTileIdxMap( ctuBelowLeft->getCtuRsAddr()    ) == getTileIdxMap( ctuRsAddr ));
517      isBelowRightAvail= (!isBelowRightAvail) ?false:(getTileIdxMap( ctuBelowRight->getCtuRsAddr()   ) == getTileIdxMap( ctuRsAddr ));
518    }
519  }
520
521}
522
523
524TComTile::TComTile()
525: m_tileWidthInCtus     (0)
526, m_tileHeightInCtus    (0)
527, m_rightEdgePosInCtus  (0)
528, m_bottomEdgePosInCtus (0)
529, m_firstCtuRsAddr      (0)
530{
531}
532
533TComTile::~TComTile()
534{
535}
536//! \}
Note: See TracBrowser for help on using the repository browser.