X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fdtsdec.c;h=a3e52cd5966a4358c5682b9aeddab2029d1ad0df;hb=24ee1b8c6343f00a3f5cd5d5aee5850f22436204;hp=8c985b887736becf6e67783ac7937a16e4b2f5e0;hpb=0ab40e4477eae94b074d62007d89f67a54ab25a7;p=ffmpeg diff --git a/libavformat/dtsdec.c b/libavformat/dtsdec.c index 8c985b88773..a3e52cd5966 100644 --- a/libavformat/dtsdec.c +++ b/libavformat/dtsdec.c @@ -35,13 +35,13 @@ static int dts_probe(AVProbeData *p) uint32_t state = -1; int markers[4*16] = {0}; int exss_markers = 0, exss_nextpos = 0; - int sum, max, pos, i; + int sum, max, pos, ret, i; int64_t diff = 0; - uint8_t hdr[12 + AV_INPUT_BUFFER_PADDING_SIZE] = { 0 }; + uint8_t hdr[DCA_CORE_FRAME_HEADER_SIZE + AV_INPUT_BUFFER_PADDING_SIZE] = { 0 }; for (pos = FFMIN(4096, p->buf_size); pos < p->buf_size - 2; pos += 2) { - int marker, sample_blocks, sample_rate, sr_code, framesize; - int lfe, wide_hdr, hdr_size; + int marker, wide_hdr, hdr_size, framesize; + DCACoreFrameHeader h; GetBitContext gb; bufp = buf = p->buf + pos; @@ -98,36 +98,13 @@ static int dts_probe(AVProbeData *p) else continue; - if (avpriv_dca_convert_bitstream(buf-2, 12, hdr, 12) < 0) + if ((ret = avpriv_dca_convert_bitstream(buf - 2, DCA_CORE_FRAME_HEADER_SIZE, + hdr, DCA_CORE_FRAME_HEADER_SIZE)) < 0) continue; - - init_get_bits(&gb, hdr, 96); - skip_bits_long(&gb, 39); - - sample_blocks = get_bits(&gb, 7) + 1; - if (sample_blocks < 8) - continue; - - framesize = get_bits(&gb, 14) + 1; - if (framesize < 95) - continue; - - skip_bits(&gb, 6); - sr_code = get_bits(&gb, 4); - sample_rate = avpriv_dca_sample_rates[sr_code]; - if (sample_rate == 0) - continue; - - get_bits(&gb, 5); - if (get_bits(&gb, 1)) - continue; - - skip_bits_long(&gb, 9); - lfe = get_bits(&gb, 2); - if (lfe > 2) + if (avpriv_dca_parse_core_frame_header(&h, hdr, ret) < 0) continue; - marker += 4* sr_code; + marker += 4 * h.sr_code; markers[marker] ++; }