2 * DCA compatible decoder
3 * Copyright (C) 2004 Gildas Bazin
4 * Copyright (C) 2004 Benjamin Zores
5 * Copyright (C) 2006 Benjamin Larsson
6 * Copyright (C) 2007 Konstantin Shishkov
8 * This file is part of FFmpeg.
10 * FFmpeg is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
15 * FFmpeg is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with FFmpeg; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29 #include "libavutil/common.h"
30 #include "libavutil/intmath.h"
31 #include "libavutil/intreadwrite.h"
32 #include "libavutil/audioconvert.h"
41 #include "synth_filter.h"
43 #include "fmtconvert.h"
47 #define DCA_PRIM_CHANNELS_MAX (7)
48 #define DCA_SUBBANDS (32)
49 #define DCA_ABITS_MAX (32) /* Should be 28 */
50 #define DCA_SUBSUBFRAMES_MAX (4)
51 #define DCA_SUBFRAMES_MAX (16)
52 #define DCA_BLOCKS_MAX (16)
53 #define DCA_LFE_MAX (3)
69 /* these are unconfirmed but should be mostly correct */
70 enum DCAExSSSpeakerMask {
71 DCA_EXSS_FRONT_CENTER = 0x0001,
72 DCA_EXSS_FRONT_LEFT_RIGHT = 0x0002,
73 DCA_EXSS_SIDE_REAR_LEFT_RIGHT = 0x0004,
74 DCA_EXSS_LFE = 0x0008,
75 DCA_EXSS_REAR_CENTER = 0x0010,
76 DCA_EXSS_FRONT_HIGH_LEFT_RIGHT = 0x0020,
77 DCA_EXSS_REAR_LEFT_RIGHT = 0x0040,
78 DCA_EXSS_FRONT_HIGH_CENTER = 0x0080,
79 DCA_EXSS_OVERHEAD = 0x0100,
80 DCA_EXSS_CENTER_LEFT_RIGHT = 0x0200,
81 DCA_EXSS_WIDE_LEFT_RIGHT = 0x0400,
82 DCA_EXSS_SIDE_LEFT_RIGHT = 0x0800,
83 DCA_EXSS_LFE2 = 0x1000,
84 DCA_EXSS_SIDE_HIGH_LEFT_RIGHT = 0x2000,
85 DCA_EXSS_REAR_HIGH_CENTER = 0x4000,
86 DCA_EXSS_REAR_HIGH_LEFT_RIGHT = 0x8000,
89 enum DCAExtensionMask {
90 DCA_EXT_CORE = 0x001, ///< core in core substream
91 DCA_EXT_XXCH = 0x002, ///< XXCh channels extension in core substream
92 DCA_EXT_X96 = 0x004, ///< 96/24 extension in core substream
93 DCA_EXT_XCH = 0x008, ///< XCh channel extension in core substream
94 DCA_EXT_EXSS_CORE = 0x010, ///< core in ExSS (extension substream)
95 DCA_EXT_EXSS_XBR = 0x020, ///< extended bitrate extension in ExSS
96 DCA_EXT_EXSS_XXCH = 0x040, ///< XXCh channels extension in ExSS
97 DCA_EXT_EXSS_X96 = 0x080, ///< 96/24 extension in ExSS
98 DCA_EXT_EXSS_LBR = 0x100, ///< low bitrate component in ExSS
99 DCA_EXT_EXSS_XLL = 0x200, ///< lossless extension in ExSS
102 /* Tables for mapping dts channel configurations to libavcodec multichannel api.
103 * Some compromises have been made for special configurations. Most configurations
104 * are never used so complete accuracy is not needed.
106 * L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
107 * S -> side, when both rear and back are configured move one of them to the side channel
109 * All 2 channel configurations -> AV_CH_LAYOUT_STEREO
112 static const int64_t dca_core_channel_layout[] = {
113 AV_CH_FRONT_CENTER, ///< 1, A
114 AV_CH_LAYOUT_STEREO, ///< 2, A + B (dual mono)
115 AV_CH_LAYOUT_STEREO, ///< 2, L + R (stereo)
116 AV_CH_LAYOUT_STEREO, ///< 2, (L+R) + (L-R) (sum-difference)
117 AV_CH_LAYOUT_STEREO, ///< 2, LT +RT (left and right total)
118 AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER, ///< 3, C+L+R
119 AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER, ///< 3, L+R+S
120 AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER|AV_CH_BACK_CENTER, ///< 4, C + L + R+ S
121 AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, ///< 4, L + R +SL+ SR
122 AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, ///< 5, C + L + R+ SL+SR
123 AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER, ///< 6, CL + CR + L + R + SL + SR
124 AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT|AV_CH_FRONT_CENTER|AV_CH_BACK_CENTER, ///< 6, C + L + R+ LR + RR + OV
125 AV_CH_FRONT_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, ///< 6, CF+ CR+LF+ RF+LR + RR
126 AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, ///< 7, CL + C + CR + L + R + SL + SR
127 AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, ///< 8, CL + CR + L + R + SL1 + SL2+ SR1 + SR2
128 AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_BACK_CENTER|AV_CH_SIDE_RIGHT, ///< 8, CL + C+ CR + L + R + SL + S+ SR
131 static const int8_t dca_lfe_index[] = {
132 1,2,2,2,2,3,2,3,2,3,2,3,1,3,2,3
135 static const int8_t dca_channel_reorder_lfe[][9] = {
136 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
137 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
138 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
139 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
140 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
141 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
142 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
143 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
144 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
145 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
146 { 3, 4, 0, 1, 5, 6, -1, -1, -1},
147 { 2, 0, 1, 4, 5, 6, -1, -1, -1},
148 { 0, 6, 4, 5, 2, 3, -1, -1, -1},
149 { 4, 2, 5, 0, 1, 6, 7, -1, -1},
150 { 5, 6, 0, 1, 7, 3, 8, 4, -1},
151 { 4, 2, 5, 0, 1, 6, 8, 7, -1},
154 static const int8_t dca_channel_reorder_lfe_xch[][9] = {
155 { 0, 2, -1, -1, -1, -1, -1, -1, -1},
156 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
157 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
158 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
159 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
160 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
161 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
162 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
163 { 0, 1, 4, 5, 3, -1, -1, -1, -1},
164 { 2, 0, 1, 5, 6, 4, -1, -1, -1},
165 { 3, 4, 0, 1, 6, 7, 5, -1, -1},
166 { 2, 0, 1, 4, 5, 6, 7, -1, -1},
167 { 0, 6, 4, 5, 2, 3, 7, -1, -1},
168 { 4, 2, 5, 0, 1, 7, 8, 6, -1},
169 { 5, 6, 0, 1, 8, 3, 9, 4, 7},
170 { 4, 2, 5, 0, 1, 6, 9, 8, 7},
173 static const int8_t dca_channel_reorder_nolfe[][9] = {
174 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
175 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
176 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
177 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
178 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
179 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
180 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
181 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
182 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
183 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
184 { 2, 3, 0, 1, 4, 5, -1, -1, -1},
185 { 2, 0, 1, 3, 4, 5, -1, -1, -1},
186 { 0, 5, 3, 4, 1, 2, -1, -1, -1},
187 { 3, 2, 4, 0, 1, 5, 6, -1, -1},
188 { 4, 5, 0, 1, 6, 2, 7, 3, -1},
189 { 3, 2, 4, 0, 1, 5, 7, 6, -1},
192 static const int8_t dca_channel_reorder_nolfe_xch[][9] = {
193 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
194 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
195 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
196 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
197 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
198 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
199 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
200 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
201 { 0, 1, 3, 4, 2, -1, -1, -1, -1},
202 { 2, 0, 1, 4, 5, 3, -1, -1, -1},
203 { 2, 3, 0, 1, 5, 6, 4, -1, -1},
204 { 2, 0, 1, 3, 4, 5, 6, -1, -1},
205 { 0, 5, 3, 4, 1, 2, 6, -1, -1},
206 { 3, 2, 4, 0, 1, 6, 7, 5, -1},
207 { 4, 5, 0, 1, 7, 2, 8, 3, 6},
208 { 3, 2, 4, 0, 1, 5, 8, 7, 6},
211 #define DCA_DOLBY 101 /* FIXME */
213 #define DCA_CHANNEL_BITS 6
214 #define DCA_CHANNEL_MASK 0x3F
218 #define HEADER_SIZE 14
220 #define DCA_MAX_FRAME_SIZE 16384
221 #define DCA_MAX_EXSS_HEADER_SIZE 4096
223 #define DCA_BUFFER_PADDING_SIZE 1024
225 /** Bit allocation */
227 int offset; ///< code values offset
228 int maxbits[8]; ///< max bits in VLC
229 int wrap; ///< wrap for get_vlc2()
230 VLC vlc[8]; ///< actual codes
233 static BitAlloc dca_bitalloc_index; ///< indexes for samples VLC select
234 static BitAlloc dca_tmode; ///< transition mode VLCs
235 static BitAlloc dca_scalefactor; ///< scalefactor VLCs
236 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
238 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba, int idx)
240 return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) + ba->offset;
244 AVCodecContext *avctx;
246 int frame_type; ///< type of the current frame
247 int samples_deficit; ///< deficit sample count
248 int crc_present; ///< crc is present in the bitstream
249 int sample_blocks; ///< number of PCM sample blocks
250 int frame_size; ///< primary frame byte size
251 int amode; ///< audio channels arrangement
252 int sample_rate; ///< audio sampling rate
253 int bit_rate; ///< transmission bit rate
254 int bit_rate_index; ///< transmission bit rate index
256 int downmix; ///< embedded downmix enabled
257 int dynrange; ///< embedded dynamic range flag
258 int timestamp; ///< embedded time stamp flag
259 int aux_data; ///< auxiliary data flag
260 int hdcd; ///< source material is mastered in HDCD
261 int ext_descr; ///< extension audio descriptor flag
262 int ext_coding; ///< extended coding flag
263 int aspf; ///< audio sync word insertion flag
264 int lfe; ///< low frequency effects flag
265 int predictor_history; ///< predictor history flag
266 int header_crc; ///< header crc check bytes
267 int multirate_inter; ///< multirate interpolator switch
268 int version; ///< encoder software revision
269 int copy_history; ///< copy history
270 int source_pcm_res; ///< source pcm resolution
271 int front_sum; ///< front sum/difference flag
272 int surround_sum; ///< surround sum/difference flag
273 int dialog_norm; ///< dialog normalisation parameter
275 /* Primary audio coding header */
276 int subframes; ///< number of subframes
277 int is_channels_set; ///< check for if the channel number is already set
278 int total_channels; ///< number of channels including extensions
279 int prim_channels; ///< number of primary audio channels
280 int subband_activity[DCA_PRIM_CHANNELS_MAX]; ///< subband activity count
281 int vq_start_subband[DCA_PRIM_CHANNELS_MAX]; ///< high frequency vq start subband
282 int joint_intensity[DCA_PRIM_CHANNELS_MAX]; ///< joint intensity coding index
283 int transient_huffman[DCA_PRIM_CHANNELS_MAX]; ///< transient mode code book
284 int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]; ///< scale factor code book
285 int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX]; ///< bit allocation quantizer select
286 int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< quantization index codebook select
287 float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< scale factor adjustment
289 /* Primary audio coding side information */
290 int subsubframes[DCA_SUBFRAMES_MAX]; ///< number of subsubframes
291 int partial_samples[DCA_SUBFRAMES_MAX]; ///< partial subsubframe samples count
292 int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction mode (ADPCM used or not)
293 int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction VQ coefs
294 int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< bit allocation index
295 int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< transition mode (transients)
296 int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2]; ///< scale factors (2 if transient)
297 int joint_huff[DCA_PRIM_CHANNELS_MAX]; ///< joint subband scale factors codebook
298 int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< joint subband scale factors
299 int downmix_coef[DCA_PRIM_CHANNELS_MAX][2]; ///< stereo downmix coefficients
300 int dynrange_coef; ///< dynamic range coefficient
302 int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< VQ encoded high frequency subbands
304 float lfe_data[2 * DCA_LFE_MAX * (DCA_BLOCKS_MAX + 4)]; ///< Low frequency effect data
305 int lfe_scale_factor;
307 /* Subband samples history (for ADPCM) */
308 float subband_samples_hist[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4];
309 DECLARE_ALIGNED(16, float, subband_fir_hist)[DCA_PRIM_CHANNELS_MAX][512];
310 DECLARE_ALIGNED(16, float, subband_fir_noidea)[DCA_PRIM_CHANNELS_MAX][32];
311 int hist_index[DCA_PRIM_CHANNELS_MAX];
312 DECLARE_ALIGNED(16, float, raXin)[32];
314 int output; ///< type of output
315 float scale_bias; ///< output scale
317 DECLARE_ALIGNED(16, float, subband_samples)[DCA_BLOCKS_MAX][DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8];
318 DECLARE_ALIGNED(16, float, samples)[(DCA_PRIM_CHANNELS_MAX+1)*256];
319 const float *samples_chanptr[DCA_PRIM_CHANNELS_MAX+1];
321 uint8_t dca_buffer[DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE + DCA_BUFFER_PADDING_SIZE];
322 int dca_buffer_size; ///< how much data is in the dca_buffer
324 const int8_t* channel_order_tab; ///< channel reordering table, lfe and non lfe
326 /* Current position in DCA frame */
327 int current_subframe;
328 int current_subsubframe;
330 /* XCh extension information */
332 int xch_base_channel; ///< index of first (only) channel containing XCH data
334 /* Other detected extensions in the core substream */
338 /* ExSS header parser */
339 int static_fields; ///< static fields present
340 int mix_metadata; ///< mixing metadata present
341 int num_mix_configs; ///< number of mix out configurations
342 int mix_config_num_ch[4]; ///< number of channels in each mix out configuration
346 int debug_flag; ///< used for suppressing repeated error messages output
349 SynthFilterContext synth;
350 DCADSPContext dcadsp;
351 FmtConvertContext fmt_conv;
354 static const uint16_t dca_vlc_offs[] = {
355 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364,
356 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508,
357 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564,
358 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240,
359 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
360 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
363 static av_cold void dca_init_vlcs(void)
365 static int vlcs_initialized = 0;
367 static VLC_TYPE dca_table[23622][2];
369 if (vlcs_initialized)
372 dca_bitalloc_index.offset = 1;
373 dca_bitalloc_index.wrap = 2;
374 for (i = 0; i < 5; i++) {
375 dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]];
376 dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i];
377 init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
378 bitalloc_12_bits[i], 1, 1,
379 bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
381 dca_scalefactor.offset = -64;
382 dca_scalefactor.wrap = 2;
383 for (i = 0; i < 5; i++) {
384 dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]];
385 dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5];
386 init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
387 scales_bits[i], 1, 1,
388 scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
390 dca_tmode.offset = 0;
392 for (i = 0; i < 4; i++) {
393 dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]];
394 dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10];
395 init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
397 tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
400 for (i = 0; i < 10; i++)
401 for (j = 0; j < 7; j++){
402 if (!bitalloc_codes[i][j]) break;
403 dca_smpl_bitalloc[i+1].offset = bitalloc_offsets[i];
404 dca_smpl_bitalloc[i+1].wrap = 1 + (j > 4);
405 dca_smpl_bitalloc[i+1].vlc[j].table = &dca_table[dca_vlc_offs[c]];
406 dca_smpl_bitalloc[i+1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
407 init_vlc(&dca_smpl_bitalloc[i+1].vlc[j], bitalloc_maxbits[i][j],
409 bitalloc_bits[i][j], 1, 1,
410 bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC);
413 vlcs_initialized = 1;
416 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
419 *dst++ = get_bits(gb, bits);
422 static int dca_parse_audio_coding_header(DCAContext * s, int base_channel)
425 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
426 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
427 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
429 s->total_channels = get_bits(&s->gb, 3) + 1 + base_channel;
430 s->prim_channels = s->total_channels;
432 if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
433 s->prim_channels = DCA_PRIM_CHANNELS_MAX;
436 for (i = base_channel; i < s->prim_channels; i++) {
437 s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
438 if (s->subband_activity[i] > DCA_SUBBANDS)
439 s->subband_activity[i] = DCA_SUBBANDS;
441 for (i = base_channel; i < s->prim_channels; i++) {
442 s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
443 if (s->vq_start_subband[i] > DCA_SUBBANDS)
444 s->vq_start_subband[i] = DCA_SUBBANDS;
446 get_array(&s->gb, s->joint_intensity + base_channel, s->prim_channels - base_channel, 3);
447 get_array(&s->gb, s->transient_huffman + base_channel, s->prim_channels - base_channel, 2);
448 get_array(&s->gb, s->scalefactor_huffman + base_channel, s->prim_channels - base_channel, 3);
449 get_array(&s->gb, s->bitalloc_huffman + base_channel, s->prim_channels - base_channel, 3);
451 /* Get codebooks quantization indexes */
453 memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
454 for (j = 1; j < 11; j++)
455 for (i = base_channel; i < s->prim_channels; i++)
456 s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
458 /* Get scale factor adjustment */
459 for (j = 0; j < 11; j++)
460 for (i = base_channel; i < s->prim_channels; i++)
461 s->scalefactor_adj[i][j] = 1;
463 for (j = 1; j < 11; j++)
464 for (i = base_channel; i < s->prim_channels; i++)
465 if (s->quant_index_huffman[i][j] < thr[j])
466 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
468 if (s->crc_present) {
469 /* Audio header CRC check */
470 get_bits(&s->gb, 16);
473 s->current_subframe = 0;
474 s->current_subsubframe = 0;
477 av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);
478 av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);
479 for (i = base_channel; i < s->prim_channels; i++){
480 av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n", s->subband_activity[i]);
481 av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n", s->vq_start_subband[i]);
482 av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n", s->joint_intensity[i]);
483 av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n", s->transient_huffman[i]);
484 av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n", s->scalefactor_huffman[i]);
485 av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n", s->bitalloc_huffman[i]);
486 av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");
487 for (j = 0; j < 11; j++)
488 av_log(s->avctx, AV_LOG_DEBUG, " %i",
489 s->quant_index_huffman[i][j]);
490 av_log(s->avctx, AV_LOG_DEBUG, "\n");
491 av_log(s->avctx, AV_LOG_DEBUG, "scalefac adj:");
492 for (j = 0; j < 11; j++)
493 av_log(s->avctx, AV_LOG_DEBUG, " %1.3f", s->scalefactor_adj[i][j]);
494 av_log(s->avctx, AV_LOG_DEBUG, "\n");
501 static int dca_parse_frame_header(DCAContext * s)
503 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
506 get_bits(&s->gb, 32);
509 s->frame_type = get_bits(&s->gb, 1);
510 s->samples_deficit = get_bits(&s->gb, 5) + 1;
511 s->crc_present = get_bits(&s->gb, 1);
512 s->sample_blocks = get_bits(&s->gb, 7) + 1;
513 s->frame_size = get_bits(&s->gb, 14) + 1;
514 if (s->frame_size < 95)
516 s->amode = get_bits(&s->gb, 6);
517 s->sample_rate = dca_sample_rates[get_bits(&s->gb, 4)];
520 s->bit_rate_index = get_bits(&s->gb, 5);
521 s->bit_rate = dca_bit_rates[s->bit_rate_index];
525 s->downmix = get_bits(&s->gb, 1);
526 s->dynrange = get_bits(&s->gb, 1);
527 s->timestamp = get_bits(&s->gb, 1);
528 s->aux_data = get_bits(&s->gb, 1);
529 s->hdcd = get_bits(&s->gb, 1);
530 s->ext_descr = get_bits(&s->gb, 3);
531 s->ext_coding = get_bits(&s->gb, 1);
532 s->aspf = get_bits(&s->gb, 1);
533 s->lfe = get_bits(&s->gb, 2);
534 s->predictor_history = get_bits(&s->gb, 1);
536 /* TODO: check CRC */
538 s->header_crc = get_bits(&s->gb, 16);
540 s->multirate_inter = get_bits(&s->gb, 1);
541 s->version = get_bits(&s->gb, 4);
542 s->copy_history = get_bits(&s->gb, 2);
543 s->source_pcm_res = get_bits(&s->gb, 3);
544 s->front_sum = get_bits(&s->gb, 1);
545 s->surround_sum = get_bits(&s->gb, 1);
546 s->dialog_norm = get_bits(&s->gb, 4);
548 /* FIXME: channels mixing levels */
549 s->output = s->amode;
550 if (s->lfe) s->output |= DCA_LFE;
553 av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);
554 av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);
555 av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);
556 av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",
557 s->sample_blocks, s->sample_blocks * 32);
558 av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);
559 av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",
560 s->amode, dca_channels[s->amode]);
561 av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i Hz\n",
563 av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i bits/s\n",
565 av_log(s->avctx, AV_LOG_DEBUG, "downmix: %i\n", s->downmix);
566 av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);
567 av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);
568 av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);
569 av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);
570 av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);
571 av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);
572 av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);
573 av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);
574 av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",
575 s->predictor_history);
576 av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);
577 av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",
579 av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);
580 av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);
581 av_log(s->avctx, AV_LOG_DEBUG,
582 "source pcm resolution: %i (%i bits/sample)\n",
583 s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);
584 av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);
585 av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);
586 av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);
587 av_log(s->avctx, AV_LOG_DEBUG, "\n");
590 /* Primary audio coding header */
591 s->subframes = get_bits(&s->gb, 4) + 1;
593 return dca_parse_audio_coding_header(s, 0);
597 static inline int get_scale(GetBitContext *gb, int level, int value)
600 /* huffman encoded */
601 value += get_bitalloc(gb, &dca_scalefactor, level);
602 } else if (level < 8)
603 value = get_bits(gb, level + 1);
607 static int dca_subframe_header(DCAContext * s, int base_channel, int block_index)
609 /* Primary audio coding side information */
612 if (get_bits_left(&s->gb) < 0)
616 s->subsubframes[s->current_subframe] = get_bits(&s->gb, 2) + 1;
617 s->partial_samples[s->current_subframe] = get_bits(&s->gb, 3);
620 for (j = base_channel; j < s->prim_channels; j++) {
621 for (k = 0; k < s->subband_activity[j]; k++)
622 s->prediction_mode[j][k] = get_bits(&s->gb, 1);
625 /* Get prediction codebook */
626 for (j = base_channel; j < s->prim_channels; j++) {
627 for (k = 0; k < s->subband_activity[j]; k++) {
628 if (s->prediction_mode[j][k] > 0) {
629 /* (Prediction coefficient VQ address) */
630 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
635 /* Bit allocation index */
636 for (j = base_channel; j < s->prim_channels; j++) {
637 for (k = 0; k < s->vq_start_subband[j]; k++) {
638 if (s->bitalloc_huffman[j] == 6)
639 s->bitalloc[j][k] = get_bits(&s->gb, 5);
640 else if (s->bitalloc_huffman[j] == 5)
641 s->bitalloc[j][k] = get_bits(&s->gb, 4);
642 else if (s->bitalloc_huffman[j] == 7) {
643 av_log(s->avctx, AV_LOG_ERROR,
644 "Invalid bit allocation index\n");
648 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
651 if (s->bitalloc[j][k] > 26) {
652 // av_log(s->avctx,AV_LOG_DEBUG,"bitalloc index [%i][%i] too big (%i)\n",
653 // j, k, s->bitalloc[j][k]);
659 /* Transition mode */
660 for (j = base_channel; j < s->prim_channels; j++) {
661 for (k = 0; k < s->subband_activity[j]; k++) {
662 s->transition_mode[j][k] = 0;
663 if (s->subsubframes[s->current_subframe] > 1 &&
664 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
665 s->transition_mode[j][k] =
666 get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
671 if (get_bits_left(&s->gb) < 0)
674 for (j = base_channel; j < s->prim_channels; j++) {
675 const uint32_t *scale_table;
678 memset(s->scale_factor[j], 0, s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
680 if (s->scalefactor_huffman[j] == 6)
681 scale_table = scale_factor_quant7;
683 scale_table = scale_factor_quant6;
685 /* When huffman coded, only the difference is encoded */
688 for (k = 0; k < s->subband_activity[j]; k++) {
689 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
690 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
691 s->scale_factor[j][k][0] = scale_table[scale_sum];
694 if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
695 /* Get second scale factor */
696 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
697 s->scale_factor[j][k][1] = scale_table[scale_sum];
702 /* Joint subband scale factor codebook select */
703 for (j = base_channel; j < s->prim_channels; j++) {
704 /* Transmitted only if joint subband coding enabled */
705 if (s->joint_intensity[j] > 0)
706 s->joint_huff[j] = get_bits(&s->gb, 3);
709 if (get_bits_left(&s->gb) < 0)
712 /* Scale factors for joint subband coding */
713 for (j = base_channel; j < s->prim_channels; j++) {
716 /* Transmitted only if joint subband coding enabled */
717 if (s->joint_intensity[j] > 0) {
719 source_channel = s->joint_intensity[j] - 1;
721 /* When huffman coded, only the difference is encoded
722 * (is this valid as well for joint scales ???) */
724 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
725 scale = get_scale(&s->gb, s->joint_huff[j], 0);
726 scale += 64; /* bias */
727 s->joint_scale_factor[j][k] = scale; /*joint_scale_table[scale]; */
730 if (!(s->debug_flag & 0x02)) {
731 av_log(s->avctx, AV_LOG_DEBUG,
732 "Joint stereo coding not supported\n");
733 s->debug_flag |= 0x02;
738 /* Stereo downmix coefficients */
739 if (!base_channel && s->prim_channels > 2) {
741 for (j = base_channel; j < s->prim_channels; j++) {
742 s->downmix_coef[j][0] = get_bits(&s->gb, 7);
743 s->downmix_coef[j][1] = get_bits(&s->gb, 7);
746 int am = s->amode & DCA_CHANNEL_MASK;
747 for (j = base_channel; j < s->prim_channels; j++) {
748 s->downmix_coef[j][0] = dca_default_coeffs[am][j][0];
749 s->downmix_coef[j][1] = dca_default_coeffs[am][j][1];
754 /* Dynamic range coefficient */
755 if (!base_channel && s->dynrange)
756 s->dynrange_coef = get_bits(&s->gb, 8);
758 /* Side information CRC check word */
759 if (s->crc_present) {
760 get_bits(&s->gb, 16);
764 * Primary audio data arrays
767 /* VQ encoded high frequency subbands */
768 for (j = base_channel; j < s->prim_channels; j++)
769 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
770 /* 1 vector -> 32 samples */
771 s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
773 /* Low frequency effect data */
774 if (!base_channel && s->lfe) {
776 int lfe_samples = 2 * s->lfe * (4 + block_index);
777 int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
780 for (j = lfe_samples; j < lfe_end_sample; j++) {
781 /* Signed 8 bits int */
782 s->lfe_data[j] = get_sbits(&s->gb, 8);
785 /* Scale factor index */
786 s->lfe_scale_factor = scale_factor_quant7[get_bits(&s->gb, 8)];
788 /* Quantization step size * scale factor */
789 lfe_scale = 0.035 * s->lfe_scale_factor;
791 for (j = lfe_samples; j < lfe_end_sample; j++)
792 s->lfe_data[j] *= lfe_scale;
796 av_log(s->avctx, AV_LOG_DEBUG, "subsubframes: %i\n", s->subsubframes[s->current_subframe]);
797 av_log(s->avctx, AV_LOG_DEBUG, "partial samples: %i\n",
798 s->partial_samples[s->current_subframe]);
799 for (j = base_channel; j < s->prim_channels; j++) {
800 av_log(s->avctx, AV_LOG_DEBUG, "prediction mode:");
801 for (k = 0; k < s->subband_activity[j]; k++)
802 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->prediction_mode[j][k]);
803 av_log(s->avctx, AV_LOG_DEBUG, "\n");
805 for (j = base_channel; j < s->prim_channels; j++) {
806 for (k = 0; k < s->subband_activity[j]; k++)
807 av_log(s->avctx, AV_LOG_DEBUG,
808 "prediction coefs: %f, %f, %f, %f\n",
809 (float) adpcm_vb[s->prediction_vq[j][k]][0] / 8192,
810 (float) adpcm_vb[s->prediction_vq[j][k]][1] / 8192,
811 (float) adpcm_vb[s->prediction_vq[j][k]][2] / 8192,
812 (float) adpcm_vb[s->prediction_vq[j][k]][3] / 8192);
814 for (j = base_channel; j < s->prim_channels; j++) {
815 av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index: ");
816 for (k = 0; k < s->vq_start_subband[j]; k++)
817 av_log(s->avctx, AV_LOG_DEBUG, "%2.2i ", s->bitalloc[j][k]);
818 av_log(s->avctx, AV_LOG_DEBUG, "\n");
820 for (j = base_channel; j < s->prim_channels; j++) {
821 av_log(s->avctx, AV_LOG_DEBUG, "Transition mode:");
822 for (k = 0; k < s->subband_activity[j]; k++)
823 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->transition_mode[j][k]);
824 av_log(s->avctx, AV_LOG_DEBUG, "\n");
826 for (j = base_channel; j < s->prim_channels; j++) {
827 av_log(s->avctx, AV_LOG_DEBUG, "Scale factor:");
828 for (k = 0; k < s->subband_activity[j]; k++) {
829 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0)
830 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->scale_factor[j][k][0]);
831 if (k < s->vq_start_subband[j] && s->transition_mode[j][k])
832 av_log(s->avctx, AV_LOG_DEBUG, " %i(t)", s->scale_factor[j][k][1]);
834 av_log(s->avctx, AV_LOG_DEBUG, "\n");
836 for (j = base_channel; j < s->prim_channels; j++) {
837 if (s->joint_intensity[j] > 0) {
838 int source_channel = s->joint_intensity[j] - 1;
839 av_log(s->avctx, AV_LOG_DEBUG, "Joint scale factor index:\n");
840 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++)
841 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->joint_scale_factor[j][k]);
842 av_log(s->avctx, AV_LOG_DEBUG, "\n");
845 if (!base_channel && s->prim_channels > 2 && s->downmix) {
846 av_log(s->avctx, AV_LOG_DEBUG, "Downmix coeffs:\n");
847 for (j = 0; j < s->prim_channels; j++) {
848 av_log(s->avctx, AV_LOG_DEBUG, "Channel 0,%d = %f\n", j, dca_downmix_coeffs[s->downmix_coef[j][0]]);
849 av_log(s->avctx, AV_LOG_DEBUG, "Channel 1,%d = %f\n", j, dca_downmix_coeffs[s->downmix_coef[j][1]]);
851 av_log(s->avctx, AV_LOG_DEBUG, "\n");
853 for (j = base_channel; j < s->prim_channels; j++)
854 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
855 av_log(s->avctx, AV_LOG_DEBUG, "VQ index: %i\n", s->high_freq_vq[j][k]);
856 if (!base_channel && s->lfe) {
857 int lfe_samples = 2 * s->lfe * (4 + block_index);
858 int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
860 av_log(s->avctx, AV_LOG_DEBUG, "LFE samples:\n");
861 for (j = lfe_samples; j < lfe_end_sample; j++)
862 av_log(s->avctx, AV_LOG_DEBUG, " %f", s->lfe_data[j]);
863 av_log(s->avctx, AV_LOG_DEBUG, "\n");
870 static void qmf_32_subbands(DCAContext * s, int chans,
871 float samples_in[32][8], float *samples_out,
874 const float *prCoeff;
877 int sb_act = s->subband_activity[chans];
880 scale *= sqrt(1/8.0);
883 if (!s->multirate_inter) /* Non-perfect reconstruction */
884 prCoeff = fir_32bands_nonperfect;
885 else /* Perfect reconstruction */
886 prCoeff = fir_32bands_perfect;
888 /* Reconstructed channel sample index */
889 for (subindex = 0; subindex < 8; subindex++) {
890 /* Load in one sample from each subband and clear inactive subbands */
891 for (i = 0; i < sb_act; i++){
892 uint32_t v = AV_RN32A(&samples_in[i][subindex]) ^ ((i-1)&2)<<30;
893 AV_WN32A(&s->raXin[i], v);
898 s->synth.synth_filter_float(&s->imdct,
899 s->subband_fir_hist[chans], &s->hist_index[chans],
900 s->subband_fir_noidea[chans], prCoeff,
901 samples_out, s->raXin, scale);
907 static void lfe_interpolation_fir(DCAContext *s, int decimation_select,
908 int num_deci_sample, float *samples_in,
909 float *samples_out, float scale)
911 /* samples_in: An array holding decimated samples.
912 * Samples in current subframe starts from samples_in[0],
913 * while samples_in[-1], samples_in[-2], ..., stores samples
914 * from last subframe as history.
916 * samples_out: An array holding interpolated samples
920 const float *prCoeff;
923 /* Select decimation filter */
924 if (decimation_select == 1) {
926 prCoeff = lfe_fir_128;
929 prCoeff = lfe_fir_64;
932 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
933 s->dcadsp.lfe_fir(samples_out, samples_in, prCoeff, decifactor,
936 samples_out += 2 * decifactor;
940 /* downmixing routines */
941 #define MIX_REAR1(samples, si1, rs, coef) \
942 samples[i] += samples[si1] * coef[rs][0]; \
943 samples[i+256] += samples[si1] * coef[rs][1];
945 #define MIX_REAR2(samples, si1, si2, rs, coef) \
946 samples[i] += samples[si1] * coef[rs][0] + samples[si2] * coef[rs+1][0]; \
947 samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs+1][1];
949 #define MIX_FRONT3(samples, coef) \
953 samples[i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
954 samples[i+256] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
956 #define DOWNMIX_TO_STEREO(op1, op2) \
957 for (i = 0; i < 256; i++){ \
962 static void dca_downmix(float *samples, int srcfmt,
963 int downmix_coef[DCA_PRIM_CHANNELS_MAX][2],
964 const int8_t *channel_mapping)
969 float coef[DCA_PRIM_CHANNELS_MAX][2];
971 for (i=0; i<DCA_PRIM_CHANNELS_MAX; i++) {
972 coef[i][0] = dca_downmix_coeffs[downmix_coef[i][0]];
973 coef[i][1] = dca_downmix_coeffs[downmix_coef[i][1]];
979 case DCA_STEREO_TOTAL:
980 case DCA_STEREO_SUMDIFF:
982 av_log(NULL, 0, "Not implemented!\n");
987 c = channel_mapping[0] * 256;
988 l = channel_mapping[1] * 256;
989 r = channel_mapping[2] * 256;
990 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),);
993 s = channel_mapping[2] * 256;
994 DOWNMIX_TO_STEREO(MIX_REAR1(samples, i + s, 2, coef),);
997 c = channel_mapping[0] * 256;
998 l = channel_mapping[1] * 256;
999 r = channel_mapping[2] * 256;
1000 s = channel_mapping[3] * 256;
1001 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1002 MIX_REAR1(samples, i + s, 3, coef));
1005 sl = channel_mapping[2] * 256;
1006 sr = channel_mapping[3] * 256;
1007 DOWNMIX_TO_STEREO(MIX_REAR2(samples, i + sl, i + sr, 2, coef),);
1010 c = channel_mapping[0] * 256;
1011 l = channel_mapping[1] * 256;
1012 r = channel_mapping[2] * 256;
1013 sl = channel_mapping[3] * 256;
1014 sr = channel_mapping[4] * 256;
1015 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1016 MIX_REAR2(samples, i + sl, i + sr, 3, coef));
1022 /* Very compact version of the block code decoder that does not use table
1023 * look-up but is slightly slower */
1024 static int decode_blockcode(int code, int levels, int *values)
1027 int offset = (levels - 1) >> 1;
1029 for (i = 0; i < 4; i++) {
1030 int div = FASTDIV(code, levels);
1031 values[i] = code - offset - div*levels;
1038 av_log(NULL, AV_LOG_ERROR, "ERROR: block code look-up failed\n");
1043 static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 };
1044 static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 };
1046 static int dca_subsubframe(DCAContext * s, int base_channel, int block_index)
1049 int subsubframe = s->current_subsubframe;
1051 const float *quant_step_table;
1054 float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1055 LOCAL_ALIGNED_16(int, block, [8]);
1061 /* Select quantization step size table */
1062 if (s->bit_rate_index == 0x1f)
1063 quant_step_table = lossless_quant_d;
1065 quant_step_table = lossy_quant_d;
1067 for (k = base_channel; k < s->prim_channels; k++) {
1068 if (get_bits_left(&s->gb) < 0)
1071 for (l = 0; l < s->vq_start_subband[k]; l++) {
1074 /* Select the mid-tread linear quantizer */
1075 int abits = s->bitalloc[k][l];
1077 float quant_step_size = quant_step_table[abits];
1080 * Determine quantization index code book and its type
1083 /* Select quantization index code book */
1084 int sel = s->quant_index_huffman[k][abits];
1087 * Extract bits from the bit stream
1090 memset(subband_samples[k][l], 0, 8 * sizeof(subband_samples[0][0][0]));
1092 /* Deal with transients */
1093 int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l];
1094 float rscale = quant_step_size * s->scale_factor[k][l][sfi] * s->scalefactor_adj[k][sel];
1096 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table){
1099 int block_code1, block_code2, size, levels;
1101 size = abits_sizes[abits-1];
1102 levels = abits_levels[abits-1];
1104 block_code1 = get_bits(&s->gb, size);
1105 /* FIXME Should test return value */
1106 decode_blockcode(block_code1, levels, block);
1107 block_code2 = get_bits(&s->gb, size);
1108 decode_blockcode(block_code2, levels, &block[4]);
1111 for (m = 0; m < 8; m++)
1112 block[m] = get_sbits(&s->gb, abits - 3);
1116 for (m = 0; m < 8; m++)
1117 block[m] = get_bitalloc(&s->gb, &dca_smpl_bitalloc[abits], sel);
1120 s->fmt_conv.int32_to_float_fmul_scalar(subband_samples[k][l],
1125 * Inverse ADPCM if in prediction mode
1127 if (s->prediction_mode[k][l]) {
1129 for (m = 0; m < 8; m++) {
1130 for (n = 1; n <= 4; n++)
1132 subband_samples[k][l][m] +=
1133 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1134 subband_samples[k][l][m - n] / 8192);
1135 else if (s->predictor_history)
1136 subband_samples[k][l][m] +=
1137 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1138 s->subband_samples_hist[k][l][m - n +
1145 * Decode VQ encoded high frequencies
1147 for (l = s->vq_start_subband[k]; l < s->subband_activity[k]; l++) {
1148 /* 1 vector -> 32 samples but we only need the 8 samples
1149 * for this subsubframe. */
1152 if (!s->debug_flag & 0x01) {
1153 av_log(s->avctx, AV_LOG_DEBUG, "Stream with high frequencies VQ coding\n");
1154 s->debug_flag |= 0x01;
1157 for (m = 0; m < 8; m++) {
1158 subband_samples[k][l][m] =
1159 high_freq_vq[s->high_freq_vq[k][l]][subsubframe * 8 +
1161 * (float) s->scale_factor[k][l][0] / 16.0;
1166 /* Check for DSYNC after subsubframe */
1167 if (s->aspf || subsubframe == s->subsubframes[s->current_subframe] - 1) {
1168 if (0xFFFF == get_bits(&s->gb, 16)) { /* 0xFFFF */
1170 av_log(s->avctx, AV_LOG_DEBUG, "Got subframe DSYNC\n");
1173 av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
1177 /* Backup predictor history for adpcm */
1178 for (k = base_channel; k < s->prim_channels; k++)
1179 for (l = 0; l < s->vq_start_subband[k]; l++)
1180 memcpy(s->subband_samples_hist[k][l], &subband_samples[k][l][4],
1181 4 * sizeof(subband_samples[0][0][0]));
1186 static int dca_filter_channels(DCAContext * s, int block_index)
1188 float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1191 /* 32 subbands QMF */
1192 for (k = 0; k < s->prim_channels; k++) {
1193 /* static float pcm_to_double[8] =
1194 {32768.0, 32768.0, 524288.0, 524288.0, 0, 8388608.0, 8388608.0};*/
1195 qmf_32_subbands(s, k, subband_samples[k], &s->samples[256 * s->channel_order_tab[k]],
1196 M_SQRT1_2*s->scale_bias /*pcm_to_double[s->source_pcm_res] */ );
1200 if (s->avctx->request_channels == 2 && s->prim_channels > 2) {
1201 dca_downmix(s->samples, s->amode, s->downmix_coef, s->channel_order_tab);
1204 /* Generate LFE samples for this subsubframe FIXME!!! */
1205 if (s->output & DCA_LFE) {
1206 lfe_interpolation_fir(s, s->lfe, 2 * s->lfe,
1207 s->lfe_data + 2 * s->lfe * (block_index + 4),
1208 &s->samples[256 * dca_lfe_index[s->amode]],
1209 (1.0/256.0)*s->scale_bias);
1210 /* Outputs 20bits pcm samples */
1217 static int dca_subframe_footer(DCAContext * s, int base_channel)
1219 int aux_data_count = 0, i;
1222 * Unpack optional information
1225 /* presumably optional information only appears in the core? */
1226 if (!base_channel) {
1228 get_bits(&s->gb, 32);
1231 aux_data_count = get_bits(&s->gb, 6);
1233 for (i = 0; i < aux_data_count; i++)
1234 get_bits(&s->gb, 8);
1236 if (s->crc_present && (s->downmix || s->dynrange))
1237 get_bits(&s->gb, 16);
1244 * Decode a dca frame block
1246 * @param s pointer to the DCAContext
1249 static int dca_decode_block(DCAContext * s, int base_channel, int block_index)
1253 if (s->current_subframe >= s->subframes) {
1254 av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1255 s->current_subframe, s->subframes);
1259 if (!s->current_subsubframe) {
1261 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
1263 /* Read subframe header */
1264 if (dca_subframe_header(s, base_channel, block_index))
1268 /* Read subsubframe */
1270 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
1272 if (dca_subsubframe(s, base_channel, block_index))
1276 s->current_subsubframe++;
1277 if (s->current_subsubframe >= s->subsubframes[s->current_subframe]) {
1278 s->current_subsubframe = 0;
1279 s->current_subframe++;
1281 if (s->current_subframe >= s->subframes) {
1283 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
1285 /* Read subframe footer */
1286 if (dca_subframe_footer(s, base_channel))
1294 * Convert bitstream to one representation based on sync marker
1296 static int dca_convert_bitstream(const uint8_t * src, int src_size, uint8_t * dst,
1301 const uint16_t *ssrc = (const uint16_t *) src;
1302 uint16_t *sdst = (uint16_t *) dst;
1305 if ((unsigned)src_size > (unsigned)max_size) {
1306 // av_log(NULL, AV_LOG_ERROR, "Input frame size larger then DCA_MAX_FRAME_SIZE!\n");
1308 src_size = max_size;
1313 case DCA_MARKER_RAW_BE:
1314 memcpy(dst, src, src_size);
1316 case DCA_MARKER_RAW_LE:
1317 for (i = 0; i < (src_size + 1) >> 1; i++)
1318 *sdst++ = av_bswap16(*ssrc++);
1320 case DCA_MARKER_14B_BE:
1321 case DCA_MARKER_14B_LE:
1322 init_put_bits(&pb, dst, max_size);
1323 for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
1324 tmp = ((mrk == DCA_MARKER_14B_BE) ? AV_RB16(src) : AV_RL16(src)) & 0x3FFF;
1325 put_bits(&pb, 14, tmp);
1327 flush_put_bits(&pb);
1328 return (put_bits_count(&pb) + 7) >> 3;
1335 * Return the number of channels in an ExSS speaker mask (HD)
1337 static int dca_exss_mask2count(int mask)
1339 /* count bits that mean speaker pairs twice */
1340 return av_popcount(mask)
1341 + av_popcount(mask & (
1342 DCA_EXSS_CENTER_LEFT_RIGHT
1343 | DCA_EXSS_FRONT_LEFT_RIGHT
1344 | DCA_EXSS_FRONT_HIGH_LEFT_RIGHT
1345 | DCA_EXSS_WIDE_LEFT_RIGHT
1346 | DCA_EXSS_SIDE_LEFT_RIGHT
1347 | DCA_EXSS_SIDE_HIGH_LEFT_RIGHT
1348 | DCA_EXSS_SIDE_REAR_LEFT_RIGHT
1349 | DCA_EXSS_REAR_LEFT_RIGHT
1350 | DCA_EXSS_REAR_HIGH_LEFT_RIGHT
1355 * Skip mixing coefficients of a single mix out configuration (HD)
1357 static void dca_exss_skip_mix_coeffs(GetBitContext *gb, int channels, int out_ch)
1361 for (i = 0; i < channels; i++) {
1362 int mix_map_mask = get_bits(gb, out_ch);
1363 int num_coeffs = av_popcount(mix_map_mask);
1364 skip_bits_long(gb, num_coeffs * 6);
1369 * Parse extension substream asset header (HD)
1371 static int dca_exss_parse_asset_header(DCAContext *s)
1373 int header_pos = get_bits_count(&s->gb);
1376 int embedded_stereo = 0;
1377 int embedded_6ch = 0;
1378 int drc_code_present;
1379 int extensions_mask;
1382 if (get_bits_left(&s->gb) < 16)
1385 /* We will parse just enough to get to the extensions bitmask with which
1386 * we can set the profile value. */
1388 header_size = get_bits(&s->gb, 9) + 1;
1389 skip_bits(&s->gb, 3); // asset index
1391 if (s->static_fields) {
1392 if (get_bits1(&s->gb))
1393 skip_bits(&s->gb, 4); // asset type descriptor
1394 if (get_bits1(&s->gb))
1395 skip_bits_long(&s->gb, 24); // language descriptor
1397 if (get_bits1(&s->gb)) {
1398 /* How can one fit 1024 bytes of text here if the maximum value
1399 * for the asset header size field above was 512 bytes? */
1400 int text_length = get_bits(&s->gb, 10) + 1;
1401 if (get_bits_left(&s->gb) < text_length * 8)
1403 skip_bits_long(&s->gb, text_length * 8); // info text
1406 skip_bits(&s->gb, 5); // bit resolution - 1
1407 skip_bits(&s->gb, 4); // max sample rate code
1408 channels = get_bits(&s->gb, 8) + 1;
1410 if (get_bits1(&s->gb)) { // 1-to-1 channels to speakers
1411 int spkr_remap_sets;
1412 int spkr_mask_size = 16;
1416 embedded_stereo = get_bits1(&s->gb);
1418 embedded_6ch = get_bits1(&s->gb);
1420 if (get_bits1(&s->gb)) {
1421 spkr_mask_size = (get_bits(&s->gb, 2) + 1) << 2;
1422 skip_bits(&s->gb, spkr_mask_size); // spkr activity mask
1425 spkr_remap_sets = get_bits(&s->gb, 3);
1427 for (i = 0; i < spkr_remap_sets; i++) {
1428 /* std layout mask for each remap set */
1429 num_spkrs[i] = dca_exss_mask2count(get_bits(&s->gb, spkr_mask_size));
1432 for (i = 0; i < spkr_remap_sets; i++) {
1433 int num_dec_ch_remaps = get_bits(&s->gb, 5) + 1;
1434 if (get_bits_left(&s->gb) < 0)
1437 for (j = 0; j < num_spkrs[i]; j++) {
1438 int remap_dec_ch_mask = get_bits_long(&s->gb, num_dec_ch_remaps);
1439 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1440 skip_bits_long(&s->gb, num_dec_ch * 5); // remap codes
1445 skip_bits(&s->gb, 3); // representation type
1449 drc_code_present = get_bits1(&s->gb);
1450 if (drc_code_present)
1451 get_bits(&s->gb, 8); // drc code
1453 if (get_bits1(&s->gb))
1454 skip_bits(&s->gb, 5); // dialog normalization code
1456 if (drc_code_present && embedded_stereo)
1457 get_bits(&s->gb, 8); // drc stereo code
1459 if (s->mix_metadata && get_bits1(&s->gb)) {
1460 skip_bits(&s->gb, 1); // external mix
1461 skip_bits(&s->gb, 6); // post mix gain code
1463 if (get_bits(&s->gb, 2) != 3) // mixer drc code
1464 skip_bits(&s->gb, 3); // drc limit
1466 skip_bits(&s->gb, 8); // custom drc code
1468 if (get_bits1(&s->gb)) // channel specific scaling
1469 for (i = 0; i < s->num_mix_configs; i++)
1470 skip_bits_long(&s->gb, s->mix_config_num_ch[i] * 6); // scale codes
1472 skip_bits_long(&s->gb, s->num_mix_configs * 6); // scale codes
1474 for (i = 0; i < s->num_mix_configs; i++) {
1475 if (get_bits_left(&s->gb) < 0)
1477 dca_exss_skip_mix_coeffs(&s->gb, channels, s->mix_config_num_ch[i]);
1479 dca_exss_skip_mix_coeffs(&s->gb, 6, s->mix_config_num_ch[i]);
1480 if (embedded_stereo)
1481 dca_exss_skip_mix_coeffs(&s->gb, 2, s->mix_config_num_ch[i]);
1485 switch (get_bits(&s->gb, 2)) {
1486 case 0: extensions_mask = get_bits(&s->gb, 12); break;
1487 case 1: extensions_mask = DCA_EXT_EXSS_XLL; break;
1488 case 2: extensions_mask = DCA_EXT_EXSS_LBR; break;
1489 case 3: extensions_mask = 0; /* aux coding */ break;
1492 /* not parsed further, we were only interested in the extensions mask */
1494 if (get_bits_left(&s->gb) < 0)
1497 if (get_bits_count(&s->gb) - header_pos > header_size * 8) {
1498 av_log(s->avctx, AV_LOG_WARNING, "Asset header size mismatch.\n");
1501 skip_bits_long(&s->gb, header_pos + header_size * 8 - get_bits_count(&s->gb));
1503 if (extensions_mask & DCA_EXT_EXSS_XLL)
1504 s->profile = FF_PROFILE_DTS_HD_MA;
1505 else if (extensions_mask & (DCA_EXT_EXSS_XBR | DCA_EXT_EXSS_X96 |
1507 s->profile = FF_PROFILE_DTS_HD_HRA;
1509 if (!(extensions_mask & DCA_EXT_CORE))
1510 av_log(s->avctx, AV_LOG_WARNING, "DTS core detection mismatch.\n");
1511 if (!!(extensions_mask & DCA_EXT_XCH) != s->xch_present)
1512 av_log(s->avctx, AV_LOG_WARNING, "DTS XCh detection mismatch.\n");
1513 if (!!(extensions_mask & DCA_EXT_XXCH) != s->xxch_present)
1514 av_log(s->avctx, AV_LOG_WARNING, "DTS XXCh detection mismatch.\n");
1515 if (!!(extensions_mask & DCA_EXT_X96) != s->x96_present)
1516 av_log(s->avctx, AV_LOG_WARNING, "DTS X96 detection mismatch.\n");
1522 * Parse extension substream header (HD)
1524 static void dca_exss_parse_header(DCAContext *s)
1532 int active_ss_mask[8];
1535 if (get_bits_left(&s->gb) < 52)
1538 skip_bits(&s->gb, 8); // user data
1539 ss_index = get_bits(&s->gb, 2);
1541 blownup = get_bits1(&s->gb);
1542 header_size = get_bits(&s->gb, 8 + 4 * blownup) + 1;
1543 hd_size = get_bits_long(&s->gb, 16 + 4 * blownup) + 1;
1545 s->static_fields = get_bits1(&s->gb);
1546 if (s->static_fields) {
1547 skip_bits(&s->gb, 2); // reference clock code
1548 skip_bits(&s->gb, 3); // frame duration code
1550 if (get_bits1(&s->gb))
1551 skip_bits_long(&s->gb, 36); // timestamp
1553 /* a single stream can contain multiple audio assets that can be
1554 * combined to form multiple audio presentations */
1556 num_audiop = get_bits(&s->gb, 3) + 1;
1557 if (num_audiop > 1) {
1558 av_log_ask_for_sample(s->avctx, "Multiple DTS-HD audio presentations.");
1559 /* ignore such streams for now */
1563 num_assets = get_bits(&s->gb, 3) + 1;
1564 if (num_assets > 1) {
1565 av_log_ask_for_sample(s->avctx, "Multiple DTS-HD audio assets.");
1566 /* ignore such streams for now */
1570 for (i = 0; i < num_audiop; i++)
1571 active_ss_mask[i] = get_bits(&s->gb, ss_index + 1);
1573 for (i = 0; i < num_audiop; i++)
1574 for (j = 0; j <= ss_index; j++)
1575 if (active_ss_mask[i] & (1 << j))
1576 skip_bits(&s->gb, 8); // active asset mask
1578 s->mix_metadata = get_bits1(&s->gb);
1579 if (s->mix_metadata) {
1580 int mix_out_mask_size;
1582 skip_bits(&s->gb, 2); // adjustment level
1583 mix_out_mask_size = (get_bits(&s->gb, 2) + 1) << 2;
1584 s->num_mix_configs = get_bits(&s->gb, 2) + 1;
1586 for (i = 0; i < s->num_mix_configs; i++) {
1587 int mix_out_mask = get_bits(&s->gb, mix_out_mask_size);
1588 s->mix_config_num_ch[i] = dca_exss_mask2count(mix_out_mask);
1593 for (i = 0; i < num_assets; i++)
1594 skip_bits_long(&s->gb, 16 + 4 * blownup); // asset size
1596 for (i = 0; i < num_assets; i++) {
1597 if (dca_exss_parse_asset_header(s))
1601 /* not parsed further, we were only interested in the extensions mask
1602 * from the asset header */
1606 * Main frame decoding function
1607 * FIXME add arguments
1609 static int dca_decode_frame(AVCodecContext * avctx,
1610 void *data, int *data_size,
1613 const uint8_t *buf = avpkt->data;
1614 int buf_size = avpkt->size;
1617 int num_core_channels = 0;
1619 int16_t *samples = data;
1620 DCAContext *s = avctx->priv_data;
1627 s->xxch_present = 0;
1629 s->dca_buffer_size = dca_convert_bitstream(buf, buf_size, s->dca_buffer,
1630 DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
1631 if (s->dca_buffer_size == -1) {
1632 av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
1636 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
1637 if (dca_parse_frame_header(s) < 0) {
1638 //seems like the frame is corrupt, try with the next one
1642 //set AVCodec values with parsed data
1643 avctx->sample_rate = s->sample_rate;
1644 avctx->bit_rate = s->bit_rate;
1646 s->profile = FF_PROFILE_DTS;
1648 for (i = 0; i < (s->sample_blocks / 8); i++) {
1649 dca_decode_block(s, 0, i);
1652 /* record number of core channels incase less than max channels are requested */
1653 num_core_channels = s->prim_channels;
1655 /* extensions start at 32-bit boundaries into bitstream */
1656 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1658 core_ss_end = FFMIN(s->frame_size, s->dca_buffer_size) * 8;
1660 while(core_ss_end - get_bits_count(&s->gb) >= 32) {
1661 uint32_t bits = get_bits_long(&s->gb, 32);
1665 int ext_amode, xch_fsize;
1667 s->xch_base_channel = s->prim_channels;
1669 /* validate sync word using XCHFSIZE field */
1670 xch_fsize = show_bits(&s->gb, 10);
1671 if((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) &&
1672 (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1))
1675 /* skip length-to-end-of-frame field for the moment */
1676 skip_bits(&s->gb, 10);
1678 s->profile = FFMAX(s->profile, FF_PROFILE_DTS_ES);
1680 /* extension amode should == 1, number of channels in extension */
1681 /* AFAIK XCh is not used for more channels */
1682 if ((ext_amode = get_bits(&s->gb, 4)) != 1) {
1683 av_log(avctx, AV_LOG_ERROR, "XCh extension amode %d not"
1684 " supported!\n",ext_amode);
1688 /* much like core primary audio coding header */
1689 dca_parse_audio_coding_header(s, s->xch_base_channel);
1691 for (i = 0; i < (s->sample_blocks / 8); i++) {
1692 dca_decode_block(s, s->xch_base_channel, i);
1699 /* XXCh: extended channels */
1700 /* usually found either in core or HD part in DTS-HD HRA streams,
1701 * but not in DTS-ES which contains XCh extensions instead */
1702 s->xxch_present = 1;
1703 s->profile = FFMAX(s->profile, FF_PROFILE_DTS_ES);
1707 int fsize96 = show_bits(&s->gb, 12) + 1;
1708 if (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + fsize96)
1711 av_log(avctx, AV_LOG_DEBUG, "X96 extension found at %d bits\n", get_bits_count(&s->gb));
1712 skip_bits(&s->gb, 12);
1713 av_log(avctx, AV_LOG_DEBUG, "FSIZE96 = %d bytes\n", fsize96);
1714 av_log(avctx, AV_LOG_DEBUG, "REVNO = %d\n", get_bits(&s->gb, 4));
1717 s->profile = FFMAX(s->profile, FF_PROFILE_DTS_96_24);
1722 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1725 /* check for ExSS (HD part) */
1726 if (s->dca_buffer_size - s->frame_size > 32
1727 && get_bits_long(&s->gb, 32) == DCA_HD_MARKER)
1728 dca_exss_parse_header(s);
1730 avctx->profile = s->profile;
1732 channels = s->prim_channels + !!s->lfe;
1735 avctx->channel_layout = dca_core_channel_layout[s->amode];
1737 if (s->xch_present && (!avctx->request_channels ||
1738 avctx->request_channels > num_core_channels + !!s->lfe)) {
1739 avctx->channel_layout |= AV_CH_BACK_CENTER;
1741 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1742 s->channel_order_tab = dca_channel_reorder_lfe_xch[s->amode];
1744 s->channel_order_tab = dca_channel_reorder_nolfe_xch[s->amode];
1747 channels = num_core_channels + !!s->lfe;
1748 s->xch_present = 0; /* disable further xch processing */
1750 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1751 s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
1753 s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
1756 if (channels > !!s->lfe &&
1757 s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
1760 if (avctx->request_channels == 2 && s->prim_channels > 2) {
1762 s->output = DCA_STEREO;
1763 avctx->channel_layout = AV_CH_LAYOUT_STEREO;
1766 av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n",s->amode);
1771 /* There is nothing that prevents a dts frame to change channel configuration
1772 but FFmpeg doesn't support that so only set the channels if it is previously
1773 unset. Ideally during the first probe for channels the crc should be checked
1774 and only set avctx->channels when the crc is ok. Right now the decoder could
1775 set the channels based on a broken first frame.*/
1776 if (s->is_channels_set == 0) {
1777 s->is_channels_set = 1;
1778 avctx->channels = channels;
1780 if (avctx->channels != channels) {
1781 av_log(avctx, AV_LOG_ERROR, "DCA decoder does not support number of "
1782 "channels changing in stream. Skipping frame.\n");
1786 if (*data_size < (s->sample_blocks / 8) * 256 * sizeof(int16_t) * channels)
1788 *data_size = 256 / 8 * s->sample_blocks * sizeof(int16_t) * channels;
1790 /* filter to get final output */
1791 for (i = 0; i < (s->sample_blocks / 8); i++) {
1792 dca_filter_channels(s, i);
1794 /* If this was marked as a DTS-ES stream we need to subtract back- */
1795 /* channel from SL & SR to remove matrixed back-channel signal */
1796 if((s->source_pcm_res & 1) && s->xch_present) {
1797 float* back_chan = s->samples + s->channel_order_tab[s->xch_base_channel] * 256;
1798 float* lt_chan = s->samples + s->channel_order_tab[s->xch_base_channel - 2] * 256;
1799 float* rt_chan = s->samples + s->channel_order_tab[s->xch_base_channel - 1] * 256;
1801 for(j = 0; j < 256; ++j) {
1802 lt_chan[j] -= back_chan[j] * M_SQRT1_2;
1803 rt_chan[j] -= back_chan[j] * M_SQRT1_2;
1807 s->fmt_conv.float_to_int16_interleave(samples, s->samples_chanptr, 256, channels);
1808 samples += 256 * channels;
1811 /* update lfe history */
1812 lfe_samples = 2 * s->lfe * (s->sample_blocks / 8);
1813 for (i = 0; i < 2 * s->lfe * 4; i++) {
1814 s->lfe_data[i] = s->lfe_data[i + lfe_samples];
1823 * DCA initialization
1825 * @param avctx pointer to the AVCodecContext
1828 static av_cold int dca_decode_init(AVCodecContext * avctx)
1830 DCAContext *s = avctx->priv_data;
1836 dsputil_init(&s->dsp, avctx);
1837 ff_mdct_init(&s->imdct, 6, 1, 1.0);
1838 ff_synth_filter_init(&s->synth);
1839 ff_dcadsp_init(&s->dcadsp);
1840 ff_fmt_convert_init(&s->fmt_conv, avctx);
1842 for (i = 0; i < DCA_PRIM_CHANNELS_MAX+1; i++)
1843 s->samples_chanptr[i] = s->samples + i * 256;
1844 avctx->sample_fmt = AV_SAMPLE_FMT_S16;
1846 s->scale_bias = 1.0;
1848 /* allow downmixing to stereo */
1849 if (avctx->channels > 0 && avctx->request_channels < avctx->channels &&
1850 avctx->request_channels == 2) {
1851 avctx->channels = avctx->request_channels;
1857 static av_cold int dca_decode_end(AVCodecContext * avctx)
1859 DCAContext *s = avctx->priv_data;
1860 ff_mdct_end(&s->imdct);
1864 static const AVProfile profiles[] = {
1865 { FF_PROFILE_DTS, "DTS" },
1866 { FF_PROFILE_DTS_ES, "DTS-ES" },
1867 { FF_PROFILE_DTS_96_24, "DTS 96/24" },
1868 { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
1869 { FF_PROFILE_DTS_HD_MA, "DTS-HD MA" },
1870 { FF_PROFILE_UNKNOWN },
1873 AVCodec ff_dca_decoder = {
1875 .type = AVMEDIA_TYPE_AUDIO,
1877 .priv_data_size = sizeof(DCAContext),
1878 .init = dca_decode_init,
1879 .decode = dca_decode_frame,
1880 .close = dca_decode_end,
1881 .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
1882 .capabilities = CODEC_CAP_CHANNEL_CONF,
1883 .profiles = NULL_IF_CONFIG_SMALL(profiles),