MCPcopy Create free account
hub / github.com/HandBrake/HandBrake / decode_program_map

Function decode_program_map

libhb/stream.c:2739–2827  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2737}
2738
2739int decode_program_map(hb_stream_t* stream)
2740{
2741 bitbuf_t bb;
2742 bits_init(&bb, stream->pmt_info.tablebuf, stream->pmt_info.tablepos, 0);
2743
2744 bits_get(&bb, 8); // table_id
2745 bits_get(&bb, 4);
2746 unsigned int section_length = bits_get(&bb, 12);
2747
2748 bits_get(&bb, 16); // program number
2749 bits_get(&bb, 2);
2750 bits_get(&bb, 5); // version_number
2751 bits_get(&bb, 1);
2752 bits_get(&bb, 8); // section_number
2753 bits_get(&bb, 8); // last_section_number
2754 bits_get(&bb, 3);
2755 stream->pmt_info.PCR_PID = bits_get(&bb, 13);
2756 bits_get(&bb, 4);
2757 int program_info_length = bits_get(&bb, 12);
2758 int i;
2759 for (i = 0; i < program_info_length - 2; )
2760 {
2761 uint8_t tag, len;
2762 tag = bits_get(&bb, 8);
2763 len = bits_get(&bb, 8);
2764 i += 2;
2765 if ( i + len > program_info_length )
2766 {
2767 break;
2768 }
2769 if (tag == 0x05 && len >= 4)
2770 {
2771 // registration descriptor
2772 stream->reg_desc = bits_get(&bb, 32);
2773 i += 4;
2774 len -= 4;
2775 }
2776 int j;
2777 for ( j = 0; j < len; j++ )
2778 {
2779 bits_get(&bb, 8);
2780 }
2781 i += len;
2782 }
2783 for ( ; i < program_info_length; i++ )
2784 {
2785 bits_get(&bb, 8);
2786 }
2787
2788 int cur_pos = 9 /* data after the section length field*/ + program_info_length;
2789 int done_reading_stream_types = 0;
2790 int ii = 0;
2791 while (!done_reading_stream_types)
2792 {
2793 unsigned char stream_type = bits_get(&bb, 8);
2794 bits_get(&bb, 3);
2795 unsigned int elementary_PID = bits_get(&bb, 13);
2796 bits_get(&bb, 4);

Callers 1

build_program_mapFunction · 0.85

Calls 6

bits_initFunction · 0.85
bits_getFunction · 0.85
update_ts_streamsFunction · 0.85
bits_cloneFunction · 0.85
bits_skipFunction · 0.85

Tested by

no test coverage detected