1 /*
2 * RAW DTS demuxer
3 * Copyright (c) 2008 Benjamin Larsson
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
26
29
31 {
34 int markers[4*16] = {0};
35 int sum, max, i;
38
40
42 int marker, sample_blocks,
sample_rate, sr_code, framesize;
43 int lfe;
45
47 state = (state << 16) | bytestream_get_be16(&bufp);
48
49 if (buf - p->
buf >= 4)
51
52 /* regular bitstream */
54 marker = 0;
56 marker = 1;
57
58 /* 14 bits big-endian bitstream */
60 (bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0)
61 marker = 2;
62
63 /* 14 bits little-endian bitstream */
65 (bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007)
66 marker = 3;
67 else
68 continue;
69
71 continue;
72
75
76 sample_blocks =
get_bits(&gb, 7) + 1;
77 if (sample_blocks < 8)
78 continue;
79
81 if (framesize < 95)
82 continue;
83
87 if (sample_rate == 0)
88 continue;
89
92 continue;
93
96 if (lfe > 2)
97 continue;
98
99 marker += 4* sr_code;
100
101 markers[marker] ++;
102 }
103
104 sum = max = 0;
106 sum += markers[i];
107 if (markers[max] < markers[i])
108 max = i;
109 }
110
111 if (markers[max] > 3 && p->
buf_size / markers[max] < 32*1024 &&
112 markers[max] * 4 > sum * 3 &&
115
116 return 0;
117 }
118
126 .extensions = "dts",
128 };