00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _RATE_CTL_H_
00019 #define _RATE_CTL_H_
00020
00021 #include "global.h"
00022 #include "rc_quadratic.h"
00023
00024
00025 typedef struct {
00026
00027 int TopFieldFlag;
00028 int FieldControl;
00029 int FieldFrame;
00030 int NoGranularFieldRC;
00031
00032 int NumberofHeaderBits;
00033 int NumberofTextureBits;
00034 int NumberofBasicUnitHeaderBits;
00035 int NumberofBasicUnitTextureBits;
00036
00037 int NumberofGOP;
00038 int NumberofCodedBFrame;
00039
00040 int64 TotalMADBasicUnit;
00041 int *MADofMB;
00042
00043 int64 CurrentBufferFullness;
00044 int64 RemainingBits;
00045
00046 int RCPSliceBits;
00047 int RCISliceBits;
00048 int RCBSliceBits[RC_MAX_TEMPORAL_LEVELS];
00049 int temporal_levels;
00050 int hierNb[RC_MAX_TEMPORAL_LEVELS];
00051 int NPSlice;
00052 int NISlice;
00053 } rc_generic;
00054
00055
00056 extern int diffy[16][16];
00057
00058
00059 int Qstep2QP ( double Qstep );
00060 double QP2Qstep ( int QP );
00061 int ComputeMBMAD ( void );
00062 double ComputeFrameMAD ( void );
00063 void rc_store_mad (Macroblock *currMB);
00064
00065
00066
00067 void rc_alloc_generic ( rc_generic **prc );
00068 void rc_free_generic ( rc_generic **prc );
00069 void rc_copy_generic ( rc_generic *dst, rc_generic *src );
00070 void rc_init_gop_params (void);
00071 void rc_init_frame (int FrameNumberInFile);
00072 void rc_init_sequence (void);
00073 void rc_store_slice_header_bits (int len);
00074
00075
00076
00077 rc_generic *generic_RC;
00078
00079 rc_generic *generic_RC_init, *generic_RC_best;
00080
00081
00082 #endif
00083