]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/dtsdec.c
Merge commit 'f44ec22e095c5ba00ffeadd891655c456e3dd014'
[ffmpeg] / libavformat / dtsdec.c
index 8c985b887736becf6e67783ac7937a16e4b2f5e0..a3e52cd5966a4358c5682b9aeddab2029d1ad0df 100644 (file)
@@ -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 += 4sr_code;
+        marker += 4 * h.sr_code;
 
         markers[marker] ++;
     }