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

Function parse_pes_header

libhb/stream.c:3023–3269  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3021}
3022
3023static int parse_pes_header(
3024 hb_stream_t *stream,
3025 bitbuf_t *bb,
3026 hb_pes_info_t *pes_info )
3027{
3028 if ( bits_bytes_left(bb) < 6 )
3029 {
3030 return 0;
3031 }
3032
3033 bits_skip(bb, 8 * 4);
3034 pes_info->packet_len = bits_get(bb, 16);
3035 pes_info->stuffing_len = 0;
3036
3037 /*
3038 * This would normally be an error. But the decoders can generally
3039 * recover well from missing data. So let the packet pass.
3040 if ( bits_bytes_left(bb) < pes_info->packet_len )
3041 {
3042 return 0;
3043 }
3044 */
3045
3046 int mark = bits_peek(bb, 2);
3047 if ( mark == 0x02 )
3048 {
3049 // mpeg2 pes
3050 if ( bits_bytes_left(bb) < 3 )
3051 {
3052 return 0;
3053 }
3054
3055 /*
3056 bits_skip(bb, 2);
3057 bits_get(bb, 2); // scrambling
3058 bits_get(bb, 1); // priority
3059 bits_get(bb, 1); // alignment
3060 bits_get(bb, 1); // copyright
3061 bits_get(bb, 1); // original
3062 */
3063 bits_get(bb, 8); // skip all of the above
3064
3065 int has_pts = bits_get(bb, 2);
3066 int has_escr = bits_get(bb, 1);
3067 int has_esrate = bits_get(bb, 1);
3068 int has_dsm = bits_get(bb, 1);
3069 int has_copy_info = bits_get(bb, 1);
3070 int has_crc = bits_get(bb, 1);
3071 int has_ext = bits_get(bb, 1);
3072 int hdr_len = pes_info->header_len = bits_get(bb, 8);
3073 pes_info->header_len += bb->pos >> 3;
3074
3075 bitbuf_t bb_hdr;
3076 bits_clone(&bb_hdr, bb, hdr_len);
3077
3078 if ( bits_bytes_left(&bb_hdr) < hdr_len )
3079 {
3080 return 0;

Callers 1

hb_parse_psFunction · 0.85

Calls 6

bits_bytes_leftFunction · 0.85
bits_skipFunction · 0.85
bits_getFunction · 0.85
bits_peekFunction · 0.85
bits_cloneFunction · 0.85
parse_pes_timestampFunction · 0.85

Tested by

no test coverage detected