⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sesenc.hpp

📁 网络MPEG4IP流媒体开发源代码
💻 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        Wei Wu (weiwu@stallion.risc.rockwell.com) Rockwell Science Centerand also 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)in 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:	sesEnc.hppAbstract:	Encoder for one image session.Revision History:	Sept. 30, 1997: Error resilient tools added by Toshiba	Nov.  27, 1997: Spatial Scalable tools added by SONY	Dec.  11, 1997:	Interlaced tools added by NextLevel Systems	Jun.  17, 1998: Complexity Estimation syntax support added by EPFL	May    9, 1999:	tm5 rate control by DemoGraFX, duhoff@mediaone.net*************************************************************************/#ifndef __SESENC_HPP_ #define __SESENC_HPP_class COutBitStream;class CEntropyEncoder;class CEntropyEncoderSet;class CVideoObjectEncoder;typedef struct whothehellwriteafunctionwiththismanyparms {  UInt uiFrmWidth;			// frame width  UInt uiFrmHeight;			// frame height  Int iFirstFrm;			// first frame number  Int iLastFrm;				// last frame number  Bool bNot8Bit;				// NBIT  UInt uiQuantPrecision;			// NBIT  UInt nBits;				// NBIT  Int uiFirstVO;				// first VOP index  Int iLastVO;				// last VOP index  const Bool* rgbSpatialScalability; // spatial scalability indicator  const Int* rgiTemporalScalabilityType; // temporal scalability formation case // added by Sharp (98/02/09)  const Int* rgiEnhancementType;  // enhancement_type for scalability // added by Sharp (98/02/09)  UInt** rguiRateControl;	// rate control type  UInt** rguiBudget;		// for rate control  // for shape coding  const AlphaUsage* rgfAlphaUsage;// alpha usage for each VOP.  0: binary; 1: 8-bit  const Bool* rgbShapeOnly;		// shape only mode  const Int* rgiBinaryAlphaTH;  const Int* rgiBinaryAlphaRR;		// refresh rate: Added for error resilient mode by Toshiba(1997-11-14)  const Bool* rgbNoCrChange;  // motion estimation part for each VOP  UInt** rguiSearchRange;			// motion search range  Bool** rgbOriginalForME;		// flag indicating whether use the original previous VOP for ME  Bool** rgbAdvPredDisable;		// no advanced MC (currenly = obmc; later = obmc + 8x8)  // START: Complexity Estimation syntax support - Marc Mongenet (EPFL) - 17 Jun 1998  Bool ** rgbComplexityEstimationDisable;  Bool ** rgbOpaque;  Bool ** rgbTransparent;  Bool ** rgbIntraCAE;  Bool ** rgbInterCAE;  Bool ** rgbNoUpdate;  Bool ** rgbUpsampling;  Bool ** rgbIntraBlocks;  Bool ** rgbInterBlocks;  Bool ** rgbInter4vBlocks;  Bool ** rgbNotCodedBlocks;  Bool ** rgbDCTCoefs;  Bool ** rgbDCTLines;  Bool ** rgbVLCSymbols;  Bool ** rgbVLCBits;  Bool ** rgbAPM;  Bool ** rgbNPM;  Bool ** rgbInterpolateMCQ;  Bool ** rgbForwBackMCQ;  Bool ** rgbHalfpel2;  Bool ** rgbHalfpel4;  // END: Complexity Estimation syntax support  // START: VOL Control Parameters  UInt ** rguiVolControlParameters;  UInt ** rguiChromaFormat;  UInt ** rguiLowDelay;  UInt ** rguiVBVParams;  UInt ** rguiBitRate;  UInt ** rguiVbvBufferSize;  UInt ** rguiVbvBufferOccupany;  // END: VOL Control Parameters  Double** rgdFrameFrequency;	// Frame Frequency  Bool** rgbInterlacedCoding;	// interlace coding flag  Bool** rgbTopFieldFirst;	// top field first flag  Bool** rgbAlternateScan;    // alternate scan flag  Int** rgiDirectModeRadius;	// direct mode search radius  Int** rgiMVFileUsage;		// 0- not used; 1: read from motion file; 2- write to motion file  Char*** pchMVFileName;		// Motion vector filenames  // major syntax mode  Int**	rgbVPBitTh;				// Bit threshold for video packet spacing control  Bool**	rgbDataPartitioning;		// data partitioning  Bool**	rgbReversibleVlc;			// reversible VLC  // for texture coding  Quantizer** rgfQuant; // quantizer selection; either H.263 or MPEG  Bool** rgbLoadIntraMatrix; // load user-defined intra Q-Matrix  Int*** rgppiIntraQuantizerMatrix; // Intra Q-Matrix  Bool** rgbLoadInterMatrix; // load user-defined inter Q-Matrix  Int*** rgppiInterQuantizerMatrix; // Inter Q-Matrix  Int** rgiIntraDCSwitchingThr;		//threshold to code dc as ac when pred. is on  Int** rgiStepI; // I-VOP quantization stepsize  Int** rgiStepP; // P-VOP quantization stepsize  Bool**	rgbLoadIntraMatrixAlpha;  Int*** rgppiIntraQuantizerMatrixAlpha;  Bool**	rgbLoadInterMatrixAlpha;  Int*** rgppiInterQuantizerMatrixAlpha;  Int** rgiStepIAlpha; // I-VOP quantization stepsize for Alpha  Int** rgiStepPAlpha; // P-VOP quantization stepsize for Alpha  Int** rgiStepBAlpha; // B-VOP quantization stepsize for Alpha  Int** rgbNoAlphaQuantUpdate; // discouple gray quant update with tex. quant  Int** rgiStepB; // code for quantization stepsize for B-VOP  const Int* rgiNumOfBbetweenPVOP;		// no of B-VOPs between P-VOPs  const Int* rgiNumOfPbetweenIVOP;		// no of P-VOPs between I-VOPs  //added to encode GOV header by SONY 980212  const Int* rgiGOVperiod;  const Bool* rgbDeblockFilterDisable; //deblocking filter disable  const Bool *rgbAllowSkippedPMBs;  // file information  const Char* pchPrefix; // prefix name of the movie  const Char* pchBmpFiles; // bmp file directory location  const ChromType* rgfChrType; // input chrominance type. 0 - 4:4:4; 1 - 4:2:2; 0 - 4:2:0  const Char* pchOutBmpFiles; // quantized frame file directory  const Char* pchOutStrFiles; // output bitstream file  const Int* rgiTemporalRate; // temporal subsampling rate  const Int* rgiEnhnTemporalRate; // temporal subsampling rate for enhancement layer // added by Sharp (98/02/09)  // statistics dumping options  const Bool* rgbDumpMB;  const Bool* rgbTrace;  // rounding control  const Bool* rgbRoundingControlDisable;   const Int* rgiInitialRoundingType;   // for sprite info  const UInt* rguiSpriteUsage; // sprite usage  const UInt* rguiWarpingAccuracy; // warping accuracy  const Int* rgNumOfPnts; // number of points for sprite; 0 for stationary and -1 for no sprite  const Char* pchSptDir; // sprite directory  const Char* pchSptPntDir; // sprite point file  SptMode *pSpriteMode;	// sprite reconstruction mode  Int iSpatialOption;  UInt uiFrmWidth_SS;  UInt uiFrmHeight_SS;  UInt uiHor_sampling_n;  UInt uiHor_sampling_m;  UInt uiVer_sampling_n;  UInt uiVer_sampling_m;} CSessionEncoderParams;Class CSessionEncoder{	friend class CEnhcBufferEncoder;public:	// Constructors	~CSessionEncoder ();	CSessionEncoder (CSessionEncoderParams *ptr);	// Attributes	UInt compressedSize () const {return m_uCmpSize;} // in bits	// Operations	Void encode ();///////////////// implementation /////////////////protected:	CRct m_rctOrg;	CRct m_rctOrgSpatialEnhn;	Int m_iFirstFrame;				// first frame number	Int m_iLastFrame;					// last frame number	Int m_iNumFrame;					// number of frames	Int m_iFirstVO;					// first VO index	Int m_iLastVO;					// last VO index	Int m_iNumVO;					//  number of VO's	const Bool* m_rgbSpatialScalability;	//spatial scalability on/off	UInt** m_rguiRateControl;		// rate control type	UInt** m_rguiBudget;			// for rate control	own VOLMode* m_rgvolmd [2];		// VOL modes	own VOPMode* m_rgvopmd [2];		// VOP modes		// file information	const Char* m_pchPrefix; // prefix name of the movie	const Char* m_pchBmpFiles; // bmp file directory location	const ChromType* m_rgfChrType; // input chrominance type. 0 - 4:4:4, 1 - 4:2:2, 0 - 4:2:0	const Char* m_pchReconYUVDir; // quantized frame file directory	const Char* m_pchOutStrFiles; // output bitstream file	UInt m_uCmpSize; // in bits	Bool m_bTexturePerVOP; // Bool for whether there are texture data for each VOP	Bool m_bAlphaPerVOP; // Bool for whether there are alpha data for each VOP	// for sprite info	const Char* m_pchSptDir; // sprite directory	const Char* m_pchSptPntDir; // sprite point file	const UInt* m_rguiSpriteUsage; // sprite usage	const UInt* m_rguiWarpingAccuracy; // warping accuracy	const Int* m_rgNumOfPnts; // number of points for each VOP	own CSiteD** m_ppstSrc; // source sites, [numVOP] [numPnt]	own CSiteD*** m_pppstDst; // destination sites, [numVOP] [numFrm] [numPnt]	// low latency stuff	SptMode m_SptMode;  // sprite reconstruction mode : 0 -- basic sprite , 1 -- Object piece only, 2 -- Update piece only, 3 -- intermingled		CRct m_rctFrame;	// to save the frame rectangle	Int** m_rgiMVFileUsage;		// MV file usage [iLayer][iObj]	Char*** m_pchMVFileName;	// MV file names [iLayer][iObj]	// temporal scalability	const Int* m_rgiTemporalScalabilityType; // added by Sharp (98/2/12)	Bool m_bPrevObjectExists;	Void getInputFiles (FILE*& pfYuvSrc, FILE*& pfAlpSrc, FILE*& pfYuvSrcSpatialEnhn,						FILE* rgpfReconYUV [], FILE* rgpfReconSeg [], 						ofstream* rgpostrm [], ofstream* rgpostrmTrace [],						PixelC& pxlcObjColor, Int iobj, const VOLMode& volmd, const VOLMode& volmd_enhn);	Void initVOEncoder (CVideoObjectEncoder** rgpvoenc, Int iobj, ofstream* rgpostrmTrace []);	Bool loadDataSpriteCheck(UInt iVOrelative,UInt iFrame, FILE* pfYuvSrc, FILE* pfSegSrc,					PixelC pxlcObjColor, CVOPU8YUVBA* pvopcDst, const VOLMode& volmd);	Bool loadData (UInt iFrame, FILE* pfYuvSrc, FILE* pfSegSrc, PixelC pxlcObjColor, 					CVOPU8YUVBA* pvopcDst, CRct& rctOrg,const VOLMode& volmd);	Void dumpData (FILE* pfYuvDst, FILE* pfSegDst, const CVOPU8YUVBA* pvopcSrc, 					const CRct& rctOrg, const VOLMode& volmd);	Void createReconDir (UInt idx) const;	Void createCmpDir (UInt idx) const;	Void encodeVideoObject(	Bool bObjectExists,							Bool bPrevObjectExists,							Int iFrame,							VOPpredType predType,							Int iDumpMode,							Int iVO,							Int iVOrelative,							Int iLayer,							FILE* pfYuvSrc,							FILE* pfSegSrc,							FILE* rgpfReconYUV[],							FILE* rgpfReconSeg[],							PixelC pxlcObjColor,							CVideoObjectEncoder** rgpvoenc,							const VOLMode& volmd,							ofstream* rgpostrm[],							const CVOPU8YUVBA* pvopcBaseQuant = NULL);// begin: added by Sharp (98/2/12)	Void updateRefForTPS (CVideoObjectEncoder* pvopc,		CEnhcBufferEncoder* BufP1, CEnhcBufferEncoder* BufP2, CEnhcBufferEncoder* BufB1, CEnhcBufferEncoder* BufB2, CEnhcBufferEncoder* BufE,		Int bNoNextVOP, Int iVOrelative, Int iEcount, Int ibFrameWithRate, Int ieFrame, Bool bupdateForLastLoop);	Void dumpDataOneFrame (UInt iFrame, Int iobj, const CVOPU8YUVBA* pvopcSrc, const VOLMode& volmd);	Void initVObfShape (CVideoObjectEncoder** rgpvobfShape, Int iobj, 			    VOLMode& volmd_back, VOPMode& vopmd_back, VOLMode& volmd_forw, VOPMode& vopmd_forw);	Void encodeEnhanceVideoObject(Bool bObjectExists,										Int iFrame,										VOPpredType predType,										Int iDumpMode,										Int iVO,Int iVOrelative,										FILE* pfYuvSrc,										FILE* pfSegSrc,										FILE* rgpfReconYUV[],										FILE* rgpfReconSeg[],										PixelC pxlcObjColor,										CVideoObjectEncoder* rgpvoenc,										const VOLMode& volmd,										const VOLMode& volmd_enhn,										Int iEnhnFirstFrame,										ofstream* rgpostrm[],										CEnhcBufferEncoder& BufP1,										CEnhcBufferEncoder& BufP2,										CEnhcBufferEncoder& BufB1,										CEnhcBufferEncoder& BufB2,										CEnhcBufferEncoder& BufE										);// end: added by Sharp (98/2/12)	// sprite	Void readPntFile (UInt iobj);	Void loadSpt (UInt iobj, CVOPU8YUVBA* pvopcDst);	CRct findBoundBoxInAlpha (UInt ifr, UInt iobj);	CRct findSptRct (UInt iobj);};#endif // __SESENC_HPP_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -