void sequence_scalable_extension() { int i; sequence_scalable_extension_present = 1; zprintf(1, " sequence_scalable_extension_id = %01X\n", getbits(4)); scalable_mode = getbits(2); zprintf(2, " scalable_mode = %d\n", scalable_mode); zprintf(2, " layer_id = %d\n", getbits(4)); if (scalable_mode == SPATIAL_SCALABILITY) { zprintf(2, " lower_layer_prediction_horizontal_size = %d\n", getbits(14)); zprintf(2, " marker bit = %d\n", get1bit()); zprintf(2, " lower_layer_prediction_vertical_size = %d\n", getbits(14)); zprintf(2, " horizontal_subsampling_factor_m = %d\n", getbits(5)); zprintf(2, " horizontal_subsampling_factor_n = %d\n", getbits(5)); zprintf(2, " vertical_subsampling_factor_m = %d\n", getbits(5)); zprintf(2, " vertical_subsampling_factor_n = %d\n", getbits(5)); } if (scalable_mode == TEMPORAL_SCALABILITY) { i = get1bit(); zprintf(2, " picture_mux_enable = %d\n", i); if (i) zprintf(2, " mux_to_progressive_sequence = %d\n", get1bit()); zprintf(2, " picture_mux_order = %d\n", getbits(3)); zprintf(2, " picture_mux_factor = %d\n", getbits(3)); } next_start_code(); }
void slice() { slice_vertical_position = getbits(8); zprintf(3, "\nslice_start_code = 0x000001%02X\n", slice_vertical_position); if (vertical_size > 2800) { slice_vertical_position_extension = getbits(3); zprintf(3, " slice_vertical_position_extension = %d\n", slice_vertical_position_extension); mb_row = (slice_vertical_position_extension << 7) + slice_vertical_position - 1; } else mb_row = slice_vertical_position - 1; previous_macroblock_address = (mb_row * mb_width) - 1; if (sequence_scalable_extension_present == 1) if (scalable_mode == DATA_PARTITIONING) zprintf(3, " priority_breakpoint = %d\n", getbits(7)); zprintf(3, " quantiser_scale_code = %d\n", getbits(5)); if (nextbits(1) == 1) { zprintf(3, " intra_slice_flag = %d\n", get1bit()); zprintf(3, " intra_slice = %d\n", get1bit()); zprintf(3, " reserve_bits = %d\n", getbits(7)); while (nextbits(1) == 1) { zprintf(3, " extra_bit_slice = %d\n", get1bit()); zprintf(3, " extra_information_slice = %d\n", getbits(8)); } } zprintf(3, " extra_bit_slice = %d\n", get1bit()); // do // macroblock(); // while (nextbits(23) != 0); next_start_code(); }
void picture_header() { int i; zprintf(1, "\npicture_header = 0x000001%02X\n", getbits(8)); zprintf(2, " temporal_reference = %d\n", getbits(10)); i = getbits(3); zprintf(2, " picture_coding_type = %d\n", i); zprintf(2, " vbv_delay = %d\n", getbits(16)); if (i == 2 || i == 3) { zprintf(2, " full_pel_forward_vector = %d\n", get1bit()); zprintf(2, " forward_f_code = %d\n", getbits(3)); } if (i == 3) { zprintf(2, " full_pel_backward_vector = %d\n", get1bit()); zprintf(2, " backward_f_code = %d\n", getbits(3)); } while (nextbits(1) == 1) { zprintf(2, " extra_bit_picture = %d\n", get1bit()); zprintf(2, " extra_information_picture = %d\n", getbits(8)); } zprintf(2, " extra_bit_picture = %d\n", get1bit()); next_start_code(); }
void group_of_pictures_header() { zprintf(1, "\ngroup_start_code = 0x000001%02X\n", getbits(8)); zprintf(2, " drop_frame_flag = %d\n", get1bit()); zprintf(2, " time_code_hours = %d\n", getbits(5)); zprintf(2, " time_code_minutes = %d\n", getbits(6)); zprintf(2, " marker_bit = %d\n", get1bit()); zprintf(2, " time_code_seconds = %d\n", getbits(6)); zprintf(2, " time_code_pictures = %d\n", getbits(6)); zprintf(2, " closed_gop = %d\n", get1bit()); zprintf(2, " broken_link = %d\n", get1bit()); next_start_code(); }
void picture_spatial_scalable_extension() { zprintf(1, " picture_spatial_scalable_extension_id = %01X\n", getbits(4)); zprintf(2, " lower_layer_temporal_reference = %d\n", getbits(10)); zprintf(2, " marker bit = %d\n", get1bit()); zprintf(2, " lower_layer_horizontal_offset = %d\n", getbits(15)); zprintf(2, " marker bit = %d\n", get1bit()); zprintf(2, " lower_layer_vertical_offset = %d\n", getbits(15)); zprintf(2, " spatial_temporal_weight_code_table_index = %d\n", getbits(2)); zprintf(2, " lower_layer_progressive_frame = %d\n", get1bit()); zprintf(2, " lower_layer_deinterlaced_field_select = %d\n", get1bit()); next_start_code(); }
void picture_temporal_scalable_extension() { zprintf(1, " picture_temporal_scalable_extension_id = %01X\n", getbits(4)); zprintf(2, " reference_select_code = %d\n", getbits(2)); zprintf(2, " forward_temporal_reference = %d\n", getbits(10)); zprintf(2, " marker bit = %d\n", get1bit()); zprintf(2, " backward_temporal_reference = %d\n", getbits(10)); next_start_code(); }
void sequence_display_extension() { int i; zprintf(1, " sequence_display_extension_id = %01X\n", getbits(4)); zprintf(2, " video_format = %d\n", getbits(3)); i = get1bit(); zprintf(2, " colour_description = %d\n", i); if (i) { zprintf(2, " colour_primaries = %d\n", getbits(8)); zprintf(2, " transfer_characteristics = %d\n", getbits(8)); zprintf(2, " matrix_coefficients = %d\n", getbits(8)); } zprintf(2, " display_horizontal_size = %d\n", getbits(14)); zprintf(2, " marker bit = %d\n", get1bit()); zprintf(2, " display_vertical_size = %d\n", getbits(14)); next_start_code(); }
void sequence_extension() { sequence_extensions++; zprintf(1, "\nextension_start_code = 0x000001%02X\n", getbits(8)); zprintf(2, " sequence_extension_id = %d\n", getbits(4)); zprintf(2, " profile_and_level_indication = %d\n", getbits(8)); progressive_sequence = get1bit(); zprintf(2, " progressive_sequence = %d\n", progressive_sequence); zprintf(2, " chroma_format = %d\n", getbits(2)); zprintf(2, " horizontal_size_extension = %d\n", getbits(2)); zprintf(2, " vertical_size_extension = %d\n", getbits(2)); zprintf(2, " bit_rate_extension = %d\n", getbits(12)); zprintf(2, " marker bit = %d\n", get1bit()); zprintf(2, " vbv_buffer_size_extension = %d\n", getbits(8)); zprintf(2, " low_delay = %d\n", get1bit()); zprintf(2, " frame_rate_extension_n = %d\n", getbits(2)); zprintf(2, " frame_rate_extension_d = %d\n", getbits(5)); next_start_code(); }
/* --- entry point --- */ int bitcmp ( unsigned char *bs1, unsigned char *bs2, int n ) { /* -------------------------------------------------------------------------- Allocations and Declarations -------------------------------------------------------------------------- */ int icmp = 0; /* returned to caller */ int nbytes = n/8, /* #full bytes we can compare with memcmp()*/ nbits = n%8, ibit=0; /* #trailing bits in last byte, index */ /* -------------------------------------------------------------------------- compare leading bytes, then trailing bits -------------------------------------------------------------------------- */ if ( nbytes > 0 ) icmp = memcmp(bs1,bs2,nbytes); /* compare leading bytes */ if ( icmp == 0 ) /* leading bytes identical */ if ( nbits > 0 ) /* and we have trailing bits */ for ( ibit=0; ibit<nbits; ibit++ ) /* check each bit */ { icmp = (int)get1bit(bs1[nbytes],ibit) - (int)get1bit(bs2[nbytes],ibit); if ( icmp != 0 ) break; } /* done at first unmatched bit */ return ( icmp ); /* back to caller with -1,0,+1 */ } /* --- end-of-function bitcmp() --- */
void picture_display_extension() { int i, number_of_frame_centre_offsets; zprintf(1, " picture_display_extension_id = %01X\n", getbits(4)); if ((progressive_sequence == 1) || (picture_structure == 3)) number_of_frame_centre_offsets = 1; else if (repeat_first_field == 1) number_of_frame_centre_offsets = 3; else number_of_frame_centre_offsets = 2; for (i = 0; i < number_of_frame_centre_offsets; i++) { zprintf(2, " frame_centre_horizontal_offset = %d\n", getbits(16)); zprintf(2, " marker bit = %d\n", get1bit()); zprintf(2, " frame_centre_vertical_offset = %d\n", getbits(16)); zprintf(2, " marker bit = %d\n", get1bit()); } next_start_code(); }
void quant_matrix_extension() { int i; zprintf(1, " quant_matrix_extension_id = %01X\n", getbits(4)); i = get1bit(); zprintf(2, " load_intra_quantiser_matrix = %d\n", i); if (i) { for (i = 0; i < 64; i++) getbits(8); zprintf(2, " read %d intra_quantiser_matrix bytes = %d\n", i); } i = get1bit(); zprintf(2, " load_non_intra_quantiser_matrix = %d\n", i); if (i) { for (i = 0; i < 64; i++) getbits(8); zprintf(2, " read %d non_intra_quantiser_matrix bytes = %d\n", i); } i = get1bit(); zprintf(2, " load_chroma_intra_quantiser_matrix = %d\n", i); if (i) { for (i = 0; i < 64; i++) getbits(8); zprintf(2, " read %d chroma_intra_quantiser_matrix bytes = %d\n", i); } i = get1bit(); zprintf(2, " load_chroma_non_intra_quantiser_matrix = %d\n", i); if (i) { for (i = 0; i < 64; i++) getbits(8); zprintf(2, " read %d chroma_non_intra_quantiser_matrix bytes = %d\n", i); } next_start_code(); }
void sequence_header() { int i; sequence_headers++; zprintf(1, "\n\nsequence_header_code = 0x000001%02X\n", getbits(8)); horizontal_size = getbits(12); mb_width = horizontal_size / 16; if (mb_width % 16) mb_width++; zprintf(2, " horizontal_size_value = %d\n", horizontal_size); vertical_size = getbits(12); zprintf(2, " vertical_size_value = %d\n", vertical_size); zprintf(2, " aspect_ratio_information = %d\n", getbits(4)); zprintf(2, " frame_rate_code = %d\n", getbits(4)); zprintf(2, " bit_rate_value = %d\n", getbits(18)); zprintf(2, " marker bit = %d\n", get1bit()); zprintf(2, " vbv_buffer_size_value = %d\n", getbits(10)); zprintf(2, " constrained_parameters_flag = %d\n", get1bit()); i = get1bit(); zprintf(2, " load_intra_quantiser_matrix = %d\n", i); if (i) { for (i = 0; i < 64; i++) getbits(8); zprintf(2, " read %d intra_quantiser_matrix bytes = %d\n", i); } i = get1bit(); zprintf(2, " load_non_intra_quantiser_matrix = %d\n", i); if (i) { for (i = 0; i < 64; i++) getbits(8); zprintf(2, " read %d non_intra_quantiser_matrix bytes = %d\n", i); } next_start_code(); }
void III_get_side_info(bit_stream bs, T si, frame fr_ps) { int ch, gr, i; int stereo = fr_ps->stereo; si->main_data_begin = (unsigned)getbits(bs, 9); if (stereo == 1) { si->private_bits = (unsigned)getbits(bs, 5); } else { si->private_bits = (unsigned)getbits(bs, 3); } for (ch = 0; ch < stereo; ch++) { for (i = 0; i < 4; i++) { si->ch[ch].scfsi[i] = get1bit(bs); } } for (gr = 0; gr < 2; gr++) { for (ch = 0; ch < stereo; ch++) { si->ch[ch].gr[gr].part2_3_length = (unsigned)getbits(bs, 12); si->ch[ch].gr[gr].big_values = (unsigned)getbits(bs, 9); si->ch[ch].gr[gr].global_gain = (unsigned)getbits(bs, 8); si->ch[ch].gr[gr].scalefac_compress = (unsigned)getbits(bs, 4); si->ch[ch].gr[gr].window_switching_flag = get1bit(bs); if (si->ch[ch].gr[gr].window_switching_flag) { si->ch[ch].gr[gr].block_type = (unsigned)getbits(bs, 2); si->ch[ch].gr[gr].mixed_block_flag = get1bit(bs); for (i = 0; i < 2; i++) { si->ch[ch].gr[gr].table_select[i] = (unsigned)getbits(bs, 5); } for (i = 0; i < 3; i++) { si->ch[ch].gr[gr].subblock_gain[i] = (unsigned)getbits(bs, 3); } if (si->ch[ch].gr[gr].block_type == 0) {//Set region_count parameters since they are implicit in this case. printf("Side info bad: block_type == 0 in split block.\n"); exit(0); } else if (si->ch[ch].gr[gr].block_type == 2 && si->ch[ch].gr[gr].mixed_block_flag == 0) { si->ch[ch].gr[gr].region0_count = 8;//MI 9; } else { si->ch[ch].gr[gr].region0_count = 7;//MI 8; } si->ch[ch].gr[gr].region1_count = 20 - si->ch[ch].gr[gr].region0_count; } else { for (i = 0; i < 3; i++) { si->ch[ch].gr[gr].table_select[i] = (unsigned)getbits(bs, 5); } si->ch[ch].gr[gr].region0_count = (unsigned)getbits(bs, 4); si->ch[ch].gr[gr].region1_count = (unsigned)getbits(bs, 3); si->ch[ch].gr[gr].block_type = 0; } si->ch[ch].gr[gr].preflag = get1bit(bs); si->ch[ch].gr[gr].scalefac_scale = get1bit(bs); si->ch[ch].gr[gr].count1table_select = get1bit(bs); } } }
void header() { int i; printf("\nbyte count = %.0f\n", bitcount() / 8.0); i = getbits(12); if (i != SYNCWORD) { printf("Syncword not found, bits = %03X\n", i); exit(1); } syncwords++; zprintf(1, "syncword = %03X\n", i); zprintf(1, " ID = %d\n", get1bit()); layer = getbits(2); zprintf(1, " layer = %d\n", layer); protection = get1bit(); zprintf(1, " protection_bit = %d\n", protection); bit_rate = getbits(4); zprintf(1, " bitrate_index = %d\n", bit_rate); freq = getbits(2); zprintf(1, " sampling_frequency = %d\n", freq); padding_bit = get1bit(); zprintf(1, " padding_bit = %d\n", padding_bit); private_bit = get1bit(); zprintf(1, " private_bit = %d\n", private_bit); mode = getbits(2); zprintf(1, " mode = %d\n", mode); mode_ext = getbits(2); zprintf(1, " mode_extension = %d\n", mode_ext); copyright = get1bit(); zprintf(1, " copyright = %d\n", copyright); original = get1bit(); zprintf(1, " original/home = %d\n", original); emphasis = getbits(2); zprintf(1, " emphasis = %d\n", emphasis); }
void picture_coding_extension() { int i; zprintf(1, "\nextension_start_code = 0x000001%02X\n", getbits(8)); zprintf(1, " picture_coding_extension_id = %01X\n", getbits(4)); zprintf(2, " f_code[0][0] forward horizontal = %d\n", getbits(4)); zprintf(2, " f_code[0][1] forward vertical = %d\n", getbits(4)); zprintf(2, " f_code[1][0] backward horizontal = %d\n", getbits(4)); zprintf(2, " f_code[1][1] backward vertical = %d\n", getbits(4)); zprintf(2, " intra_dc_precision = %d\n", getbits(2)); picture_structure = getbits(2); zprintf(2, " picture_structure = %d\n", picture_structure); zprintf(2, " top_field_first = %d\n", get1bit()); zprintf(2, " frame_pred_frame_dct = %d\n", get1bit()); zprintf(2, " concealment_motion_vectors = %d\n", get1bit()); zprintf(2, " q_scale_type= %d\n", get1bit()); zprintf(2, " intra_vlc_format = %d\n", get1bit()); zprintf(2, " alternate_scan = %d\n", get1bit()); repeat_first_field = get1bit(); zprintf(2, " repeat_first_field = %d\n", repeat_first_field); zprintf(2, " chroma_420_type = %d\n", get1bit()); zprintf(2, " progressive_frame = %d\n", get1bit()); i = get1bit(); zprintf(2, " composite_display_flag = %d\n", i); if (i) { zprintf(2, " v_axis = %d\n", get1bit()); zprintf(2, " field_sequence = %d\n", getbits(3)); zprintf(2, " sub_carrier = %d\n", get1bit()); zprintf(2, " burst_amplitude = %d\n", getbits(7)); zprintf(2, " sub_carrier_phase = %d\n", getbits(8)); } next_start_code(); }
void ancillary_data() { if ((layer == 1) || (layer == 2)) while ((nextbits(12) != SYNCWORD) && !end_bs()) get1bit(); }