source: SHVCSoftware/branches/SHM-2.1-dev/source/Lib/TLibEncoder/TEncTop.h @ 288

Last change on this file since 288 was 288, checked in by qualcomm, 11 years ago

Changes made to signaling of scaled reference layer offsets.

Patch incorporating changes made to signaling of scaled reference layer offsets during SHVC editing. The number of sets of scaled reference layer offsets is signaled. Changes to configuration files also included.

From: Adarsh K. Ramasubramonian <aramasub@…>

File size: 12.9 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     TEncTop.h
35    \brief    encoder class (header)
36*/
37
38#ifndef __TENCTOP__
39#define __TENCTOP__
40
41// Include files
42#include "TLibCommon/TComList.h"
43#include "TLibCommon/TComPrediction.h"
44#include "TLibCommon/TComTrQuant.h"
45#include "TLibCommon/AccessUnit.h"
46
47#include "TLibVideoIO/TVideoIOYuv.h"
48
49#include "TEncCfg.h"
50#include "TEncGOP.h"
51#include "TEncSlice.h"
52#include "TEncEntropy.h"
53#include "TEncCavlc.h"
54#include "TEncSbac.h"
55#include "TEncSearch.h"
56#include "TEncSampleAdaptiveOffset.h"
57#include "TEncPreanalyzer.h"
58#include "TEncRateCtrl.h"
59//! \ingroup TLibEncoder
60//! \{
61
62// ====================================================================================================================
63// Class definition
64// ====================================================================================================================
65
66/// encoder class
67class TEncTop : public TEncCfg
68{
69private:
70  // picture
71  Int                     m_iPOCLast;                     ///< time index (POC)
72  Int                     m_iNumPicRcvd;                  ///< number of received pictures
73  UInt                    m_uiNumAllPicCoded;             ///< number of coded pictures
74  TComList<TComPic*>      m_cListPic;                     ///< dynamic list of pictures
75#if SVC_EXTENSION
76  static Int              m_iSPSIdCnt;                    ///< next Id number for SPS   
77  static Int              m_iPPSIdCnt;                    ///< next Id number for PPS   
78#if AVC_SYNTAX
79  fstream*                m_pBLSyntaxFile;
80#endif
81#endif
82 
83  // encoder search
84  TEncSearch              m_cSearch;                      ///< encoder search class
85  TEncEntropy*            m_pcEntropyCoder;                     ///< entropy encoder
86  TEncCavlc*              m_pcCavlcCoder;                       ///< CAVLC encoder 
87  // coding tool
88  TComTrQuant             m_cTrQuant;                     ///< transform & quantization class
89  TComLoopFilter          m_cLoopFilter;                  ///< deblocking filter class
90  TEncSampleAdaptiveOffset m_cEncSAO;                     ///< sample adaptive offset class
91  TEncEntropy             m_cEntropyCoder;                ///< entropy encoder
92  TEncCavlc               m_cCavlcCoder;                  ///< CAVLC encoder
93  TEncSbac                m_cSbacCoder;                   ///< SBAC encoder
94  TEncBinCABAC            m_cBinCoderCABAC;               ///< bin coder CABAC
95  TEncSbac*               m_pcSbacCoders;                 ///< SBAC encoders (to encode substreams )
96  TEncBinCABAC*           m_pcBinCoderCABACs;             ///< bin coders CABAC (one per substream)
97 
98  // processing unit
99  TEncGOP                 m_cGOPEncoder;                  ///< GOP encoder
100  TEncSlice               m_cSliceEncoder;                ///< slice encoder
101  TEncCu                  m_cCuEncoder;                   ///< CU encoder
102  // SPS
103  TComSPS                 m_cSPS;                         ///< SPS
104  TComPPS                 m_cPPS;                         ///< PPS
105  // RD cost computation
106  TComBitCounter          m_cBitCounter;                  ///< bit counter for RD optimization
107  TComRdCost              m_cRdCost;                      ///< RD cost computation class
108  TEncSbac***             m_pppcRDSbacCoder;              ///< temporal storage for RD computation
109  TEncSbac                m_cRDGoOnSbacCoder;             ///< going on SBAC model for RD stage
110#if FAST_BIT_EST
111  TEncBinCABACCounter***  m_pppcBinCoderCABAC;            ///< temporal CABAC state storage for RD computation
112  TEncBinCABACCounter     m_cRDGoOnBinCoderCABAC;         ///< going on bin coder CABAC for RD stage
113#else
114  TEncBinCABAC***         m_pppcBinCoderCABAC;            ///< temporal CABAC state storage for RD computation
115  TEncBinCABAC            m_cRDGoOnBinCoderCABAC;         ///< going on bin coder CABAC for RD stage
116#endif
117  Int                     m_iNumSubstreams;                ///< # of top-level elements allocated.
118  TComBitCounter*         m_pcBitCounters;                 ///< bit counters for RD optimization per substream
119  TComRdCost*             m_pcRdCosts;                     ///< RD cost computation class per substream
120  TEncSbac****            m_ppppcRDSbacCoders;             ///< temporal storage for RD computation per substream
121  TEncSbac*               m_pcRDGoOnSbacCoders;            ///< going on SBAC model for RD stage per substream
122  TEncBinCABAC****        m_ppppcBinCodersCABAC;           ///< temporal CABAC state storage for RD computation per substream
123  TEncBinCABAC*           m_pcRDGoOnBinCodersCABAC;        ///< going on bin coder CABAC for RD stage per substream
124
125  // quality control
126  TEncPreanalyzer         m_cPreanalyzer;                 ///< image characteristics analyzer for TM5-step3-like adaptive QP
127
128  TComScalingList         m_scalingList;                 ///< quantization matrix information
129  TEncRateCtrl            m_cRateCtrl;                    ///< Rate control class
130 
131#if SVC_EXTENSION
132  TEncTop**               m_ppcTEncTop;
133  TEncTop*                getLayerEnc(UInt layer)   { return m_ppcTEncTop[layer]; }
134#endif
135#if REF_IDX_FRAMEWORK
136  TComPic*                m_cIlpPic[MAX_NUM_REF];                    ///<  Inter layer Prediction picture =  upsampled picture
137#endif
138#if REF_IDX_MFM
139  Bool                    m_bMFMEnabledFlag;
140#endif
141#if SCALED_REF_LAYER_OFFSETS
142  UInt                    m_numScaledRefLayerOffsets;
143  Window                  m_scaledRefLayerWindow[MAX_LAYERS];
144#endif
145protected:
146  Void  xGetNewPicBuffer  ( TComPic*& rpcPic );           ///< get picture buffer which will be processed
147  Void  xInitSPS          ();                             ///< initialize SPS from encoder options
148  Void  xInitPPS          ();                             ///< initialize PPS from encoder options
149 
150  Void  xInitPPSforTiles  ();
151  Void  xInitRPS          ();                             ///< initialize PPS from encoder options
152#if REF_IDX_FRAMEWORK
153  Void xInitILRP();
154#endif
155public:
156  TEncTop();
157  virtual ~TEncTop();
158 
159  Void      create          ();
160  Void      destroy         ();
161  Void      init            ();
162  Void      deletePicBuffer ();
163
164  Void      createWPPCoders(Int iNumSubstreams);
165 
166  // -------------------------------------------------------------------------------------------------------------------
167  // member access functions
168  // -------------------------------------------------------------------------------------------------------------------
169 
170  TComList<TComPic*>*     getListPic            () { return  &m_cListPic;             }
171  TEncSearch*             getPredSearch         () { return  &m_cSearch;              }
172 
173  TComTrQuant*            getTrQuant            () { return  &m_cTrQuant;             }
174  TComLoopFilter*         getLoopFilter         () { return  &m_cLoopFilter;          }
175  TEncSampleAdaptiveOffset* getSAO              () { return  &m_cEncSAO;              }
176  TEncGOP*                getGOPEncoder         () { return  &m_cGOPEncoder;          }
177  TEncSlice*              getSliceEncoder       () { return  &m_cSliceEncoder;        }
178  TEncCu*                 getCuEncoder          () { return  &m_cCuEncoder;           }
179  TEncEntropy*            getEntropyCoder       () { return  &m_cEntropyCoder;        }
180  TEncCavlc*              getCavlcCoder         () { return  &m_cCavlcCoder;          }
181  TEncSbac*               getSbacCoder          () { return  &m_cSbacCoder;           }
182  TEncBinCABAC*           getBinCABAC           () { return  &m_cBinCoderCABAC;       }
183  TEncSbac*               getSbacCoders     () { return  m_pcSbacCoders;      }
184  TEncBinCABAC*           getBinCABACs          () { return  m_pcBinCoderCABACs;      }
185 
186  TComBitCounter*         getBitCounter         () { return  &m_cBitCounter;          }
187  TComRdCost*             getRdCost             () { return  &m_cRdCost;              }
188  TEncSbac***             getRDSbacCoder        () { return  m_pppcRDSbacCoder;       }
189  TEncSbac*               getRDGoOnSbacCoder    () { return  &m_cRDGoOnSbacCoder;     }
190  TComBitCounter*         getBitCounters        () { return  m_pcBitCounters;         }
191  TComRdCost*             getRdCosts            () { return  m_pcRdCosts;             }
192  TEncSbac****            getRDSbacCoders       () { return  m_ppppcRDSbacCoders;     }
193  TEncSbac*               getRDGoOnSbacCoders   () { return  m_pcRDGoOnSbacCoders;   }
194  TEncRateCtrl*           getRateCtrl           () { return &m_cRateCtrl;             }
195  TComSPS*                getSPS                () { return  &m_cSPS;                 }
196  TComPPS*                getPPS                () { return  &m_cPPS;                 }
197  Void selectReferencePictureSet(TComSlice* slice, Int POCCurr, Int GOPid );
198#if L0208_SOP_DESCRIPTION_SEI
199  Int getReferencePictureSetIdxForSOP(TComSlice* slice, Int POCCurr, Int GOPid );
200#endif
201  TComScalingList*        getScalingList        () { return  &m_scalingList;         }
202#if SVC_EXTENSION
203  Void                    setLayerEnc(TEncTop** p) {m_ppcTEncTop = p;}
204  TEncTop**               getLayerEnc()            {return m_ppcTEncTop;}
205  Int                     getPOCLast            () { return m_iPOCLast;               }
206  Int                     getNumPicRcvd         () { return m_iNumPicRcvd;            }
207  Void                    setNumPicRcvd         ( Int num ) { m_iNumPicRcvd = num;      }
208#endif
209#if SCALED_REF_LAYER_OFFSETS
210  Void                    setNumScaledRefLayerOffsets(Int x) { m_numScaledRefLayerOffsets = x; }
211  UInt                    getNumScaledRefLayerOffsets() { return m_numScaledRefLayerOffsets; }
212  Window&  getScaledRefLayerWindow(Int x)            { return m_scaledRefLayerWindow[x]; }
213#endif
214
215  // -------------------------------------------------------------------------------------------------------------------
216  // encoder function
217  // -------------------------------------------------------------------------------------------------------------------
218
219  /// encode several number of pictures until end-of-sequence
220#if SVC_EXTENSION
221#if REF_IDX_FRAMEWORK
222  TComPic** getIlpList() { return m_cIlpPic; }
223  Void      setILRPic(TComPic *pcPic);
224#endif
225#if REF_IDX_MFM
226  Void      setMFMEnabledFlag       (Bool flag)   {m_bMFMEnabledFlag = flag;}
227  Bool      getMFMEnabledFlag()                   {return m_bMFMEnabledFlag;}   
228#endif
229#if AVC_SYNTAX
230  Void      setBLSyntaxFile( fstream* pFile ) { m_pBLSyntaxFile = pFile; }
231  fstream*  getBLSyntaxFile() { return m_pBLSyntaxFile; }
232#endif
233  Void      encode( TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsOut, Int iPicIdInGOP  );
234  Void      encodePrep( TComPicYuv* pcPicYuvOrg );
235#if VPS_EXTN_DIRECT_REF_LAYERS
236  TEncTop*  getRefLayerEnc(UInt refLayerIdc);
237#endif
238#else
239  Void encode( Bool bEos, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut,
240              std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded ); 
241#endif
242
243  void printSummary() { m_cGOPEncoder.printOutSummary (m_uiNumAllPicCoded); }
244};
245
246//! \}
247
248#endif // __TENCTOP__
Note: See TracBrowser for help on using the repository browser.