📄 tm5rc.hpp
字号:
/* header file for TM-5 rate control */
/* In the course of development of the MPEG-4 standard, this software */
/* module is an implementation of a part of one or more MPEG-4 tools as */
/* specified by the MPEG-4 standard. */
/* */
/* The copyright of this software belongs to ISO/IEC. ISO/IEC gives use */
/* of the MPEG-4 standard free license to use this software module or */
/* modifications thereof for hardware or software products claiming */
/* conformance to the MPEG-4 standard. */
/* */
/* Those intending to use this software module in hardware or software */
/* products are advised that use may infringe existing patents. The */
/* original developers of this software module and their companies, the */
/* subsequent editors and their companies, and ISO/IEC have no liability */
/* and ISO/IEC have no liability for use of this software module or */
/* modification thereof in an implementation. */
/* */
/* Permission is granted to MPEG members to use, copy, modify, */
/* and distribute the software modules ( or portions thereof ) */
/* for standardization activity within ISO/IEC JTC1/SC29/WG11. */
/* */
/* Copyright 1995, 1996, 1997, 1998 ISO/IEC */
/* MPEG-2 Video TM-5 rate control
For the purpose of comparing
MPEG-4 VM with MPEG-2 TM-5
27.03.97 By X. Chen in G.I.
* 16.03.99 David Ruhoff: conversion to microsoft-vfdis-v10-990124
*/
#ifndef __TM5RC_H_
#define __TM5RC_H_
#define RC_MPEG4 1
#define RC_TM5 3
#include "basic.hpp"
class CVOPU8YUVBA;
class CVideoObjectEncoder;
class TM5rc
{
public:
TM5rc ()
{
Xi = Xp = Xb = r_tm5 = d0i = d0p = d0b = 0;
avg_act = 0.0;
mbact = NULL;
R_tm5 = T_tm5 = d_tm5 = 0;
actsum = 0.0;
Ni = Np = Nb = S_tm5 = Q_tm5 = prev_mquant = 0;
mb_width = mb_height = mquant = bitrate = 0;
pic_rate = 0.0;
rc_type = 0;
Qfile = NULL;
linectr = 0;
};
~TM5rc () {};
void tm5rc_init_seq( char *pchQname,
UInt rc_type,
AlphaUsage fAUsage,
UInt uiWidth,
UInt uiHeight,
UInt uiBitRate,
Double dFrameRate
);
void tm5rc_init_GOP(Int np, Int nb);
void tm5rc_init_pict(VOPpredType vopPredType,
const PixelC* ppxlcOrigY,
Int row_size,
Int iNumMBX,
Int iNumMBY);
Int tm5rc_start_mb();
Int tm5rc_calc_mquant(Int iMBindex, UInt uiBitsUsed);
void tm5rc_update_pict(VOPpredType vopPredType, Int iVOPtotalBits);
private:
void tm5_calc_actj(const PixelC* ppxlcOrigY,
Int row_size,
Int iNumMBX,
Int iNumMBY);
Double tm5_var_sblk(const PixelC *p, Int lx);
Int Xi; /* I-picture complexity */
Int Xp; /* P-picture complexity */
Int Xb; /* B-picture complexity */
Int r_tm5; /* Reaction parameter */
Int d0i; /* I-pic virtual buffer occupancy */
Int d0p; /* P-pic virtual buffer occupancy */
Int d0b; /* B-pic virtual buffer occupancy */
Double avg_act; /* Ave activity (of last picture) */
Double *mbact; /* Activity of each macroblock */
Int R_tm5;
Int T_tm5;
Int d_tm5; /* buffer occupancy accumulator */
Double actsum; /* Cumulative sum of activities */
Int Ni; /* Nbr I-pics reamining in GOP */
Int Np; /* Nbr P-pics remaining in GOP */
Int Nb; /* Nbr B-pics remaining in GOP */
Int S_tm5;
Int Q_tm5; /* Sum of quantizer value (for activity calc) */
Int prev_mquant;/* Previous quantizer */
Int mb_width; /* Nbr MBs in horiz direction */
Int mb_height; /* Nbr MBs in vert direction */
Int mquant; /* running quantizer value */
Int bitrate; /* Bit rate (bits/second) */
Double pic_rate; /* Pictures per second */
Int rc_type; /* Rate control type code */
FILE *Qfile; /* Quantizer file */
Int linectr; /* numbers on current Qfile line */
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -