📄 gethdr.c
字号:
/* decode sequence extension */static void sequence_extension(){ int prof_lev; int horizontal_size_extension, vertical_size_extension; int bit_rate_extension, vbv_buffer_size_extension; int frame_rate_extension_n, frame_rate_extension_d; int pos; pos = ld->bitcnt; ld->mpeg2 = 1; ld->scalable_mode = SC_NONE; /* unless overwritten by seq. scal. ext. */ prof_lev = getbits(8); prog_seq = getbits(1); chroma_format = getbits(2); horizontal_size_extension = getbits(2); vertical_size_extension = getbits(2); bit_rate_extension = getbits(12); flushbits(1); vbv_buffer_size_extension = getbits(8); low_delay = getbits(1); frame_rate_extension_n = getbits(2); frame_rate_extension_d = getbits(5); profile = prof_lev >> 4; /* Profile is upper nibble */ level = prof_lev & 15; /* Level is lower nibble */ horizontal_size = (horizontal_size_extension<<12) | (horizontal_size&0x0fff); vertical_size = (vertical_size_extension<<12) | (vertical_size&0x0fff); bit_rate = (float) ((bit_rate_extension << 18) + bit_rate_value) * 400.0; if (verbose>0) { printf("sequence extension (byte %d)\n",(pos>>3)-4); if (verbose>1) { printf(" profile_and_level_indication=%d\n",prof_lev); if (prof_lev<128) { printf(" profile=%d, level=%d\n",profile,level); } printf(" progressive_sequence=%d\n",prog_seq); printf(" chroma_format=%d\n",chroma_format); printf(" horizontal_size_extension=%d\n",horizontal_size_extension); printf(" vertical_size_extension=%d\n",vertical_size_extension); printf(" bit_rate_extension=%d\n",bit_rate_extension); printf(" vbv_buffer_size_extension=%d\n",vbv_buffer_size_extension); printf(" low_delay=%d\n",low_delay); printf(" frame_rate_extension_n=%d\n",frame_rate_extension_n); printf(" frame_rate_extension_d=%d\n",frame_rate_extension_d); } }}/* decode sequence display extension */static void sequence_display_extension(){ int colour_description; int pos; pos = ld->bitcnt; video_format = getbits(3); colour_description = getbits(1); if (colour_description) { colour_primaries = getbits(8); transfer_characteristics = getbits(8); matrix_coefficients = getbits(8); } display_horizontal_size = getbits(14); flushbits(1); display_vertical_size = getbits(14); if (verbose>0) { printf("sequence display extension (byte %d)\n",(pos>>3)-4); if (verbose>1) { printf(" video_format=%d\n",video_format); printf(" colour_description=%d\n",colour_description); if (colour_description) { printf(" colour_primaries=%d\n",colour_primaries); printf(" transfer_characteristics=%d\n",transfer_characteristics); printf(" matrix_coefficients=%d\n",matrix_coefficients); } printf(" display_horizontal_size=%d\n",display_horizontal_size); printf(" display_vertical_size=%d\n",display_vertical_size); } }}/* decode quant matrix entension */static void quant_matrix_extension(){ int i; int load_intra_quantiser_matrix, load_non_intra_quantiser_matrix; int load_chroma_intra_quantiser_matrix; int load_chroma_non_intra_quantiser_matrix; int pos; pos = ld->bitcnt; if (load_intra_quantiser_matrix = getbits(1)) { for (i=0; i<64; i++) { ld->chroma_intra_quantizer_matrix[zig_zag_scan[i]] = ld->intra_quantizer_matrix[zig_zag_scan[i]] = getbits(8); } } if (load_non_intra_quantiser_matrix = getbits(1)) { for (i=0; i<64; i++) { ld->chroma_non_intra_quantizer_matrix[zig_zag_scan[i]] = ld->non_intra_quantizer_matrix[zig_zag_scan[i]] = getbits(8); } } if (load_chroma_intra_quantiser_matrix = getbits(1)) { for (i=0; i<64; i++) ld->chroma_intra_quantizer_matrix[zig_zag_scan[i]] = getbits(8); } if (load_chroma_non_intra_quantiser_matrix = getbits(1)) { for (i=0; i<64; i++) ld->chroma_non_intra_quantizer_matrix[zig_zag_scan[i]] = getbits(8); } if (verbose>0) { printf("quant matrix extension (byte %d)\n",(pos>>3)-4); printf(" load_intra_quantiser_matrix=%d\n", load_intra_quantiser_matrix); printf(" load_non_intra_quantiser_matrix=%d\n", load_non_intra_quantiser_matrix); printf(" load_chroma_intra_quantiser_matrix=%d\n", load_chroma_intra_quantiser_matrix); printf(" load_chroma_non_intra_quantiser_matrix=%d\n", load_chroma_non_intra_quantiser_matrix); }}/* decode sequence scalable extension */static void sequence_scalable_extension(){ int layer_id; int pos; pos = ld->bitcnt; ld->scalable_mode = getbits(2) + 1; /* add 1 to make SC_DP != SC_NONE */ layer_id = getbits(4); if (ld->scalable_mode==SC_SPAT) { llw = getbits(14); /* lower_layer_prediction_horizontal_size */ flushbits(1); llh = getbits(14); /* lower_layer_prediction_vertical_size */ hm = getbits(5); hn = getbits(5); vm = getbits(5); vn = getbits(5); } if (ld->scalable_mode==SC_TEMP) error("temporal scalability not implemented\n"); if (verbose>0) { printf("sequence scalable extension (byte %d)\n",(pos>>3)-4); if (verbose>1) { printf(" scalable_mode=%d\n",ld->scalable_mode-1); printf(" layer_id=%d\n",layer_id); if (ld->scalable_mode==SC_SPAT) { printf(" lower_layer_prediction_horiontal_size=%d\n",llw); printf(" lower_layer_prediction_vertical_size=%d\n",llh); printf(" horizontal_subsampling_factor_m=%d\n",hm); printf(" horizontal_subsampling_factor_n=%d\n",hn); printf(" vertical_subsampling_factor_m=%d\n",vm); printf(" vertical_subsampling_factor_n=%d\n",vn); } } }}/* decode picture display extension */static void picture_display_extension(){ int i,n; short frame_centre_horizontal_offset[3]; short frame_centre_vertical_offset[3]; int pos; pos = ld->bitcnt; if (prog_seq || pict_struct!=FRAME_PICTURE) n = 1; else n = repeatfirst ? 3 : 2; for (i=0; i<n; i++) { frame_centre_horizontal_offset[i] = (short)getbits(16); flushbits(1); frame_centre_vertical_offset[i] = (short)getbits(16); flushbits(1); } if (verbose>0) { printf("picture display extension (byte %d)\n",(pos>>3)-4); if (verbose>1) { for (i=0; i<n; i++) { printf(" frame_centre_horizontal_offset[%d]=%d\n",i, frame_centre_horizontal_offset[i]); printf(" frame_centre_vertical_offset[%d]=%d\n",i, frame_centre_vertical_offset[i]); } } }}/* decode picture coding extension */static void picture_coding_extension(){ int chroma_420_type, composite_display_flag; int v_axis, field_sequence, sub_carrier, burst_amplitude, sub_carrier_phase; int pos; pos = ld->bitcnt; h_forw_r_size = getbits(4) - 1; v_forw_r_size = getbits(4) - 1; h_back_r_size = getbits(4) - 1; v_back_r_size = getbits(4) - 1; dc_prec = getbits(2); pict_struct = getbits(2); topfirst = getbits(1); frame_pred_dct = getbits(1); conceal_mv = getbits(1); ld->qscale_type = getbits(1); intravlc = getbits(1); ld->altscan = getbits(1); repeatfirst = getbits(1); chroma_420_type = getbits(1); prog_frame = getbits(1); composite_display_flag = getbits(1); if (composite_display_flag) { v_axis = getbits(1); field_sequence = getbits(3); sub_carrier = getbits(1); burst_amplitude = getbits(7); sub_carrier_phase = getbits(8); } if (verbose>0) { printf("picture coding extension (byte %d)\n",(pos>>3)-4); if (verbose>1) { printf(" forward_horizontal_f_code=%d\n",h_forw_r_size+1); printf(" forward_vertical_f_code=%d\n",v_forw_r_size+1); printf(" backward_horizontal_f_code=%d\n",h_back_r_size+1); printf(" backward_vertical_f_code=%d\n",v_back_r_size+1); printf(" intra_dc_precision=%d\n",dc_prec); printf(" picture_structure=%d\n",pict_struct); printf(" top_field_first=%d\n",topfirst); printf(" frame_pred_frame_dct=%d\n",frame_pred_dct); printf(" concealment_motion_vectors=%d\n",conceal_mv); printf(" q_scale_type=%d\n",ld->qscale_type); printf(" intra_vlc_format=%d\n",intravlc); printf(" alternate_scan=%d\n",ld->altscan); printf(" repeat_first_field=%d\n",repeatfirst); printf(" chroma_420_type=%d\n",chroma_420_type); printf(" progressive_frame=%d\n",prog_frame); printf(" composite_display_flag=%d\n",composite_display_flag); if (composite_display_flag) { printf(" v_axis=%d\n",v_axis); printf(" field_sequence=%d\n",field_sequence); printf(" sub_carrier=%d\n",sub_carrier); printf(" burst_amplitude=%d\n",burst_amplitude); printf(" sub_carrier_phase=%d\n",sub_carrier_phase); } } }}/* decode picture spatial scalable extension */static void picture_spatial_scalable_extension(){ int pos; pos = ld->bitcnt; ld->pict_scal = 1; /* use spatial scalability in this picture */ lltempref = getbits(10); flushbits(1); llx0 = getbits(15); if (llx0>=16384) llx0-= 32768; flushbits(1); lly0 = getbits(15); if (lly0>=16384) lly0-= 32768; stwc_table_index = getbits(2); llprog_frame = getbits(1); llfieldsel = getbits(1); if (verbose>0) { printf("picture spatial scalable extension (byte %d)\n",(pos>>3)-4); if (verbose>1) { printf(" lower_layer_temporal_reference=%d\n",lltempref); printf(" lower_layer_horizontal_offset=%d\n",llx0); printf(" lower_layer_vertical_offset=%d\n",lly0); printf(" spatial_temporal_weight_code_table_index=%d\n", stwc_table_index); printf(" lower_layer_progressive_frame=%d\n",llprog_frame); printf(" lower_layer_deinterlaced_field_select=%d\n",llfieldsel); } }}/* decode picture temporal scalable extension * * not implemented */static void picture_temporal_scalable_extension(){ error("temporal scalability not supported\n");}/* decode extra bit information */static void ext_bit_info(){ while (getbits1()) flushbits(8);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -