📄 mode.hpp
字号:
MVInfo mvInfoBackward; // motion search info Int iSearchRangeForward; // maximum search range for motion estimation Int iSearchRangeBackward; // maximum search range for motion estimation Bool bInterlace; // interlace coding flag Bool bTopFieldFirst; // Top field first Bool bAlternateScan; // Alternate Scan Int iDirectModeRadius; // Direct mode search radius (half luma pels) // for scalability Int iRefSelectCode; Int iLoadForShape; // load_forward_shape Int iLoadBakShape; // load_backward_shape Bool bShapeCodingType; // vop_shape_coding_type (0:intra, 1:inter): Added for error resilient mode by Toshiba(1997-11-14) SptXmitMode SpriteXmitMode; // sprite transmit mode } VOPMode;Class CMBMode // MacroBlock Mode{public: // Constructors ~CMBMode (); CMBMode (); CMBMode (const CMBMode& md); // Operations Void setCodedBlockPattern (BlockNum blkn, Bool bisCoded) {m_rgbCodedBlockPattern[(UInt) blkn - 1] = bisCoded;} Void setCodedBlockPattern (const Bool* rgbblockNum); Void setMinError (BlockNum blkn, Int iminError) {m_rgfltMinErrors[(UInt) blkn - 1] = (Float) iminError;} Void setMinError (const Float* pfltminError); Void operator = (const CMBMode& md); // Attributes Bool getCodedBlockPattern (BlockNum blkn) const {return m_rgbCodedBlockPattern[(UInt) blkn - 1];}; Bool* getCodedBlockPattern () const {return m_rgbCodedBlockPattern;} Float getMinError (BlockNum blkn) const {return m_rgfltMinErrors[(UInt) blkn - 1];}; Float* getMinError () const {return m_rgfltMinErrors;} // Some extra data member TransparentStatus m_rgTranspStatus [11]; // indicating the transparency status of the MB, either ALL, PARTIAL, or NONE transparent // 0: 16x16, 1-4: 8x8 Int m_rgNumNonTranspPixels [11]; // number of non-transparent pixels /*BBM// Added for Boundary by Hyundai(1998-5-9) TransparentStatus m_rgTranspStatusBBM [11]; Bool m_bMerged [7]; // End of Hyundai(1998-5-9)*/ // Added for field based MC padding by Hyundai(1998-5-9) TransparentStatus m_rgFieldTranspStatus [5]; Bool m_rgbFieldPadded[5]; // End of Hyundai(1998-5-9) Bool m_bPadded; // to see whether this all-transparent has been padded Bool m_bSkip; // is the Macroblock skiped. = COD in H.263 CODAlpha m_CODAlpha; // alpha Macroblock coded status MBType m_mbType; // macroblock type, DIRECT, FORWARD, BACKWARD, or INTERPOLATE DCTMode m_dctMd; // is the Macroblock inter- or intra- coded ShapeMode m_shpmd; //different context for the first MMR code Int m_intStepDelta; // change of quantization stepsize = DQUANT in h.263 Bool m_bhas4MVForward; //whether the MB has four motion vectors (for forward vectors) Bool m_bhas4MVBackward; //whether the MB has four motion vectors (for backward vectors) Bool m_bFieldMV; // whether the MB is compensated by field motion vectors (for forward vectors) : yes=1 Bool m_bForwardTop; // TRUE iff Current Forward Top field MV references the BOTTOM field Bool m_bForwardBottom; // TRUE iff Current Forward Bottom field MV references the BOTTOM field Bool m_bBackwardTop; // TRUE iff Current Backward Top field MV references the BOTTOM field Bool m_bBackwardBottom; // TRUE iff Current Backward Bottom field MV references the BOTTOM field Bool m_bFieldDCT; // use field DCT or not : yes=1 Bool m_bPerspectiveForward; //whether the MB uses forward perspective motion Bool m_bPerspectiveBackward;//whether the MB uses backward perspective motion Int m_stepSize; //qp for texture Int m_stepSizeDelayed; //qp delayed by 1 MB for intra_vlc_dc_thr switch Int m_stepSizeAlpha; //qp for alpha IntraPredDirection m_preddir [10]; // horizonal or vertical Bool m_bACPrediction; // use AC prediction or not Bool m_bACPredictionAlpha; // alpha version of above Bool m_bInterShapeCoding; //use predicted binary shape Bool m_bCodeDcAsAc; //code Intra DC with Ac VLC Bool m_bCodeDcAsAcAlpha; // alpha version of above Bool m_bColocatedMBSkip; // for B-VOP, colocated MB skipped or not Int m_iVideoPacketNumber; // Video Packet Number; added by Toshiba CVector m_vctDirectDeltaMV; // delta vector for direct modeprivate: Bool* m_rgbCodedBlockPattern; //for each block, 1 = some non-DC components are coded Float* m_rgfltMinErrors; //mininal prediction errors for each luminance block};Class CDirectModeData // to handle data for direct mode in B-VOP{public: // Constructor ~CDirectModeData (); CDirectModeData (); // Attributes UInt numMB () const {return m_uiNumMB;} UInt numMBX () const {return m_uiNumMBX;} UInt numMBY () const {return m_uiNumMBY;} Bool inBound (UInt iMbIdx) const; // check whether the index is inbound Bool inBound (UInt idX, UInt idY) const; // check whether the index is inbound CMBMode** mbMode () const {return m_ppmbmd;} const CMBMode* mbMode (UInt iMbIdx) const {assert (inBound (iMbIdx)); return m_ppmbmd [iMbIdx];} const CMBMode* mbMode (UInt idX, UInt idY) const {assert (inBound (idX, idY)); return m_ppmbmd [idX + idY * m_uiNumMBX];} CMotionVector** mv () const {return m_prgmv;} const CMotionVector* mv (UInt iMbIdx) const {assert (inBound (iMbIdx)); return m_prgmv [iMbIdx];} const CMotionVector* mv (UInt idX, UInt idY) const {assert (inBound (idX, idY)); return m_prgmv [idX + idY * m_uiNumMBX];} // Operations Void reassign (UInt numMBX, UInt numMBY); Void assign (UInt imb, const CMBMode& mbmd, const CMotionVector* rgmv);///////////////// implementation /////////////////private: own CMBMode** m_ppmbmd; own CMotionVector** m_prgmv; // [m_uiNumMB][5] UInt m_uiNumMB, m_uiNumMBX, m_uiNumMBY; Void destroyMem ();};Class CStatistics{public: //constructor CStatistics (); ~CStatistics () {}; //resultant Void print (Bool bVOPPrint = FALSE); CStatistics& operator = (const CStatistics& statSrc); //Operation Void operator += (const CStatistics& statSrc); Void reset (); UInt total (); UInt head (); //data members UInt nBitsHead; UInt nBitsY; UInt nBitsCr; UInt nBitsCb; UInt nBitsA; UInt nBitsShapeMode; UInt nBitsCOD; UInt nBitsCBPY; UInt nBitsMCBPC; UInt nBitsDQUANT; UInt nBitsMODB; UInt nBitsCBPB; UInt nBitsMBTYPE; UInt nBitsIntraPred; //intra ac/dc switch UInt nBitsNoDCT; //no. of DCT in sepr m-s-t mode UInt nBitsCODA; UInt nBitsCBPA; UInt nBitsMODBA; UInt nBitsCBPBA; UInt nBitsStuffing; UInt nSkipMB; UInt nInterMB; UInt nInter4VMB; UInt nIntraMB; UInt nDirectMB; UInt nForwardMB; UInt nBackwardMB; UInt nInterpolateMB; UInt nBitsInterlace; // incl all interlaced info in MB header UInt nFieldForwardMB; UInt nFieldBackwardMB; UInt nFieldInterpolateMB; UInt nFieldDirectMB; UInt nFieldDCTMB; UInt nVOPs; // VOP counter for normalizing statistics UInt nBitsMV; UInt nBitsShape; UInt nBitsTotal; Double dSNRY; Double dSNRU; Double dSNRV; Double dSNRA; UInt nQMB; UInt nQp;private: UInt nBitsTexture;};Class CRCMode{public: //constructor CRCMode () {}; ~CRCMode () {}; //resultant UInt updateQuanStepsize (); // Target bits and quantization level calculation Bool skipNextFrame () const {return m_skipNextFrame;} Bool firstFrame () const {return m_bfirstFrame;} UInt noCodedFrame () const {return m_Nc;} // return the coded P frames //Operation Void resetSkipMode () {m_skipNextFrame = FALSE; m_bfirstFrame = TRUE;} Void resetFirstFrame () {m_bfirstFrame = FALSE;} Bool skipThisFrame (); Void reset (UInt uiFirstFrame, UInt uiLastFrame, UInt uiTemporalRate, UInt uiBufferSize, Double mad, UInt uiBitsFirstFrame, Double dFrameHz); Void setMad (Double mad) {m_Ep = m_Ec; m_Ec = mad;} Void setQc (UInt QStep) {m_Qc = QStep;} Void updateRCModel (UInt uiBitsTotalCurr, UInt uiBitsHeadCurr); // Update RD modelprivate: Void RCModelEstimator (UInt nWindowSize); // Rate Control: RD model estimator Double m_X1;// 1st order coefficient Double m_X2;// 2nd order coefficient UInt m_Rs; // bit rate for sequence. e.g. 24000 bits/sec UInt m_Rf; // bits used for the first frame, e.g. 10000 bits UInt m_Rc; // bits used for the current frame after encoding UInt m_Rp; // bits to be removed from the buffer per picture Double m_Ts;// number of seconds for the sequence, e.g. 10 sec Double m_Ec;// mean absolute difference for the current frame after motion compensation Double m_Ep;// mean absolute difference for the previous frame after motion compensation UInt m_Qc; // quantization level used for the current frame UInt m_Qp; // quantization level used for the previous frame UInt m_Nr; // number of P frames remaining for encoding UInt m_Nc; // number of P frames coded UInt m_Ns; // distance between encoded frames Int m_Rr; // number of bits remaining for encoding this sequence UInt m_T; // target bit to be used for the current frame UInt m_S; // number of bits used for encoding the previous frame UInt m_Hc; // header and motion vector bits used in the current frame UInt m_Hp; // header and motion vector bits used in the previous frame UInt m_Bs; // buffer size Int m_B; // current buffer level Bool m_skipNextFrame; // TRUE if buffer is full Bool m_bfirstFrame; // TRUE if this is the first frame UInt m_rgQp[RC_MAX_SLIDING_WINDOW]; // quantization levels for the past frames Double m_rgRp[RC_MAX_SLIDING_WINDOW]; // scaled encoding complexity used for the past frames; Bool m_rgRejected[RC_MAX_SLIDING_WINDOW]; // outliers};#endif //__MODE_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -