📄 vopses.hpp
字号:
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 + -