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

📄 vopses.hpp

📁 小波图像变换
💻 HPP
📖 第 1 页 / 共 3 页
字号:
	Int decideIntraPredDir (
		Int* rgiCoefQ,
		Int  blkn,
		const BlockMemory& blkmRet, 
		const MacroBlockMemory* pmbmLeft, 
		const MacroBlockMemory* pmbmTop, 
		const MacroBlockMemory* pmbmLeftTop,
		const MacroBlockMemory* pmbmCurr,
		const CMBMode* pmbmdLeft,
		const CMBMode* pmbmdTop,
		const CMBMode* pmbmdLeftTop,
		CMBMode* pmbmdCurr,
		Int&	iQPpred,
		Int iQPcurr,
		Bool bDecideDCOnly = FALSE
	);

	Time m_t; // current time
	Time m_tPastRef; // time of reference frame in past (for P/B)
	Time m_tFutureRef; // time of reference frame in future (for B)
	Int m_iBCount; // counts 1,2,3 with B frames, used to pad ref vop once.
	Bool m_bCodedFutureRef;
	Bool m_bCodedBaseRef;					//OBSS_SAIT_991015

    CRct m_rctDisplayWindow;						//display windoew position

	Int	 m_iNumBitsTimeIncr;
	Time m_tDistanceBetwIPVOP; //no. of frms betw. I/PVOP = PeriodOfPVOP except for at irregular period (end of sequence)
	Time m_tPrevIorPVOPCounter; //frm. no of previous encoded I/PVOP
	Time m_tModuloBaseDisp;							//of the most recently displayed I/Pvop
	Time m_tModuloBaseDecd;							//of the most recently decoded I/Pvop
/*Added by SONY (98/03/30)*/
	Bool m_bUseGOV ;
	Bool m_bLinkisBroken;
/*Added by SONY (98/03/30)*/

	// MB buffer data
	CVOPU8YUVBA* m_pvopcPredMB;
	PixelC *m_ppxlcPredMBY, *m_ppxlcPredMBU, *m_ppxlcPredMBV, **m_ppxlcPredMBA;
	CVOPIntYUVBA* m_pvopiErrorMB;
	PixelI *m_ppxliErrorMBY, *m_ppxliErrorMBU, *m_ppxliErrorMBV, **m_ppxliErrorMBA;

	// B-VOP MB buffer
	CVOPU8YUVBA* m_pvopcPredMBBack; // backward buffer data
	PixelC *m_ppxlcPredMBBackY, *m_ppxlcPredMBBackU, *m_ppxlcPredMBBackV, **m_ppxlcPredMBBackA;

	// MB shape data
	ArCodec* m_parcodec;			//arithmatic coder
	CU8Image* m_puciPredBAB;		//motion compensated binary shape
	PixelC *m_ppxlcPredBABDown2, *m_ppxlcPredBABDown4;
	PixelC* m_ppxlcReconCurrBAB;
	Int m_iWidthCurrBAB;
	PixelC* m_rgpxlcCaeSymbol;
	PixelC *m_ppxlcCurrMBBYDown4, *m_ppxlcCurrMBBYDown2;

	ShapeMode* m_rgshpmd;  // for saving reference shape mode

	ShapeMode* m_rgBaseshpmd;  // for saving lower reference shape mode 		//OBSS_SAIT_991015

	Int m_iRefShpNumMBX;
	Int m_iRefShpNumMBY;

	CVOPU8YUVBA* m_pvopcCurrMB;
	PixelC *m_ppxlcCurrMBY, *m_ppxlcCurrMBU, *m_ppxlcCurrMBV, *m_ppxlcCurrMBBY, *m_ppxlcCurrMBBUV, **m_ppxlcCurrMBA;

	/*BBM// Added for Boundary by Hyundai(1998-5-9)
        Void boundaryMacroBlockMerge (CMBMode* pmbmd);
        Void isBoundaryMacroBlockMerged (CMBMode* pmbmd);
        Void isBoundaryMacroBlockMerged (CMBMode* pmbmd, PixelC* ppxlcRightMBBY);
        Void overlayBlocks (UInt x1, UInt x2, UInt y1, UInt y2, DCTMode dctMd);
        Void overlayBlocks (PixelC* SB2, PixelI* ppxlcB1, PixelI* ppxlcB2);
        Void overlayBlocks (PixelC* SB1, PixelC* SB2, PixelC* ppxlcB1, PixelC* ppxlcB2);
        Bool checkMergedStatus (UInt x1, UInt x2, UInt y1, UInt y2);
        Bool checkMergedStatus (UInt x1, UInt x2, UInt y1, UInt y2, PixelC* ppxlcBY);
        Void mergedMacroBlockSplit (CMBMode* pmbmd, PixelC* ppxlcRefMBY = NULL, PixelC* ppxlcRefMBA = NULL);
        Void splitTwoMergedBlocks (UInt x1, UInt x2, UInt y1, UInt y2, PixelC* ppxlcIn1, PixelC* ppxlcIn2 = NULL);
        Void splitTwoMergedBlocks (UInt x1, UInt x2, UInt y1, UInt y2, PixelI* ppxlcIn1, PixelI* ppxlcIn2 = NULL);
        Void swapTransparentModes (CMBMode* pmbmd, Bool mode);
        Void setMergedTransparentModes (CMBMode* pmbmd);
        Void initMergedMode (CMBMode* pmbmd);
	// End of Hyundai(1998-5-9)*/
	
	// for MC-padding
	Bool* m_pbEmptyRowArray;
	Bool* m_pbEmptyColArray;

	// VOP mode 
	VOLMode	m_volmd; // vol mode
	VOPMode	m_vopmd; // vop mode
	UInt m_uiVOId; // VOP ID

	// sprite info
	UInt m_uiSprite; // whether this is a sprite VOP: 1 - yes; other - no
	UInt m_uiWarpingAccuracy; // accuracy for sprite warping
	Int m_iNumOfPnts; // for sprite warping
	own CSiteD* m_rgstSrcQ; // quantized src sts for sprite warping
	own CSiteD* m_rgstDstQ; // quantized dst sts for sprite warping
	own CVOPU8YUVBA* m_pvopcSptQ; // Loaded first as original sprite and then become quantized sprite. 
	CRct m_rctSpt; // rct of m_pvopcSptQ
	CRct m_rctSptDisp; //rct to display sprite (decoder side)
	SptMode m_sptMode;  // sprite reconstruction mode : 0 -- basic sprite , 1 -- Object piece only, 2 -- Update piece only, 3 -- intermingled	
	own MBSptMode* m_rgsptmd; // sprite mode 0: untransmitted; 1: transmitted; 2: updated; 3: done

	// internal data
	own CVOPU8YUVBA* m_pvopcRefQ0; // original reference VOP in a previous time
	own CVOPU8YUVBA* m_pvopcRefQ1; // original reference VOP in a later time
	own CVOPU8YUVBA* m_pvopcCurrQ; // original reference VOP in a later time
	Int m_iStartInRefToCurrRctY, m_iStartInRefToCurrRctUV;

	// motion data
	own CDirectModeData* m_pdrtmdRef1; // for direct mode
	CVector	m_vctForwardMvPredBVOP[2];		// motion vector predictors for B-VOP
	CVector	m_vctBackwardMvPredBVOP[2];     // [2] added for interlace (top & bottom fields)

	// some fixed variables (VOL)
	CRct m_rctRefFrameY, m_rctRefFrameUV;
	Int m_iFrameWidthYxMBSize, m_iFrameWidthYxBlkSize, m_iFrameWidthUVxBlkSize;
	Int m_iFrameWidthY, m_iFrameWidthUV;
	Int m_ivolWidth, m_ivolHeight;

	// VOP variables
	CRct m_rctCurrVOPY, m_rctCurrVOPUV;
	CRct m_rctRefVOPY0, m_rctRefVOPUV0;
	CRct m_rctRefVOPY1, m_rctRefVOPUV1;
	Int m_iOffsetForPadY, m_iOffsetForPadUV;
	CRct m_rctPrevNoExpandY, m_rctPrevNoExpandUV;
////// 97/12/22 start
	CRct m_rctBVOPRefVOPY1, m_rctBVOPRefVOPUV1;
	Int m_iBVOPOffsetForPadY, m_iBVOPOffsetForPadUV;
	CRct m_rctBVOPPrevNoExpandY, m_rctBVOPPrevNoExpandUV;
///// 97/12/22 end

	Int m_iVOPWidthY, m_iVOPWidthUV;
	Int m_iNumMB, m_iNumMBX, m_iNumMBY;
	Int m_iNumOfTotalMVPerRow;
	Int m_iSessNumMB;

	CMBMode* m_rgmbmd; // VOP size.  need to renew every VOP
	CMotionVector* m_rgmv; // VOP size.  need to renew every VOP
	CMotionVector* m_rgmvBackward; // VOP size.  need to renew every VOP
	CMotionVector* m_rgmvBY; //Motion vectors for BY plane

//OBSS_SAIT_991015
	CMotionVector* m_rgmvBaseBY; //Motion vectors for Base BY plane 
	CMBMode* m_rgmbmdEnhRef;	
	CRct m_rctBase;	
	Int m_iNumMBBaseXRef, m_iNumMBBaseYRef; 
	Bool 	m_bVPNoRight;
	Bool 	m_bVPNoBottom;
//~OBSS_SAIT_991015	

	CMBMode* m_rgmbmdRef;
	CMotionVector* m_rgmvRef; // VOP size.  need to renew every VOP
	Int m_iNumMBRef, m_iNumMBXRef, m_iNumMBYRef;

	// clipping tables
/* NBIT: change U8 to PixelC
	U8* m_rgiClipTab; // clapping the reconstructed pixels
*/
	PixelC* m_rgiClipTab; // clapping the reconstructed pixels
	Int m_iOffset; // NBIT
	Void setClipTab(); // NBIT

//	Added for error resilient mode by Toshiba(1997-11-14)
	Bool 	m_bVPNoLeft;
	Bool 	m_bVPNoRightTop;
	Bool 	m_bVPNoTop;
	Bool 	m_bVPNoLeftTop;
	Int	m_iVPMBnum;			// start MB in a VP
// End Toshiba(1997-11-14)

	// MB data
	Int** m_rgpiCoefQ;
	MacroBlockMemory** m_rgpmbmAbove;
	MacroBlockMemory** m_rgpmbmCurr;
	BlockMemory* m_rgblkmCurrMB;	//predictor blocks for each current block
	Int* m_rgiQPpred;				//QP from previous block for intra ac prediction
	Int m_rgiDcScalerY [32];		//intra dc quantization scaler; qp dependent	
	Int m_rgiDcScalerC [32];		//[0] elem never used

	// block data
	Int m_rgiDCTcoef [BLOCK_SQUARE_SIZE];
	CInvBlockDCT* m_pidct;

	// HHI Schueuer: inserted for sadct
	Int **m_rgiCurrMBCoeffWidth;		// contains the number of frequency 
									// coefficients per row for each 8x8 block
	// end HHI

	// Sprite routines
	Void warpYA (const CPerspective2D& persp, const CRct& rctWarpedBound, UInt accuracy);
	Void warpUV (const CPerspective2D& persp, const CRct& rctWarpedBound, UInt accuracy);

    // Fast Affine Warping
    Void FastAffineWarp (const CRct& rctWarpedBound, const CRct& rctWarpedBoundUV, UInt accuracy, UInt pntNum);
    PixelC CInterpolatePixelValue (PixelC* F, Int pos, Int width, Int rx, Int ry, Int wpc, Int bias, Int pow_denom);
    Int LinearExtrapolation(Int x0, Int x1, Int x0p, Int x1p, Int W, Int VW);
    Void FourSlashes(Int num, Int denom, Int *quot, Int *res);
    // tentative solution for indicating the first Sprite VOP
    Int tentativeFirstSpriteVop;

	// Low-latency sprite info
    Bool m_bFirstSpriteVop ;// flag for indicating the first Sprite VOP     
	MacroBlockMemory*** m_rgpmbmCurr_Spt;	 //  save MB data to be used as holes
	SptMBstatus** m_ppPieceMBstatus;	 // MB transmission status (done or not-done)
	SptMBstatus** m_ppUpdateMBstatus;	
		
	CMBMode* m_rgmbmdSprite;  // dshu: [v071]  added to store mbmd array for sprite

	// GMC
    Void FourSlashesShift(Int inum, Int idenom_pwr, Int *ipquot, Int *ipres);
	Void globalmv(Int& iXpel, Int& iYpel,
			Int& iXhalf, Int& iYhalf,
			CoordI iXCurr, CoordI iYCurr,
			Int iSearchRenge, Bool bQuarterSample);
	Void TranslationalWarpMotion(Int& iXpel, Int& iYpel,
			Int& iXhalf, Int& iYhalf, Int ifcode_area, Bool bQuarterSample);
	Void FastAffineWarpMotion(Int& iXpel, Int& iYpel,
			Int& iXhalf, Int& iYhalf,
			Int iXCurr, Int iYCurr,
			Int iSearchRenge, Bool bQuarterSample);
	Void FindGlobalPredForGMC (Int cx_curr, Int cy_curr,
		PixelC* ppxlcRef, const PixelC* puciRef);
	Void FindGlobalChromPredForGMC (Int cx_curr, Int cy_curr,
		PixelC* ppxlcRefU, PixelC* ppxlcRefV);
	Void StationalWarpForGMC(Int cx_curr, Int cy_curr,
		PixelC *ppxlcRef, const PixelC *puciRef);
	Void StationalWarpChromForGMC(Int cx_curry, Int cy_curry,
		PixelC *ppxlcRefU, PixelC *ppxlcRefV);
	Void TranslationalWarpForGMC(Int cx_curr, Int cy_curr,
		PixelC *ppxlcRef, const PixelC *puciRef);
	Void TranslationalWarpChromForGMC(Int cx_curr, Int cy_curr,
		PixelC *ppxlcRefU, PixelC *ppxlcRefV);
	Void FastAffineWarpForGMC(Int cx_curr, Int cy_curr,
		PixelC *ppxlcRef, const PixelC *puciRef);
	Void FastAffineWarpChromForGMC(Int cx_curry, Int cy_curry,
		PixelC *ppxlcRefU, PixelC *ppxlcRefV);
	// ~GMC

// RRV insertion
	Void	CVideoObject::filterCodedPictureForRRV(PixelC*, PixelC*, PixelC*, 
												   Int isizex, Int isizey,
												   Int inumMBx,Int inumMBy, 
												   Int iwidthY, Int iwidthUV);
// ~RRV

	CMBMode** m_rgmbmdSpt; // Sprite size. 
	Bool m_bSptMB_NOT_HOLE;	   // Current MB is not a hole
	own CSiteD* m_rgstSrcQP; // for sprite piece warping
	Time m_tPiece; // current sprite piece encode time
	Time m_tUpdate; // current sprite update encode time 
	own CVOPU8YUVBA* m_pvopcSptP; //  sprite piece 	  
	CRct m_rctSptQ;	  //  rct of m_pvopcSptQ 
	CRct m_rctOrg;	  // Frame size
	CRct m_rctPieceQ;  // Region of pieces which have been encoded
	CRct m_rctUpdateQ;  // Region of updates which have been encoded
	CRct m_rctSptPieceY;  // piece of sprite which is currently been encoded
	CRct m_rctSptPieceUV;  // piece of sprite which is currently been encoded
	Int m_iStepI;
	Int m_iStep; 
	Int m_iStep_VOP;
	Int m_iPieceXoffset;
	Int m_iPieceYoffset;
	Int m_iPieceWidth;
	Int m_iPieceHeight; 
	Bool m_bSptZoom;  // the type of sprite warping(zoom/pan)
    Bool m_bSptHvPan; // the type of sprite warping(Horizontal or vertical panning)
	Bool m_bSptRightPiece; 	//direction (up/down or right/left) for encoding sprite piece
	Int *m_pSptmbBits; // bits used by a sprite macroblock
	CRct m_rctSptExp;  // Extend the sprite size to multiples of MBSize

// RRV insertion
	Int	m_iRRVScale;
// ~RRV	
};

#endif // __VOPSES_HPP_

⌨️ 快捷键说明

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