📄 ratectrl.cpp
字号:
#include <stdio.h>
#include "HEnc.h"
int ratectrl(int target_bitrate, int frame_rate, int frame_bits[], int *Quant)
{
int i,j,k;
int totalframebits=0;
int leftbits=0;
int leftbitsneed=0;
int differ=0;
int frame_skip = 0;
int bpf=target_bitrate/frame_rate;
if (target_bitrate == 0)
{
return 0;
}
// printf("\nQI %d\n",*Quant);
// printf("\nframe_rate,%d\n",frame_rate);
for(i=0;i<frame_rate;i++)
{
if(frame_bits[i]>0)
j=i;
}
// printf("\nthe last frame_bit:%d\n",j);
for(k=0;k<=j;k++)
{
totalframebits+=frame_bits[k];
}
// printf("\ntotalframebits,%d\n",totalframebits);
leftbits=target_bitrate-totalframebits;//客观上允许这么多比特,是上限
// printf("\nleftbits:%d\n",leftbits);
leftbitsneed=target_bitrate*(frame_rate-j-1)/frame_rate;//
// printf("\nleftbitsneed:%d\n",leftbitsneed);
// printf("\nbpf:%d\n",target_bitrate/frame_rate);
differ=leftbitsneed-leftbits;
// printf("\ndiffer:%d\n",differ);
if(differ<=0)
{
(*Quant)--;
}
else if(differ<=bpf)
{
(*Quant)++;
}
else
{
(*Quant)++;
frame_skip=differ/bpf;
}
*Quant = mmin(28,mmax(4, *Quant));
return frame_skip;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -