mode.hpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:19k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*************************************************************************
  2. This software module was originally developed by 
  3. Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation
  4. Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
  5. Bruce Lin (blin@microsoft.com), Microsoft Corporation
  6. Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation
  7. Simon Winder (swinder@microsoft.com), Microsoft Corporation
  8. (date: March, 1996)
  9. and edited by
  10.         Wei Wu (weiwu@stallion.risc.rockwell.com) Rockwell Science Center
  11. and also edited by
  12. Yoshihiro Kikuchi (TOSHIBA CORPORATION)
  13. Takeshi Nagai (TOSHIBA CORPORATION)
  14. Toshiaki Watanabe (TOSHIBA CORPORATION)
  15. Noboru Yamaguchi (TOSHIBA CORPORATION)
  16. Marc Mongenet (Marc.Mongenet@epfl.ch), Swiss Federal Institute of Technology, Lausanne (EPFL)
  17. in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
  18. This software module is an implementation of a part of one or more MPEG-4 Video tools 
  19. as specified by the MPEG-4 Video. 
  20. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
  21. thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
  22. Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. 
  23. The original developer of this software module and his/her company, 
  24. the subsequent editors and their companies, 
  25. and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. 
  26. Copyright is not released for non MPEG-4 Video conforming products. 
  27. Microsoft retains full right to use the code for his/her own purpose, 
  28. assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. 
  29. This copyright notice must be included in all copies or derivative works. 
  30. Copyright (c) 1996, 1997.
  31. Module Name:
  32. mode.h
  33. Abstract:
  34. basic coding modes for VO, VOL, VOP, MB and RD
  35. Revision History:
  36. Sept. 29, 1997: add Video Packet, data partition, RVLC by Toshiba
  37. Nov.  27, 1997: add horizontal & vertical sampling factor by Takefumi Nagumo 
  38. (nagumo@av.crl.sony.co.jp) SONY
  39. Dec.12 1997 : add interlace tools by NextLevel Systems (General Instrucment), 
  40.   X. Chen (xchen@nlvl.com) and B. Eifrig (beifrig@nlvl.com)
  41. May. 9 1998 : add boundary by Hyundai Electronics 
  42.   Cheol-Soo Park (cspark@super5.hyundai.co.kr)
  43. May. 9 1998 : add field based MC padding by Hyundai Electronics 
  44.   Cheol-Soo Park (cspark@super5.hyundai.co.kr)
  45. Jun.15 1998 : add Complexity Estimation syntax support
  46.   Marc Mongenet (Marc.Mongenet@epfl.ch) - EPFL
  47. May 9, 1999 : tm5 rate control by DemoGraFX, duhoff@mediaone.net
  48. *************************************************************************/
  49. #ifndef __MODE_H_
  50. #define __MODE_H_
  51. Class CMBMode;
  52. Class CDirectModeData;
  53. Class CStatistics;
  54. typedef enum {BASE_LAYER, ENHN_LAYER} VOLtype; // will be generlized later
  55. typedef enum {INTRA, INTRAQ, INTER, INTERQ} DCTMode; // define pixel component
  56. typedef enum {DIRECT, INTERPOLATE, BACKWARD, FORWARD} MBType; // define MB type
  57. typedef enum {UNKNOWN_DIR, HORIZONTAL, VERTICAL, DIAGONAL} Direction;
  58. typedef enum {ALL_TRANSP, ALL_OPAQUE, INTRA_CAE, INTER_CAE_MVDZ, INTER_CAE_MVDNZ, MVDZ_NOUPDT, MVDNZ_NOUPDT, UNKNOWN} ShapeMode;
  59. typedef enum {UNTRANSMITTED, TRANSMITTED, UPDATED, FINISHED} MBSptMode; // MB sprite mode
  60. typedef enum {ALPHA_CODED, ALPHA_SKIPPED, ALPHA_ALL255} CODAlpha;
  61. typedef Direction IntraPredDirection; //for readability
  62. typedef Direction CAEScanDirection; //for readability
  63. #ifndef NOT_IN_TABLE
  64. #define NOT_IN_TABLE -1
  65. #endif
  66. #ifndef TCOEF_ESCAPE
  67. #define TCOEF_ESCAPE 102 // see table.13/H.263
  68. #endif
  69. // Added for error resilience mode By Toshiba(1998-1-16:DP+RVLC)
  70. #define TCOEF_RVLC_ESCAPE 169    // see table.
  71. // End Toshiba(1998-1-16:DP+RVLC)
  72. // VM 5.1 Rate Control
  73. #define RC_START_RATE_CONTROL 1
  74. #define RC_MAX_SLIDING_WINDOW 20
  75. #define RC_PAST_PERCENT   0.05
  76. #define RC_SAFETY_MARGIN  0.10
  77. #define RC_SKIP_MARGIN  80
  78. #define RC_MAX_Q_INCREASE 0.25
  79. #define RC_MAX_QUANT  31
  80. #define RC_MIN_QUANT  1
  81. typedef struct MVInfo  // for motion vector coding
  82. {
  83. UInt uiRange;  // search range
  84. UInt uiFCode;  // f-code 
  85. UInt uiScaleFactor;  // scale factor
  86. } MVInfo;
  87. #define PVOP_MV_PER_REF_PER_MB  9
  88. #define BVOP_MV_PER_REF_PER_MB  5
  89. typedef struct VOLMode  // VideoObjectLayer Mode
  90. {
  91. // type of VOL
  92. VOLtype volType;  // what type of VOL
  93. // NBIT: nbit information
  94. Bool bNot8Bit;
  95. UInt uiQuantPrecision;
  96. UInt nBits;
  97. // time info
  98. Int iClockRate;  //rate of clock used to count vops in Hz
  99. Double     dFrameHz;  // Frame frequency (Hz), (floating point in case of 29.97 Hz)
  100. // shape info
  101. AlphaUsage fAUsage;  //binary or gray level alpha; or no alpha (rectangle VO)
  102. Bool bShapeOnly;  // code only the shape
  103. Int iBinaryAlphaTH;  //binary shaperounding parameter
  104. Int iBinaryAlphaRR;  //binary shaperounding refresh rate: for Added error resilient mode by Toshiba(1997-11-14)
  105. Bool bNoCrChange;  //nobinary shape size conversion
  106. // motion info
  107. Bool bOriginalForME; // flag indicating whether use the original previous VOP for ME
  108. UInt uiWarpingAccuracy; // indicates the quantization accuracy of motion vector for sprite warping
  109. Bool bAdvPredDisable; // No OBMC, (8x8 in the future).
  110. Bool bRoundingControlDisable;
  111. Int iInitialRoundingType;
  112. Bool bVPBitTh; // Bit threshold for video packet spacing control
  113. Bool bDataPartitioning; // data partitioning
  114. Bool bReversibleVlc; // reversible VLC
  115. // texture coding info
  116. Quantizer fQuantizer; // either H.263 or MPEG
  117. Bool bLoadIntraMatrix; // flag indicating whether to load intra Q-matrix
  118. Int rgiIntraQuantizerMatrix [BLOCK_SQUARE_SIZE]; // Intra Q-Matrix
  119. Bool bLoadInterMatrix; // flag indicating whether to load inter Q-matrix
  120. Int rgiInterQuantizerMatrix [BLOCK_SQUARE_SIZE]; // Inter Q-Matrix
  121. Bool bLoadIntraMatrixAlpha; // flag indicating whether to load intra Q-matrix
  122. Int rgiIntraQuantizerMatrixAlpha [BLOCK_SQUARE_SIZE];
  123. Bool bLoadInterMatrixAlpha; // flag indicating whether to load inter Q-matrix
  124. Int rgiInterQuantizerMatrixAlpha [BLOCK_SQUARE_SIZE];
  125. Bool bDeblockFilterDisable; // apply deblocking filter or not.
  126. Bool bNoGrayQuantUpdate; // decouple gray quant and dquant
  127. EntropyCodeType fEntropyType; // Entropy code type
  128. // Complexity Estimation syntax support - Marc Mongenet (EPFL) - 15 Jun 1998
  129. Bool bComplexityEstimationDisable;
  130. Int iEstimationMethod;
  131. Bool bShapeComplexityEstimationDisable;
  132. Bool bOpaque;
  133. Bool bTransparent;
  134. Bool bIntraCAE;
  135. Bool bInterCAE;
  136. Bool bNoUpdate;
  137. Bool bUpsampling;
  138. Bool bTextureComplexityEstimationSet1Disable;
  139. Bool bIntraBlocks;
  140. Bool bInterBlocks;
  141. Bool bInter4vBlocks;
  142. Bool bNotCodedBlocks;
  143. Bool bTextureComplexityEstimationSet2Disable;
  144. Bool bDCTCoefs;
  145. Bool bDCTLines;
  146. Bool bVLCSymbols;
  147. Bool bVLCBits;
  148. Bool bMotionCompensationComplexityDisable;
  149. Bool bAPM;
  150. Bool bNPM;
  151. Bool bInterpolateMCQ;
  152. Bool bForwBackMCQ;
  153. Bool bHalfpel2;
  154. Bool bHalfpel4;
  155. // START: Vol Control Parameters
  156. UInt uiVolControlParameters;
  157. UInt uiChromaFormat;
  158. UInt uiLowDelay;
  159. UInt uiVBVParams;
  160. UInt uiBitRate;
  161. UInt uiVbvBufferSize;
  162. UInt uiVbvBufferOccupany;
  163. // END: Vol Control Parameters
  164. // frame rate info
  165. Int iTemporalRate; //no. of input frames between two encoded VOP's assuming 30Hz input
  166. Int iPbetweenI;
  167. Int iBbetweenP;
  168. Int iGOVperiod; //number of VOP from GOV header to next GOV header
  169. //added by SONY 980212
  170. Bool bAllowSkippedPMBs;
  171. // scalability info
  172. //#ifdef _Scalable_SONY_
  173. Int iHierarchyType;
  174. //#endif _Scalable_SONY_
  175. Int iEnhnType; //enhancement type
  176. Int iSpatialOption;
  177. Int ihor_sampling_factor_m ;
  178. Int ihor_sampling_factor_n ;
  179. Int iver_sampling_factor_m ;
  180. Int iver_sampling_factor_n ;
  181. // temporal scalability  // added by Sharp (98/2/10)
  182. Bool bTemporalScalability;
  183. // statistics dumping options
  184. Bool bDumpMB; // dump statitstics at MB level
  185. Bool bTrace; // dumping trace file
  186. Int iMVRadiusPerFrameAwayFromRef; // MV serach radius per frame away from reference VOP
  187. } VOLMode;
  188. typedef struct VOPMode // VideoObjectPlane Mode
  189. {
  190. // user specify, per VOP
  191. Int intStepI; // I-VOP stepsize for DCT
  192. Int intStep; // P-VOP stepsize for DCT
  193. Int intStepB; // B-VOP stepsize for DCT
  194. Int intStepIAlpha; // I-VOP stepsize for DCT alpha
  195. Int intStepPAlpha; // P-VOP stepsize for DCT alpha
  196. Int intStepBAlpha; // B-VOP stepsize for DCT alpha
  197. Int intStepDiff; // stepsize difference for updating for DCT (DQUANT)
  198. // Int intDBQuant;
  199. VOPpredType vopPredType; //whether IVOP, PVOP, BVOP, or Sprite
  200. Int iIntraDcSwitchThr;  //threshold to code intraDC as with AC VLCs
  201. Int iRoundingControl;  //rounding control
  202. Int iRoundingControlEncSwitch;
  203. ShapeBPredDir fShapeBPredDir;  // shape prediction direction BVOP
  204. Int iVopConstantAlphaValue;   // for binary or grayscale shape pk val
  205. // Complexity Estimation syntax support - Marc Mongenet (EPFL) - 15 Jun 1998
  206. Int iOpaque;
  207. Int iTransparent;
  208. Int iIntraCAE;
  209. Int iInterCAE;
  210. Int iNoUpdate;
  211. Int iUpsampling;
  212. Int iIntraBlocks;
  213. Int iInterBlocks;
  214. Int iInter4vBlocks;
  215. Int iNotCodedBlocks;
  216. Int iDCTCoefs;
  217. Int iDCTLines;
  218. Int iVLCSymbols;
  219. Int iVLCBits;
  220. Int iAPM;
  221. Int iNPM;
  222. Int iInterpolateMCQ;
  223. Int iForwBackMCQ;
  224. Int iHalfpel2;
  225. Int iHalfpel4;
  226. // motion search info
  227. MVInfo mvInfoForward; // motion search info
  228. MVInfo mvInfoBackward; // motion search info
  229. Int iSearchRangeForward; // maximum search range for motion estimation
  230. Int iSearchRangeBackward; // maximum search range for motion estimation
  231. Bool bInterlace; // interlace coding flag
  232. Bool bTopFieldFirst; // Top field first
  233.     Bool bAlternateScan;                    // Alternate Scan
  234. Int  iDirectModeRadius; // Direct mode search radius (half luma pels)
  235. // for scalability
  236. Int iRefSelectCode;
  237. Int iLoadForShape; // load_forward_shape
  238. Int iLoadBakShape; // load_backward_shape
  239. Bool bShapeCodingType; // vop_shape_coding_type (0:intra, 1:inter): Added for error resilient mode by Toshiba(1997-11-14)
  240. SptXmitMode SpriteXmitMode; // sprite transmit mode 
  241. } VOPMode;
  242. Class CMBMode // MacroBlock Mode
  243. {
  244. public:
  245. // Constructors
  246. ~CMBMode ();
  247. CMBMode (); 
  248. CMBMode (const CMBMode& md);
  249. // Operations
  250. Void setCodedBlockPattern (BlockNum blkn, Bool bisCoded) 
  251. {m_rgbCodedBlockPattern[(UInt) blkn - 1] = bisCoded;}
  252. Void setCodedBlockPattern (const Bool* rgbblockNum);
  253. Void setMinError (BlockNum blkn, Int iminError)
  254. {m_rgfltMinErrors[(UInt) blkn - 1] = (Float) iminError;}
  255. Void setMinError (const Float* pfltminError);
  256. Void operator = (const CMBMode& md);
  257. // Attributes
  258. Bool getCodedBlockPattern (BlockNum blkn) const 
  259. {return m_rgbCodedBlockPattern[(UInt) blkn - 1];};
  260. Bool* getCodedBlockPattern () const {return m_rgbCodedBlockPattern;}
  261. Float getMinError (BlockNum blkn) const
  262. {return m_rgfltMinErrors[(UInt) blkn - 1];};
  263. Float* getMinError () const {return m_rgfltMinErrors;}
  264. // Some extra data member
  265. TransparentStatus m_rgTranspStatus [11]; 
  266. // indicating the transparency status of the MB, either ALL, PARTIAL, or NONE transparent
  267. // 0: 16x16,  1-4: 8x8
  268. Int m_rgNumNonTranspPixels [11]; // number of non-transparent pixels
  269. /*BBM// Added for Boundary by Hyundai(1998-5-9)
  270.         TransparentStatus m_rgTranspStatusBBM [11];
  271.         Bool m_bMerged [7];
  272. // End of Hyundai(1998-5-9)*/
  273. // Added for field based MC padding by Hyundai(1998-5-9)
  274. TransparentStatus m_rgFieldTranspStatus [5];
  275. Bool m_rgbFieldPadded[5];
  276. // End of Hyundai(1998-5-9)
  277. Bool m_bPadded; // to see whether this all-transparent has been padded
  278. Bool m_bSkip; // is the Macroblock skiped. = COD in H.263
  279. CODAlpha m_CODAlpha; // alpha Macroblock coded status
  280. MBType m_mbType; // macroblock type, DIRECT, FORWARD, BACKWARD, or INTERPOLATE
  281. DCTMode m_dctMd; // is the Macroblock inter- or intra- coded
  282. ShapeMode m_shpmd; //different context for the first MMR code
  283. Int m_intStepDelta; // change of quantization stepsize = DQUANT in h.263
  284. Bool m_bhas4MVForward; //whether the MB has four motion vectors (for forward vectors)
  285. Bool m_bhas4MVBackward; //whether the MB has four motion vectors (for backward vectors)
  286. Bool m_bFieldMV; // whether the MB is compensated by field motion vectors (for forward vectors) : yes=1
  287. Bool m_bForwardTop; // TRUE iff Current Forward Top field MV references the BOTTOM field
  288. Bool m_bForwardBottom; // TRUE iff Current Forward Bottom field MV references the BOTTOM field
  289. Bool m_bBackwardTop; // TRUE iff Current Backward Top field MV references the BOTTOM field
  290. Bool m_bBackwardBottom; // TRUE iff Current Backward Bottom field MV references the BOTTOM field
  291. Bool m_bFieldDCT; // use field DCT or not : yes=1
  292. Bool m_bPerspectiveForward; //whether the MB uses forward perspective motion
  293. Bool m_bPerspectiveBackward;//whether the MB uses backward perspective motion
  294. Int m_stepSize; //qp for texture
  295. Int m_stepSizeDelayed; //qp delayed by 1 MB for intra_vlc_dc_thr switch
  296. Int m_stepSizeAlpha; //qp for alpha
  297. IntraPredDirection m_preddir [10]; // horizonal or vertical
  298. Bool m_bACPrediction; // use AC prediction or not
  299. Bool m_bACPredictionAlpha;  // alpha version of above
  300. Bool m_bInterShapeCoding; //use predicted binary shape
  301. Bool m_bCodeDcAsAc; //code Intra DC with Ac VLC
  302. Bool m_bCodeDcAsAcAlpha; // alpha version of above
  303. Bool m_bColocatedMBSkip; // for B-VOP, colocated MB skipped or not
  304. Int  m_iVideoPacketNumber; // Video Packet Number; added by Toshiba
  305. CVector m_vctDirectDeltaMV; // delta vector for direct mode
  306. private:
  307. Bool* m_rgbCodedBlockPattern; //for each block, 1 = some non-DC components are coded
  308. Float* m_rgfltMinErrors; //mininal prediction errors for each luminance block
  309. };
  310. Class CDirectModeData // to handle data for direct mode in B-VOP
  311. {
  312. public:
  313. // Constructor
  314. ~CDirectModeData ();
  315. CDirectModeData ();
  316. // Attributes
  317. UInt numMB () const {return m_uiNumMB;}
  318. UInt numMBX () const {return m_uiNumMBX;}
  319. UInt numMBY () const {return m_uiNumMBY;}
  320. Bool inBound (UInt iMbIdx) const; // check whether the index is inbound
  321. Bool inBound (UInt idX, UInt idY) const; // check whether the index is inbound
  322. CMBMode** mbMode () const {return m_ppmbmd;}
  323. const CMBMode* mbMode (UInt iMbIdx) const 
  324. {assert (inBound (iMbIdx)); return m_ppmbmd [iMbIdx];}
  325. const CMBMode* mbMode (UInt idX, UInt idY) const 
  326. {assert (inBound (idX, idY)); return m_ppmbmd [idX + idY * m_uiNumMBX];}
  327. CMotionVector** mv () const {return m_prgmv;}
  328. const CMotionVector* mv (UInt iMbIdx) const 
  329. {assert (inBound (iMbIdx)); return m_prgmv [iMbIdx];}
  330. const CMotionVector* mv (UInt idX, UInt idY) const 
  331. {assert (inBound (idX, idY)); return m_prgmv [idX + idY * m_uiNumMBX];}
  332. // Operations
  333. Void reassign (UInt numMBX, UInt numMBY);
  334. Void assign (UInt imb, const CMBMode& mbmd, const CMotionVector* rgmv);
  335. ///////////////// implementation /////////////////
  336. private:
  337. own CMBMode** m_ppmbmd;
  338. own CMotionVector** m_prgmv; // [m_uiNumMB][5]
  339. UInt m_uiNumMB, m_uiNumMBX, m_uiNumMBY;
  340. Void destroyMem ();
  341. };
  342. Class CStatistics
  343. {
  344. public:
  345. //constructor 
  346. CStatistics ();
  347. ~CStatistics () {};
  348. //resultant
  349. Void print (Bool bVOPPrint = FALSE);
  350. CStatistics& operator = (const CStatistics& statSrc);
  351. //Operation
  352. Void operator += (const CStatistics& statSrc);
  353. Void reset ();
  354. UInt total ();
  355. UInt head ();
  356. //data members
  357. UInt nBitsHead;
  358. UInt nBitsY;
  359. UInt nBitsCr;
  360. UInt nBitsCb;
  361. UInt nBitsA;
  362. UInt nBitsShapeMode;
  363. UInt nBitsCOD;
  364. UInt nBitsCBPY;
  365. UInt nBitsMCBPC;
  366. UInt nBitsDQUANT;
  367. UInt nBitsMODB;
  368. UInt nBitsCBPB;
  369. UInt nBitsMBTYPE;
  370. UInt nBitsIntraPred; //intra ac/dc switch
  371. UInt nBitsNoDCT; //no. of DCT in sepr m-s-t mode
  372. UInt nBitsCODA;
  373. UInt nBitsCBPA;
  374. UInt nBitsMODBA;
  375. UInt nBitsCBPBA;
  376. UInt nBitsStuffing;
  377. UInt nSkipMB;
  378. UInt nInterMB;
  379. UInt nInter4VMB;
  380. UInt nIntraMB;
  381. UInt nDirectMB;
  382. UInt nForwardMB;
  383. UInt nBackwardMB;
  384. UInt nInterpolateMB;
  385. UInt nBitsInterlace; // incl all interlaced info in MB header
  386. UInt nFieldForwardMB;
  387. UInt nFieldBackwardMB;
  388. UInt nFieldInterpolateMB;
  389. UInt nFieldDirectMB;
  390. UInt nFieldDCTMB;
  391. UInt nVOPs; // VOP counter for normalizing statistics
  392. UInt nBitsMV;
  393. UInt nBitsShape;
  394. UInt nBitsTotal;
  395. Double dSNRY;
  396. Double dSNRU;
  397. Double dSNRV;
  398. Double dSNRA;
  399. UInt nQMB;
  400. UInt nQp;
  401. private:
  402. UInt nBitsTexture;
  403. };
  404. Class CRCMode
  405. {
  406. public:
  407. //constructor 
  408. CRCMode () {};
  409. ~CRCMode () {};
  410. //resultant
  411. UInt updateQuanStepsize (); // Target bits and quantization level calculation
  412. Bool skipNextFrame () const {return m_skipNextFrame;}
  413. Bool firstFrame () const {return m_bfirstFrame;}
  414. UInt noCodedFrame () const {return m_Nc;}  // return the coded P frames
  415. //Operation
  416. Void resetSkipMode () {m_skipNextFrame = FALSE; m_bfirstFrame = TRUE;}
  417. Void resetFirstFrame () {m_bfirstFrame = FALSE;}
  418. Bool skipThisFrame ();
  419. Void reset (UInt uiFirstFrame, UInt uiLastFrame, UInt uiTemporalRate, 
  420. UInt uiBufferSize, Double mad, UInt uiBitsFirstFrame, Double dFrameHz);
  421. Void setMad (Double mad) {m_Ep = m_Ec; m_Ec = mad;}
  422. Void setQc (UInt QStep) {m_Qc = QStep;}
  423. Void updateRCModel (UInt uiBitsTotalCurr, UInt uiBitsHeadCurr); // Update RD model
  424. private:
  425. Void RCModelEstimator (UInt nWindowSize); // Rate Control: RD model estimator
  426. Double m_X1;// 1st order coefficient
  427. Double m_X2;// 2nd order coefficient
  428. UInt m_Rs; // bit rate for sequence. e.g. 24000 bits/sec
  429. UInt m_Rf; // bits used for the first frame, e.g. 10000 bits
  430. UInt m_Rc; // bits used for the current frame after encoding
  431. UInt m_Rp; // bits to be removed from the buffer per picture
  432. Double m_Ts;// number of seconds for the sequence, e.g. 10 sec
  433. Double m_Ec;// mean absolute difference for the current frame after motion compensation
  434. Double m_Ep;// mean absolute difference for the previous frame after motion compensation
  435. UInt m_Qc; // quantization level used for the current frame
  436. UInt m_Qp; // quantization level used for the previous frame
  437. UInt m_Nr; // number of P frames remaining for encoding
  438. UInt m_Nc; // number of P frames coded
  439. UInt m_Ns; // distance between encoded frames
  440. Int m_Rr; // number of bits remaining for encoding this sequence 
  441. UInt m_T; // target bit to be used for the current frame
  442. UInt m_S; // number of bits used for encoding the previous frame
  443. UInt m_Hc; // header and motion vector bits used in the current frame
  444. UInt m_Hp; // header and motion vector bits used in the previous frame
  445. UInt m_Bs; // buffer size 
  446. Int m_B; // current buffer level
  447. Bool m_skipNextFrame; // TRUE if buffer is full
  448. Bool m_bfirstFrame; // TRUE if this is the first frame
  449. UInt m_rgQp[RC_MAX_SLIDING_WINDOW]; // quantization levels for the past frames
  450. Double m_rgRp[RC_MAX_SLIDING_WINDOW]; // scaled encoding complexity used for the past frames;
  451. Bool m_rgRejected[RC_MAX_SLIDING_WINDOW]; // outliers
  452. };
  453. #endif //__MODE_H