| 1091 | } |
| 1092 | |
| 1093 | static 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); |
no test coverage detected