📄 vopseenc.hpp
字号:
/*************************************************************************This software module was originally developed by Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation Bruce Lin (blin@microsoft.com), Microsoft Corporation Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation (date: March, 1996)and edited by Yoshihiro Kikuchi (TOSHIBA CORPORATION) Takeshi Nagai (TOSHIBA CORPORATION) Toshiaki Watanabe (TOSHIBA CORPORATION) Noboru Yamaguchi (TOSHIBA CORPORATION) Marc Mongenet (Marc.Mongenet@epfl.ch), Swiss Federal Institute of Technology, Lausanne (EPFL) Mathias Wien (wien@ient.rwth-aachen.de), RWTH Aachen / Robert BOSCH GmbH and also edited by Yoshinori Suzuki (Hitachi, Ltd.)and also edited by Fujitsu Laboratories Ltd. (contact: Eishi Morimatsu) Sehoon Son (shson@unitel.co.kr) Samsung AITin the course of development of the MPEG-4 Video (ISO/IEC 14496-2). This software module is an implementation of a part of one or more MPEG-4 Video tools as specified by the MPEG-4 Video. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. The original developer of this software module and his/her company, the subsequent editors and their companies, and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. Copyright is not released for non MPEG-4 Video conforming products. Microsoft retains full right to use the code for his/her own purpose, assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. This copyright notice must be included in all copies or derivative works. Copyright (c) 1996, 1997.Module Name: vopSeEnc.hppAbstract: Encoder for one VO.Revision History: Sept. 30, 1997: Error resilient tools added by Toshiba Nov. 27, 1997: Spatial Scalable tools added by Takefumi Nagumo(nagumo@av.crl.sony.co.jp) SONY corporation Dec 20, 1997: Interlaced tools added by NextLevel Systems X. Chen (xchen@nlvl.com) B. Eifrig (beifrig@nlvl.com) Jun 16, 1998: add Complexity Estimation syntax support Marc Mongenet (Marc.Mongenet@epfl.ch) - EPFL Feb.16, 1999: add Quarter Sample Mathias Wien (wien@ient.rwth-aachen.de) May 9, 1999: tm5 rate control by DemoGraFX, duhoff@mediaone.net (added by mwi) Sep.06 1999 : RRV added by Eishi Morimatsu (Fujitsu Laboratories Ltd.) *************************************************************************/#ifndef __VOPSEENC_HPP_ #define __VOPSEENC_HPP_#ifndef SOURCE_FRAME_RATE //assuming input source is always 30f/s#define SOURCE_FRAME_RATE 30#endif#ifndef min#define min MIN#endif#ifndef max#define max MAX#endif#include "tm5rc.hpp"class CFwdBlockDCT;// HHI Schueuer: scan selection classes to support the sadctclass CScanSelector {public: virtual ~CScanSelector() {} //virtual const Int *select(const Int *scan, const Int *piCoeffWidths) { return scan; } // Stefan Rauthenberg: <rauthenberg@HHI.DE> from the semantic point of view I'd prefer a return value of const Int* but // this would cause conflicts with methods like decodeIntraTCOEF. virtual Int *select(Int *scan, Bool bIsBoundary, Int iBlk) { return scan; } // 09/19/99 HHI Schueuer virtual Int *select_DP(Int *scan, Bool bIsBoundary, Int iBlk, Int** rgiCurrMBCoeffWidth) {return scan; }; // end 09/19/99};class CScanSelectorForSADCT: public CScanSelector {public: CScanSelectorForSADCT(Int **rgiCurrMBCoeffWidth); virtual ~CScanSelectorForSADCT(); virtual Int *select(Int *scan, Bool bIsBoundary, Int iBlk); // 09/19/99 HHI Schueuer virtual Int *select_DP(Int *scan, Bool bIsBoundary, Int iBlk, Int** rgiCurrMBCoeffWidth); // end 09/19/99private: Int **m_rgiCurrMBCoeffWidth; Int *m_adaptedScan;};// End HHI class CVideoObjectEncoder : public CVideoObject{friend class CSecurityDescriptor;friend class CSessionEncoder;// friend class CSessionEncoderTPS; ///// 97/12/22 // deleted by Sharp (98/2/12)// friend class CVideoObjectEncoderTPS; ///// 97/12/22 // deleted by Sharp (98/2/12) friend class CEnhcBufferEncoder; // added by Sharp (98/2/10)public: // Constructors ~CVideoObjectEncoder ();private: CVideoObjectEncoder (); // default constructor - forbiddenpublic: CVideoObjectEncoder ( UInt uiVOId, // VO id VOLMode& volmd, // VOL mode VOPMode& vopmd, // VOP mode UInt nFirstFrame, // number of total frames UInt nLastFrame, // number of total frames Int iSessionWidth, // session width, in case it's needed Int iSessionHeight, // session height UInt uiRateControl, // rate control type UInt uiBudget, // bit budget for vop ostream* pstrmTrace, // trace outstream UInt uiSprite, // for sprite type // GMC UInt uiWarpAccuracy, // for sprite warping Int iNumOfPnts, // for sprite warping CSiteD** rgstDest, // for sprite warping destination SptMode SpriteMode, // sprite reconstruction mode CRct rctFrame, // sprite warping source CRct rctSpt, // rct Sprite Int iMVFileUsage, // 0==>no usage, 1==>read from MV file, 2==>write to MV file Char* pchMVFileName // MV file name ); // VOP mode // for back/forward shape CVideoObjectEncoder ( UInt uiVOId, // VO id VOLMode& volmd, // VOL mode VOPMode& vopmd, // VOP mode Int iSessionWidth, // session width, in case it's needed Int iSessionHeight //, // session height ); // VOP mode // Attributes const COutBitStream* pOutStream () const {return m_pbitstrmOut;} // output bitstream const CStatistics& statVOL () const {return m_statsVOL;} const CStatistics& statVOP () const {return m_statsVOP;} // Operations Bool skipTest( Time t, VOPpredType vopPredType ); Void swapSpatialScalabilityBVOP (); Void encode ( Bool bVOP_Visible, // whether the VOP at this time is encoded Time t, // relative frame number for the current encoding VOPpredType vopPredType, const CVOPU8YUVBA* pvopfRefBaseLayer = NULL //Reference image frm the base layer for spatial scalability );// begin: added by Sharp (98/2/10) // for background composition Void BackgroundComposition ( const Int width, Int height, const Int iFrame, const Int iPrev, const Int iNext, const CVOPU8YUVBA* pvopcBuffP1, const CVOPU8YUVBA* pvopcBuffP2, const CVOPU8YUVBA* pvopcBuffB1, const CVOPU8YUVBA* pvopcBuffB2, const Char* pchReconYUVDir, Int iobj, const Char* pchPrefix, // for output file name FILE *pchfYUV // added by Sharp (98/10/26) );//OBSS_SAIT_991015 //for base + enhancement layer composition(OBSS partial enhancement mode) Bool BackgroundComposition ( const Int width, Int height, const Int iFrame, const CVOPU8YUVBA* pvopcBuffP1, const Char* pchReconYUVDir, Int iobj, const Char* pchPrefix, // for output file name FILE *pchfYUV, // added by Sharp (98/10/26) FILE *pchfSeg );//~OBSS_SAIT_991015 Void set_LoadShape( Int* ieFramebShape, Int* ieFramefShape, // frame number for back/forward shape const Int iRate, // rate of enhancement layer const Int ieFrame, // current frame number const Int iFirstFrame, // first frame number of sequence const Int iFirstFrameLoop // first frame number of the enhancement loop );// end: added by Sharp (98/2/10)///////////////// implementation ////////////////////// 97/12/22 startpublic: CVideoObjectEncoder* rgpbfShape [2]; // 0 : backward, 1: forward///// 97/12/22 endprotected: //Time m_tIVOPCounter; //Time m_tEncodedVOPCounter; // for TPS only UInt m_nFirstFrame, m_nLastFrame, m_iBufferSize; //for rate control Int m_uiRateControl; // rate control type UInt m_uiGMCQP; // GMC_V2 // bitstream stuff Char* m_pchBitsBuffer; COutBitStream* m_pbitstrmOut; // output bitstream Char* m_pchShapeBitsBuffer; COutBitStream* m_pbitstrmShape; COutBitStream* m_pbitstrmShapeMBOut;// Added for data partitioning mode By Toshiba(1998-1-16:DP+RVLC) Char** m_pchShapeBitsBuffer_DP; COutBitStream** m_pbitstrmShape_DP;// End Toshiba(1998-1-16:DP+RVLC) CEntropyEncoderSet* m_pentrencSet; // statistics CStatistics m_statsVOL, m_statsVOP, m_statsMB; // accumulated number of bits Double* m_rgdSNR; // for rate control CRCMode m_statRC; // Rate control mode status TM5rc m_tm5rc;// UInt m_uiTotalPrev; own CVOPU8YUVBA* m_pvopcOrig; // original reference VOP in a previous time own CVOPU8YUVBA* m_pvopcRefOrig0; // original reference VOP in a previous time own CVOPU8YUVBA* m_pvopcRefOrig1; // original reference VOP in a later time own CU8Image* m_puciRefQZoom0; // zoomed reference VOP in a previous time own CU8Image* m_puciRefQZoom1; // zoomed reference VOP in a later time // some fixed variables (VOL) Int m_iFrameWidthZoomYx2Minus2MB, m_iFrameWidthZoomYx2Minus2Blk; Int m_iFrameWidthZoomY, m_iFrameWidthZoomUV; // VOP variables CRct m_rctRefVOPZoom0, m_rctRefVOPZoom1; // for B-VOP // MB buffer data CU8Image *m_puciDirectPredMB, *m_puciInterpPredMB; PixelC *m_ppxlcDirectPredMBY, *m_ppxlcInterpPredMBY; CIntImage *m_piiDirectErrorMB, *m_piiInterpErrorMB; PixelI *m_ppxliDirectErrorMBY, *m_ppxliInterpErrorMBY; //moved to vopses.hpp //CVector m_vctDirectDeltaMV; //MVDB for current MB // block data CFwdBlockDCT* m_pfdct; // error resilient variables Int m_iVopTimeIncr; UInt m_nBitsModuloBase; Int m_iVPCounter;// Added for error resilient mode by Toshiba(1997-11-14) // Added for data partitioning mode by Toshiba(1998-1-16) Int m_numBitsVPMBnum; Int m_numVideoPacket; // End Toshiba(1998-1-16) // HHI Schueuer CScanSelector *m_pscanSelector; // end HHI // VO and VOL routines Void codeSequenceHead (); Void codeVOHead (); Void codeVOLHead (Int iSessionWidth, Int iSessionHeight);//, constt CRct& rctSprite); Void codeGOVHead (Time t); // VOP routines// Void codeVOPHead (const CSiteD* rgstDest = NULL, CRct rctWarp = NULL); Int m_iMAD; // for Rate Control Void codeVOPHead (); Void codeNonCodedVOPHead (); Void codeVOPHeadInitial(); //Void decidePredType (); Void findTightBoundingBox (); Void findBestBoundingBox (); Void copyCurrToRefOrig1Y (); Void updateAllOrigRefVOPs (); Void biInterpolateY ( const CVOPU8YUVBA* pvopcRefQ, const CRct& rctRefVOP, // reference VOP CU8Image* puciRefQZoom, const CRct& rctRefVOPZoom, Int iRoundingControl // reference zoomed VOP ); Void encodeVOP (); Void encodeNSForIVOP (); Void encodeNSForIVOP_WithShape (); Void encodeNSForPVOP (); Void encodeNSForPVOP_WithShape (); Void encodeNSForBVOP (); Void encodeNSForBVOP_WithShape (); //classical sprite stuff Void encodeSptTrajectory (Time t, const CSiteD* rgstDest, const CRct& rctWarp); // code sprite info Void quantizeSptTrajectory (const CSiteD* rgstDest, CRct rctWarp); UInt codeWarpPoints (); //low latency sprite stuff#define AVGPIECEMB 0#define AVGUPDATEMB 1 own CVOPU8YUVBA* m_pvopcSpt; // original sprite object //SptMode m_sptMode; // sprite reconstruction mode : 0 -- basic sprite , 1 -- Object piece only, 2 -- Update piece only, 3 -- intermingled CSiteD** m_pprgstDest; // destination sites
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -