Changeset 1313 in 3DVCSoftware for trunk/source/Lib/TLibEncoder/TEncGOP.h
- Timestamp:
- 13 Aug 2015, 17:38:13 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibEncoder/TEncGOP.h
r1179 r1313 2 2 * License, included below. This software may be subject to other third party 3 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/IEC4 * granted under this license. 5 * 6 * Copyright (c) 2010-2015, ITU/ISO/IEC 7 7 * All rights reserved. 8 8 * … … 54 54 #include "TEncSbac.h" 55 55 #include "SEIwrite.h" 56 #include "SEIEncoder.h" 56 57 57 58 #include "TEncAnalyze.h" … … 71 72 // ==================================================================================================================== 72 73 73 /// GOP encoder class74 74 class TEncGOP 75 75 { 76 class DUData 77 { 78 public: 79 DUData() 80 :accumBitsDU(0) 81 ,accumNalsDU(0) {}; 82 83 Int accumBitsDU; 84 Int accumNalsDU; 85 }; 86 76 87 private: 88 89 TEncAnalyze m_gcAnalyzeAll; 90 TEncAnalyze m_gcAnalyzeI; 91 TEncAnalyze m_gcAnalyzeP; 92 TEncAnalyze m_gcAnalyzeB; 93 94 TEncAnalyze m_gcAnalyzeAll_in; 77 95 // Data 78 96 Bool m_bLongtermTestPictureHasBeenCoded; 79 97 Bool m_bLongtermTestPictureHasBeenCoded2; 80 UInt m_numLongTermRefPicSPS;81 UInt m_ltRefPicPocLsbSps[33];82 Bool m_ltRefPicUsedByCurrPicFlag[33];98 UInt m_numLongTermRefPicSPS; 99 UInt m_ltRefPicPocLsbSps[MAX_NUM_LONG_TERM_REF_PICS]; 100 Bool m_ltRefPicUsedByCurrPicFlag[MAX_NUM_LONG_TERM_REF_PICS]; 83 101 Int m_iLastIDR; 84 102 Int m_iGopSize; 85 103 Int m_iNumPicCoded; 86 104 Bool m_bFirst; 87 #if ALLOW_RECOVERY_POINT_AS_RAP88 105 Int m_iLastRecoveryPicPOC; 89 #endif 90 106 91 107 // Access channel 92 108 TEncTop* m_pcEncTop; … … 94 110 TEncSlice* m_pcSliceEncoder; 95 111 TComList<TComPic*>* m_pcListPic; 96 112 97 113 TEncEntropy* m_pcEntropyCoder; 98 114 TEncCavlc* m_pcCavlcCoder; … … 102 118 103 119 SEIWriter m_seiWriter; 104 105 #if H_MV120 121 #if NH_MV 106 122 TComPicLists* m_ivPicLists; 107 123 std::vector<TComPic*> m_refPicSetInterLayer0; … … 111 127 Int m_layerId; 112 128 Int m_viewId; 113 #if H_3D129 #if NH_3D 114 130 Int m_viewIndex; 115 131 Bool m_isDepth; 116 132 #endif 117 133 #endif 118 #if H_3D_IC134 #if NH_3D_IC 119 135 Int* m_aICEnableCandidate; 120 136 Int* m_aICEnableNum; … … 122 138 //--Adaptive Loop filter 123 139 TEncSampleAdaptiveOffset* m_pcSAO; 124 TComBitCounter* m_pcBitCounter;125 140 TEncRateCtrl* m_pcRateCtrl; 126 141 // indicate sequence first 127 142 Bool m_bSeqFirst; 128 143 129 144 // clean decoding refresh 130 145 Bool m_bRefreshPending; 131 146 Int m_pocCRA; 132 std::vector<Int> m_storedStartCUAddrForEncodingSlice;133 std::vector<Int> m_storedStartCUAddrForEncodingSliceSegment;134 #if FIX1172135 147 NalUnitType m_associatedIRAPType; 136 148 Int m_associatedIRAPPOC; 137 #endif138 149 139 150 std::vector<Int> m_vRVM_RP; 140 151 UInt m_lastBPSEI; 141 152 UInt m_totalCoded; 142 UInt m_cpbRemovalDelay;143 UInt m_tl0Idx;144 UInt m_rapIdx;145 Bool m_activeParameterSetSEIPresentInAU;146 153 Bool m_bufferingPeriodSEIPresentInAU; 147 Bool m_pictureTimingSEIPresentInAU; 148 Bool m_nestedBufferingPeriodSEIPresentInAU; 149 Bool m_nestedPictureTimingSEIPresentInAU; 154 SEIEncoder m_seiEncoder; 155 150 156 public: 151 157 TEncGOP(); 152 158 virtual ~TEncGOP(); 153 159 154 160 Void create (); 155 161 Void destroy (); 156 162 157 163 Void init ( TEncTop* pcTEncTop ); 158 #if H_MV 159 Void initGOP ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP); 160 Void compressPicInGOP ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP, Int iGOPid, Bool isField, Bool isTff ); 164 #if NH_MV 165 Void initGOP ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP); 166 Void compressPicInGOP ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRec, 167 std::list<AccessUnit>& accessUnitsInGOP, Bool isField, Bool isTff, const InputColourSpaceConversion snr_conversion, const Bool printFrameMSE, Int iGOPid ); 161 168 #else 162 Void compressGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRec, std::list<AccessUnit>& accessUnitsInGOP, Bool isField, Bool isTff ); 163 #endif 164 Void xAttachSliceDataToNalUnit (OutputNALUnit& rNalu, TComOutputBitstream*& rpcBitstreamRedirect); 165 166 #if H_MV 169 Void compressGOP ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRec, 170 std::list<AccessUnit>& accessUnitsInGOP, Bool isField, Bool isTff, const InputColourSpaceConversion snr_conversion, const Bool printFrameMSE ); 171 #endif 172 Void xAttachSliceDataToNalUnit (OutputNALUnit& rNalu, TComOutputBitstream* pcBitstreamRedirect); 173 174 #if NH_MV 167 175 Int getPocLastCoded () { return m_pocLastCoded; } 168 176 Int getLayerId () { return m_layerId; } 169 177 Int getViewId () { return m_viewId; } 170 #if H_3D178 #if NH_3D 171 179 Int getViewIndex () { return m_viewIndex; } 172 180 Bool getIsDepth () { return m_isDepth; } … … 175 183 176 184 Int getGOPSize() { return m_iGopSize; } 177 185 178 186 TComList<TComPic*>* getListPic() { return m_pcListPic; } 179 180 #if !H_MV 181 Void printOutSummary ( UInt uiNumAllPicCoded , bool isField); 182 #endif 183 #if H_3D_VSO 184 Void preLoopFilterPicAll ( TComPic* pcPic, Dist64& ruiDist, UInt64& ruiBits ); 187 Void printOutSummary ( UInt uiNumAllPicCoded, Bool isField, const Bool printMSEBasedSNR, const Bool printSequenceMSE, const BitDepths &bitDepths ); 188 #if NH_3D_VSO 189 Void preLoopFilterPicAll ( TComPic* pcPic, Dist64& ruiDist); 185 190 #else 186 Void preLoopFilterPicAll ( TComPic* pcPic, UInt64& ruiDist , UInt64& ruiBits);191 Void preLoopFilterPicAll ( TComPic* pcPic, UInt64& ruiDist ); 187 192 #endif 188 193 … … 194 199 NalUnitType getNalUnitType( Int pocCurr, Int lastIdr, Bool isField ); 195 200 Void arrangeLongtermPicturesInRPS(TComSlice *, TComList<TComPic*>& ); 201 196 202 protected: 197 203 TEncRateCtrl* getRateCtrl() { return m_pcRateCtrl; } … … 199 205 protected: 200 206 201 Void xInitGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, bool isField ); 202 Void xGetBuffer ( TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, Int iNumPicRcvd, Int iTimeOffset, TComPic*& rpcPic, TComPicYuv*& rpcPicYuvRecOut, Int pocCurr, bool isField ); 203 204 Void xCalculateAddPSNR ( TComPic* pcPic, TComPicYuv* pcPicD, const AccessUnit&, Double dEncTime ); 205 Void xCalculateInterlacedAddPSNR( TComPic* pcPicOrgTop, TComPic* pcPicOrgBottom, TComPicYuv* pcPicRecTop, TComPicYuv* pcPicRecBottom, const AccessUnit& accessUnit, Double dEncTime ); 206 207 #if H_3D_VSO 208 Dist64 xFindDistortionFrame (TComPicYuv* pcPic0, TComPicYuv* pcPic1); 207 Void xInitGOP ( Int iPOCLast, Int iNumPicRcvd, Bool isField ); 208 Void xGetBuffer ( TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, Int iNumPicRcvd, Int iTimeOffset, TComPic*& rpcPic, TComPicYuv*& rpcPicYuvRecOut, Int pocCurr, Bool isField ); 209 210 Void xCalculateAddPSNRs ( const Bool isField, const Bool isFieldTopFieldFirst, const Int iGOPid, TComPic* pcPic, const AccessUnit&accessUnit, TComList<TComPic*> &rcListPic, Double dEncTime, const InputColourSpaceConversion snr_conversion, const Bool printFrameMSE ); 211 Void xCalculateAddPSNR ( TComPic* pcPic, TComPicYuv* pcPicD, const AccessUnit&, Double dEncTime, const InputColourSpaceConversion snr_conversion, const Bool printFrameMSE ); 212 Void xCalculateInterlacedAddPSNR( TComPic* pcPicOrgFirstField, TComPic* pcPicOrgSecondField, 213 TComPicYuv* pcPicRecFirstField, TComPicYuv* pcPicRecSecondField, 214 const InputColourSpaceConversion snr_conversion, const Bool printFrameMSE ); 215 #if NH_3D_VSO 216 Dist64 xFindDistortionFrame (TComPicYuv* pcPic0, TComPicYuv* pcPic1, const BitDepths &bitDepths); 209 217 #else 210 UInt64 xFindDistortionFrame (TComPicYuv* pcPic0, TComPicYuv* pcPic1); 211 #endif 212 218 UInt64 xFindDistortionFrame (TComPicYuv* pcPic0, TComPicYuv* pcPic1, const BitDepths &bitDepths); 219 #endif 213 220 Double xCalculateRVM(); 214 221 215 SEIActiveParameterSets* xCreateSEIActiveParameterSets (TComSPS *sps); 216 SEIFramePacking* xCreateSEIFramePacking(); 217 SEIDisplayOrientation* xCreateSEIDisplayOrientation(); 218 219 SEIToneMappingInfo* xCreateSEIToneMappingInfo(); 220 #if H_MV 221 SEISubBitstreamProperty *xCreateSEISubBitstreamProperty( TComSPS *sps); 222 #endif 223 224 Void xCreateLeadingSEIMessages (/*SEIMessages seiMessages,*/ AccessUnit &accessUnit, TComSPS *sps); 225 Int xGetFirstSeiLocation (AccessUnit &accessUnit); 226 Void xResetNonNestedSEIPresentFlags() 227 { 228 m_activeParameterSetSEIPresentInAU = false; 229 m_bufferingPeriodSEIPresentInAU = false; 230 m_pictureTimingSEIPresentInAU = false; 231 } 232 Void xResetNestedSEIPresentFlags() 233 { 234 m_nestedBufferingPeriodSEIPresentInAU = false; 235 m_nestedPictureTimingSEIPresentInAU = false; 236 } 237 #if H_MV 222 Void xCreateIRAPLeadingSEIMessages (SEIMessages& seiMessages, const TComSPS *sps, const TComPPS *pps); 223 Void xCreatePerPictureSEIMessages (Int picInGOP, SEIMessages& seiMessages, SEIMessages& nestedSeiMessages, TComSlice *slice); 224 Void xCreatePictureTimingSEI (Int IRAPGOPid, SEIMessages& seiMessages, SEIMessages& nestedSeiMessages, SEIMessages& duInfoSeiMessages, TComSlice *slice, Bool isField, std::deque<DUData> &duData); 225 Void xUpdateDuData(AccessUnit &testAU, std::deque<DUData> &duData); 226 Void xUpdateTimingSEI(SEIPictureTiming *pictureTimingSEI, std::deque<DUData> &duData, const TComSPS *sps); 227 Void xUpdateDuInfoSEI(SEIMessages &duInfoSeiMessages, SEIPictureTiming *pictureTimingSEI); 228 229 Void xCreateScalableNestingSEI (SEIMessages& seiMessages, SEIMessages& nestedSeiMessages); 230 Void xWriteSEI (NalUnitType naluType, SEIMessages& seiMessages, AccessUnit &accessUnit, AccessUnit::iterator &auPos, Int temporalId, const TComSPS *sps); 231 Void xWriteSEISeparately (NalUnitType naluType, SEIMessages& seiMessages, AccessUnit &accessUnit, AccessUnit::iterator &auPos, Int temporalId, const TComSPS *sps); 232 Void xClearSEIs(SEIMessages& seiMessages, Bool deleteMessages); 233 Void xWriteLeadingSEIOrdered (SEIMessages& seiMessages, SEIMessages& duInfoSeiMessages, AccessUnit &accessUnit, Int temporalId, const TComSPS *sps, Bool testWrite); 234 Void xWriteLeadingSEIMessages (SEIMessages& seiMessages, SEIMessages& duInfoSeiMessages, AccessUnit &accessUnit, Int temporalId, const TComSPS *sps, std::deque<DUData> &duData); 235 Void xWriteTrailingSEIMessages (SEIMessages& seiMessages, AccessUnit &accessUnit, Int temporalId, const TComSPS *sps); 236 Void xWriteDuSEIMessages (SEIMessages& duInfoSeiMessages, AccessUnit &accessUnit, Int temporalId, const TComSPS *sps, std::deque<DUData> &duData); 237 238 Int xWriteVPS (AccessUnit &accessUnit, const TComVPS *vps); 239 Int xWriteSPS (AccessUnit &accessUnit, const TComSPS *sps); 240 Int xWritePPS (AccessUnit &accessUnit, const TComPPS *pps); 241 Int xWriteParameterSets (AccessUnit &accessUnit, TComSlice *slice); 242 243 #if NH_MV 238 244 Void xSetRefPicListModificationsMv( std::vector<TComPic*> tempPicLists[2], TComSlice* pcSlice, UInt iGOPid ); 239 245 #endif 240 Void dblMetric( TComPic* pcPic, UInt uiNumSlices ); 246 247 248 Void applyDeblockingFilterMetric( TComPic* pcPic, UInt uiNumSlices ); 241 249 };// END CLASS DEFINITION TEncGOP 242 250 243 // ====================================================================================================================244 // Enumeration245 // ====================================================================================================================246 enum PROCESSING_STATE247 {248 EXECUTE_INLOOPFILTER,249 ENCODE_SLICE250 };251 252 enum SCALING_LIST_PARAMETER253 {254 SCALING_LIST_OFF,255 SCALING_LIST_DEFAULT,256 SCALING_LIST_FILE_READ257 };258 259 251 //! \} 260 252
Note: See TracChangeset for help on using the changeset viewer.