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
35 #include "bitstream.h"
42 #define DCA_PRIM_CHANNELS_MAX (5)
43 #define DCA_SUBBANDS (32)
44 #define DCA_ABITS_MAX (32) /* Should be 28 */
45 #define DCA_SUBSUBFAMES_MAX (4)
46 #define DCA_LFE_MAX (3)
62 #define DCA_DOLBY 101 /* FIXME */
64 #define DCA_CHANNEL_BITS 6
65 #define DCA_CHANNEL_MASK 0x3F
69 #define HEADER_SIZE 14
70 #define CONVERT_BIAS 384
72 #define DCA_MAX_FRAME_SIZE 16384
76 int offset; ///< code values offset
77 int maxbits[8]; ///< max bits in VLC
78 int wrap; ///< wrap for get_vlc2()
79 VLC vlc[8]; ///< actual codes
82 static BitAlloc dca_bitalloc_index; ///< indexes for samples VLC select
83 static BitAlloc dca_tmode; ///< transition mode VLCs
84 static BitAlloc dca_scalefactor; ///< scalefactor VLCs
85 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
87 /** Pre-calculated cosine modulation coefs for the QMF */
88 static float cos_mod[544];
90 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba, int idx)
92 return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) + ba->offset;
96 AVCodecContext *avctx;
98 int frame_type; ///< type of the current frame
99 int samples_deficit; ///< deficit sample count
100 int crc_present; ///< crc is present in the bitstream
101 int sample_blocks; ///< number of PCM sample blocks
102 int frame_size; ///< primary frame byte size
103 int amode; ///< audio channels arrangement
104 int sample_rate; ///< audio sampling rate
105 int bit_rate; ///< transmission bit rate
107 int downmix; ///< embedded downmix enabled
108 int dynrange; ///< embedded dynamic range flag
109 int timestamp; ///< embedded time stamp flag
110 int aux_data; ///< auxiliary data flag
111 int hdcd; ///< source material is mastered in HDCD
112 int ext_descr; ///< extension audio descriptor flag
113 int ext_coding; ///< extended coding flag
114 int aspf; ///< audio sync word insertion flag
115 int lfe; ///< low frequency effects flag
116 int predictor_history; ///< predictor history flag
117 int header_crc; ///< header crc check bytes
118 int multirate_inter; ///< multirate interpolator switch
119 int version; ///< encoder software revision
120 int copy_history; ///< copy history
121 int source_pcm_res; ///< source pcm resolution
122 int front_sum; ///< front sum/difference flag
123 int surround_sum; ///< surround sum/difference flag
124 int dialog_norm; ///< dialog normalisation parameter
126 /* Primary audio coding header */
127 int subframes; ///< number of subframes
128 int total_channels; ///< number of channels including extensions
129 int prim_channels; ///< number of primary audio channels
130 int subband_activity[DCA_PRIM_CHANNELS_MAX]; ///< subband activity count
131 int vq_start_subband[DCA_PRIM_CHANNELS_MAX]; ///< high frequency vq start subband
132 int joint_intensity[DCA_PRIM_CHANNELS_MAX]; ///< joint intensity coding index
133 int transient_huffman[DCA_PRIM_CHANNELS_MAX]; ///< transient mode code book
134 int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]; ///< scale factor code book
135 int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX]; ///< bit allocation quantizer select
136 int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< quantization index codebook select
137 float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< scale factor adjustment
139 /* Primary audio coding side information */
140 int subsubframes; ///< number of subsubframes
141 int partial_samples; ///< partial subsubframe samples count
142 int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction mode (ADPCM used or not)
143 int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction VQ coefs
144 int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< bit allocation index
145 int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< transition mode (transients)
146 int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2]; ///< scale factors (2 if transient)
147 int joint_huff[DCA_PRIM_CHANNELS_MAX]; ///< joint subband scale factors codebook
148 int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< joint subband scale factors
149 int downmix_coef[DCA_PRIM_CHANNELS_MAX][2]; ///< stereo downmix coefficients
150 int dynrange_coef; ///< dynamic range coefficient
152 int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< VQ encoded high frequency subbands
154 float lfe_data[2 * DCA_SUBSUBFAMES_MAX * DCA_LFE_MAX *
155 2 /*history */ ]; ///< Low frequency effect data
156 int lfe_scale_factor;
158 /* Subband samples history (for ADPCM) */
159 float subband_samples_hist[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4];
160 float subband_fir_hist[DCA_PRIM_CHANNELS_MAX][512];
161 float subband_fir_noidea[DCA_PRIM_CHANNELS_MAX][32];
163 int output; ///< type of output
164 int bias; ///< output bias
166 DECLARE_ALIGNED_16(float, samples[1536]); /* 6 * 256 = 1536, might only need 5 */
167 const float *samples_chanptr[6];
169 uint8_t dca_buffer[DCA_MAX_FRAME_SIZE];
170 int dca_buffer_size; ///< how much data is in the dca_buffer
173 /* Current position in DCA frame */
174 int current_subframe;
175 int current_subsubframe;
177 int debug_flag; ///< used for suppressing repeated error messages output
181 static av_cold void dca_init_vlcs(void)
183 static int vlcs_initialized = 0;
186 if (vlcs_initialized)
189 dca_bitalloc_index.offset = 1;
190 dca_bitalloc_index.wrap = 2;
191 for (i = 0; i < 5; i++)
192 init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
193 bitalloc_12_bits[i], 1, 1,
194 bitalloc_12_codes[i], 2, 2, 1);
195 dca_scalefactor.offset = -64;
196 dca_scalefactor.wrap = 2;
197 for (i = 0; i < 5; i++)
198 init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
199 scales_bits[i], 1, 1,
200 scales_codes[i], 2, 2, 1);
201 dca_tmode.offset = 0;
203 for (i = 0; i < 4; i++)
204 init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
206 tmode_codes[i], 2, 2, 1);
208 for(i = 0; i < 10; i++)
209 for(j = 0; j < 7; j++){
210 if(!bitalloc_codes[i][j]) break;
211 dca_smpl_bitalloc[i+1].offset = bitalloc_offsets[i];
212 dca_smpl_bitalloc[i+1].wrap = 1 + (j > 4);
213 init_vlc(&dca_smpl_bitalloc[i+1].vlc[j], bitalloc_maxbits[i][j],
215 bitalloc_bits[i][j], 1, 1,
216 bitalloc_codes[i][j], 2, 2, 1);
218 vlcs_initialized = 1;
221 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
224 *dst++ = get_bits(gb, bits);
227 static int dca_parse_frame_header(DCAContext * s)
230 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
231 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
232 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
234 s->bias = CONVERT_BIAS;
236 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
239 get_bits(&s->gb, 32);
242 s->frame_type = get_bits(&s->gb, 1);
243 s->samples_deficit = get_bits(&s->gb, 5) + 1;
244 s->crc_present = get_bits(&s->gb, 1);
245 s->sample_blocks = get_bits(&s->gb, 7) + 1;
246 s->frame_size = get_bits(&s->gb, 14) + 1;
247 if (s->frame_size < 95)
249 s->amode = get_bits(&s->gb, 6);
250 s->sample_rate = dca_sample_rates[get_bits(&s->gb, 4)];
253 s->bit_rate = dca_bit_rates[get_bits(&s->gb, 5)];
257 s->downmix = get_bits(&s->gb, 1);
258 s->dynrange = get_bits(&s->gb, 1);
259 s->timestamp = get_bits(&s->gb, 1);
260 s->aux_data = get_bits(&s->gb, 1);
261 s->hdcd = get_bits(&s->gb, 1);
262 s->ext_descr = get_bits(&s->gb, 3);
263 s->ext_coding = get_bits(&s->gb, 1);
264 s->aspf = get_bits(&s->gb, 1);
265 s->lfe = get_bits(&s->gb, 2);
266 s->predictor_history = get_bits(&s->gb, 1);
268 /* TODO: check CRC */
270 s->header_crc = get_bits(&s->gb, 16);
272 s->multirate_inter = get_bits(&s->gb, 1);
273 s->version = get_bits(&s->gb, 4);
274 s->copy_history = get_bits(&s->gb, 2);
275 s->source_pcm_res = get_bits(&s->gb, 3);
276 s->front_sum = get_bits(&s->gb, 1);
277 s->surround_sum = get_bits(&s->gb, 1);
278 s->dialog_norm = get_bits(&s->gb, 4);
280 /* FIXME: channels mixing levels */
281 s->output = s->amode;
282 if(s->lfe) s->output |= DCA_LFE;
285 av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);
286 av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);
287 av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);
288 av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",
289 s->sample_blocks, s->sample_blocks * 32);
290 av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);
291 av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",
292 s->amode, dca_channels[s->amode]);
293 av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i (%i Hz)\n",
294 s->sample_rate, dca_sample_rates[s->sample_rate]);
295 av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i (%i bits/s)\n",
296 s->bit_rate, dca_bit_rates[s->bit_rate]);
297 av_log(s->avctx, AV_LOG_DEBUG, "downmix: %i\n", s->downmix);
298 av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);
299 av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);
300 av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);
301 av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);
302 av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);
303 av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);
304 av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);
305 av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);
306 av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",
307 s->predictor_history);
308 av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);
309 av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",
311 av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);
312 av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);
313 av_log(s->avctx, AV_LOG_DEBUG,
314 "source pcm resolution: %i (%i bits/sample)\n",
315 s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);
316 av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);
317 av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);
318 av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);
319 av_log(s->avctx, AV_LOG_DEBUG, "\n");
322 /* Primary audio coding header */
323 s->subframes = get_bits(&s->gb, 4) + 1;
324 s->total_channels = get_bits(&s->gb, 3) + 1;
325 s->prim_channels = s->total_channels;
326 if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
327 s->prim_channels = DCA_PRIM_CHANNELS_MAX; /* We only support DTS core */
330 for (i = 0; i < s->prim_channels; i++) {
331 s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
332 if (s->subband_activity[i] > DCA_SUBBANDS)
333 s->subband_activity[i] = DCA_SUBBANDS;
335 for (i = 0; i < s->prim_channels; i++) {
336 s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
337 if (s->vq_start_subband[i] > DCA_SUBBANDS)
338 s->vq_start_subband[i] = DCA_SUBBANDS;
340 get_array(&s->gb, s->joint_intensity, s->prim_channels, 3);
341 get_array(&s->gb, s->transient_huffman, s->prim_channels, 2);
342 get_array(&s->gb, s->scalefactor_huffman, s->prim_channels, 3);
343 get_array(&s->gb, s->bitalloc_huffman, s->prim_channels, 3);
345 /* Get codebooks quantization indexes */
346 memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
347 for (j = 1; j < 11; j++)
348 for (i = 0; i < s->prim_channels; i++)
349 s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
351 /* Get scale factor adjustment */
352 for (j = 0; j < 11; j++)
353 for (i = 0; i < s->prim_channels; i++)
354 s->scalefactor_adj[i][j] = 1;
356 for (j = 1; j < 11; j++)
357 for (i = 0; i < s->prim_channels; i++)
358 if (s->quant_index_huffman[i][j] < thr[j])
359 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
361 if (s->crc_present) {
362 /* Audio header CRC check */
363 get_bits(&s->gb, 16);
366 s->current_subframe = 0;
367 s->current_subsubframe = 0;
370 av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);
371 av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);
372 for(i = 0; i < s->prim_channels; i++){
373 av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n", s->subband_activity[i]);
374 av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n", s->vq_start_subband[i]);
375 av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n", s->joint_intensity[i]);
376 av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n", s->transient_huffman[i]);
377 av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n", s->scalefactor_huffman[i]);
378 av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n", s->bitalloc_huffman[i]);
379 av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");
380 for (j = 0; j < 11; j++)
381 av_log(s->avctx, AV_LOG_DEBUG, " %i",
382 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");
395 static inline int get_scale(GetBitContext *gb, int level, int value)
398 /* huffman encoded */
399 value += get_bitalloc(gb, &dca_scalefactor, level);
401 value = get_bits(gb, level + 1);
405 static int dca_subframe_header(DCAContext * s)
407 /* Primary audio coding side information */
410 s->subsubframes = get_bits(&s->gb, 2) + 1;
411 s->partial_samples = get_bits(&s->gb, 3);
412 for (j = 0; j < s->prim_channels; j++) {
413 for (k = 0; k < s->subband_activity[j]; k++)
414 s->prediction_mode[j][k] = get_bits(&s->gb, 1);
417 /* Get prediction codebook */
418 for (j = 0; j < s->prim_channels; j++) {
419 for (k = 0; k < s->subband_activity[j]; k++) {
420 if (s->prediction_mode[j][k] > 0) {
421 /* (Prediction coefficient VQ address) */
422 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
427 /* Bit allocation index */
428 for (j = 0; j < s->prim_channels; j++) {
429 for (k = 0; k < s->vq_start_subband[j]; k++) {
430 if (s->bitalloc_huffman[j] == 6)
431 s->bitalloc[j][k] = get_bits(&s->gb, 5);
432 else if (s->bitalloc_huffman[j] == 5)
433 s->bitalloc[j][k] = get_bits(&s->gb, 4);
434 else if (s->bitalloc_huffman[j] == 7) {
435 av_log(s->avctx, AV_LOG_ERROR,
436 "Invalid bit allocation index\n");
440 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
443 if (s->bitalloc[j][k] > 26) {
444 // av_log(s->avctx,AV_LOG_DEBUG,"bitalloc index [%i][%i] too big (%i)\n",
445 // j, k, s->bitalloc[j][k]);
451 /* Transition mode */
452 for (j = 0; j < s->prim_channels; j++) {
453 for (k = 0; k < s->subband_activity[j]; k++) {
454 s->transition_mode[j][k] = 0;
455 if (s->subsubframes > 1 &&
456 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
457 s->transition_mode[j][k] =
458 get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
463 for (j = 0; j < s->prim_channels; j++) {
464 const uint32_t *scale_table;
467 memset(s->scale_factor[j], 0, s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
469 if (s->scalefactor_huffman[j] == 6)
470 scale_table = scale_factor_quant7;
472 scale_table = scale_factor_quant6;
474 /* When huffman coded, only the difference is encoded */
477 for (k = 0; k < s->subband_activity[j]; k++) {
478 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
479 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
480 s->scale_factor[j][k][0] = scale_table[scale_sum];
483 if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
484 /* Get second scale factor */
485 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
486 s->scale_factor[j][k][1] = scale_table[scale_sum];
491 /* Joint subband scale factor codebook select */
492 for (j = 0; j < s->prim_channels; j++) {
493 /* Transmitted only if joint subband coding enabled */
494 if (s->joint_intensity[j] > 0)
495 s->joint_huff[j] = get_bits(&s->gb, 3);
498 /* Scale factors for joint subband coding */
499 for (j = 0; j < s->prim_channels; j++) {
502 /* Transmitted only if joint subband coding enabled */
503 if (s->joint_intensity[j] > 0) {
505 source_channel = s->joint_intensity[j] - 1;
507 /* When huffman coded, only the difference is encoded
508 * (is this valid as well for joint scales ???) */
510 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
511 scale = get_scale(&s->gb, s->joint_huff[j], 0);
512 scale += 64; /* bias */
513 s->joint_scale_factor[j][k] = scale; /*joint_scale_table[scale]; */
516 if (!s->debug_flag & 0x02) {
517 av_log(s->avctx, AV_LOG_DEBUG,
518 "Joint stereo coding not supported\n");
519 s->debug_flag |= 0x02;
524 /* Stereo downmix coefficients */
525 if (s->prim_channels > 2) {
527 for (j = 0; j < s->prim_channels; j++) {
528 s->downmix_coef[j][0] = get_bits(&s->gb, 7);
529 s->downmix_coef[j][1] = get_bits(&s->gb, 7);
532 int am = s->amode & DCA_CHANNEL_MASK;
533 for (j = 0; j < s->prim_channels; j++) {
534 s->downmix_coef[j][0] = dca_default_coeffs[am][j][0];
535 s->downmix_coef[j][1] = dca_default_coeffs[am][j][1];
540 /* Dynamic range coefficient */
542 s->dynrange_coef = get_bits(&s->gb, 8);
544 /* Side information CRC check word */
545 if (s->crc_present) {
546 get_bits(&s->gb, 16);
550 * Primary audio data arrays
553 /* VQ encoded high frequency subbands */
554 for (j = 0; j < s->prim_channels; j++)
555 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
556 /* 1 vector -> 32 samples */
557 s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
559 /* Low frequency effect data */
562 int lfe_samples = 2 * s->lfe * s->subsubframes;
565 for (j = lfe_samples; j < lfe_samples * 2; j++) {
566 /* Signed 8 bits int */
567 s->lfe_data[j] = get_sbits(&s->gb, 8);
570 /* Scale factor index */
571 s->lfe_scale_factor = scale_factor_quant7[get_bits(&s->gb, 8)];
573 /* Quantization step size * scale factor */
574 lfe_scale = 0.035 * s->lfe_scale_factor;
576 for (j = lfe_samples; j < lfe_samples * 2; j++)
577 s->lfe_data[j] *= lfe_scale;
581 av_log(s->avctx, AV_LOG_DEBUG, "subsubframes: %i\n", s->subsubframes);
582 av_log(s->avctx, AV_LOG_DEBUG, "partial samples: %i\n",
584 for (j = 0; j < s->prim_channels; j++) {
585 av_log(s->avctx, AV_LOG_DEBUG, "prediction mode:");
586 for (k = 0; k < s->subband_activity[j]; k++)
587 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->prediction_mode[j][k]);
588 av_log(s->avctx, AV_LOG_DEBUG, "\n");
590 for (j = 0; j < s->prim_channels; j++) {
591 for (k = 0; k < s->subband_activity[j]; k++)
592 av_log(s->avctx, AV_LOG_DEBUG,
593 "prediction coefs: %f, %f, %f, %f\n",
594 (float) adpcm_vb[s->prediction_vq[j][k]][0] / 8192,
595 (float) adpcm_vb[s->prediction_vq[j][k]][1] / 8192,
596 (float) adpcm_vb[s->prediction_vq[j][k]][2] / 8192,
597 (float) adpcm_vb[s->prediction_vq[j][k]][3] / 8192);
599 for (j = 0; j < s->prim_channels; j++) {
600 av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index: ");
601 for (k = 0; k < s->vq_start_subband[j]; k++)
602 av_log(s->avctx, AV_LOG_DEBUG, "%2.2i ", s->bitalloc[j][k]);
603 av_log(s->avctx, AV_LOG_DEBUG, "\n");
605 for (j = 0; j < s->prim_channels; j++) {
606 av_log(s->avctx, AV_LOG_DEBUG, "Transition mode:");
607 for (k = 0; k < s->subband_activity[j]; k++)
608 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->transition_mode[j][k]);
609 av_log(s->avctx, AV_LOG_DEBUG, "\n");
611 for (j = 0; j < s->prim_channels; j++) {
612 av_log(s->avctx, AV_LOG_DEBUG, "Scale factor:");
613 for (k = 0; k < s->subband_activity[j]; k++) {
614 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0)
615 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->scale_factor[j][k][0]);
616 if (k < s->vq_start_subband[j] && s->transition_mode[j][k])
617 av_log(s->avctx, AV_LOG_DEBUG, " %i(t)", s->scale_factor[j][k][1]);
619 av_log(s->avctx, AV_LOG_DEBUG, "\n");
621 for (j = 0; j < s->prim_channels; j++) {
622 if (s->joint_intensity[j] > 0) {
623 int source_channel = s->joint_intensity[j] - 1;
624 av_log(s->avctx, AV_LOG_DEBUG, "Joint scale factor index:\n");
625 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++)
626 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->joint_scale_factor[j][k]);
627 av_log(s->avctx, AV_LOG_DEBUG, "\n");
630 if (s->prim_channels > 2 && s->downmix) {
631 av_log(s->avctx, AV_LOG_DEBUG, "Downmix coeffs:\n");
632 for (j = 0; j < s->prim_channels; j++) {
633 av_log(s->avctx, AV_LOG_DEBUG, "Channel 0,%d = %f\n", j, dca_downmix_coeffs[s->downmix_coef[j][0]]);
634 av_log(s->avctx, AV_LOG_DEBUG, "Channel 1,%d = %f\n", j, dca_downmix_coeffs[s->downmix_coef[j][1]]);
636 av_log(s->avctx, AV_LOG_DEBUG, "\n");
638 for (j = 0; j < s->prim_channels; j++)
639 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
640 av_log(s->avctx, AV_LOG_DEBUG, "VQ index: %i\n", s->high_freq_vq[j][k]);
642 int lfe_samples = 2 * s->lfe * s->subsubframes;
643 av_log(s->avctx, AV_LOG_DEBUG, "LFE samples:\n");
644 for (j = lfe_samples; j < lfe_samples * 2; j++)
645 av_log(s->avctx, AV_LOG_DEBUG, " %f", s->lfe_data[j]);
646 av_log(s->avctx, AV_LOG_DEBUG, "\n");
653 static void qmf_32_subbands(DCAContext * s, int chans,
654 float samples_in[32][8], float *samples_out,
655 float scale, float bias)
657 const float *prCoeff;
659 float praXin[33], *raXin = &praXin[1];
661 float *subband_fir_hist = s->subband_fir_hist[chans];
662 float *subband_fir_hist2 = s->subband_fir_noidea[chans];
664 int chindex = 0, subindex;
669 if (!s->multirate_inter) /* Non-perfect reconstruction */
670 prCoeff = fir_32bands_nonperfect;
671 else /* Perfect reconstruction */
672 prCoeff = fir_32bands_perfect;
674 /* Reconstructed channel sample index */
675 for (subindex = 0; subindex < 8; subindex++) {
676 /* Load in one sample from each subband and clear inactive subbands */
677 for (i = 0; i < s->subband_activity[chans]; i++)
678 raXin[i] = samples_in[i][subindex];
682 /* Multiply by cosine modulation coefficients and
683 * create temporary arrays SUM and DIFF */
684 for (j = 0, k = 0; k < 16; k++) {
687 for (i = 0; i < 16; i++, j++){
688 t1 += (raXin[2 * i] + raXin[2 * i + 1]) * cos_mod[j];
689 t2 += (raXin[2 * i] + raXin[2 * i - 1]) * cos_mod[j + 256];
691 subband_fir_hist[ k ] = cos_mod[k+512 ] * (t1 + t2);
692 subband_fir_hist[32-k-1] = cos_mod[k+512+16] * (t1 - t2);
695 /* Multiply by filter coefficients */
696 for (k = 31, i = 0; i < 32; i++, k--){
697 float a= subband_fir_hist2[i];
699 for (j = 0; j < 512; j += 64){
700 a += prCoeff[i+j ]*( subband_fir_hist[i+j] - subband_fir_hist[j+k]);
701 b += prCoeff[i+j+32]*(-subband_fir_hist[i+j] - subband_fir_hist[j+k]);
703 samples_out[chindex++] = a * scale + bias;
704 subband_fir_hist2[i] = b;
707 /* Update working arrays */
708 memmove(&subband_fir_hist[32], &subband_fir_hist[0], (512 - 32) * sizeof(float));
712 static void lfe_interpolation_fir(int decimation_select,
713 int num_deci_sample, float *samples_in,
714 float *samples_out, float scale,
717 /* samples_in: An array holding decimated samples.
718 * Samples in current subframe starts from samples_in[0],
719 * while samples_in[-1], samples_in[-2], ..., stores samples
720 * from last subframe as history.
722 * samples_out: An array holding interpolated samples
725 int decifactor, k, j;
726 const float *prCoeff;
728 int interp_index = 0; /* Index to the interpolated samples */
731 /* Select decimation filter */
732 if (decimation_select == 1) {
734 prCoeff = lfe_fir_128;
737 prCoeff = lfe_fir_64;
740 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
741 /* One decimated sample generates decifactor interpolated ones */
742 for (k = 0; k < decifactor; k++) {
744 //FIXME the coeffs are symetric, fix that
745 for (j = 0; j < 512 / decifactor; j++)
746 rTmp += samples_in[deciindex - j] * prCoeff[k + j * decifactor];
747 samples_out[interp_index++] = rTmp / scale + bias;
752 /* downmixing routines */
753 #define MIX_REAR1(samples, si1, rs, coef) \
754 samples[i] += samples[si1] * coef[rs][0]; \
755 samples[i+256] += samples[si1] * coef[rs][1];
757 #define MIX_REAR2(samples, si1, si2, rs, coef) \
758 samples[i] += samples[si1] * coef[rs][0] + samples[si2] * coef[rs+1][0]; \
759 samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs+1][1];
761 #define MIX_FRONT3(samples, coef) \
763 samples[i] = t * coef[0][0] + samples[i+256] * coef[1][0] + samples[i+512] * coef[2][0]; \
764 samples[i+256] = t * coef[0][1] + samples[i+256] * coef[1][1] + samples[i+512] * coef[2][1];
766 #define DOWNMIX_TO_STEREO(op1, op2) \
767 for(i = 0; i < 256; i++){ \
772 static void dca_downmix(float *samples, int srcfmt,
773 int downmix_coef[DCA_PRIM_CHANNELS_MAX][2])
777 float coef[DCA_PRIM_CHANNELS_MAX][2];
779 for(i=0; i<DCA_PRIM_CHANNELS_MAX; i++) {
780 coef[i][0] = dca_downmix_coeffs[downmix_coef[i][0]];
781 coef[i][1] = dca_downmix_coeffs[downmix_coef[i][1]];
787 case DCA_STEREO_TOTAL:
788 case DCA_STEREO_SUMDIFF:
790 av_log(NULL, 0, "Not implemented!\n");
795 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),);
798 DOWNMIX_TO_STEREO(MIX_REAR1(samples, i + 512, 2, coef),);
801 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
802 MIX_REAR1(samples, i + 768, 3, coef));
805 DOWNMIX_TO_STEREO(MIX_REAR2(samples, i + 512, i + 768, 2, coef),);
808 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
809 MIX_REAR2(samples, i + 768, i + 1024, 3, coef));
815 /* Very compact version of the block code decoder that does not use table
816 * look-up but is slightly slower */
817 static int decode_blockcode(int code, int levels, int *values)
820 int offset = (levels - 1) >> 1;
822 for (i = 0; i < 4; i++) {
823 values[i] = (code % levels) - offset;
830 av_log(NULL, AV_LOG_ERROR, "ERROR: block code look-up failed\n");
835 static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 };
836 static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 };
838 static int dca_subsubframe(DCAContext * s)
841 int subsubframe = s->current_subsubframe;
843 const float *quant_step_table;
846 float subband_samples[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8];
852 /* Select quantization step size table */
853 if (s->bit_rate == 0x1f)
854 quant_step_table = lossless_quant_d;
856 quant_step_table = lossy_quant_d;
858 for (k = 0; k < s->prim_channels; k++) {
859 for (l = 0; l < s->vq_start_subband[k]; l++) {
862 /* Select the mid-tread linear quantizer */
863 int abits = s->bitalloc[k][l];
865 float quant_step_size = quant_step_table[abits];
869 * Determine quantization index code book and its type
872 /* Select quantization index code book */
873 int sel = s->quant_index_huffman[k][abits];
876 * Extract bits from the bit stream
879 memset(subband_samples[k][l], 0, 8 * sizeof(subband_samples[0][0][0]));
880 }else if(abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table){
883 int block_code1, block_code2, size, levels;
886 size = abits_sizes[abits-1];
887 levels = abits_levels[abits-1];
889 block_code1 = get_bits(&s->gb, size);
890 /* FIXME Should test return value */
891 decode_blockcode(block_code1, levels, block);
892 block_code2 = get_bits(&s->gb, size);
893 decode_blockcode(block_code2, levels, &block[4]);
894 for (m = 0; m < 8; m++)
895 subband_samples[k][l][m] = block[m];
898 for (m = 0; m < 8; m++)
899 subband_samples[k][l][m] = get_sbits(&s->gb, abits - 3);
903 for (m = 0; m < 8; m++)
904 subband_samples[k][l][m] = get_bitalloc(&s->gb, &dca_smpl_bitalloc[abits], sel);
907 /* Deal with transients */
908 if (s->transition_mode[k][l] &&
909 subsubframe >= s->transition_mode[k][l])
910 rscale = quant_step_size * s->scale_factor[k][l][1];
912 rscale = quant_step_size * s->scale_factor[k][l][0];
914 rscale *= s->scalefactor_adj[k][sel];
916 for (m = 0; m < 8; m++)
917 subband_samples[k][l][m] *= rscale;
920 * Inverse ADPCM if in prediction mode
922 if (s->prediction_mode[k][l]) {
924 for (m = 0; m < 8; m++) {
925 for (n = 1; n <= 4; n++)
927 subband_samples[k][l][m] +=
928 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
929 subband_samples[k][l][m - n] / 8192);
930 else if (s->predictor_history)
931 subband_samples[k][l][m] +=
932 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
933 s->subband_samples_hist[k][l][m - n +
940 * Decode VQ encoded high frequencies
942 for (l = s->vq_start_subband[k]; l < s->subband_activity[k]; l++) {
943 /* 1 vector -> 32 samples but we only need the 8 samples
944 * for this subsubframe. */
947 if (!s->debug_flag & 0x01) {
948 av_log(s->avctx, AV_LOG_DEBUG, "Stream with high frequencies VQ coding\n");
949 s->debug_flag |= 0x01;
952 for (m = 0; m < 8; m++) {
953 subband_samples[k][l][m] =
954 high_freq_vq[s->high_freq_vq[k][l]][subsubframe * 8 +
956 * (float) s->scale_factor[k][l][0] / 16.0;
961 /* Check for DSYNC after subsubframe */
962 if (s->aspf || subsubframe == s->subsubframes - 1) {
963 if (0xFFFF == get_bits(&s->gb, 16)) { /* 0xFFFF */
965 av_log(s->avctx, AV_LOG_DEBUG, "Got subframe DSYNC\n");
968 av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
972 /* Backup predictor history for adpcm */
973 for (k = 0; k < s->prim_channels; k++)
974 for (l = 0; l < s->vq_start_subband[k]; l++)
975 memcpy(s->subband_samples_hist[k][l], &subband_samples[k][l][4],
976 4 * sizeof(subband_samples[0][0][0]));
978 /* 32 subbands QMF */
979 for (k = 0; k < s->prim_channels; k++) {
980 /* static float pcm_to_double[8] =
981 {32768.0, 32768.0, 524288.0, 524288.0, 0, 8388608.0, 8388608.0};*/
982 qmf_32_subbands(s, k, subband_samples[k], &s->samples[256 * k],
983 M_SQRT1_2 /*pcm_to_double[s->source_pcm_res] */ ,
989 if (s->prim_channels > dca_channels[s->output & DCA_CHANNEL_MASK]) {
990 dca_downmix(s->samples, s->amode, s->downmix_coef);
993 /* Generate LFE samples for this subsubframe FIXME!!! */
994 if (s->output & DCA_LFE) {
995 int lfe_samples = 2 * s->lfe * s->subsubframes;
996 int i_channels = dca_channels[s->output & DCA_CHANNEL_MASK];
998 lfe_interpolation_fir(s->lfe, 2 * s->lfe,
999 s->lfe_data + lfe_samples +
1000 2 * s->lfe * subsubframe,
1001 &s->samples[256 * i_channels],
1002 256.0, 0 /* s->bias */);
1003 /* Outputs 20bits pcm samples */
1010 static int dca_subframe_footer(DCAContext * s)
1012 int aux_data_count = 0, i;
1016 * Unpack optional information
1020 get_bits(&s->gb, 32);
1023 aux_data_count = get_bits(&s->gb, 6);
1025 for (i = 0; i < aux_data_count; i++)
1026 get_bits(&s->gb, 8);
1028 if (s->crc_present && (s->downmix || s->dynrange))
1029 get_bits(&s->gb, 16);
1031 lfe_samples = 2 * s->lfe * s->subsubframes;
1032 for (i = 0; i < lfe_samples; i++) {
1033 s->lfe_data[i] = s->lfe_data[i + lfe_samples];
1040 * Decode a dca frame block
1042 * @param s pointer to the DCAContext
1045 static int dca_decode_block(DCAContext * s)
1049 if (s->current_subframe >= s->subframes) {
1050 av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1051 s->current_subframe, s->subframes);
1055 if (!s->current_subsubframe) {
1057 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
1059 /* Read subframe header */
1060 if (dca_subframe_header(s))
1064 /* Read subsubframe */
1066 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
1068 if (dca_subsubframe(s))
1072 s->current_subsubframe++;
1073 if (s->current_subsubframe >= s->subsubframes) {
1074 s->current_subsubframe = 0;
1075 s->current_subframe++;
1077 if (s->current_subframe >= s->subframes) {
1079 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
1081 /* Read subframe footer */
1082 if (dca_subframe_footer(s))
1090 * Convert bitstream to one representation based on sync marker
1092 static int dca_convert_bitstream(const uint8_t * src, int src_size, uint8_t * dst,
1097 const uint16_t *ssrc = (const uint16_t *) src;
1098 uint16_t *sdst = (uint16_t *) dst;
1101 if((unsigned)src_size > (unsigned)max_size) {
1102 av_log(NULL, AV_LOG_ERROR, "Input frame size larger then DCA_MAX_FRAME_SIZE!\n");
1108 case DCA_MARKER_RAW_BE:
1109 memcpy(dst, src, src_size);
1111 case DCA_MARKER_RAW_LE:
1112 for (i = 0; i < (src_size + 1) >> 1; i++)
1113 *sdst++ = bswap_16(*ssrc++);
1115 case DCA_MARKER_14B_BE:
1116 case DCA_MARKER_14B_LE:
1117 init_put_bits(&pb, dst, max_size);
1118 for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
1119 tmp = ((mrk == DCA_MARKER_14B_BE) ? AV_RB16(src) : AV_RL16(src)) & 0x3FFF;
1120 put_bits(&pb, 14, tmp);
1122 flush_put_bits(&pb);
1123 return (put_bits_count(&pb) + 7) >> 3;
1130 * Main frame decoding function
1131 * FIXME add arguments
1133 static int dca_decode_frame(AVCodecContext * avctx,
1134 void *data, int *data_size,
1135 const uint8_t * buf, int buf_size)
1139 int16_t *samples = data;
1140 DCAContext *s = avctx->priv_data;
1144 s->dca_buffer_size = dca_convert_bitstream(buf, buf_size, s->dca_buffer, DCA_MAX_FRAME_SIZE);
1145 if (s->dca_buffer_size == -1) {
1146 av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
1150 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
1151 if (dca_parse_frame_header(s) < 0) {
1152 //seems like the frame is corrupt, try with the next one
1156 //set AVCodec values with parsed data
1157 avctx->sample_rate = s->sample_rate;
1158 avctx->bit_rate = s->bit_rate;
1160 channels = s->prim_channels + !!s->lfe;
1161 if(avctx->request_channels == 2 && s->prim_channels > 2) {
1163 s->output = DCA_STEREO;
1166 /* There is nothing that prevents a dts frame to change channel configuration
1167 but FFmpeg doesn't support that so only set the channels if it is previously
1168 unset. Ideally during the first probe for channels the crc should be checked
1169 and only set avctx->channels when the crc is ok. Right now the decoder could
1170 set the channels based on a broken first frame.*/
1171 if (!avctx->channels)
1172 avctx->channels = channels;
1174 if(*data_size < (s->sample_blocks / 8) * 256 * sizeof(int16_t) * channels)
1176 *data_size = 256 / 8 * s->sample_blocks * sizeof(int16_t) * channels;
1177 for (i = 0; i < (s->sample_blocks / 8); i++) {
1178 dca_decode_block(s);
1179 s->dsp.float_to_int16_interleave(samples, s->samples_chanptr, 256, channels);
1180 samples += 256 * channels;
1189 * Build the cosine modulation tables for the QMF
1191 * @param s pointer to the DCAContext
1194 static av_cold void pre_calc_cosmod(DCAContext * s)
1197 static int cosmod_initialized = 0;
1199 if(cosmod_initialized) return;
1200 for (j = 0, k = 0; k < 16; k++)
1201 for (i = 0; i < 16; i++)
1202 cos_mod[j++] = cos((2 * i + 1) * (2 * k + 1) * M_PI / 64);
1204 for (k = 0; k < 16; k++)
1205 for (i = 0; i < 16; i++)
1206 cos_mod[j++] = cos((i) * (2 * k + 1) * M_PI / 32);
1208 for (k = 0; k < 16; k++)
1209 cos_mod[j++] = 0.25 / (2 * cos((2 * k + 1) * M_PI / 128));
1211 for (k = 0; k < 16; k++)
1212 cos_mod[j++] = -0.25 / (2.0 * sin((2 * k + 1) * M_PI / 128));
1214 cosmod_initialized = 1;
1219 * DCA initialization
1221 * @param avctx pointer to the AVCodecContext
1224 static av_cold int dca_decode_init(AVCodecContext * avctx)
1226 DCAContext *s = avctx->priv_data;
1233 dsputil_init(&s->dsp, avctx);
1235 /* allow downmixing to stereo */
1236 if (avctx->channels > 0 && avctx->request_channels < avctx->channels &&
1237 avctx->request_channels == 2) {
1238 avctx->channels = avctx->request_channels;
1240 for(i = 0; i < 6; i++)
1241 s->samples_chanptr[i] = s->samples + i * 256;
1242 avctx->sample_fmt = SAMPLE_FMT_S16;
1247 AVCodec dca_decoder = {
1249 .type = CODEC_TYPE_AUDIO,
1251 .priv_data_size = sizeof(DCAContext),
1252 .init = dca_decode_init,
1253 .decode = dca_decode_frame,
1254 .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),