MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / read_sl_header

Function read_sl_header

libavformat/mpegts.c:1093–1162  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1091}
1092
1093static int read_sl_header(PESContext *pes, SLConfigDescr *sl,
1094 const uint8_t *buf, int buf_size)
1095{
1096 GetBitContext gb;
1097 int au_start_flag = 0, au_end_flag = 0, ocr_flag = 0, idle_flag = 0;
1098 int padding_flag = 0, padding_bits = 0, inst_bitrate_flag = 0;
1099 int dts_flag = -1, cts_flag = -1;
1100 int64_t dts = AV_NOPTS_VALUE, cts = AV_NOPTS_VALUE;
1101 uint8_t buf_padded[128 + AV_INPUT_BUFFER_PADDING_SIZE];
1102 int buf_padded_size = FFMIN(buf_size, sizeof(buf_padded) - AV_INPUT_BUFFER_PADDING_SIZE);
1103
1104 memcpy(buf_padded, buf, buf_padded_size);
1105
1106 init_get_bits(&gb, buf_padded, buf_padded_size * 8);
1107
1108 if (sl->use_au_start)
1109 au_start_flag = get_bits1(&gb);
1110 if (sl->use_au_end)
1111 au_end_flag = get_bits1(&gb);
1112 if (!sl->use_au_start && !sl->use_au_end)
1113 au_start_flag = au_end_flag = 1;
1114 if (sl->ocr_len > 0)
1115 ocr_flag = get_bits1(&gb);
1116 if (sl->use_idle)
1117 idle_flag = get_bits1(&gb);
1118 if (sl->use_padding)
1119 padding_flag = get_bits1(&gb);
1120 if (padding_flag)
1121 padding_bits = get_bits(&gb, 3);
1122
1123 if (!idle_flag && (!padding_flag || padding_bits != 0)) {
1124 if (sl->packet_seq_num_len)
1125 skip_bits_long(&gb, sl->packet_seq_num_len);
1126 if (sl->degr_prior_len)
1127 if (get_bits1(&gb))
1128 skip_bits(&gb, sl->degr_prior_len);
1129 if (ocr_flag)
1130 skip_bits_long(&gb, sl->ocr_len);
1131 if (au_start_flag) {
1132 if (sl->use_rand_acc_pt)
1133 get_bits1(&gb);
1134 if (sl->au_seq_num_len > 0)
1135 skip_bits_long(&gb, sl->au_seq_num_len);
1136 if (sl->use_timestamps) {
1137 dts_flag = get_bits1(&gb);
1138 cts_flag = get_bits1(&gb);
1139 }
1140 }
1141 if (sl->inst_bitrate_len)
1142 inst_bitrate_flag = get_bits1(&gb);
1143 if (dts_flag == 1)
1144 dts = get_ts64(&gb, sl->timestamp_len);
1145 if (cts_flag == 1)
1146 cts = get_ts64(&gb, sl->timestamp_len);
1147 if (sl->au_len > 0)
1148 skip_bits_long(&gb, sl->au_len);
1149 if (inst_bitrate_flag)
1150 skip_bits_long(&gb, sl->inst_bitrate_len);

Callers 1

mpegts_push_dataFunction · 0.85

Calls 8

init_get_bitsFunction · 0.85
get_bits1Function · 0.85
skip_bits_longFunction · 0.85
skip_bitsFunction · 0.85
get_ts64Function · 0.85
avpriv_set_pts_infoFunction · 0.85
get_bits_countFunction · 0.85
get_bitsFunction · 0.50

Tested by

no test coverage detected