blob: 8833993124cfd670bf0102b0fdbb5a2d9f47c8ec [file] [log] [blame]
/*!
***************************************************************************
* \file
* ratectl.h
*
* \author
* Zhengguo LI
*
* \date
* 14 Jan 2003
*
* \brief
* Headerfile for rate control
**************************************************************************
*/
#ifndef _RATE_CTL_H_
#define _RATE_CTL_H_
/* generic rate control variables */
typedef struct {
// RC flags
int TopFieldFlag;
int FieldControl;
int FieldFrame;
int NoGranularFieldRC;
// bits stats
int NumberofHeaderBits;
int NumberofTextureBits;
int NumberofBasicUnitHeaderBits;
int NumberofBasicUnitTextureBits;
// frame stats
int NumberofCodedBFrame;
int NumberofCodedPFrame;
int NumberofGOP;
int TotalQpforPPicture;
int NumberofPPicture;
// MAD stats
int64 TotalMADBasicUnit;
int *MADofMB;
// buffer and budget
int64 CurrentBufferFullness; //LIZG 25/10/2002
int RemainingBits;
// bit allocations for RC_MODE_3
int RCPSliceBits;
int RCISliceBits;
int RCBSliceBits[RC_MAX_TEMPORAL_LEVELS];
int temporal_levels;
int hierNb[RC_MAX_TEMPORAL_LEVELS];
int NPslice;
int NIslice;
} rc_generic;
// macroblock activity
int diffy[16][16];
int qp_mbaff[2][2], qp_mbaff[2][2];
int delta_qp_mbaff[2][2], delta_qp_mbaff[2][2];
// generic functions
int Qstep2QP( double Qstep );
double QP2Qstep( int QP );
int calc_MAD( void );
double ComputeFrameMAD( void );
void update_rc(Macroblock *currMB, short best_mode);
// rate control functions
// init/copy
void generic_alloc( rc_generic **prc );
void generic_free( rc_generic **prc );
void copy_rc_generic( rc_generic *dst, rc_generic *src );
// rate control CURRENT pointers
rc_generic *generic_RC;
// rate control object pointers for RDPictureDecision buffering...
rc_generic *generic_RC_init, *generic_RC_best;
#endif