?? mpeg2enc.c
字號:
}
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
{
/* MPEG-1 */
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;
}
}
}
}
}
/* relational checks */
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;
}
for (i=0; i<3; i++)
if (altscan_tab[i])
{
if (!quiet)
fprintf(stderr,"Warning: setting altscan_tab[%d] = 0\n",i);
altscan_tab[i] = 0;
}
}
if (!mpeg1 && constrparms)
{
if (!quiet)
fprintf(stderr,"Warning: setting constrained_parameters_flag = 0\n");
constrparms = 0;
}
if (prog_seq && !prog_frame)
{
if (!quiet)
fprintf(stderr,"Warning: setting progressive_frame = 1\n");
prog_frame = 1;
}
if (prog_frame && fieldpic)
{
if (!quiet)
fprintf(stderr,"Warning: setting field_pictures = 0\n");
fieldpic = 0;
}
if (!prog_frame && repeatfirst)
{
if (!quiet)
fprintf(stderr,"Warning: setting repeat_first_field = 0\n");
repeatfirst = 0;
}
if (prog_frame)
{
for (i=0; i<3; i++)
if (!frame_pred_dct_tab[i])
{
if (!quiet)
fprintf(stderr,"Warning: setting frame_pred_frame_dct[%d] = 1\n",i);
frame_pred_dct_tab[i] = 1;
}
}
if (prog_seq && !repeatfirst && topfirst)
{
if (!quiet)
fprintf(stderr,"Warning: setting top_field_first = 0\n");
topfirst = 0;
}
/* search windows */
for (i=0; i<M; i++)
{
if (motion_data[i].sxf > (4<<motion_data[i].forw_hor_f_code)-1)
{
if (!quiet)
fprintf(stderr,
"Warning: reducing forward horizontal search width to %d\n",
(4<<motion_data[i].forw_hor_f_code)-1);
motion_data[i].sxf = (4<<motion_data[i].forw_hor_f_code)-1;
}
if (motion_data[i].syf > (4<<motion_data[i].forw_vert_f_code)-1)
{
if (!quiet)
fprintf(stderr,
"Warning: reducing forward vertical search width to %d\n",
(4<<motion_data[i].forw_vert_f_code)-1);
motion_data[i].syf = (4<<motion_data[i].forw_vert_f_code)-1;
}
if (i!=0)
{
if (motion_data[i].sxb > (4<<motion_data[i].back_hor_f_code)-1)
{
if (!quiet)
fprintf(stderr,
"Warning: reducing backward horizontal search width to %d\n",
(4<<motion_data[i].back_hor_f_code)-1);
motion_data[i].sxb = (4<<motion_data[i].back_hor_f_code)-1;
}
if (motion_data[i].syb > (4<<motion_data[i].back_vert_f_code)-1)
{
if (!quiet)
fprintf(stderr,
"Warning: reducing backward vertical search width to %d\n",
(4<<motion_data[i].back_vert_f_code)-1);
motion_data[i].syb = (4<<motion_data[i].back_vert_f_code)-1;
}
}
}
}
static void readquantmat()
{
int i,v;
FILE *fd;
if (iqname[0]=='-')
{
/* use default intra matrix */
load_iquant = 0;
for (i=0; i<64; i++)
intra_q[i] = default_intra_quantizer_matrix[i];
}
else
{
/* read customized intra matrix */
load_iquant = 1;
if (!(fd = fopen(iqname,"r")))
{
sprintf(errortext,"Couldn't open quant matrix file %s",iqname);
error(errortext);
}
for (i=0; i<64; i++)
{
fscanf(fd,"%d",&v);
if (v<1 || v>255)
error("invalid value in quant matrix");
intra_q[i] = v;
}
fclose(fd);
}
if (niqname[0]=='-')
{
/* use default non-intra matrix */
load_niquant = 0;
for (i=0; i<64; i++)
inter_q[i] = 16;
}
else
{
/* read customized non-intra matrix */
load_niquant = 1;
if (!(fd = fopen(niqname,"r")))
{
sprintf(errortext,"Couldn't open quant matrix file %s",niqname);
error(errortext);
}
for (i=0; i<64; i++)
{
fscanf(fd,"%d",&v);
if (v<1 || v>255)
error("invalid value in quant matrix");
inter_q[i] = v;
}
fclose(fd);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -