📄 mpeg2enc.cpp
字号:
{24000.0/1001.0,24.0,25.0,30000.0/1001.0,30.0,50.0,60000.0/1001.0,60.0};
extern int r,Xi,Xb,Xp,d0i,d0p,d0b; /* rate control */
extern double avg_act; /* rate control */
int id=0;
double min=200.0;
int md=3;
for(id=0;id<8;id++)
{
double t=abs(fr-ratetab[id]);
if(t<min)
{
md=id;
min=t;
}
}
strcpy(id_string,"kjk mpeg2");
strcpy(statname,"statout");
inputtype=0;
nframes=10;
frame0=0;
h=0;
m=0;
s=0;
f=0;
N=5;
M=1;
mpeg1=0;
fieldpic=0;
horizontal_size=width;
vertical_size=height;
aspectratio=2;
frame_rate_code=md;
bit_rate=b;
vbv_buffer_size=112;
low_delay=0;
constrparms=0;
profile=4;
level=8;
prog_seq=0;
chroma_format=1;
video_format=1;
color_primaries=5;
transfer_characteristics=5;
matrix_coefficients=5;
display_horizontal_size=width;
display_vertical_size=height;
dc_prec=0;
topfirst=1;
frame_pred_dct_tab[0]=0;
frame_pred_dct_tab[1]=0;
frame_pred_dct_tab[2]=0;
conceal_tab[0]=0;
conceal_tab[1]=0;
conceal_tab[2]=0;
qscale_tab[0]=1;
qscale_tab[1]=1;
qscale_tab[2]=1;
intravlc_tab[0]=1;
intravlc_tab[1]=0;
intravlc_tab[2]=0;
altscan_tab[0]=0;
altscan_tab[1]=0;
altscan_tab[2]=0;
repeatfirst=0;
prog_frame=0;
/* intra slice interval refresh period */
P=0;
r=0;
avg_act=0;
Xi=0;
Xp=0;
Xb=0;
d0i=0;
d0p=0;
d0b=0;
motion_data = (struct motion_data *)malloc(M*sizeof(struct motion_data));
if (!motion_data)
error("malloc failed\n");
motion_data[0].forw_hor_f_code=2;
motion_data[0].forw_vert_f_code=2;
motion_data[0].sxf=11;
motion_data[0].syf=11;
/*
motion_data[1].forw_hor_f_code=1;
motion_data[1].forw_vert_f_code=1;
motion_data[1].sxf=3;
motion_data[1].syf=3;
motion_data[1].back_hor_f_code=1;
motion_data[1].back_vert_f_code=1,
motion_data[1].sxb=7;
motion_data[1].syb=7;
motion_data[2].forw_hor_f_code=1;
motion_data[2].forw_vert_f_code=1;
motion_data[2].sxf=7;
motion_data[2].syf=7;
motion_data[2].back_hor_f_code=1;
motion_data[2].back_vert_f_code=1,
motion_data[2].sxb=3;
motion_data[2].syb=3;
*/
/* make flags boolean (x!=0 -> x=1) */
mpeg1 = !!mpeg1;
fieldpic = !!fieldpic;
low_delay = !!low_delay;
constrparms = !!constrparms;
prog_seq = !!prog_seq;
topfirst = !!topfirst;
for (i=0; i<3; i++)
{
frame_pred_dct_tab[i] = !!frame_pred_dct_tab[i];
conceal_tab[i] = !!conceal_tab[i];
qscale_tab[i] = !!qscale_tab[i];
intravlc_tab[i] = !!intravlc_tab[i];
altscan_tab[i] = !!altscan_tab[i];
}
repeatfirst = !!repeatfirst;
prog_frame = !!prog_frame;
/* make sure MPEG specific parameters are valid */
range_checks();
frame_rate = ratetab[frame_rate_code-1];
/* timecode -> frame number */
tc0 = h;
tc0 = 60*tc0 + m;
tc0 = 60*tc0 + s;
tc0 = (int)(frame_rate+0.5)*tc0 + f;
/*
if (!mpeg1)
{
profile_and_level_checks();
}
else
{
if (constrparms)
{
if (horizontal_size>768
|| vertical_size>576
|| ((horizontal_size+15)/16)*((vertical_size+15)/16)>396
|| ((horizontal_size+15)/16)*((vertical_size+15)/16)*frame_rate>396*25.0
|| frame_rate>30.0)
{
if (!quiet)
fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");
constrparms = 0;
}
}
if (constrparms)
{
for (i=0; i<M; i++)
{
if (motion_data[i].forw_hor_f_code>4)
{
if (!quiet)
fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");
constrparms = 0;
break;
}
if (motion_data[i].forw_vert_f_code>4)
{
if (!quiet)
fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");
constrparms = 0;
break;
}
if (i!=0)
{
if (motion_data[i].back_hor_f_code>4)
{
if (!quiet)
fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");
constrparms = 0;
break;
}
if (motion_data[i].back_vert_f_code>4)
{
if (!quiet)
fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");
constrparms = 0;
break;
}
}
}
}
}
if (mpeg1)
{
if (!prog_seq)
{
if (!quiet)
fprintf(stderr,"Warning: setting progressive_sequence = 1\n");
prog_seq = 1;
}
if (chroma_format!=CHROMA420)
{
if (!quiet)
fprintf(stderr,"Warning: setting chroma_format = 1 (4:2:0)\n");
chroma_format = CHROMA420;
}
if (dc_prec!=0)
{
if (!quiet)
fprintf(stderr,"Warning: setting intra_dc_precision = 0\n");
dc_prec = 0;
}
for (i=0; i<3; i++)
if (qscale_tab[i])
{
if (!quiet)
fprintf(stderr,"Warning: setting qscale_tab[%d] = 0\n",i);
qscale_tab[i] = 0;
}
for (i=0; i<3; i++)
if (intravlc_tab[i])
{
if (!quiet)
fprintf(stderr,"Warning: setting intravlc_tab[%d] = 0\n",i);
intravlc_tab[i] = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -