| 205 | } |
| 206 | |
| 207 | static int parse_sequence_header(AV1SequenceParameters *seq_params, const uint8_t *buf, int size) |
| 208 | { |
| 209 | GetBitContext gb; |
| 210 | int reduced_still_picture_header; |
| 211 | int frame_width_bits_minus_1, frame_height_bits_minus_1; |
| 212 | int size_bits, ret; |
| 213 | |
| 214 | size_bits = get_obu_bit_length(buf, size, AV1_OBU_SEQUENCE_HEADER); |
| 215 | if (size_bits < 0) |
| 216 | return size_bits; |
| 217 | |
| 218 | ret = init_get_bits(&gb, buf, size_bits); |
| 219 | if (ret < 0) |
| 220 | return ret; |
| 221 | |
| 222 | memset(seq_params, 0, sizeof(*seq_params)); |
| 223 | |
| 224 | seq_params->profile = get_bits(&gb, 3); |
| 225 | |
| 226 | skip_bits1(&gb); // still_picture |
| 227 | reduced_still_picture_header = get_bits1(&gb); |
| 228 | |
| 229 | if (reduced_still_picture_header) { |
| 230 | seq_params->level = get_bits(&gb, 5); |
| 231 | seq_params->tier = 0; |
| 232 | } else { |
| 233 | int initial_display_delay_present_flag, operating_points_cnt_minus_1; |
| 234 | int decoder_model_info_present_flag, buffer_delay_length_minus_1; |
| 235 | |
| 236 | if (get_bits1(&gb)) { // timing_info_present_flag |
| 237 | skip_bits_long(&gb, 32); // num_units_in_display_tick |
| 238 | skip_bits_long(&gb, 32); // time_scale |
| 239 | |
| 240 | if (get_bits1(&gb)) // equal_picture_interval |
| 241 | uvlc(&gb); // num_ticks_per_picture_minus_1 |
| 242 | |
| 243 | decoder_model_info_present_flag = get_bits1(&gb); |
| 244 | if (decoder_model_info_present_flag) { |
| 245 | buffer_delay_length_minus_1 = get_bits(&gb, 5); |
| 246 | skip_bits_long(&gb, 32); // num_units_in_decoding_tick |
| 247 | skip_bits(&gb, 10); // buffer_removal_time_length_minus_1 (5) |
| 248 | // frame_presentation_time_length_minus_1 (5) |
| 249 | } |
| 250 | } else |
| 251 | decoder_model_info_present_flag = 0; |
| 252 | |
| 253 | initial_display_delay_present_flag = get_bits1(&gb); |
| 254 | |
| 255 | operating_points_cnt_minus_1 = get_bits(&gb, 5); |
| 256 | for (int i = 0; i <= operating_points_cnt_minus_1; i++) { |
| 257 | int seq_level_idx, seq_tier; |
| 258 | |
| 259 | skip_bits(&gb, 12); // operating_point_idc |
| 260 | seq_level_idx = get_bits(&gb, 5); |
| 261 | |
| 262 | if (seq_level_idx > 7) |
| 263 | seq_tier = get_bits1(&gb); |
| 264 | else |
no test coverage detected