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

Function decode_ps_map

libhb/stream.c:3792–3892  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3790}
3791
3792static int decode_ps_map( hb_stream_t * stream, uint8_t *buf, int len )
3793{
3794 int retval = 1;
3795 bitbuf_t bb;
3796 bits_init(&bb, buf, len, 0);
3797
3798 if ( bits_bytes_left(&bb) < 10 )
3799 return 0;
3800
3801 // Skip stuff not needed
3802 bits_skip(&bb, 8 * 8);
3803 int info_len = bits_get(&bb, 16);
3804 if ( bits_bytes_left(&bb) < info_len )
3805 return 0;
3806
3807 if ( info_len )
3808 {
3809 bitbuf_t cc;
3810 bits_clone( &cc, &bb, info_len );
3811
3812 while ( bits_bytes_left(&cc) >= 2 )
3813 {
3814 uint8_t tag, len;
3815
3816 tag = bits_get(&cc, 8);
3817 len = bits_get(&cc, 8);
3818 if ( bits_bytes_left(&cc) < len )
3819 return 0;
3820
3821 if (tag == 0x05 && len >= 4)
3822 {
3823 // registration descriptor
3824 stream->reg_desc = bits_get(&cc, 32);
3825 bits_skip(&cc, 8 * (len - 4));
3826 }
3827 else
3828 {
3829 bits_skip(&cc, 8 * len);
3830 }
3831 }
3832 bits_skip(&bb, 8 * info_len);
3833 }
3834
3835 int map_len = bits_get(&bb, 16);
3836 if ( bits_bytes_left(&bb) < map_len )
3837 return 0;
3838
3839 // Process the map
3840 int ii = 0;
3841 while ( bits_bytes_left(&bb) >= 8 )
3842 {
3843 int pes_idx;
3844 int stream_type = bits_get(&bb, 8);
3845 int stream_id = bits_get(&bb, 8);
3846 info_len = bits_get(&bb, 16);
3847 if ( info_len > bits_bytes_left(&bb) )
3848 return 0;
3849

Callers 1

Calls 7

bits_initFunction · 0.85
bits_bytes_leftFunction · 0.85
bits_skipFunction · 0.85
bits_getFunction · 0.85
bits_cloneFunction · 0.85
update_ps_streamsFunction · 0.85

Tested by

no test coverage detected