source: 3DVCSoftware/branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComPic.h @ 539

Last change on this file since 539 was 539, checked in by orange, 11 years ago

Integrated QTLPC and added new line mark at the end of TComWedgelet.cpp for MERL

  • Property svn:eol-style set to native
File size: 12.2 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-2013, 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     TComPic.h
35    \brief    picture class (header)
36*/
37
38#ifndef __TCOMPIC__
39#define __TCOMPIC__
40
41// Include files
42#include "CommonDef.h"
43#include "TComPicSym.h"
44#include "TComPicYuv.h"
45#include "TComBitStream.h"
46#include "SEI.h"
47
48//! \ingroup TLibCommon
49//! \{
50
51// ====================================================================================================================
52// Class definition
53// ====================================================================================================================
54
55/// picture class (symbol + YUV buffers)
56class TComPic
57{
58private:
59  UInt                  m_uiTLayer;               //  Temporal layer
60  Bool                  m_bUsedByCurr;            //  Used by current picture
61  Bool                  m_bIsLongTerm;            //  IS long term picture
62  Bool                  m_bIsUsedAsLongTerm;      //  long term picture is used as reference before
63  TComPicSym*           m_apcPicSym;              //  Symbol
64 
65  TComPicYuv*           m_apcPicYuv[2];           //  Texture,  0:org / 1:rec
66 
67  TComPicYuv*           m_pcPicYuvPred;           //  Prediction
68  TComPicYuv*           m_pcPicYuvResi;           //  Residual
69  Bool                  m_bReconstructed;
70  Bool                  m_bNeededForOutput;
71  UInt                  m_uiCurrSliceIdx;         // Index of current slice
72  Int*                  m_pSliceSUMap;
73  Bool*                 m_pbValidSlice;
74  Int                   m_sliceGranularityForNDBFilter;
75  Bool                  m_bIndependentSliceBoundaryForNDBFilter;
76  Bool                  m_bIndependentTileBoundaryForNDBFilter;
77  TComPicYuv*           m_pNDBFilterYuvTmp;    //!< temporary picture buffer when non-cross slice/tile boundary in-loop filtering is enabled
78  Bool                  m_bCheckLTMSB;
79 
80  Int                   m_numReorderPics[MAX_TLAYER];
81  Window                m_conformanceWindow;
82  Window                m_defaultDisplayWindow;
83
84  std::vector<std::vector<TComDataCU*> > m_vSliceCUDataLink;
85
86  SEIMessages  m_SEIs; ///< Any SEI messages that have been received.  If !NULL we own the object.
87
88#if H_MV
89  Int                   m_layerId;
90  Int                   m_viewId;
91#if H_3D
92  Int                   m_viewIndex;
93  Bool                  m_isDepth;
94  Int**                 m_aaiCodedScale;
95  Int**                 m_aaiCodedOffset;
96#endif
97#endif
98#if H_3D_QTLPC
99  Bool                  m_bReduceBitsQTL;
100#endif
101#if H_3D_NBDV
102  UInt        m_uiRapRefIdx;
103  RefPicList  m_eRapRefList;
104  Int         m_iNumDdvCandPics;
105#endif
106public:
107  TComPic();
108  virtual ~TComPic();
109 
110  Void          create( Int iWidth, Int iHeight, UInt uiMaxWidth, UInt uiMaxHeight, UInt uiMaxDepth, Window &conformanceWindow, Window &defaultDisplayWindow, 
111                        Int *numReorderPics, Bool bIsVirtual = false );
112                       
113  virtual Void  destroy();
114 
115  UInt          getTLayer()                { return m_uiTLayer;   }
116  Void          setTLayer( UInt uiTLayer ) { m_uiTLayer = uiTLayer; }
117
118#if H_MV
119  Void          setLayerId            ( Int layerId )    { m_layerId      = layerId; }
120  Int           getLayerId            ()                 { return m_layerId;    }
121  Void          setViewId             ( Int viewId )     { m_viewId = viewId;   }
122  Int           getViewId             ()                 { return m_viewId;     }
123#if H_3D
124  Void          setViewIndex          ( Int viewIndex )  { m_viewIndex = viewIndex;   }
125  Int           getViewIndex          ()                 { return m_viewIndex;     }
126
127  Void          setIsDepth            ( Bool isDepth )   { m_isDepth = isDepth; }
128  Bool          getIsDepth            ()                 { return m_isDepth; }
129
130  Void          setScaleOffset( Int** pS, Int** pO )  { m_aaiCodedScale = pS; m_aaiCodedOffset = pO; }
131  Int**         getCodedScale ()                      { return m_aaiCodedScale;  }
132  Int**         getCodedOffset()                      { return m_aaiCodedOffset; }
133#endif
134#endif
135
136#if H_3D_QTLPC
137  Bool          getReduceBitsFlag ()             { return m_bReduceBitsQTL;     }
138  Void          setReduceBitsFlag ( Bool bFlag ) { m_bReduceBitsQTL = bFlag;    }
139#endif
140
141  Bool          getUsedByCurr()             { return m_bUsedByCurr; }
142  Void          setUsedByCurr( Bool bUsed ) { m_bUsedByCurr = bUsed; }
143  Bool          getIsLongTerm()             { return m_bIsLongTerm; }
144  Void          setIsLongTerm( Bool lt ) { m_bIsLongTerm = lt; }
145  Void          setCheckLTMSBPresent     (Bool b ) {m_bCheckLTMSB=b;}
146  Bool          getCheckLTMSBPresent     () { return m_bCheckLTMSB;}
147
148  TComPicSym*   getPicSym()           { return  m_apcPicSym;    }
149  TComSlice*    getSlice(Int i)       { return  m_apcPicSym->getSlice(i);  }
150  Int           getPOC()              { return  m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getPOC();  }
151  TComDataCU*&  getCU( UInt uiCUAddr )  { return  m_apcPicSym->getCU( uiCUAddr ); }
152 
153  TComPicYuv*   getPicYuvOrg()        { return  m_apcPicYuv[0]; }
154  TComPicYuv*   getPicYuvRec()        { return  m_apcPicYuv[1]; }
155 
156  TComPicYuv*   getPicYuvPred()       { return  m_pcPicYuvPred; }
157  TComPicYuv*   getPicYuvResi()       { return  m_pcPicYuvResi; }
158  Void          setPicYuvPred( TComPicYuv* pcPicYuv )       { m_pcPicYuvPred = pcPicYuv; }
159  Void          setPicYuvResi( TComPicYuv* pcPicYuv )       { m_pcPicYuvResi = pcPicYuv; }
160 
161  UInt          getNumCUsInFrame()      { return m_apcPicSym->getNumberOfCUsInFrame(); }
162  UInt          getNumPartInWidth()     { return m_apcPicSym->getNumPartInWidth();     }
163  UInt          getNumPartInHeight()    { return m_apcPicSym->getNumPartInHeight();    }
164  UInt          getNumPartInCU()        { return m_apcPicSym->getNumPartition();       }
165  UInt          getFrameWidthInCU()     { return m_apcPicSym->getFrameWidthInCU();     }
166  UInt          getFrameHeightInCU()    { return m_apcPicSym->getFrameHeightInCU();    }
167  UInt          getMinCUWidth()         { return m_apcPicSym->getMinCUWidth();         }
168  UInt          getMinCUHeight()        { return m_apcPicSym->getMinCUHeight();        }
169 
170  UInt          getParPelX(UChar uhPartIdx) { return getParPelX(uhPartIdx); }
171  UInt          getParPelY(UChar uhPartIdx) { return getParPelX(uhPartIdx); }
172 
173  Int           getStride()           { return m_apcPicYuv[1]->getStride(); }
174  Int           getCStride()          { return m_apcPicYuv[1]->getCStride(); }
175 
176  Void          setReconMark (Bool b) { m_bReconstructed = b;     }
177  Bool          getReconMark ()       { return m_bReconstructed;  }
178  Void          setOutputMark (Bool b) { m_bNeededForOutput = b;     }
179  Bool          getOutputMark ()       { return m_bNeededForOutput;  }
180 
181  Void          setNumReorderPics(Int i, UInt tlayer) { m_numReorderPics[tlayer] = i;    }
182  Int           getNumReorderPics(UInt tlayer)        { return m_numReorderPics[tlayer]; }
183
184  Void          compressMotion(); 
185  UInt          getCurrSliceIdx()            { return m_uiCurrSliceIdx;                }
186  Void          setCurrSliceIdx(UInt i)      { m_uiCurrSliceIdx = i;                   }
187  UInt          getNumAllocatedSlice()       {return m_apcPicSym->getNumAllocatedSlice();}
188  Void          allocateNewSlice()           {m_apcPicSym->allocateNewSlice();         }
189  Void          clearSliceBuffer()           {m_apcPicSym->clearSliceBuffer();         }
190
191  Window&       getConformanceWindow()  { return m_conformanceWindow; }
192  Window&       getDefDisplayWindow()   { return m_defaultDisplayWindow; }
193
194  Void          createNonDBFilterInfo   (std::vector<Int> sliceStartAddress, Int sliceGranularityDepth
195                                        ,std::vector<Bool>* LFCrossSliceBoundary
196                                        ,Int  numTiles = 1
197                                        ,Bool bNDBFilterCrossTileBoundary = true);
198  Void          createNonDBFilterInfoLCU(Int tileID, Int sliceID, TComDataCU* pcCU, UInt startSU, UInt endSU, Int sliceGranularyDepth, UInt picWidth, UInt picHeight);
199  Void          destroyNonDBFilterInfo();
200
201  Bool          getValidSlice                                  (Int sliceID)  {return m_pbValidSlice[sliceID];}
202  Bool          getIndependentSliceBoundaryForNDBFilter        ()             {return m_bIndependentSliceBoundaryForNDBFilter;}
203  Bool          getIndependentTileBoundaryForNDBFilter         ()             {return m_bIndependentTileBoundaryForNDBFilter; }
204  TComPicYuv*   getYuvPicBufferForIndependentBoundaryProcessing()             {return m_pNDBFilterYuvTmp;}
205  std::vector<TComDataCU*>& getOneSliceCUDataForNDBFilter      (Int sliceID) { return m_vSliceCUDataLink[sliceID];}
206
207#if H_MV
208  Void          print( Bool legend );
209#endif
210#if H_3D_NBDV
211  Int           getNumDdvCandPics()                    {return m_iNumDdvCandPics;   }
212  Int           getDisCandRefPictures(Int iColPOC);
213  Void          setRapRefIdx(UInt uiRapRefIdx)         {m_uiRapRefIdx = uiRapRefIdx;}
214  Void          setRapRefList(RefPicList eRefPicList)  {m_eRapRefList = eRefPicList;}
215  Void          setNumDdvCandPics (Int i)              {m_iNumDdvCandPics = i;       }
216  UInt          getRapRefIdx()                         {return m_uiRapRefIdx;       }
217  RefPicList    getRapRefList()                        {return m_eRapRefList;       }
218#endif
219  /** transfer ownership of seis to this picture */
220  void setSEIs(SEIMessages& seis) { m_SEIs = seis; }
221
222  /**
223   * return the current list of SEI messages associated with this picture.
224   * Pointer is valid until this->destroy() is called */
225  SEIMessages& getSEIs() { return m_SEIs; }
226
227  /**
228   * return the current list of SEI messages associated with this picture.
229   * Pointer is valid until this->destroy() is called */
230  const SEIMessages& getSEIs() const { return m_SEIs; }
231
232};// END CLASS DEFINITION TComPic
233
234#if H_MV
235class TComPicLists
236{
237private: 
238  TComList<TComList<TComPic*>*> m_lists; 
239#if H_3D
240  TComVPS*                     m_vps; 
241#endif
242public: 
243  Void        push_back( TComList<TComPic*>* list ) { m_lists.push_back( list );   }
244  Int         size     ()                           { return (Int) m_lists.size(); } 
245#if H_3D_ARP
246  TComList<TComPic*>*  getPicList   ( Int layerIdInNuh );
247#endif
248  TComPic*    getPic   ( Int layerIdInNuh,              Int poc );   
249  TComPicYuv* getPicYuv( Int layerIdInNuh,              Int poc, Bool recon ); 
250#if H_3D
251  Void        setVPS   ( TComVPS* vps ) { m_vps = vps;  }; 
252  TComPic*    getPic   ( Int viewIndex, Bool depthFlag, Int poc );
253  TComPicYuv* getPicYuv( Int viewIndex, Bool depthFlag, Int poc, Bool recon );
254#endif 
255
256  Void print( ); 
257
258}; // END CLASS DEFINITION TComPicLists
259
260#endif
261//! \}
262
263#endif // __TCOMPIC__
Note: See TracBrowser for help on using the repository browser.