Doxygen Source Code Documentation
rate.c File Reference
#include <sys/times.h>#include "all.h"#include "mtypes.h"#include "bitio.h"#include "frames.h"#include "prototypes.h"#include "param.h"#include "mheaders.h"#include "fsize.h"#include "postdct.h"#include "mpeg.h"#include "parallel.h"#include "dct.h"#include "rate.h"Go to the source code of this file.
| Defines | |
| #define | MAX_BIT_RATE 104857600 | 
| #define | MAX_BUFFER_SIZE 16760832 | 
| #define | DEFAULT_BUFFER_SIZE 327680 | 
| #define | DEFAULT_VBV_FULLNESS 3 | 
| #define | DEFAULT_PICT_RATE_CODE 5 | 
| #define | DEFAULT_PICT_RATE 30 | 
| #define | MAX_VBV_DELAY 32768 | 
| Functions | |
| int initGOPRateControl | _ANSI_ARGS_ ((void)) | 
| void checkBufferFullness | _ANSI_ARGS_ ((int count)) | 
| void checkSpatialActivity | _ANSI_ARGS_ ((Block blk0, Block blk1, Block blk2, Block blk3)) | 
| void incNumBlocks | _ANSI_ARGS_ ((int num)) | 
| void updateVBVBuffer | _ANSI_ARGS_ ((int frameBits)) | 
| int BlockExperiments | _ANSI_ARGS_ ((int16 *OrigBlock, int16 *NewBlock, int control)) | 
| int | initRateControl () | 
| int | initGOPRateControl () | 
| void | targetRateControl (frame) MpegFrame *frame | 
| Variables | |
| int | RateControlMode = VARIABLE_RATE | 
| int32 | buffer_size = DEFAULT_BUFFER_SIZE | 
| int32 | bit_rate = -1 | 
| int32 | VBV_delay = 0 | 
| int32 | VBV_buffer = 0 | 
| int32 | bufferFillRate = 0 | 
| int32 | frameDelayIncrement = 0 | 
| int | Xi | 
| int | Xp | 
| int | Xb | 
| int | Si | 
| int | Sp | 
| int | Sb | 
| float | Qi | 
| float | Qp | 
| float | Qb | 
| int | Ti | 
| int | Tp | 
| int | Tb | 
| int | current_Tx | 
| int | GOP_X = 0 | 
| int | GOP_I = 0 | 
| int | GOP_P = 0 | 
| int | GOP_B = 0 | 
| int | Nx = 0 | 
| int | Ni = 0 | 
| int | Np = 0 | 
| int | Nb = 0 | 
| int | rc_numBlocks = 0 | 
| int | rc_totalQuant = 0 | 
| int | rc_bitsThisMB | 
| int | rc_totalMBBits | 
| int | rc_totalFrameBits | 
| int | rc_totalOverheadBits = 0 | 
| int | RC_MB_SAMPLE_RATE = 0 | 
| float | Ki = .7 | 
| float | Kp = 1 | 
| float | Kb = 1.4 | 
| int | rc_R | 
| int | rc_G | 
| int | d0_i | 
| int | d0_p | 
| int | d0_b | 
| int | lastFrameVirtBuf | 
| int | currentVirtBuf | 
| int | MB_cnt = -1 | 
| int | rc_Q | 
| int | reactionParameter | 
| int | act_j | 
| float | N_act | 
| int | avg_act | 
| int | total_act_j | 
| int | var_sblk | 
| int | P_mean | 
| int | mquant | 
| int | Qscale | 
| char * | Frame_header1 = " Fm # Bit GOP V " | 
| char * | Frame_header2 = " # type MBs Alloc left Ni Np Nb N_act buff Q_rc Qscale" | 
| char * | Frame_header3 = "---- - ---- ------ ------- -- -- -- ----- ------ ---- ----" | 
| char * | Frame_trailer1 = " avg virt % GOP % VBV" | 
| char * | Frame_trailer2 = " Sx Qx Xx act N_act buffer alloc left left buf delay" | 
| char * | Frame_trailer3 = "------ --.-- ------- --- --.-- ------- --- ------- --- ------- ------" | 
| char * | MB_header1 = "MB# #bits Q mqt Dj Q_j actj N_act totbits b/MB %alloc %done" | 
| char * | MB_header2 = "--- ----- -- --- ------ --- ----- --.-- ------ ---- --- ---" | 
| char | rc_buffer [101] | 
| char * | framePattern | 
| int | framePatternLen | 
| Block | blk0 | 
| Block | blk1 | 
| Block | blk2 | 
| Block | blk3 | 
Define Documentation
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
Function Documentation
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 312 of file rate.c. References avg_act, bit_rate, buffer_size, d0_b, d0_i, d0_p, DBG_PRINT, GOP_B, GOP_I, GOP_P, GOP_X, mquant, Nb, Ni, Np, Nx, rc_G, rc_Q, rc_R, Xb, Xi, and Xp. Referenced by initRateControl(). 
 00313 {
00314   DBG_PRINT(("\tInitializing new GOP\n"));
00315   
00316   Nx = GOP_X;
00317   Ni = GOP_I;
00318   Np = GOP_P;
00319   Nb = GOP_B;
00320   
00321   rc_R += rc_G;
00322   
00323   DBG_PRINT(("\tbufsize: %d, bitrate: %d, pictrate: %d, GOP bits: %d\n",
00324              buffer_size, bit_rate, frameRateRounded, rc_R));
00325   DBG_PRINT(("\tXi: %d, Xp: %d, Xb: %d Nx: %d, Ni: %d, Np: %d, Nb: %d\n",
00326              Xi, Xp, Xb, Nx,Ni,Np,Nb));
00327   DBG_PRINT(("\td0_i: %d, d0_p: %d, d0_b: %d, avg_act: %d, rc_Q: %d, mquant: %d\n",
00328              d0_i, d0_p, d0_b, avg_act, rc_Q, mquant));
00329   return 1;
00330 }
 | 
| 
 | 
| 
 Definition at line 218 of file rate.c. References avg_act, bit_rate, buffer_size, bufferFillRate, d0_b, d0_i, d0_p, DBG_PRINT, frameDelayIncrement, framePattern, framePatternLen, GOP_B, GOP_I, GOP_P, GOP_X, initGOPRateControl(), Kb, Kp, lastFrameVirtBuf, mquant, N_act, RateControlMode, rc_bitsThisMB, rc_G, rc_numBlocks, rc_Q, rc_R, rc_totalFrameBits, rc_totalMBBits, rc_totalOverheadBits, rc_totalQuant, reactionParameter, VARIABLE_RATE, VBV_buffer, VBV_delay, Xb, Xi, and Xp. 
 00219 {
00220   int index;
00221   int result;
00222   
00223   DBG_PRINT(("\tInitializing Allocation Data\n"));
00224   
00225 #ifdef RC_STATS_FILE
00226   RC_FILE = fopen("RC_STATS_FILE", "w");
00227   if ( RC_FILE  == NULL) {
00228     DBG_PRINT(("\tOpen of RC file failed, using stderr\n"));
00229     RC_FILE = stderr;
00230     fprintf(RC_FILE, "\tOpen of RC file failed, using stderr\n");
00231     fflush(RC_FILE);
00232   }
00233 #endif
00234   
00235   /*  Initialize Pattern info */
00236   GOP_X = framePatternLen;
00237   for ( index = 0; index < framePatternLen; index++ ) {
00238     switch( framePattern[index] ) {
00239     case 'i':
00240       GOP_I++;
00241       break;
00242     case 'p':
00243       GOP_P++;
00244       break;
00245     case 'b':
00246       GOP_B++;
00247       break;
00248     default:
00249       printf("\n\tERROR rate.c - BAD PATTERN!\n");
00250       RateControlMode = VARIABLE_RATE;
00251       return (0);
00252     }
00253   }
00254   if (GOP_X != (GOP_I + GOP_P + GOP_B )) {
00255     printf("\n\tERROR rate.c - Pattern Length Mismatch\n");
00256     RateControlMode = VARIABLE_RATE;
00257     return (-1);
00258   }
00259   
00260   /* Initializing GOP bit allocation */ 
00261   rc_R = 0;
00262   rc_G = (bit_rate * GOP_X/frameRateRounded);
00263   
00264   /*   Initialize the "global complexity measures" */
00265   Xi = (160 * bit_rate/115);
00266   Xp = (60 * bit_rate/115);
00267   Xb = (42 * bit_rate/115);
00268   
00269   /*   Initialize MB counters */
00270   rc_totalMBBits= rc_bitsThisMB= rc_totalFrameBits=rc_totalOverheadBits = 0;
00271   rc_numBlocks = rc_totalQuant = 0;
00272   
00273   /*   init virtual buffers  */
00274   reactionParameter = (2 * bit_rate / frameRateRounded);
00275   d0_i = (10 * reactionParameter / 31);
00276   d0_p = (Kp * d0_i);
00277   d0_b = (Kb * d0_i);
00278   
00279   lastFrameVirtBuf = d0_i;      /*  start with I Frame */
00280   rc_Q = lastFrameVirtBuf  * 31 / reactionParameter;
00281   
00282   /*   init spatial activity measures */
00283   avg_act = 400;                /* Suggested initial value */
00284   N_act = 1;
00285   
00286   mquant = rc_Q * N_act;
00287   
00288   frameDelayIncrement = (90000 / frameRateRounded); /* num of "delay" units per frame */
00289   bufferFillRate = bit_rate / frameRateRounded; /* VBV buf fills at constant rate */
00290   VBV_buffer = buffer_size;
00291   DBG_PRINT(("\tVBV- delay: %d, fill rate: %d, delay/Frame: %d units, buffer size: %d\n",
00292              VBV_delay, bufferFillRate, frameDelayIncrement, buffer_size));
00293   
00294   result = initGOPRateControl();
00295   
00296   return result;
00297 }
 | 
| 
 | 
| 
 | 
Variable Documentation
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 154 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 84 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 83 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 90 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 140 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 138 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 139 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 91 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 183 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 184 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 109 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 107 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 108 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 106 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 131 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 130 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 142 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 160 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 153 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 114 of file rate.c. Referenced by extract_assign_directions(), and initGOPRateControl(). | 
| 
 | 
| 
 Definition at line 112 of file rate.c. Referenced by initGOPRateControl(), main(), SUMA_CreateTable(), SUMA_Householder(), and SUMA_Surface_Curvature(). | 
| 
 | 
| 
 Definition at line 113 of file rate.c. Referenced by initGOPRateControl(). | 
| 
 | 
| 
 Definition at line 111 of file rate.c. Referenced by initGOPRateControl(), SUMA_AssignTriBranch(), SUMA_Dijkstra(), and SUMA_IntersectionStrip(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 82 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 120 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 133 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 118 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 147 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 132 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 122 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 121 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 123 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 119 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 149 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 101 of file rate.c. Referenced by SUMA_AddNodeIndexColumn(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 89 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 88 of file rate.c. Referenced by initRateControl(). | 
| 
 | 
| 
 Definition at line 94 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 94 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
| 
 | 
| 
 Definition at line 94 of file rate.c. Referenced by initGOPRateControl(), and initRateControl(). | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  