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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* header file for TM-5 rate control */
  2. /* MPEG-2 Video TM-5 rate control 
  3.    For the purpose of comparing
  4.    MPEG-4 VM with MPEG-2 TM-5
  5.    27.03.97 By X. Chen in G.I.
  6.  * 16.03.99 David Ruhoff: conversion to microsoft-vfdis-v10-990124
  7.  */
  8. #ifndef __TM5RC_H_
  9. #define __TM5RC_H_
  10. #define RC_MPEG4 1
  11. #define RC_TM5   3
  12. #include "basic.hpp"
  13. Class CVOPU8YUVBA;
  14. Class CVideoObjectEncoder;
  15. Class TM5rc
  16. {
  17. public:
  18.      TM5rc () 
  19.      {
  20.          Xi = Xp = Xb = r_tm5 = d0i = d0p = d0b = 0;
  21.          avg_act = 0.0;
  22.          mbact = NULL;
  23.          R_tm5 = T_tm5 = d_tm5 = 0;
  24.          actsum = 0.0;
  25.          Ni = Np = Nb = S_tm5 = Q_tm5 = prev_mquant = 0;
  26.          mb_width = mb_height = mquant = bitrate = 0;
  27.          pic_rate = 0.0;
  28.          rc_type = 0;
  29.          Qfile = NULL;
  30.          linectr = 0;
  31.      };
  32.     ~TM5rc () {};
  33.     void    tm5rc_init_seq( char       *pchQname,
  34.                             UInt       rc_type, 
  35.                             AlphaUsage fAUsage, 
  36.                             UInt       uiWidth, 
  37.                             UInt       uiHeight, 
  38.                             UInt       uiBitRate,
  39.                             Double     dFrameRate
  40.                            );
  41.     void    tm5rc_init_GOP(Int np, Int nb);
  42.     void    tm5rc_init_pict(VOPpredType vopPredType,
  43.                             const PixelC* ppxlcOrigY,
  44.                             Int row_size,
  45.                             Int iNumMBX,
  46.                             Int iNumMBY);
  47.     Int     tm5rc_start_mb();
  48.     Int tm5rc_calc_mquant(Int iMBindex, UInt uiBitsUsed);
  49.     void tm5rc_update_pict(VOPpredType vopPredType, Int iVOPtotalBits);
  50. private:
  51.     void    tm5_calc_actj(const PixelC* ppxlcOrigY,
  52.                           Int row_size,
  53.                           Int iNumMBX,
  54.                           Int iNumMBY);
  55.     Double  tm5_var_sblk(const PixelC *p, Int lx);
  56.     Int     Xi;         /* I-picture complexity */
  57.     Int     Xp;         /* P-picture complexity */
  58.     Int     Xb;         /* B-picture complexity */
  59.     Int     r_tm5;      /* Reaction parameter */
  60.     Int     d0i;        /* I-pic virtual buffer occupancy */
  61.     Int     d0p;        /* P-pic virtual buffer occupancy */
  62.     Int     d0b;        /* B-pic virtual buffer occupancy */
  63.     Double  avg_act;    /* Ave activity (of last picture) */
  64.     Double  *mbact;     /* Activity of each macroblock */
  65.     Int     R_tm5;      
  66.     Int     T_tm5;
  67.     Int     d_tm5;      /* buffer occupancy accumulator */
  68.     Double  actsum;     /* Cumulative sum of activities */
  69.     Int     Ni;         /* Nbr I-pics reamining in GOP */
  70.     Int     Np;         /* Nbr P-pics remaining in GOP */
  71.     Int     Nb;         /* Nbr B-pics remaining in GOP */
  72.     Int     S_tm5;
  73.     Int     Q_tm5;      /* Sum of quantizer value (for activity calc) */
  74.     Int     prev_mquant;/* Previous quantizer */
  75.     Int     mb_width;   /* Nbr MBs in horiz direction */
  76.     Int     mb_height;  /* Nbr MBs in vert direction */
  77.     Int     mquant;     /* running quantizer value */
  78.     Int     bitrate;    /* Bit rate (bits/second) */
  79.     Double  pic_rate;   /* Pictures per second */
  80.     Int     rc_type;    /* Rate control type code */
  81.     FILE    *Qfile;     /* Quantizer file */
  82.     Int     linectr;    /* numbers on current Qfile line */
  83. };
  84. #endif