Zitat von
Amnon82:
Bit0 = $01
Bit1 = Bit0*2 > $02
Bit2 = Bit1*2 > $04
Bit3 = Bit2*2 > $10
Bit5 = Bit4*2 > $20
Bit6 = Bit5*2 > $40
Ich habe bisher immer mit Bit 1 bis Bit 8 gerechnet. Aber in der Doku gibt es, wie ich sehe, auch ein Bit 0. Demnach wäre der Wert doch nicht $20 sondern $40. Bit 0 ist das niederwertigste, wobei wir davon ausgehen, dass dies das ganz rechts stehende ist.
Offensichtlich werden die Informationen neu zusammengestellt. Denn ob ein Picture progressive ist, steht zum Beispiel in der PICTURE_CODING_EXTENSION
Delphi-Quellcode:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//*************************** iso 13818-2 ****************************
// 32 bslbf - extension_start_code
// 4 uimsbf - extension_start_code_identifier
// picture_coding_extension()
// {
// 4 uimsbf - f_code[0][0] - forward_horizontal
// 4 uimsbf - f_code[0][1] - forward_vertical
// 4 uimsbf - f_code[1][0] - backward_horizontal
// 4 uimsbf - f_code[1][1] - backward_vertical
// 2 uimsbf - intra_dc_precision
// 2 uimsbf - picture_structure
// 1 uimsbf - top_field_first
// 1 uimsbf - frame_pred_frame_dct
// 1 uimsbf - concealment_motion_vectors
// 1 uimsbf - q_scale_type
// 1 uimsbf - intra_vlc_format
// 1 uimsbf - alternate_scan
// 1 uimsbf - repeat_first_field
// 1 uimsbf - chroma_420_type
// 1 uimsbf - progressive_frame
// 1 uimsbf - composite_display_flag
// if ( composite_display_flag )
// {
// 1 uimsbf - v_axis
// 3 uimsbf - field_sequence
// 1 uimsbf - sub_carrier
// 7 uimsbf - burst_amplitude
// 8 uimsbf - sub_carrier_phase
// }
// next_start_code()
// }
//********************************************************************
oder der SEQUENCE_EXTENSION:
Delphi-Quellcode:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//************************** iso 13818-2 ***************************
// sequence_extension() {
// 32 - bslbf - extension_start_code
// 4 - uimsb - fextension_start_code_identifier
// 8 - uimsbf - profile_and_level_indication
// 1 - uimsbf - progressive_sequence
// 2 - uimsbf - chroma_format
// 2 - uimsbf - horizontal_size_extension
// 2 - uimsbf - vertical_size_extension
// 12 - uimsbf - bit_rate_extension
// 1 - bslbf - marker_bit
// 8 - uimsbf - vbv_buffer_size_extension
// 1 - uimsbf - low_delay
// 2 - uimsbf - frame_rate_extension_n
// 5 - uimsbf - frame_rate_extension_d
// next_start_code()
// }
//******************************************************************
während der Frametyp im PICTURE_HEADER steht:
Delphi-Quellcode:
//***************************** iso 13818-2 ******************************
// picture_header()
// {
// 32 bslbf - picture_start_code
// 10 uimsbf - temporal_reference
// 3 uimsbf - picture_coding_type
// 16 uimsbf - vbv_delay
// if ( picture_coding_type == 2 || picture_coding_type == 3)
// {
// 1 bslbf - full_pel_forward_vector
// 3 bslbf - forward_f_code
// }
// if ( picture_coding_type == 3 )
// {
// 1 bslbf - full_pel_backward_vector
// 3 bslbf - backward_f_code
// }
// while ( nextbits() == ‘1' )
// {
// 1 uimsbf - extra_bit_picture /* with the value ‘1' */
// 8 uimsbf - extra_information_picture
// }
// 1 uimsbf - extra_bit_picture /* with the value ‘0' */
// next_start_code()
// }
//************************************************************************
Allerdings ist der picture_coding_type in der Spez nicht mit 2 sondern 3 Bit angegeben:
Delphi-Quellcode:
// I_TYPE 1
// P_TYPE 2
// B_TYPE 3
// D_TYPE 4
// Frame_Type: Array [0..7] of CHAR = 'xIPBDrrr';
x = forbidden, r = reserved, D = Dropped.
Da anscheinend Dein Bit 6 trotz progressiver Quelle den Wert 0 besitzt, nehme ich an, dass Deine Quelle eine DVD vermutlich mit einem amerikanischen Film ist. Wenn Du mal in Videoforen in den Beiträgen von 2002/2003 nachsiehst, dürftest Du einige Diskussionen finden, in denen darüber diskutiert wurde, ob eine DVD interlaced oder progressive ist. Denn der Bitrateviewer gab oft interlaced an, obwohl der Sichttest progressive ergab. DVDs sind meist progressive, während das Ausgangsmaterial interlaced gewesen sein kann. Der Encoder hat dann nur das Flag nicht gesetzt.