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

Function ff_dca_exss_parse

libavcodec/dca_exss.c:378–514  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

376}
377
378int ff_dca_exss_parse(DCAExssParser *s, const uint8_t *data, int size)
379{
380 int i, ret, offset, wide_hdr, header_size;
381
382 if ((ret = init_get_bits8(&s->gb, data, size)) < 0)
383 return ret;
384
385 // Extension substream sync word
386 skip_bits_long(&s->gb, 32);
387
388 // User defined bits
389 skip_bits(&s->gb, 8);
390
391 // Extension substream index
392 s->exss_index = get_bits(&s->gb, 2);
393
394 // Flag indicating short or long header size
395 wide_hdr = get_bits1(&s->gb);
396
397 // Extension substream header length
398 header_size = get_bits(&s->gb, 8 + 4 * wide_hdr) + 1;
399
400 // Check CRC
401 if (s->avctx && ff_dca_check_crc(s->avctx, &s->gb, 32 + 8, header_size * 8)) {
402 av_log(s->avctx, AV_LOG_ERROR, "Invalid EXSS header checksum\n");
403 return AVERROR_INVALIDDATA;
404 }
405
406 s->exss_size_nbits = 16 + 4 * wide_hdr;
407
408 // Number of bytes of extension substream
409 s->exss_size = get_bits(&s->gb, s->exss_size_nbits) + 1;
410 if (s->exss_size > size) {
411 if (s->avctx)
412 av_log(s->avctx, AV_LOG_ERROR, "Packet too short for EXSS frame\n");
413 return AVERROR_INVALIDDATA;
414 }
415
416 // Per stream static fields presence flag
417 if (s->static_fields_present = get_bits1(&s->gb)) {
418 int active_exss_mask[8];
419
420 // Reference clock code
421 skip_bits(&s->gb, 2);
422
423 // Extension substream frame duration
424 skip_bits(&s->gb, 3);
425
426 // Timecode presence flag
427 if (get_bits1(&s->gb))
428 // Timecode data
429 skip_bits_long(&s->gb, 36);
430
431 // Number of defined audio presentations
432 s->npresents = get_bits(&s->gb, 3) + 1;
433 if (s->npresents > 1) {
434 if (s->avctx)
435 avpriv_request_sample(s->avctx, "%d audio presentations", s->npresents);

Callers 2

dcadec_decode_frameFunction · 0.85
dca_parse_paramsFunction · 0.85

Calls 12

init_get_bits8Function · 0.85
skip_bits_longFunction · 0.85
skip_bitsFunction · 0.85
get_bits1Function · 0.85
ff_dca_check_crcFunction · 0.85
av_logFunction · 0.85
avpriv_request_sampleFunction · 0.85
parse_descriptorFunction · 0.85
set_exss_offsetsFunction · 0.85
ff_dca_seek_bitsFunction · 0.85
get_bitsFunction · 0.70

Tested by

no test coverage detected