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 Libav.
10 * Libav 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 * Libav 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 Libav; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29 #include "libavutil/channel_layout.h"
30 #include "libavutil/common.h"
31 #include "libavutil/float_dsp.h"
32 #include "libavutil/internal.h"
33 #include "libavutil/intreadwrite.h"
34 #include "libavutil/mathematics.h"
35 #include "libavutil/opt.h"
36 #include "libavutil/samplefmt.h"
45 #include "fmtconvert.h"
50 #include "synth_filter.h"
72 /* -1 are reserved or unknown */
73 static const int dca_ext_audio_descr_mask[] = {
77 DCA_EXT_XCH | DCA_EXT_X96,
84 /* Tables for mapping dts channel configurations to libavcodec multichannel api.
85 * Some compromises have been made for special configurations. Most configurations
86 * are never used so complete accuracy is not needed.
88 * L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
89 * S -> side, when both rear and back are configured move one of them to the side channel
91 * All 2 channel configurations -> AV_CH_LAYOUT_STEREO
93 static const uint64_t dca_core_channel_layout[] = {
94 AV_CH_FRONT_CENTER, ///< 1, A
95 AV_CH_LAYOUT_STEREO, ///< 2, A + B (dual mono)
96 AV_CH_LAYOUT_STEREO, ///< 2, L + R (stereo)
97 AV_CH_LAYOUT_STEREO, ///< 2, (L + R) + (L - R) (sum-difference)
98 AV_CH_LAYOUT_STEREO, ///< 2, LT + RT (left and right total)
99 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER, ///< 3, C + L + R
100 AV_CH_LAYOUT_STEREO | AV_CH_BACK_CENTER, ///< 3, L + R + S
101 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_BACK_CENTER, ///< 4, C + L + R + S
102 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT, ///< 4, L + R + SL + SR
104 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_SIDE_LEFT |
105 AV_CH_SIDE_RIGHT, ///< 5, C + L + R + SL + SR
107 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
108 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER, ///< 6, CL + CR + L + R + SL + SR
110 AV_CH_LAYOUT_STEREO | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT |
111 AV_CH_FRONT_CENTER | AV_CH_BACK_CENTER, ///< 6, C + L + R + LR + RR + OV
113 AV_CH_FRONT_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
114 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_BACK_CENTER |
115 AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT, ///< 6, CF + CR + LF + RF + LR + RR
117 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER |
118 AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
119 AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT, ///< 7, CL + C + CR + L + R + SL + SR
121 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
122 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
123 AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT, ///< 8, CL + CR + L + R + SL1 + SL2 + SR1 + SR2
125 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER |
126 AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
127 AV_CH_SIDE_LEFT | AV_CH_BACK_CENTER | AV_CH_SIDE_RIGHT, ///< 8, CL + C + CR + L + R + SL + S + SR
130 static const int8_t dca_lfe_index[] = {
131 1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
134 static const int8_t dca_channel_reorder_lfe[][9] = {
135 { 0, -1, -1, -1, -1, -1, -1, -1, -1 },
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 { 2, 0, 1, -1, -1, -1, -1, -1, -1 },
141 { 0, 1, 3, -1, -1, -1, -1, -1, -1 },
142 { 2, 0, 1, 4, -1, -1, -1, -1, -1 },
143 { 0, 1, 3, 4, -1, -1, -1, -1, -1 },
144 { 2, 0, 1, 4, 5, -1, -1, -1, -1 },
145 { 3, 4, 0, 1, 5, 6, -1, -1, -1 },
146 { 2, 0, 1, 4, 5, 6, -1, -1, -1 },
147 { 0, 6, 4, 5, 2, 3, -1, -1, -1 },
148 { 4, 2, 5, 0, 1, 6, 7, -1, -1 },
149 { 5, 6, 0, 1, 7, 3, 8, 4, -1 },
150 { 4, 2, 5, 0, 1, 6, 8, 7, -1 },
153 static const int8_t dca_channel_reorder_lfe_xch[][9] = {
154 { 0, 2, -1, -1, -1, -1, -1, -1, -1 },
155 { 0, 1, 3, -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 { 2, 0, 1, 4, -1, -1, -1, -1, -1 },
160 { 0, 1, 3, 4, -1, -1, -1, -1, -1 },
161 { 2, 0, 1, 4, 5, -1, -1, -1, -1 },
162 { 0, 1, 4, 5, 3, -1, -1, -1, -1 },
163 { 2, 0, 1, 5, 6, 4, -1, -1, -1 },
164 { 3, 4, 0, 1, 6, 7, 5, -1, -1 },
165 { 2, 0, 1, 4, 5, 6, 7, -1, -1 },
166 { 0, 6, 4, 5, 2, 3, 7, -1, -1 },
167 { 4, 2, 5, 0, 1, 7, 8, 6, -1 },
168 { 5, 6, 0, 1, 8, 3, 9, 4, 7 },
169 { 4, 2, 5, 0, 1, 6, 9, 8, 7 },
172 static const int8_t dca_channel_reorder_nolfe[][9] = {
173 { 0, -1, -1, -1, -1, -1, -1, -1, -1 },
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 { 2, 0, 1, -1, -1, -1, -1, -1, -1 },
179 { 0, 1, 2, -1, -1, -1, -1, -1, -1 },
180 { 2, 0, 1, 3, -1, -1, -1, -1, -1 },
181 { 0, 1, 2, 3, -1, -1, -1, -1, -1 },
182 { 2, 0, 1, 3, 4, -1, -1, -1, -1 },
183 { 2, 3, 0, 1, 4, 5, -1, -1, -1 },
184 { 2, 0, 1, 3, 4, 5, -1, -1, -1 },
185 { 0, 5, 3, 4, 1, 2, -1, -1, -1 },
186 { 3, 2, 4, 0, 1, 5, 6, -1, -1 },
187 { 4, 5, 0, 1, 6, 2, 7, 3, -1 },
188 { 3, 2, 4, 0, 1, 5, 7, 6, -1 },
191 static const int8_t dca_channel_reorder_nolfe_xch[][9] = {
192 { 0, 1, -1, -1, -1, -1, -1, -1, -1 },
193 { 0, 1, 2, -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 { 2, 0, 1, 3, -1, -1, -1, -1, -1 },
198 { 0, 1, 2, 3, -1, -1, -1, -1, -1 },
199 { 2, 0, 1, 3, 4, -1, -1, -1, -1 },
200 { 0, 1, 3, 4, 2, -1, -1, -1, -1 },
201 { 2, 0, 1, 4, 5, 3, -1, -1, -1 },
202 { 2, 3, 0, 1, 5, 6, 4, -1, -1 },
203 { 2, 0, 1, 3, 4, 5, 6, -1, -1 },
204 { 0, 5, 3, 4, 1, 2, 6, -1, -1 },
205 { 3, 2, 4, 0, 1, 6, 7, 5, -1 },
206 { 4, 5, 0, 1, 7, 2, 8, 3, 6 },
207 { 3, 2, 4, 0, 1, 5, 8, 7, 6 },
210 #define DCA_DOLBY 101 /* FIXME */
212 #define DCA_CHANNEL_BITS 6
213 #define DCA_CHANNEL_MASK 0x3F
217 #define HEADER_SIZE 14
219 #define DCA_NSYNCAUX 0x9A1105A0
221 /** Bit allocation */
222 typedef struct BitAlloc {
223 int offset; ///< code values offset
224 int maxbits[8]; ///< max bits in VLC
225 int wrap; ///< wrap for get_vlc2()
226 VLC vlc[8]; ///< actual codes
229 static BitAlloc dca_bitalloc_index; ///< indexes for samples VLC select
230 static BitAlloc dca_tmode; ///< transition mode VLCs
231 static BitAlloc dca_scalefactor; ///< scalefactor VLCs
232 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
234 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba,
237 return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) +
241 static const uint16_t dca_vlc_offs[] = {
242 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364,
243 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508,
244 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564,
245 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240,
246 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
247 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
250 static av_cold void dca_init_vlcs(void)
252 static int vlcs_initialized = 0;
254 static VLC_TYPE dca_table[23622][2];
256 if (vlcs_initialized)
259 dca_bitalloc_index.offset = 1;
260 dca_bitalloc_index.wrap = 2;
261 for (i = 0; i < 5; i++) {
262 dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]];
263 dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i];
264 init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
265 bitalloc_12_bits[i], 1, 1,
266 bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
268 dca_scalefactor.offset = -64;
269 dca_scalefactor.wrap = 2;
270 for (i = 0; i < 5; i++) {
271 dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]];
272 dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5];
273 init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
274 scales_bits[i], 1, 1,
275 scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
277 dca_tmode.offset = 0;
279 for (i = 0; i < 4; i++) {
280 dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]];
281 dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10];
282 init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
284 tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
287 for (i = 0; i < 10; i++)
288 for (j = 0; j < 7; j++) {
289 if (!bitalloc_codes[i][j])
291 dca_smpl_bitalloc[i + 1].offset = bitalloc_offsets[i];
292 dca_smpl_bitalloc[i + 1].wrap = 1 + (j > 4);
293 dca_smpl_bitalloc[i + 1].vlc[j].table = &dca_table[dca_vlc_offs[c]];
294 dca_smpl_bitalloc[i + 1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
296 init_vlc(&dca_smpl_bitalloc[i + 1].vlc[j], bitalloc_maxbits[i][j],
298 bitalloc_bits[i][j], 1, 1,
299 bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC);
302 vlcs_initialized = 1;
305 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
308 *dst++ = get_bits(gb, bits);
311 static int dca_parse_audio_coding_header(DCAContext *s, int base_channel)
314 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
315 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
316 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
318 s->total_channels = get_bits(&s->gb, 3) + 1 + base_channel;
319 s->prim_channels = s->total_channels;
321 if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
322 s->prim_channels = DCA_PRIM_CHANNELS_MAX;
324 for (i = base_channel; i < s->prim_channels; i++) {
325 s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
326 if (s->subband_activity[i] > DCA_SUBBANDS)
327 s->subband_activity[i] = DCA_SUBBANDS;
329 for (i = base_channel; i < s->prim_channels; i++) {
330 s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
331 if (s->vq_start_subband[i] > DCA_SUBBANDS)
332 s->vq_start_subband[i] = DCA_SUBBANDS;
334 get_array(&s->gb, s->joint_intensity + base_channel, s->prim_channels - base_channel, 3);
335 get_array(&s->gb, s->transient_huffman + base_channel, s->prim_channels - base_channel, 2);
336 get_array(&s->gb, s->scalefactor_huffman + base_channel, s->prim_channels - base_channel, 3);
337 get_array(&s->gb, s->bitalloc_huffman + base_channel, s->prim_channels - base_channel, 3);
339 /* Get codebooks quantization indexes */
341 memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
342 for (j = 1; j < 11; j++)
343 for (i = base_channel; i < s->prim_channels; i++)
344 s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
346 /* Get scale factor adjustment */
347 for (j = 0; j < 11; j++)
348 for (i = base_channel; i < s->prim_channels; i++)
349 s->scalefactor_adj[i][j] = 1;
351 for (j = 1; j < 11; j++)
352 for (i = base_channel; i < s->prim_channels; i++)
353 if (s->quant_index_huffman[i][j] < thr[j])
354 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
356 if (s->crc_present) {
357 /* Audio header CRC check */
358 get_bits(&s->gb, 16);
361 s->current_subframe = 0;
362 s->current_subsubframe = 0;
365 av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);
366 av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);
367 for (i = base_channel; i < s->prim_channels; i++) {
368 av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n",
369 s->subband_activity[i]);
370 av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n",
371 s->vq_start_subband[i]);
372 av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n",
373 s->joint_intensity[i]);
374 av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n",
375 s->transient_huffman[i]);
376 av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n",
377 s->scalefactor_huffman[i]);
378 av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n",
379 s->bitalloc_huffman[i]);
380 av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");
381 for (j = 0; j < 11; j++)
382 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->quant_index_huffman[i][j]);
383 av_log(s->avctx, AV_LOG_DEBUG, "\n");
384 av_log(s->avctx, AV_LOG_DEBUG, "scalefac adj:");
385 for (j = 0; j < 11; j++)
386 av_log(s->avctx, AV_LOG_DEBUG, " %1.3f", s->scalefactor_adj[i][j]);
387 av_log(s->avctx, AV_LOG_DEBUG, "\n");
394 static int dca_parse_frame_header(DCAContext *s)
396 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
399 skip_bits_long(&s->gb, 32);
402 s->frame_type = get_bits(&s->gb, 1);
403 s->samples_deficit = get_bits(&s->gb, 5) + 1;
404 s->crc_present = get_bits(&s->gb, 1);
405 s->sample_blocks = get_bits(&s->gb, 7) + 1;
406 s->frame_size = get_bits(&s->gb, 14) + 1;
407 if (s->frame_size < 95)
408 return AVERROR_INVALIDDATA;
409 s->amode = get_bits(&s->gb, 6);
410 s->sample_rate = avpriv_dca_sample_rates[get_bits(&s->gb, 4)];
412 return AVERROR_INVALIDDATA;
413 s->bit_rate_index = get_bits(&s->gb, 5);
414 s->bit_rate = dca_bit_rates[s->bit_rate_index];
416 return AVERROR_INVALIDDATA;
418 skip_bits1(&s->gb); // always 0 (reserved, cf. ETSI TS 102 114 V1.4.1)
419 s->dynrange = get_bits(&s->gb, 1);
420 s->timestamp = get_bits(&s->gb, 1);
421 s->aux_data = get_bits(&s->gb, 1);
422 s->hdcd = get_bits(&s->gb, 1);
423 s->ext_descr = get_bits(&s->gb, 3);
424 s->ext_coding = get_bits(&s->gb, 1);
425 s->aspf = get_bits(&s->gb, 1);
426 s->lfe = get_bits(&s->gb, 2);
427 s->predictor_history = get_bits(&s->gb, 1);
430 av_log(s->avctx, AV_LOG_ERROR, "Invalid LFE value: %d\n", s->lfe);
431 return AVERROR_INVALIDDATA;
434 /* TODO: check CRC */
436 s->header_crc = get_bits(&s->gb, 16);
438 s->multirate_inter = get_bits(&s->gb, 1);
439 s->version = get_bits(&s->gb, 4);
440 s->copy_history = get_bits(&s->gb, 2);
441 s->source_pcm_res = get_bits(&s->gb, 3);
442 s->front_sum = get_bits(&s->gb, 1);
443 s->surround_sum = get_bits(&s->gb, 1);
444 s->dialog_norm = get_bits(&s->gb, 4);
446 /* FIXME: channels mixing levels */
447 s->output = s->amode;
449 s->output |= DCA_LFE;
452 av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);
453 av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);
454 av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);
455 av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",
456 s->sample_blocks, s->sample_blocks * 32);
457 av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);
458 av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",
459 s->amode, dca_channels[s->amode]);
460 av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i Hz\n",
462 av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i bits/s\n",
464 av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);
465 av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);
466 av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);
467 av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);
468 av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);
469 av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);
470 av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);
471 av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);
472 av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",
473 s->predictor_history);
474 av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);
475 av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",
477 av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);
478 av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);
479 av_log(s->avctx, AV_LOG_DEBUG,
480 "source pcm resolution: %i (%i bits/sample)\n",
481 s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);
482 av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);
483 av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);
484 av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);
485 av_log(s->avctx, AV_LOG_DEBUG, "\n");
488 /* Primary audio coding header */
489 s->subframes = get_bits(&s->gb, 4) + 1;
491 return dca_parse_audio_coding_header(s, 0);
494 static inline int get_scale(GetBitContext *gb, int level, int value, int log2range)
497 /* huffman encoded */
498 value += get_bitalloc(gb, &dca_scalefactor, level);
499 value = av_clip(value, 0, (1 << log2range) - 1);
500 } else if (level < 8) {
501 if (level + 1 > log2range) {
502 skip_bits(gb, level + 1 - log2range);
503 value = get_bits(gb, log2range);
505 value = get_bits(gb, level + 1);
511 static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
513 /* Primary audio coding side information */
516 if (get_bits_left(&s->gb) < 0)
517 return AVERROR_INVALIDDATA;
520 s->subsubframes[s->current_subframe] = get_bits(&s->gb, 2) + 1;
521 s->partial_samples[s->current_subframe] = get_bits(&s->gb, 3);
524 for (j = base_channel; j < s->prim_channels; j++) {
525 for (k = 0; k < s->subband_activity[j]; k++)
526 s->prediction_mode[j][k] = get_bits(&s->gb, 1);
529 /* Get prediction codebook */
530 for (j = base_channel; j < s->prim_channels; j++) {
531 for (k = 0; k < s->subband_activity[j]; k++) {
532 if (s->prediction_mode[j][k] > 0) {
533 /* (Prediction coefficient VQ address) */
534 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
539 /* Bit allocation index */
540 for (j = base_channel; j < s->prim_channels; j++) {
541 for (k = 0; k < s->vq_start_subband[j]; k++) {
542 if (s->bitalloc_huffman[j] == 6)
543 s->bitalloc[j][k] = get_bits(&s->gb, 5);
544 else if (s->bitalloc_huffman[j] == 5)
545 s->bitalloc[j][k] = get_bits(&s->gb, 4);
546 else if (s->bitalloc_huffman[j] == 7) {
547 av_log(s->avctx, AV_LOG_ERROR,
548 "Invalid bit allocation index\n");
549 return AVERROR_INVALIDDATA;
552 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
555 if (s->bitalloc[j][k] > 26) {
556 av_dlog(s->avctx, "bitalloc index [%i][%i] too big (%i)\n",
557 j, k, s->bitalloc[j][k]);
558 return AVERROR_INVALIDDATA;
563 /* Transition mode */
564 for (j = base_channel; j < s->prim_channels; j++) {
565 for (k = 0; k < s->subband_activity[j]; k++) {
566 s->transition_mode[j][k] = 0;
567 if (s->subsubframes[s->current_subframe] > 1 &&
568 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
569 s->transition_mode[j][k] =
570 get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
575 if (get_bits_left(&s->gb) < 0)
576 return AVERROR_INVALIDDATA;
578 for (j = base_channel; j < s->prim_channels; j++) {
579 const uint32_t *scale_table;
580 int scale_sum, log_size;
582 memset(s->scale_factor[j], 0,
583 s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
585 if (s->scalefactor_huffman[j] == 6) {
586 scale_table = scale_factor_quant7;
589 scale_table = scale_factor_quant6;
593 /* When huffman coded, only the difference is encoded */
596 for (k = 0; k < s->subband_activity[j]; k++) {
597 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
598 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
599 s->scale_factor[j][k][0] = scale_table[scale_sum];
602 if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
603 /* Get second scale factor */
604 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
605 s->scale_factor[j][k][1] = scale_table[scale_sum];
610 /* Joint subband scale factor codebook select */
611 for (j = base_channel; j < s->prim_channels; j++) {
612 /* Transmitted only if joint subband coding enabled */
613 if (s->joint_intensity[j] > 0)
614 s->joint_huff[j] = get_bits(&s->gb, 3);
617 if (get_bits_left(&s->gb) < 0)
618 return AVERROR_INVALIDDATA;
620 /* Scale factors for joint subband coding */
621 for (j = base_channel; j < s->prim_channels; j++) {
624 /* Transmitted only if joint subband coding enabled */
625 if (s->joint_intensity[j] > 0) {
627 source_channel = s->joint_intensity[j] - 1;
629 /* When huffman coded, only the difference is encoded
630 * (is this valid as well for joint scales ???) */
632 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
633 scale = get_scale(&s->gb, s->joint_huff[j], 64 /* bias */, 7);
634 s->joint_scale_factor[j][k] = scale; /*joint_scale_table[scale]; */
637 if (!(s->debug_flag & 0x02)) {
638 av_log(s->avctx, AV_LOG_DEBUG,
639 "Joint stereo coding not supported\n");
640 s->debug_flag |= 0x02;
645 /* Dynamic range coefficient */
646 if (!base_channel && s->dynrange)
647 s->dynrange_coef = get_bits(&s->gb, 8);
649 /* Side information CRC check word */
650 if (s->crc_present) {
651 get_bits(&s->gb, 16);
655 * Primary audio data arrays
658 /* VQ encoded high frequency subbands */
659 for (j = base_channel; j < s->prim_channels; j++)
660 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
661 /* 1 vector -> 32 samples */
662 s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
664 /* Low frequency effect data */
665 if (!base_channel && s->lfe) {
667 int lfe_samples = 2 * s->lfe * (4 + block_index);
668 int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
671 for (j = lfe_samples; j < lfe_end_sample; j++) {
672 /* Signed 8 bits int */
673 s->lfe_data[j] = get_sbits(&s->gb, 8);
676 /* Scale factor index */
677 skip_bits(&s->gb, 1);
678 s->lfe_scale_factor = scale_factor_quant7[get_bits(&s->gb, 7)];
680 /* Quantization step size * scale factor */
681 lfe_scale = 0.035 * s->lfe_scale_factor;
683 for (j = lfe_samples; j < lfe_end_sample; j++)
684 s->lfe_data[j] *= lfe_scale;
688 av_log(s->avctx, AV_LOG_DEBUG, "subsubframes: %i\n",
689 s->subsubframes[s->current_subframe]);
690 av_log(s->avctx, AV_LOG_DEBUG, "partial samples: %i\n",
691 s->partial_samples[s->current_subframe]);
693 for (j = base_channel; j < s->prim_channels; j++) {
694 av_log(s->avctx, AV_LOG_DEBUG, "prediction mode:");
695 for (k = 0; k < s->subband_activity[j]; k++)
696 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->prediction_mode[j][k]);
697 av_log(s->avctx, AV_LOG_DEBUG, "\n");
699 for (j = base_channel; j < s->prim_channels; j++) {
700 for (k = 0; k < s->subband_activity[j]; k++)
701 av_log(s->avctx, AV_LOG_DEBUG,
702 "prediction coefs: %f, %f, %f, %f\n",
703 (float) adpcm_vb[s->prediction_vq[j][k]][0] / 8192,
704 (float) adpcm_vb[s->prediction_vq[j][k]][1] / 8192,
705 (float) adpcm_vb[s->prediction_vq[j][k]][2] / 8192,
706 (float) adpcm_vb[s->prediction_vq[j][k]][3] / 8192);
708 for (j = base_channel; j < s->prim_channels; j++) {
709 av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index: ");
710 for (k = 0; k < s->vq_start_subband[j]; k++)
711 av_log(s->avctx, AV_LOG_DEBUG, "%2.2i ", s->bitalloc[j][k]);
712 av_log(s->avctx, AV_LOG_DEBUG, "\n");
714 for (j = base_channel; j < s->prim_channels; j++) {
715 av_log(s->avctx, AV_LOG_DEBUG, "Transition mode:");
716 for (k = 0; k < s->subband_activity[j]; k++)
717 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->transition_mode[j][k]);
718 av_log(s->avctx, AV_LOG_DEBUG, "\n");
720 for (j = base_channel; j < s->prim_channels; j++) {
721 av_log(s->avctx, AV_LOG_DEBUG, "Scale factor:");
722 for (k = 0; k < s->subband_activity[j]; k++) {
723 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0)
724 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->scale_factor[j][k][0]);
725 if (k < s->vq_start_subband[j] && s->transition_mode[j][k])
726 av_log(s->avctx, AV_LOG_DEBUG, " %i(t)", s->scale_factor[j][k][1]);
728 av_log(s->avctx, AV_LOG_DEBUG, "\n");
730 for (j = base_channel; j < s->prim_channels; j++) {
731 if (s->joint_intensity[j] > 0) {
732 int source_channel = s->joint_intensity[j] - 1;
733 av_log(s->avctx, AV_LOG_DEBUG, "Joint scale factor index:\n");
734 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++)
735 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->joint_scale_factor[j][k]);
736 av_log(s->avctx, AV_LOG_DEBUG, "\n");
739 for (j = base_channel; j < s->prim_channels; j++)
740 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
741 av_log(s->avctx, AV_LOG_DEBUG, "VQ index: %i\n", s->high_freq_vq[j][k]);
742 if (!base_channel && s->lfe) {
743 int lfe_samples = 2 * s->lfe * (4 + block_index);
744 int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
746 av_log(s->avctx, AV_LOG_DEBUG, "LFE samples:\n");
747 for (j = lfe_samples; j < lfe_end_sample; j++)
748 av_log(s->avctx, AV_LOG_DEBUG, " %f", s->lfe_data[j]);
749 av_log(s->avctx, AV_LOG_DEBUG, "\n");
756 static void qmf_32_subbands(DCAContext *s, int chans,
757 float samples_in[32][8], float *samples_out,
760 const float *prCoeff;
762 int sb_act = s->subband_activity[chans];
764 scale *= sqrt(1 / 8.0);
767 if (!s->multirate_inter) /* Non-perfect reconstruction */
768 prCoeff = fir_32bands_nonperfect;
769 else /* Perfect reconstruction */
770 prCoeff = fir_32bands_perfect;
772 s->dcadsp.qmf_32_subbands(samples_in, sb_act, &s->synth, &s->imdct,
773 s->subband_fir_hist[chans],
774 &s->hist_index[chans],
775 s->subband_fir_noidea[chans], prCoeff,
776 samples_out, s->raXin, scale);
779 static void lfe_interpolation_fir(DCAContext *s, int decimation_select,
780 int num_deci_sample, float *samples_in,
783 /* samples_in: An array holding decimated samples.
784 * Samples in current subframe starts from samples_in[0],
785 * while samples_in[-1], samples_in[-2], ..., stores samples
786 * from last subframe as history.
788 * samples_out: An array holding interpolated samples
792 const float *prCoeff;
795 /* Select decimation filter */
796 if (decimation_select == 1) {
798 prCoeff = lfe_fir_128;
801 prCoeff = lfe_fir_64;
804 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
805 s->dcadsp.lfe_fir[idx](samples_out, samples_in, prCoeff);
807 samples_out += 2 * 32 * (1 + idx);
811 /* downmixing routines */
812 #define MIX_REAR1(samples, s1, rs, coef) \
813 samples[0][i] += samples[s1][i] * coef[rs][0]; \
814 samples[1][i] += samples[s1][i] * coef[rs][1];
816 #define MIX_REAR2(samples, s1, s2, rs, coef) \
817 samples[0][i] += samples[s1][i] * coef[rs][0] + samples[s2][i] * coef[rs + 1][0]; \
818 samples[1][i] += samples[s1][i] * coef[rs][1] + samples[s2][i] * coef[rs + 1][1];
820 #define MIX_FRONT3(samples, coef) \
824 samples[0][i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
825 samples[1][i] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
827 #define DOWNMIX_TO_STEREO(op1, op2) \
828 for (i = 0; i < 256; i++) { \
833 static void dca_downmix(float **samples, int srcfmt, int lfe_present,
834 float coef[DCA_PRIM_CHANNELS_MAX + 1][2],
835 const int8_t *channel_mapping)
837 int c, l, r, sl, sr, s;
844 av_log(NULL, 0, "Not implemented!\n");
848 case DCA_STEREO_TOTAL:
849 case DCA_STEREO_SUMDIFF:
852 c = channel_mapping[0];
853 l = channel_mapping[1];
854 r = channel_mapping[2];
855 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef), );
858 s = channel_mapping[2];
859 DOWNMIX_TO_STEREO(MIX_REAR1(samples, s, 2, coef), );
862 c = channel_mapping[0];
863 l = channel_mapping[1];
864 r = channel_mapping[2];
865 s = channel_mapping[3];
866 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
867 MIX_REAR1(samples, s, 3, coef));
870 sl = channel_mapping[2];
871 sr = channel_mapping[3];
872 DOWNMIX_TO_STEREO(MIX_REAR2(samples, sl, sr, 2, coef), );
875 c = channel_mapping[0];
876 l = channel_mapping[1];
877 r = channel_mapping[2];
878 sl = channel_mapping[3];
879 sr = channel_mapping[4];
880 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
881 MIX_REAR2(samples, sl, sr, 3, coef));
885 int lf_buf = dca_lfe_index[srcfmt];
886 int lf_idx = dca_channels[srcfmt];
887 for (i = 0; i < 256; i++) {
888 samples[0][i] += samples[lf_buf][i] * coef[lf_idx][0];
889 samples[1][i] += samples[lf_buf][i] * coef[lf_idx][1];
894 #ifndef decode_blockcodes
895 /* Very compact version of the block code decoder that does not use table
896 * look-up but is slightly slower */
897 static int decode_blockcode(int code, int levels, int32_t *values)
900 int offset = (levels - 1) >> 1;
902 for (i = 0; i < 4; i++) {
903 int div = FASTDIV(code, levels);
904 values[i] = code - offset - div * levels;
911 static int decode_blockcodes(int code1, int code2, int levels, int32_t *values)
913 return decode_blockcode(code1, levels, values) |
914 decode_blockcode(code2, levels, values + 4);
918 static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 };
919 static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 };
921 static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
924 int subsubframe = s->current_subsubframe;
926 const float *quant_step_table;
929 float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
930 LOCAL_ALIGNED_16(int32_t, block, [8 * DCA_SUBBANDS]);
936 /* Select quantization step size table */
937 if (s->bit_rate_index == 0x1f)
938 quant_step_table = lossless_quant_d;
940 quant_step_table = lossy_quant_d;
942 for (k = base_channel; k < s->prim_channels; k++) {
943 float rscale[DCA_SUBBANDS];
945 if (get_bits_left(&s->gb) < 0)
946 return AVERROR_INVALIDDATA;
948 for (l = 0; l < s->vq_start_subband[k]; l++) {
951 /* Select the mid-tread linear quantizer */
952 int abits = s->bitalloc[k][l];
954 float quant_step_size = quant_step_table[abits];
957 * Determine quantization index code book and its type
960 /* Select quantization index code book */
961 int sel = s->quant_index_huffman[k][abits];
964 * Extract bits from the bit stream
968 memset(block + 8 * l, 0, 8 * sizeof(block[0]));
970 /* Deal with transients */
971 int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l];
972 rscale[l] = quant_step_size * s->scale_factor[k][l][sfi] *
973 s->scalefactor_adj[k][sel];
975 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
978 int block_code1, block_code2, size, levels, err;
980 size = abits_sizes[abits - 1];
981 levels = abits_levels[abits - 1];
983 block_code1 = get_bits(&s->gb, size);
984 block_code2 = get_bits(&s->gb, size);
985 err = decode_blockcodes(block_code1, block_code2,
986 levels, block + 8 * l);
988 av_log(s->avctx, AV_LOG_ERROR,
989 "ERROR: block code look-up failed\n");
990 return AVERROR_INVALIDDATA;
994 for (m = 0; m < 8; m++)
995 block[8 * l + m] = get_sbits(&s->gb, abits - 3);
999 for (m = 0; m < 8; m++)
1000 block[8 * l + m] = get_bitalloc(&s->gb,
1001 &dca_smpl_bitalloc[abits], sel);
1006 s->fmt_conv.int32_to_float_fmul_array8(&s->fmt_conv, subband_samples[k][0],
1007 block, rscale, 8 * s->vq_start_subband[k]);
1009 for (l = 0; l < s->vq_start_subband[k]; l++) {
1012 * Inverse ADPCM if in prediction mode
1014 if (s->prediction_mode[k][l]) {
1016 if (s->predictor_history)
1017 subband_samples[k][l][0] += (adpcm_vb[s->prediction_vq[k][l]][0] *
1018 s->subband_samples_hist[k][l][3] +
1019 adpcm_vb[s->prediction_vq[k][l]][1] *
1020 s->subband_samples_hist[k][l][2] +
1021 adpcm_vb[s->prediction_vq[k][l]][2] *
1022 s->subband_samples_hist[k][l][1] +
1023 adpcm_vb[s->prediction_vq[k][l]][3] *
1024 s->subband_samples_hist[k][l][0]) *
1026 for (m = 1; m < 8; m++) {
1027 float sum = adpcm_vb[s->prediction_vq[k][l]][0] *
1028 subband_samples[k][l][m - 1];
1029 for (n = 2; n <= 4; n++)
1031 sum += adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1032 subband_samples[k][l][m - n];
1033 else if (s->predictor_history)
1034 sum += adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1035 s->subband_samples_hist[k][l][m - n + 4];
1036 subband_samples[k][l][m] += sum * 1.0f / 8192;
1042 * Decode VQ encoded high frequencies
1044 if (s->subband_activity[k] > s->vq_start_subband[k]) {
1045 if (!s->debug_flag & 0x01) {
1046 av_log(s->avctx, AV_LOG_DEBUG,
1047 "Stream with high frequencies VQ coding\n");
1048 s->debug_flag |= 0x01;
1050 s->dcadsp.decode_hf(subband_samples[k], s->high_freq_vq[k],
1051 high_freq_vq, subsubframe * 8,
1052 s->scale_factor[k], s->vq_start_subband[k],
1053 s->subband_activity[k]);
1057 /* Check for DSYNC after subsubframe */
1058 if (s->aspf || subsubframe == s->subsubframes[s->current_subframe] - 1) {
1059 if (0xFFFF == get_bits(&s->gb, 16)) { /* 0xFFFF */
1061 av_log(s->avctx, AV_LOG_DEBUG, "Got subframe DSYNC\n");
1064 av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
1065 return AVERROR_INVALIDDATA;
1069 /* Backup predictor history for adpcm */
1070 for (k = base_channel; k < s->prim_channels; k++)
1071 for (l = 0; l < s->vq_start_subband[k]; l++)
1072 AV_COPY128(s->subband_samples_hist[k][l], &subband_samples[k][l][4]);
1077 static int dca_filter_channels(DCAContext *s, int block_index)
1079 float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1082 /* 32 subbands QMF */
1083 for (k = 0; k < s->prim_channels; k++) {
1084 if (s->channel_order_tab[k] >= 0)
1085 qmf_32_subbands(s, k, subband_samples[k],
1086 s->samples_chanptr[s->channel_order_tab[k]],
1087 M_SQRT1_2 / 32768.0);
1090 /* Generate LFE samples for this subsubframe FIXME!!! */
1092 lfe_interpolation_fir(s, s->lfe, 2 * s->lfe,
1093 s->lfe_data + 2 * s->lfe * (block_index + 4),
1094 s->samples_chanptr[dca_lfe_index[s->amode]]);
1095 /* Outputs 20bits pcm samples */
1098 /* Downmixing to Stereo */
1099 if (s->prim_channels + !!s->lfe > 2 &&
1100 s->avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
1101 dca_downmix(s->samples_chanptr, s->amode, !!s->lfe, s->downmix_coef,
1102 s->channel_order_tab);
1108 static int dca_subframe_footer(DCAContext *s, int base_channel)
1110 int in, out, aux_data_count, aux_data_end, reserved;
1114 * Unpack optional information
1117 /* presumably optional information only appears in the core? */
1118 if (!base_channel) {
1120 skip_bits_long(&s->gb, 32);
1123 aux_data_count = get_bits(&s->gb, 6);
1126 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1128 aux_data_end = 8 * aux_data_count + get_bits_count(&s->gb);
1130 if ((nsyncaux = get_bits_long(&s->gb, 32)) != DCA_NSYNCAUX) {
1131 av_log(s->avctx, AV_LOG_ERROR, "nSYNCAUX mismatch %#"PRIx32"\n",
1133 return AVERROR_INVALIDDATA;
1136 if (get_bits1(&s->gb)) { // bAUXTimeStampFlag
1137 avpriv_request_sample(s->avctx,
1138 "Auxiliary Decode Time Stamp Flag");
1140 skip_bits(&s->gb, (-get_bits_count(&s->gb)) & 4);
1141 // 44 bits: nMSByte (8), nMarker (4), nLSByte (28), nMarker (4)
1142 skip_bits_long(&s->gb, 44);
1145 if ((s->core_downmix = get_bits1(&s->gb))) {
1146 int am = get_bits(&s->gb, 3);
1149 s->core_downmix_amode = DCA_MONO;
1152 s->core_downmix_amode = DCA_STEREO;
1155 s->core_downmix_amode = DCA_STEREO_TOTAL;
1158 s->core_downmix_amode = DCA_3F;
1161 s->core_downmix_amode = DCA_2F1R;
1164 s->core_downmix_amode = DCA_2F2R;
1167 s->core_downmix_amode = DCA_3F1R;
1170 av_log(s->avctx, AV_LOG_ERROR,
1171 "Invalid mode %d for embedded downmix coefficients\n",
1173 return AVERROR_INVALIDDATA;
1175 for (out = 0; out < dca_channels[s->core_downmix_amode]; out++) {
1176 for (in = 0; in < s->prim_channels + !!s->lfe; in++) {
1177 uint16_t tmp = get_bits(&s->gb, 9);
1178 if ((tmp & 0xFF) > 241) {
1179 av_log(s->avctx, AV_LOG_ERROR,
1180 "Invalid downmix coefficient code %"PRIu16"\n",
1182 return AVERROR_INVALIDDATA;
1184 s->core_downmix_codes[in][out] = tmp;
1189 align_get_bits(&s->gb); // byte align
1190 skip_bits(&s->gb, 16); // nAUXCRC16
1192 // additional data (reserved, cf. ETSI TS 102 114 V1.4.1)
1193 if ((reserved = (aux_data_end - get_bits_count(&s->gb))) < 0) {
1194 av_log(s->avctx, AV_LOG_ERROR,
1195 "Overread auxiliary data by %d bits\n", -reserved);
1196 return AVERROR_INVALIDDATA;
1197 } else if (reserved) {
1198 avpriv_request_sample(s->avctx,
1199 "Core auxiliary data reserved content");
1200 skip_bits_long(&s->gb, reserved);
1204 if (s->crc_present && s->dynrange)
1205 get_bits(&s->gb, 16);
1212 * Decode a dca frame block
1214 * @param s pointer to the DCAContext
1217 static int dca_decode_block(DCAContext *s, int base_channel, int block_index)
1222 if (s->current_subframe >= s->subframes) {
1223 av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1224 s->current_subframe, s->subframes);
1225 return AVERROR_INVALIDDATA;
1228 if (!s->current_subsubframe) {
1230 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
1232 /* Read subframe header */
1233 if ((ret = dca_subframe_header(s, base_channel, block_index)))
1237 /* Read subsubframe */
1239 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
1241 if ((ret = dca_subsubframe(s, base_channel, block_index)))
1245 s->current_subsubframe++;
1246 if (s->current_subsubframe >= s->subsubframes[s->current_subframe]) {
1247 s->current_subsubframe = 0;
1248 s->current_subframe++;
1250 if (s->current_subframe >= s->subframes) {
1252 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
1254 /* Read subframe footer */
1255 if ((ret = dca_subframe_footer(s, base_channel)))
1262 static float dca_dmix_code(unsigned code)
1264 int sign = (code >> 8) - 1;
1266 return ((dca_dmixtable[code] ^ sign) - sign) * (1.0 / (1U << 15));
1270 * Main frame decoding function
1271 * FIXME add arguments
1273 static int dca_decode_frame(AVCodecContext *avctx, void *data,
1274 int *got_frame_ptr, AVPacket *avpkt)
1276 AVFrame *frame = data;
1277 const uint8_t *buf = avpkt->data;
1278 int buf_size = avpkt->size;
1281 int num_core_channels = 0;
1283 float **samples_flt;
1284 DCAContext *s = avctx->priv_data;
1285 int channels, full_channels;
1290 s->dca_buffer_size = ff_dca_convert_bitstream(buf, buf_size, s->dca_buffer,
1291 DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
1292 if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
1293 av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
1294 return AVERROR_INVALIDDATA;
1297 if ((ret = dca_parse_frame_header(s)) < 0) {
1298 // seems like the frame is corrupt, try with the next one
1301 // set AVCodec values with parsed data
1302 avctx->sample_rate = s->sample_rate;
1303 avctx->bit_rate = s->bit_rate;
1305 s->profile = FF_PROFILE_DTS;
1307 for (i = 0; i < (s->sample_blocks / 8); i++) {
1308 if ((ret = dca_decode_block(s, 0, i))) {
1309 av_log(avctx, AV_LOG_ERROR, "error decoding block\n");
1314 /* record number of core channels incase less than max channels are requested */
1315 num_core_channels = s->prim_channels;
1318 s->core_ext_mask = dca_ext_audio_descr_mask[s->ext_descr];
1320 s->core_ext_mask = 0;
1322 core_ss_end = FFMIN(s->frame_size, s->dca_buffer_size) * 8;
1324 /* only scan for extensions if ext_descr was unknown or indicated a
1325 * supported XCh extension */
1326 if (s->core_ext_mask < 0 || s->core_ext_mask & DCA_EXT_XCH) {
1327 /* if ext_descr was unknown, clear s->core_ext_mask so that the
1328 * extensions scan can fill it up */
1329 s->core_ext_mask = FFMAX(s->core_ext_mask, 0);
1331 /* extensions start at 32-bit boundaries into bitstream */
1332 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1334 while (core_ss_end - get_bits_count(&s->gb) >= 32) {
1335 uint32_t bits = get_bits_long(&s->gb, 32);
1339 int ext_amode, xch_fsize;
1341 s->xch_base_channel = s->prim_channels;
1343 /* validate sync word using XCHFSIZE field */
1344 xch_fsize = show_bits(&s->gb, 10);
1345 if ((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) &&
1346 (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1))
1349 /* skip length-to-end-of-frame field for the moment */
1350 skip_bits(&s->gb, 10);
1352 s->core_ext_mask |= DCA_EXT_XCH;
1354 /* extension amode(number of channels in extension) should be 1 */
1355 /* AFAIK XCh is not used for more channels */
1356 if ((ext_amode = get_bits(&s->gb, 4)) != 1) {
1357 av_log(avctx, AV_LOG_ERROR,
1358 "XCh extension amode %d not supported!\n",
1363 /* much like core primary audio coding header */
1364 dca_parse_audio_coding_header(s, s->xch_base_channel);
1366 for (i = 0; i < (s->sample_blocks / 8); i++)
1367 if ((ret = dca_decode_block(s, s->xch_base_channel, i))) {
1368 av_log(avctx, AV_LOG_ERROR, "error decoding XCh extension\n");
1376 /* XXCh: extended channels */
1377 /* usually found either in core or HD part in DTS-HD HRA streams,
1378 * but not in DTS-ES which contains XCh extensions instead */
1379 s->core_ext_mask |= DCA_EXT_XXCH;
1383 int fsize96 = show_bits(&s->gb, 12) + 1;
1384 if (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + fsize96)
1387 av_log(avctx, AV_LOG_DEBUG, "X96 extension found at %d bits\n",
1388 get_bits_count(&s->gb));
1389 skip_bits(&s->gb, 12);
1390 av_log(avctx, AV_LOG_DEBUG, "FSIZE96 = %d bytes\n", fsize96);
1391 av_log(avctx, AV_LOG_DEBUG, "REVNO = %d\n", get_bits(&s->gb, 4));
1393 s->core_ext_mask |= DCA_EXT_X96;
1398 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1401 /* no supported extensions, skip the rest of the core substream */
1402 skip_bits_long(&s->gb, core_ss_end - get_bits_count(&s->gb));
1405 if (s->core_ext_mask & DCA_EXT_X96)
1406 s->profile = FF_PROFILE_DTS_96_24;
1407 else if (s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH))
1408 s->profile = FF_PROFILE_DTS_ES;
1410 /* check for ExSS (HD part) */
1411 if (s->dca_buffer_size - s->frame_size > 32 &&
1412 get_bits_long(&s->gb, 32) == DCA_HD_MARKER)
1413 ff_dca_exss_parse_header(s);
1415 avctx->profile = s->profile;
1417 full_channels = channels = s->prim_channels + !!s->lfe;
1419 if (s->amode < 16) {
1420 avctx->channel_layout = dca_core_channel_layout[s->amode];
1422 if (s->prim_channels + !!s->lfe > 2 &&
1423 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
1425 * Neither the core's auxiliary data nor our default tables contain
1426 * downmix coefficients for the additional channel coded in the XCh
1427 * extension, so when we're doing a Stereo downmix, don't decode it.
1432 #if FF_API_REQUEST_CHANNELS
1433 FF_DISABLE_DEPRECATION_WARNINGS
1434 if (s->xch_present && !s->xch_disable &&
1435 (!avctx->request_channels ||
1436 avctx->request_channels > num_core_channels + !!s->lfe)) {
1437 FF_ENABLE_DEPRECATION_WARNINGS
1439 if (s->xch_present && !s->xch_disable) {
1441 avctx->channel_layout |= AV_CH_BACK_CENTER;
1443 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1444 s->channel_order_tab = dca_channel_reorder_lfe_xch[s->amode];
1446 s->channel_order_tab = dca_channel_reorder_nolfe_xch[s->amode];
1449 channels = num_core_channels + !!s->lfe;
1450 s->xch_present = 0; /* disable further xch processing */
1452 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1453 s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
1455 s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
1458 if (channels > !!s->lfe &&
1459 s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
1460 return AVERROR_INVALIDDATA;
1462 if (num_core_channels + !!s->lfe > 2 &&
1463 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
1465 s->output = s->prim_channels == 2 ? s->amode : DCA_STEREO;
1466 avctx->channel_layout = AV_CH_LAYOUT_STEREO;
1468 /* Stereo downmix coefficients
1470 * The decoder can only downmix to 2-channel, so we need to ensure
1471 * embedded downmix coefficients are actually targeting 2-channel.
1473 if (s->core_downmix && (s->core_downmix_amode == DCA_STEREO ||
1474 s->core_downmix_amode == DCA_STEREO_TOTAL)) {
1475 for (i = 0; i < num_core_channels + !!s->lfe; i++) {
1476 /* Range checked earlier */
1477 s->downmix_coef[i][0] = dca_dmix_code(s->core_downmix_codes[i][0]);
1478 s->downmix_coef[i][1] = dca_dmix_code(s->core_downmix_codes[i][1]);
1480 s->output = s->core_downmix_amode;
1482 int am = s->amode & DCA_CHANNEL_MASK;
1483 if (am >= FF_ARRAY_ELEMS(dca_default_coeffs)) {
1484 av_log(s->avctx, AV_LOG_ERROR,
1485 "Invalid channel mode %d\n", am);
1486 return AVERROR_INVALIDDATA;
1488 if (num_core_channels + !!s->lfe >
1489 FF_ARRAY_ELEMS(dca_default_coeffs[0])) {
1490 avpriv_request_sample(s->avctx, "Downmixing %d channels",
1491 s->prim_channels + !!s->lfe);
1492 return AVERROR_PATCHWELCOME;
1494 for (i = 0; i < num_core_channels + !!s->lfe; i++) {
1495 s->downmix_coef[i][0] = dca_default_coeffs[am][i][0];
1496 s->downmix_coef[i][1] = dca_default_coeffs[am][i][1];
1499 av_dlog(s->avctx, "Stereo downmix coeffs:\n");
1500 for (i = 0; i < num_core_channels + !!s->lfe; i++) {
1501 av_dlog(s->avctx, "L, input channel %d = %f\n", i,
1502 s->downmix_coef[i][0]);
1503 av_dlog(s->avctx, "R, input channel %d = %f\n", i,
1504 s->downmix_coef[i][1]);
1506 av_dlog(s->avctx, "\n");
1509 av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n", s->amode);
1510 return AVERROR_INVALIDDATA;
1512 avctx->channels = channels;
1514 /* get output buffer */
1515 frame->nb_samples = 256 * (s->sample_blocks / 8);
1516 if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
1517 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1520 samples_flt = (float **) frame->extended_data;
1522 /* allocate buffer for extra channels if downmixing */
1523 if (avctx->channels < full_channels) {
1524 ret = av_samples_get_buffer_size(NULL, full_channels - channels,
1526 avctx->sample_fmt, 0);
1530 av_fast_malloc(&s->extra_channels_buffer,
1531 &s->extra_channels_buffer_size, ret);
1532 if (!s->extra_channels_buffer)
1533 return AVERROR(ENOMEM);
1535 ret = av_samples_fill_arrays((uint8_t **) s->extra_channels, NULL,
1536 s->extra_channels_buffer,
1537 full_channels - channels,
1538 frame->nb_samples, avctx->sample_fmt, 0);
1543 /* filter to get final output */
1544 for (i = 0; i < (s->sample_blocks / 8); i++) {
1547 for (ch = 0; ch < channels; ch++)
1548 s->samples_chanptr[ch] = samples_flt[ch] + i * 256;
1549 for (; ch < full_channels; ch++)
1550 s->samples_chanptr[ch] = s->extra_channels[ch - channels] + i * 256;
1552 dca_filter_channels(s, i);
1554 /* If this was marked as a DTS-ES stream we need to subtract back- */
1555 /* channel from SL & SR to remove matrixed back-channel signal */
1556 if ((s->source_pcm_res & 1) && s->xch_present) {
1557 float *back_chan = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel]];
1558 float *lt_chan = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel - 2]];
1559 float *rt_chan = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel - 1]];
1560 s->fdsp.vector_fmac_scalar(lt_chan, back_chan, -M_SQRT1_2, 256);
1561 s->fdsp.vector_fmac_scalar(rt_chan, back_chan, -M_SQRT1_2, 256);
1565 /* update lfe history */
1566 lfe_samples = 2 * s->lfe * (s->sample_blocks / 8);
1567 for (i = 0; i < 2 * s->lfe * 4; i++)
1568 s->lfe_data[i] = s->lfe_data[i + lfe_samples];
1572 * DCA_STEREO_TOTAL (Lt/Rt) is equivalent to Dolby Surround */
1573 ret = ff_side_data_update_matrix_encoding(frame,
1574 (s->output & ~DCA_LFE) == DCA_STEREO_TOTAL ?
1575 AV_MATRIX_ENCODING_DOLBY : AV_MATRIX_ENCODING_NONE);
1585 * DCA initialization
1587 * @param avctx pointer to the AVCodecContext
1590 static av_cold int dca_decode_init(AVCodecContext *avctx)
1592 DCAContext *s = avctx->priv_data;
1597 avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
1598 ff_mdct_init(&s->imdct, 6, 1, 1.0);
1599 ff_synth_filter_init(&s->synth);
1600 ff_dcadsp_init(&s->dcadsp);
1601 ff_fmt_convert_init(&s->fmt_conv, avctx);
1603 avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
1605 /* allow downmixing to stereo */
1606 #if FF_API_REQUEST_CHANNELS
1607 FF_DISABLE_DEPRECATION_WARNINGS
1608 if (avctx->request_channels == 2)
1609 avctx->request_channel_layout = AV_CH_LAYOUT_STEREO;
1610 FF_ENABLE_DEPRECATION_WARNINGS
1612 if (avctx->channels > 2 &&
1613 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO)
1614 avctx->channels = 2;
1619 static av_cold int dca_decode_end(AVCodecContext *avctx)
1621 DCAContext *s = avctx->priv_data;
1622 ff_mdct_end(&s->imdct);
1623 av_freep(&s->extra_channels_buffer);
1627 static const AVProfile profiles[] = {
1628 { FF_PROFILE_DTS, "DTS" },
1629 { FF_PROFILE_DTS_ES, "DTS-ES" },
1630 { FF_PROFILE_DTS_96_24, "DTS 96/24" },
1631 { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
1632 { FF_PROFILE_DTS_HD_MA, "DTS-HD MA" },
1633 { FF_PROFILE_UNKNOWN },
1636 static const AVOption options[] = {
1637 { "disable_xch", "disable decoding of the XCh extension", offsetof(DCAContext, xch_disable), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM },
1641 static const AVClass dca_decoder_class = {
1642 .class_name = "DCA decoder",
1643 .item_name = av_default_item_name,
1645 .version = LIBAVUTIL_VERSION_INT,
1648 AVCodec ff_dca_decoder = {
1650 .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
1651 .type = AVMEDIA_TYPE_AUDIO,
1652 .id = AV_CODEC_ID_DTS,
1653 .priv_data_size = sizeof(DCAContext),
1654 .init = dca_decode_init,
1655 .decode = dca_decode_frame,
1656 .close = dca_decode_end,
1657 .capabilities = CODEC_CAP_CHANNEL_CONF | CODEC_CAP_DR1,
1658 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
1659 AV_SAMPLE_FMT_NONE },
1660 .profiles = NULL_IF_CONFIG_SMALL(profiles),
1661 .priv_class = &dca_decoder_class,