📄 gethdr.c
字号:
int frame_rate_extension_n;
int frame_rate_extension_d;
int horizontal_size_extension;
int vertical_size_extension;
int bit_rate_extension;
int vbv_buffer_size_extension;
profile_and_level_indication = Get_Bits(8);
progressive_sequence = Get_Bits(1);
chroma_format = Get_Bits(2);
horizontal_size_extension = Get_Bits(2);
vertical_size_extension = Get_Bits(2);
bit_rate_extension = Get_Bits(12);
Flush_Buffer(1); // marker bit
vbv_buffer_size_extension = Get_Bits(8);
low_delay = Get_Bits(1);
frame_rate_extension_n = Get_Bits(2);
frame_rate_extension_d = Get_Bits(5);
frame_rate = (float)(frame_rate_Table[frame_rate_code] * (frame_rate_extension_n+1)/(frame_rate_extension_d+1));
horizontal_size = (horizontal_size_extension<<12) | (horizontal_size&0x0fff);
vertical_size = (vertical_size_extension<<12) | (vertical_size&0x0fff);
}
/* decode sequence display extension */
static void sequence_display_extension()
{
int video_format;
int color_description;
int color_primaries;
int transfer_characteristics;
int matrix_coefficients;
int display_horizontal_size;
int display_vertical_size;
video_format = Get_Bits(3);
color_description = Get_Bits(1);
if (color_description)
{
color_primaries = Get_Bits(8);
transfer_characteristics = Get_Bits(8);
matrix_coefficients = Get_Bits(8);
}
display_horizontal_size = Get_Bits(14);
Flush_Buffer(1); // marker bit
display_vertical_size = Get_Bits(14);
}
/* decode quant matrix entension */
/* ISO/IEC 13818-2 section 6.2.3.2 */
static void quant_matrix_extension()
{
int i;
if (load_intra_quantizer_matrix = Get_Bits(1))
for (i=0; i<64; i++)
chroma_intra_quantizer_matrix[scan[ZIG_ZAG][i]]
= intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8);
if (load_non_intra_quantizer_matrix = Get_Bits(1))
for (i=0; i<64; i++)
chroma_non_intra_quantizer_matrix[scan[ZIG_ZAG][i]]
= non_intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8);
if (load_chroma_intra_quantizer_matrix = Get_Bits(1))
for (i=0; i<64; i++)
chroma_intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8);
if (load_chroma_non_intra_quantizer_matrix = Get_Bits(1))
for (i=0; i<64; i++)
chroma_non_intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8);
}
/* decode picture display extension */
/* ISO/IEC 13818-2 section 6.2.3.3. */
static void picture_display_extension()
{
int frame_center_horizontal_offset[3];
int frame_center_vertical_offset[3];
int i;
int number_of_frame_center_offsets;
/* based on ISO/IEC 13818-2 section 6.3.12
(November 1994) Picture display extensions */
/* derive number_of_frame_center_offsets */
if (progressive_sequence)
{
if (repeat_first_field)
{
if (top_field_first)
number_of_frame_center_offsets = 3;
else
number_of_frame_center_offsets = 2;
}
else
number_of_frame_center_offsets = 1;
}
else
{
if (picture_structure!=FRAME_PICTURE)
number_of_frame_center_offsets = 1;
else
{
if (repeat_first_field)
number_of_frame_center_offsets = 3;
else
number_of_frame_center_offsets = 2;
}
}
/* now parse */
for (i=0; i<number_of_frame_center_offsets; i++)
{
frame_center_horizontal_offset[i] = Get_Bits(16);
Flush_Buffer(1); // marker bit
frame_center_vertical_offset[i] = Get_Bits(16);
Flush_Buffer(1); // marker bit
}
}
/* decode picture coding extension */
static void picture_coding_extension()
{
int chroma_420_type;
int composite_display_flag;
int v_axis;
int field_sequence;
int sub_carrier;
int burst_amplitude;
int sub_carrier_phase;
f_code[0][0] = Get_Bits(4);
f_code[0][1] = Get_Bits(4);
f_code[1][0] = Get_Bits(4);
f_code[1][1] = Get_Bits(4);
intra_dc_precision = Get_Bits(2);
picture_structure = Get_Bits(2);
top_field_first = Get_Bits(1);
frame_pred_frame_dct = Get_Bits(1);
concealment_motion_vectors = Get_Bits(1);
q_scale_type = Get_Bits(1);
intra_vlc_format = Get_Bits(1);
alternate_scan = Get_Bits(1);
repeat_first_field = Get_Bits(1);
chroma_420_type = Get_Bits(1);
progressive_frame = Get_Bits(1);
composite_display_flag = Get_Bits(1);
d2v_current.pf = progressive_frame;
d2v_current.trf = (top_field_first<<1) + repeat_first_field;
if (composite_display_flag)
{
v_axis = Get_Bits(1);
field_sequence = Get_Bits(3);
sub_carrier = Get_Bits(1);
burst_amplitude = Get_Bits(7);
sub_carrier_phase = Get_Bits(8);
}
}
/* decode extra bit information */
/* ISO/IEC 13818-2 section 6.2.3.4. */
static int extra_bit_information()
{
int Byte_Count = 0;
while (Get_Bits(1))
{
Flush_Buffer(8);
Byte_Count++;
}
return(Byte_Count);
}
/* Copyright extension */
/* ISO/IEC 13818-2 section 6.2.3.6. */
/* (header added in November, 1994 to the IS document) */
static void copyright_extension()
{
int copyright_flag;
int copyright_identifier;
int original_or_copy;
int copyright_number_1;
int copyright_number_2;
int copyright_number_3;
int reserved_data;
copyright_flag = Get_Bits(1);
copyright_identifier = Get_Bits(8);
original_or_copy = Get_Bits(1);
/* reserved */
reserved_data = Get_Bits(7);
Flush_Buffer(1); // marker bit
copyright_number_1 = Get_Bits(20);
Flush_Buffer(1); // marker bit
copyright_number_2 = Get_Bits(22);
Flush_Buffer(1); // marker bit
copyright_number_3 = Get_Bits(22);
}
static void Statistics()
{
static int Old_NTSC_Purity;
int pts;
if (VOB_ID || CELL_ID)
{
sprintf(szBuffer, "%d", VOB_ID);
SetDlgItemText(hDlg, IDC_VOB_ID, szBuffer);
sprintf(szBuffer, "%d", CELL_ID);
SetDlgItemText(hDlg, IDC_CELL_ID, szBuffer);
}
else if (process.locate==LOCATE_INIT)
{
SetDlgItemText(hDlg, IDC_VOB_ID, szBlank);
SetDlgItemText(hDlg, IDC_CELL_ID, szBlank);
}
sprintf(szBuffer, "%d / %d", File_Flag+1, File_Limit);
SetDlgItemText(hDlg, IDC_NUMBER, szBuffer);
sprintf(szBuffer, "%s", AspectRatio[aspect_ratio_information]);
SetDlgItemText(hDlg, IDC_ASPECT_RATIO, szBuffer);
sprintf(szBuffer, "%.3f fps", Frame_Rate);
SetDlgItemText(hDlg, IDC_FRAME_RATE, szBuffer);
if (Track_Flag!=TRACK_NONE)
{
switch (CH[Track_Flag])
{
case FORMAT_AC3:
sprintf(szBuffer, "DD %s %d", AC3Mode[ac3[Track_Flag].mode], AC3Rate[ac3[Track_Flag].rate]);
SetDlgItemText(hDlg, IDC_AUDIO_TYPE, szBuffer);
break;
case FORMAT_MPA:
SetDlgItemText(hDlg, IDC_AUDIO_TYPE, "MPEG Audio");
break;
case FORMAT_LPCM:
SetDlgItemText(hDlg, IDC_AUDIO_TYPE, "Linear PCM");
break;
case FORMAT_DTS:
SetDlgItemText(hDlg, IDC_AUDIO_TYPE, "DTS");
break;
default:
SetDlgItemText(hDlg, IDC_AUDIO_TYPE, szBlank);
break;
}
}
else
SetDlgItemText(hDlg, IDC_AUDIO_TYPE, szBlank);
if (SystemStream_Flag && process.locate!=LOCATE_INIT)
{
pts = (int)AudioPTS/1000;
sprintf(szBuffer, "%d:%02d:%02d", pts/3600, (pts%3600)/60, pts%60);
SetDlgItemText(hDlg, IDC_TIMESTAMP, szBuffer);
}
else
SetDlgItemText(hDlg, IDC_TIMESTAMP, szBlank);
if (process.locate==LOCATE_RIP)
{
if (NTSC_Purity || FILM_Purity)
{
if (!FILM_Purity)
{
if (frame_rate==25)
sprintf(szBuffer, "PAL");
else
sprintf(szBuffer, "NTSC");
}
else if (!NTSC_Purity)
sprintf(szBuffer, "FILM");
else if (NTSC_Purity > Old_NTSC_Purity)
sprintf(szBuffer, "NTSC %2d %%", 100 - (FILM_Purity*100)/(FILM_Purity+NTSC_Purity));
else
sprintf(szBuffer, "FILM %2d %%", (FILM_Purity*100)/(FILM_Purity+NTSC_Purity));
Old_NTSC_Purity = NTSC_Purity;
SetDlgItemText(hDlg, IDC_VIDEO_TYPE, szBuffer);
}
if (process.op)
{
process.ed = timeGetTime();
process.elapsed = (process.ed-process.op)/1000;
process.percent = (float)(100.0*(process.run-process.start+_telli64(Infile[File_Flag]))/(process.end-process.start));
process.remain = (int)((process.ed-process.op)*(100.0-process.percent)/process.percent)/1000;
sprintf(szBuffer, "%d:%02d:%02d", process.elapsed/3600, (process.elapsed%3600)/60, process.elapsed%60);
SetDlgItemText(hDlg, IDC_ELAPSED, szBuffer);
sprintf(szBuffer, "%d:%02d:%02d", process.remain/3600, (process.remain%3600)/60, process.remain%60);
SetDlgItemText(hDlg, IDC_REMAIN, szBuffer);
}
}
else if (GetDlgItemText(hDlg, IDC_ELAPSED, szBuffer, 9))
{
SetDlgItemText(hDlg, IDC_VIDEO_TYPE, szBlank);
SetDlgItemText(hDlg, IDC_FRAME_TYPE, szBlank);
SetDlgItemText(hDlg, IDC_CODED_NUMBER, szBlank);
SetDlgItemText(hDlg, IDC_PLAYBACK_NUMBER, szBlank);
SendDlgItemMessage(hDlg, IDC_PROGRESS, PBM_SETPOS, 0, 0);
SetDlgItemText(hDlg, IDC_FILE, szBlank);
SetDlgItemText(hDlg, IDC_FILE_SIZE, szBlank);
SetDlgItemText(hDlg, IDC_ELAPSED, szBlank);
SetDlgItemText(hDlg, IDC_REMAIN, szBlank);
SetDlgItemText(hDlg, IDC_FPS, szBlank);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -