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
71 #define DCA_MAX_FRAME_SIZE 16384
75 int offset; ///< code values offset
76 int maxbits[8]; ///< max bits in VLC
77 int wrap; ///< wrap for get_vlc2()
78 VLC vlc[8]; ///< actual codes
81 static BitAlloc dca_bitalloc_index; ///< indexes for samples VLC select
82 static BitAlloc dca_tmode; ///< transition mode VLCs
83 static BitAlloc dca_scalefactor; ///< scalefactor VLCs
84 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
86 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba, int idx)
88 return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) + ba->offset;
92 AVCodecContext *avctx;
94 int frame_type; ///< type of the current frame
95 int samples_deficit; ///< deficit sample count
96 int crc_present; ///< crc is present in the bitstream
97 int sample_blocks; ///< number of PCM sample blocks
98 int frame_size; ///< primary frame byte size
99 int amode; ///< audio channels arrangement
100 int sample_rate; ///< audio sampling rate
101 int bit_rate; ///< transmission bit rate
103 int downmix; ///< embedded downmix enabled
104 int dynrange; ///< embedded dynamic range flag
105 int timestamp; ///< embedded time stamp flag
106 int aux_data; ///< auxiliary data flag
107 int hdcd; ///< source material is mastered in HDCD
108 int ext_descr; ///< extension audio descriptor flag
109 int ext_coding; ///< extended coding flag
110 int aspf; ///< audio sync word insertion flag
111 int lfe; ///< low frequency effects flag
112 int predictor_history; ///< predictor history flag
113 int header_crc; ///< header crc check bytes
114 int multirate_inter; ///< multirate interpolator switch
115 int version; ///< encoder software revision
116 int copy_history; ///< copy history
117 int source_pcm_res; ///< source pcm resolution
118 int front_sum; ///< front sum/difference flag
119 int surround_sum; ///< surround sum/difference flag
120 int dialog_norm; ///< dialog normalisation parameter
122 /* Primary audio coding header */
123 int subframes; ///< number of subframes
124 int total_channels; ///< number of channels including extensions
125 int prim_channels; ///< number of primary audio channels
126 int subband_activity[DCA_PRIM_CHANNELS_MAX]; ///< subband activity count
127 int vq_start_subband[DCA_PRIM_CHANNELS_MAX]; ///< high frequency vq start subband
128 int joint_intensity[DCA_PRIM_CHANNELS_MAX]; ///< joint intensity coding index
129 int transient_huffman[DCA_PRIM_CHANNELS_MAX]; ///< transient mode code book
130 int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]; ///< scale factor code book
131 int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX]; ///< bit allocation quantizer select
132 int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< quantization index codebook select
133 float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< scale factor adjustment
135 /* Primary audio coding side information */
136 int subsubframes; ///< number of subsubframes
137 int partial_samples; ///< partial subsubframe samples count
138 int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction mode (ADPCM used or not)
139 int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction VQ coefs
140 int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< bit allocation index
141 int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< transition mode (transients)
142 int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2]; ///< scale factors (2 if transient)
143 int joint_huff[DCA_PRIM_CHANNELS_MAX]; ///< joint subband scale factors codebook
144 int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< joint subband scale factors
145 int downmix_coef[DCA_PRIM_CHANNELS_MAX][2]; ///< stereo downmix coefficients
146 int dynrange_coef; ///< dynamic range coefficient
148 int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< VQ encoded high frequency subbands
150 float lfe_data[2 * DCA_SUBSUBFAMES_MAX * DCA_LFE_MAX *
151 2 /*history */ ]; ///< Low frequency effect data
152 int lfe_scale_factor;
154 /* Subband samples history (for ADPCM) */
155 float subband_samples_hist[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4];
156 DECLARE_ALIGNED_16(float, subband_fir_hist[DCA_PRIM_CHANNELS_MAX][512]);
157 float subband_fir_noidea[DCA_PRIM_CHANNELS_MAX][32];
158 int hist_index[DCA_PRIM_CHANNELS_MAX];
160 int output; ///< type of output
161 float add_bias; ///< output bias
162 float scale_bias; ///< output scale
164 DECLARE_ALIGNED_16(float, samples[1536]); /* 6 * 256 = 1536, might only need 5 */
165 const float *samples_chanptr[6];
167 uint8_t dca_buffer[DCA_MAX_FRAME_SIZE];
168 int dca_buffer_size; ///< how much data is in the dca_buffer
171 /* Current position in DCA frame */
172 int current_subframe;
173 int current_subsubframe;
175 int debug_flag; ///< used for suppressing repeated error messages output
180 static av_cold void dca_init_vlcs(void)
182 static int vlcs_initialized = 0;
185 if (vlcs_initialized)
188 dca_bitalloc_index.offset = 1;
189 dca_bitalloc_index.wrap = 2;
190 for (i = 0; i < 5; i++)
191 init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
192 bitalloc_12_bits[i], 1, 1,
193 bitalloc_12_codes[i], 2, 2, 1);
194 dca_scalefactor.offset = -64;
195 dca_scalefactor.wrap = 2;
196 for (i = 0; i < 5; i++)
197 init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
198 scales_bits[i], 1, 1,
199 scales_codes[i], 2, 2, 1);
200 dca_tmode.offset = 0;
202 for (i = 0; i < 4; i++)
203 init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
205 tmode_codes[i], 2, 2, 1);
207 for(i = 0; i < 10; i++)
208 for(j = 0; j < 7; j++){
209 if(!bitalloc_codes[i][j]) break;
210 dca_smpl_bitalloc[i+1].offset = bitalloc_offsets[i];
211 dca_smpl_bitalloc[i+1].wrap = 1 + (j > 4);
212 init_vlc(&dca_smpl_bitalloc[i+1].vlc[j], bitalloc_maxbits[i][j],
214 bitalloc_bits[i][j], 1, 1,
215 bitalloc_codes[i][j], 2, 2, 1);
217 vlcs_initialized = 1;
220 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
223 *dst++ = get_bits(gb, bits);
226 static int dca_parse_frame_header(DCAContext * s)
229 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
230 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
231 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
233 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
236 get_bits(&s->gb, 32);
239 s->frame_type = get_bits(&s->gb, 1);
240 s->samples_deficit = get_bits(&s->gb, 5) + 1;
241 s->crc_present = get_bits(&s->gb, 1);
242 s->sample_blocks = get_bits(&s->gb, 7) + 1;
243 s->frame_size = get_bits(&s->gb, 14) + 1;
244 if (s->frame_size < 95)
246 s->amode = get_bits(&s->gb, 6);
247 s->sample_rate = dca_sample_rates[get_bits(&s->gb, 4)];
250 s->bit_rate = dca_bit_rates[get_bits(&s->gb, 5)];
254 s->downmix = get_bits(&s->gb, 1);
255 s->dynrange = get_bits(&s->gb, 1);
256 s->timestamp = get_bits(&s->gb, 1);
257 s->aux_data = get_bits(&s->gb, 1);
258 s->hdcd = get_bits(&s->gb, 1);
259 s->ext_descr = get_bits(&s->gb, 3);
260 s->ext_coding = get_bits(&s->gb, 1);
261 s->aspf = get_bits(&s->gb, 1);
262 s->lfe = get_bits(&s->gb, 2);
263 s->predictor_history = get_bits(&s->gb, 1);
265 /* TODO: check CRC */
267 s->header_crc = get_bits(&s->gb, 16);
269 s->multirate_inter = get_bits(&s->gb, 1);
270 s->version = get_bits(&s->gb, 4);
271 s->copy_history = get_bits(&s->gb, 2);
272 s->source_pcm_res = get_bits(&s->gb, 3);
273 s->front_sum = get_bits(&s->gb, 1);
274 s->surround_sum = get_bits(&s->gb, 1);
275 s->dialog_norm = get_bits(&s->gb, 4);
277 /* FIXME: channels mixing levels */
278 s->output = s->amode;
279 if(s->lfe) s->output |= DCA_LFE;
282 av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);
283 av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);
284 av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);
285 av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",
286 s->sample_blocks, s->sample_blocks * 32);
287 av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);
288 av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",
289 s->amode, dca_channels[s->amode]);
290 av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i Hz\n",
292 av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i bits/s\n",
294 av_log(s->avctx, AV_LOG_DEBUG, "downmix: %i\n", s->downmix);
295 av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);
296 av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);
297 av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);
298 av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);
299 av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);
300 av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);
301 av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);
302 av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);
303 av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",
304 s->predictor_history);
305 av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);
306 av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",
308 av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);
309 av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);
310 av_log(s->avctx, AV_LOG_DEBUG,
311 "source pcm resolution: %i (%i bits/sample)\n",
312 s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);
313 av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);
314 av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);
315 av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);
316 av_log(s->avctx, AV_LOG_DEBUG, "\n");
319 /* Primary audio coding header */
320 s->subframes = get_bits(&s->gb, 4) + 1;
321 s->total_channels = get_bits(&s->gb, 3) + 1;
322 s->prim_channels = s->total_channels;
323 if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
324 s->prim_channels = DCA_PRIM_CHANNELS_MAX; /* We only support DTS core */
327 for (i = 0; i < s->prim_channels; i++) {
328 s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
329 if (s->subband_activity[i] > DCA_SUBBANDS)
330 s->subband_activity[i] = DCA_SUBBANDS;
332 for (i = 0; i < s->prim_channels; i++) {
333 s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
334 if (s->vq_start_subband[i] > DCA_SUBBANDS)
335 s->vq_start_subband[i] = DCA_SUBBANDS;
337 get_array(&s->gb, s->joint_intensity, s->prim_channels, 3);
338 get_array(&s->gb, s->transient_huffman, s->prim_channels, 2);
339 get_array(&s->gb, s->scalefactor_huffman, s->prim_channels, 3);
340 get_array(&s->gb, s->bitalloc_huffman, s->prim_channels, 3);
342 /* Get codebooks quantization indexes */
343 memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
344 for (j = 1; j < 11; j++)
345 for (i = 0; i < s->prim_channels; i++)
346 s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
348 /* Get scale factor adjustment */
349 for (j = 0; j < 11; j++)
350 for (i = 0; i < s->prim_channels; i++)
351 s->scalefactor_adj[i][j] = 1;
353 for (j = 1; j < 11; j++)
354 for (i = 0; i < s->prim_channels; i++)
355 if (s->quant_index_huffman[i][j] < thr[j])
356 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
358 if (s->crc_present) {
359 /* Audio header CRC check */
360 get_bits(&s->gb, 16);
363 s->current_subframe = 0;
364 s->current_subsubframe = 0;
367 av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);
368 av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);
369 for(i = 0; i < s->prim_channels; i++){
370 av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n", s->subband_activity[i]);
371 av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n", s->vq_start_subband[i]);
372 av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n", s->joint_intensity[i]);
373 av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n", s->transient_huffman[i]);
374 av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n", s->scalefactor_huffman[i]);
375 av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n", s->bitalloc_huffman[i]);
376 av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");
377 for (j = 0; j < 11; j++)
378 av_log(s->avctx, AV_LOG_DEBUG, " %i",
379 s->quant_index_huffman[i][j]);
380 av_log(s->avctx, AV_LOG_DEBUG, "\n");
381 av_log(s->avctx, AV_LOG_DEBUG, "scalefac adj:");
382 for (j = 0; j < 11; j++)
383 av_log(s->avctx, AV_LOG_DEBUG, " %1.3f", s->scalefactor_adj[i][j]);
384 av_log(s->avctx, AV_LOG_DEBUG, "\n");
392 static inline int get_scale(GetBitContext *gb, int level, int value)
395 /* huffman encoded */
396 value += get_bitalloc(gb, &dca_scalefactor, level);
398 value = get_bits(gb, level + 1);
402 static int dca_subframe_header(DCAContext * s)
404 /* Primary audio coding side information */
407 s->subsubframes = get_bits(&s->gb, 2) + 1;
408 s->partial_samples = get_bits(&s->gb, 3);
409 for (j = 0; j < s->prim_channels; j++) {
410 for (k = 0; k < s->subband_activity[j]; k++)
411 s->prediction_mode[j][k] = get_bits(&s->gb, 1);
414 /* Get prediction codebook */
415 for (j = 0; j < s->prim_channels; j++) {
416 for (k = 0; k < s->subband_activity[j]; k++) {
417 if (s->prediction_mode[j][k] > 0) {
418 /* (Prediction coefficient VQ address) */
419 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
424 /* Bit allocation index */
425 for (j = 0; j < s->prim_channels; j++) {
426 for (k = 0; k < s->vq_start_subband[j]; k++) {
427 if (s->bitalloc_huffman[j] == 6)
428 s->bitalloc[j][k] = get_bits(&s->gb, 5);
429 else if (s->bitalloc_huffman[j] == 5)
430 s->bitalloc[j][k] = get_bits(&s->gb, 4);
431 else if (s->bitalloc_huffman[j] == 7) {
432 av_log(s->avctx, AV_LOG_ERROR,
433 "Invalid bit allocation index\n");
437 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
440 if (s->bitalloc[j][k] > 26) {
441 // av_log(s->avctx,AV_LOG_DEBUG,"bitalloc index [%i][%i] too big (%i)\n",
442 // j, k, s->bitalloc[j][k]);
448 /* Transition mode */
449 for (j = 0; j < s->prim_channels; j++) {
450 for (k = 0; k < s->subband_activity[j]; k++) {
451 s->transition_mode[j][k] = 0;
452 if (s->subsubframes > 1 &&
453 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
454 s->transition_mode[j][k] =
455 get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
460 for (j = 0; j < s->prim_channels; j++) {
461 const uint32_t *scale_table;
464 memset(s->scale_factor[j], 0, s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
466 if (s->scalefactor_huffman[j] == 6)
467 scale_table = scale_factor_quant7;
469 scale_table = scale_factor_quant6;
471 /* When huffman coded, only the difference is encoded */
474 for (k = 0; k < s->subband_activity[j]; k++) {
475 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
476 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
477 s->scale_factor[j][k][0] = scale_table[scale_sum];
480 if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
481 /* Get second scale factor */
482 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
483 s->scale_factor[j][k][1] = scale_table[scale_sum];
488 /* Joint subband scale factor codebook select */
489 for (j = 0; j < s->prim_channels; j++) {
490 /* Transmitted only if joint subband coding enabled */
491 if (s->joint_intensity[j] > 0)
492 s->joint_huff[j] = get_bits(&s->gb, 3);
495 /* Scale factors for joint subband coding */
496 for (j = 0; j < s->prim_channels; j++) {
499 /* Transmitted only if joint subband coding enabled */
500 if (s->joint_intensity[j] > 0) {
502 source_channel = s->joint_intensity[j] - 1;
504 /* When huffman coded, only the difference is encoded
505 * (is this valid as well for joint scales ???) */
507 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
508 scale = get_scale(&s->gb, s->joint_huff[j], 0);
509 scale += 64; /* bias */
510 s->joint_scale_factor[j][k] = scale; /*joint_scale_table[scale]; */
513 if (!s->debug_flag & 0x02) {
514 av_log(s->avctx, AV_LOG_DEBUG,
515 "Joint stereo coding not supported\n");
516 s->debug_flag |= 0x02;
521 /* Stereo downmix coefficients */
522 if (s->prim_channels > 2) {
524 for (j = 0; j < s->prim_channels; j++) {
525 s->downmix_coef[j][0] = get_bits(&s->gb, 7);
526 s->downmix_coef[j][1] = get_bits(&s->gb, 7);
529 int am = s->amode & DCA_CHANNEL_MASK;
530 for (j = 0; j < s->prim_channels; j++) {
531 s->downmix_coef[j][0] = dca_default_coeffs[am][j][0];
532 s->downmix_coef[j][1] = dca_default_coeffs[am][j][1];
537 /* Dynamic range coefficient */
539 s->dynrange_coef = get_bits(&s->gb, 8);
541 /* Side information CRC check word */
542 if (s->crc_present) {
543 get_bits(&s->gb, 16);
547 * Primary audio data arrays
550 /* VQ encoded high frequency subbands */
551 for (j = 0; j < s->prim_channels; j++)
552 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
553 /* 1 vector -> 32 samples */
554 s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
556 /* Low frequency effect data */
559 int lfe_samples = 2 * s->lfe * s->subsubframes;
562 for (j = lfe_samples; j < lfe_samples * 2; j++) {
563 /* Signed 8 bits int */
564 s->lfe_data[j] = get_sbits(&s->gb, 8);
567 /* Scale factor index */
568 s->lfe_scale_factor = scale_factor_quant7[get_bits(&s->gb, 8)];
570 /* Quantization step size * scale factor */
571 lfe_scale = 0.035 * s->lfe_scale_factor;
573 for (j = lfe_samples; j < lfe_samples * 2; j++)
574 s->lfe_data[j] *= lfe_scale;
578 av_log(s->avctx, AV_LOG_DEBUG, "subsubframes: %i\n", s->subsubframes);
579 av_log(s->avctx, AV_LOG_DEBUG, "partial samples: %i\n",
581 for (j = 0; j < s->prim_channels; j++) {
582 av_log(s->avctx, AV_LOG_DEBUG, "prediction mode:");
583 for (k = 0; k < s->subband_activity[j]; k++)
584 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->prediction_mode[j][k]);
585 av_log(s->avctx, AV_LOG_DEBUG, "\n");
587 for (j = 0; j < s->prim_channels; j++) {
588 for (k = 0; k < s->subband_activity[j]; k++)
589 av_log(s->avctx, AV_LOG_DEBUG,
590 "prediction coefs: %f, %f, %f, %f\n",
591 (float) adpcm_vb[s->prediction_vq[j][k]][0] / 8192,
592 (float) adpcm_vb[s->prediction_vq[j][k]][1] / 8192,
593 (float) adpcm_vb[s->prediction_vq[j][k]][2] / 8192,
594 (float) adpcm_vb[s->prediction_vq[j][k]][3] / 8192);
596 for (j = 0; j < s->prim_channels; j++) {
597 av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index: ");
598 for (k = 0; k < s->vq_start_subband[j]; k++)
599 av_log(s->avctx, AV_LOG_DEBUG, "%2.2i ", s->bitalloc[j][k]);
600 av_log(s->avctx, AV_LOG_DEBUG, "\n");
602 for (j = 0; j < s->prim_channels; j++) {
603 av_log(s->avctx, AV_LOG_DEBUG, "Transition mode:");
604 for (k = 0; k < s->subband_activity[j]; k++)
605 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->transition_mode[j][k]);
606 av_log(s->avctx, AV_LOG_DEBUG, "\n");
608 for (j = 0; j < s->prim_channels; j++) {
609 av_log(s->avctx, AV_LOG_DEBUG, "Scale factor:");
610 for (k = 0; k < s->subband_activity[j]; k++) {
611 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0)
612 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->scale_factor[j][k][0]);
613 if (k < s->vq_start_subband[j] && s->transition_mode[j][k])
614 av_log(s->avctx, AV_LOG_DEBUG, " %i(t)", s->scale_factor[j][k][1]);
616 av_log(s->avctx, AV_LOG_DEBUG, "\n");
618 for (j = 0; j < s->prim_channels; j++) {
619 if (s->joint_intensity[j] > 0) {
620 int source_channel = s->joint_intensity[j] - 1;
621 av_log(s->avctx, AV_LOG_DEBUG, "Joint scale factor index:\n");
622 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++)
623 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->joint_scale_factor[j][k]);
624 av_log(s->avctx, AV_LOG_DEBUG, "\n");
627 if (s->prim_channels > 2 && s->downmix) {
628 av_log(s->avctx, AV_LOG_DEBUG, "Downmix coeffs:\n");
629 for (j = 0; j < s->prim_channels; j++) {
630 av_log(s->avctx, AV_LOG_DEBUG, "Channel 0,%d = %f\n", j, dca_downmix_coeffs[s->downmix_coef[j][0]]);
631 av_log(s->avctx, AV_LOG_DEBUG, "Channel 1,%d = %f\n", j, dca_downmix_coeffs[s->downmix_coef[j][1]]);
633 av_log(s->avctx, AV_LOG_DEBUG, "\n");
635 for (j = 0; j < s->prim_channels; j++)
636 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
637 av_log(s->avctx, AV_LOG_DEBUG, "VQ index: %i\n", s->high_freq_vq[j][k]);
639 int lfe_samples = 2 * s->lfe * s->subsubframes;
640 av_log(s->avctx, AV_LOG_DEBUG, "LFE samples:\n");
641 for (j = lfe_samples; j < lfe_samples * 2; j++)
642 av_log(s->avctx, AV_LOG_DEBUG, " %f", s->lfe_data[j]);
643 av_log(s->avctx, AV_LOG_DEBUG, "\n");
650 static void qmf_32_subbands(DCAContext * s, int chans,
651 float samples_in[32][8], float *samples_out,
652 float scale, float bias)
654 const float *prCoeff;
656 DECLARE_ALIGNED_16(float, raXin[32]);
658 int hist_index= s->hist_index[chans];
659 float *subband_fir_hist2 = s->subband_fir_noidea[chans];
663 scale *= sqrt(1/8.0);
666 if (!s->multirate_inter) /* Non-perfect reconstruction */
667 prCoeff = fir_32bands_nonperfect;
668 else /* Perfect reconstruction */
669 prCoeff = fir_32bands_perfect;
671 /* Reconstructed channel sample index */
672 for (subindex = 0; subindex < 8; subindex++) {
673 float *subband_fir_hist = s->subband_fir_hist[chans] + hist_index;
674 /* Load in one sample from each subband and clear inactive subbands */
675 for (i = 0; i < s->subband_activity[chans]; i++){
676 if((i-1)&2) raXin[i] = -samples_in[i][subindex];
677 else raXin[i] = samples_in[i][subindex];
682 ff_imdct_half(&s->imdct, subband_fir_hist, raXin);
684 /* Multiply by filter coefficients */
685 for (i = 0; i < 16; i++){
686 float a= subband_fir_hist2[i ];
687 float b= subband_fir_hist2[i+16];
690 for (j = 0; j < 512-hist_index; j += 64){
691 a += prCoeff[i+j ]*(-subband_fir_hist[15-i+j]);
692 b += prCoeff[i+j+16]*( subband_fir_hist[ i+j]);
693 c += prCoeff[i+j+32]*( subband_fir_hist[16+i+j]);
694 d += prCoeff[i+j+48]*( subband_fir_hist[31-i+j]);
696 for ( ; j < 512; j += 64){
697 a += prCoeff[i+j ]*(-subband_fir_hist[15-i+j-512]);
698 b += prCoeff[i+j+16]*( subband_fir_hist[ i+j-512]);
699 c += prCoeff[i+j+32]*( subband_fir_hist[16+i+j-512]);
700 d += prCoeff[i+j+48]*( subband_fir_hist[31-i+j-512]);
702 samples_out[i ] = a * scale + bias;
703 samples_out[i+16] = b * scale + bias;
704 subband_fir_hist2[i ] = c;
705 subband_fir_hist2[i+16] = d;
709 hist_index = (hist_index-32)&511;
711 s->hist_index[chans]= hist_index;
714 static void lfe_interpolation_fir(int decimation_select,
715 int num_deci_sample, float *samples_in,
716 float *samples_out, float scale,
719 /* samples_in: An array holding decimated samples.
720 * Samples in current subframe starts from samples_in[0],
721 * while samples_in[-1], samples_in[-2], ..., stores samples
722 * from last subframe as history.
724 * samples_out: An array holding interpolated samples
727 int decifactor, k, j;
728 const float *prCoeff;
730 int interp_index = 0; /* Index to the interpolated samples */
733 /* Select decimation filter */
734 if (decimation_select == 1) {
736 prCoeff = lfe_fir_128;
739 prCoeff = lfe_fir_64;
742 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
743 /* One decimated sample generates decifactor interpolated ones */
744 for (k = 0; k < decifactor; k++) {
746 //FIXME the coeffs are symetric, fix that
747 for (j = 0; j < 512 / decifactor; j++)
748 rTmp += samples_in[deciindex - j] * prCoeff[k + j * decifactor];
749 samples_out[interp_index++] = (rTmp * scale) + bias;
754 /* downmixing routines */
755 #define MIX_REAR1(samples, si1, rs, coef) \
756 samples[i] += samples[si1] * coef[rs][0]; \
757 samples[i+256] += samples[si1] * coef[rs][1];
759 #define MIX_REAR2(samples, si1, si2, rs, coef) \
760 samples[i] += samples[si1] * coef[rs][0] + samples[si2] * coef[rs+1][0]; \
761 samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs+1][1];
763 #define MIX_FRONT3(samples, coef) \
765 samples[i] = t * coef[0][0] + samples[i+256] * coef[1][0] + samples[i+512] * coef[2][0]; \
766 samples[i+256] = t * coef[0][1] + samples[i+256] * coef[1][1] + samples[i+512] * coef[2][1];
768 #define DOWNMIX_TO_STEREO(op1, op2) \
769 for(i = 0; i < 256; i++){ \
774 static void dca_downmix(float *samples, int srcfmt,
775 int downmix_coef[DCA_PRIM_CHANNELS_MAX][2])
779 float coef[DCA_PRIM_CHANNELS_MAX][2];
781 for(i=0; i<DCA_PRIM_CHANNELS_MAX; i++) {
782 coef[i][0] = dca_downmix_coeffs[downmix_coef[i][0]];
783 coef[i][1] = dca_downmix_coeffs[downmix_coef[i][1]];
789 case DCA_STEREO_TOTAL:
790 case DCA_STEREO_SUMDIFF:
792 av_log(NULL, 0, "Not implemented!\n");
797 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),);
800 DOWNMIX_TO_STEREO(MIX_REAR1(samples, i + 512, 2, coef),);
803 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
804 MIX_REAR1(samples, i + 768, 3, coef));
807 DOWNMIX_TO_STEREO(MIX_REAR2(samples, i + 512, i + 768, 2, coef),);
810 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
811 MIX_REAR2(samples, i + 768, i + 1024, 3, coef));
817 /* Very compact version of the block code decoder that does not use table
818 * look-up but is slightly slower */
819 static int decode_blockcode(int code, int levels, int *values)
822 int offset = (levels - 1) >> 1;
824 for (i = 0; i < 4; i++) {
825 values[i] = (code % levels) - offset;
832 av_log(NULL, AV_LOG_ERROR, "ERROR: block code look-up failed\n");
837 static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 };
838 static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 };
840 static int dca_subsubframe(DCAContext * s)
843 int subsubframe = s->current_subsubframe;
845 const float *quant_step_table;
848 float subband_samples[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8];
854 /* Select quantization step size table */
855 if (s->bit_rate == 0x1f)
856 quant_step_table = lossless_quant_d;
858 quant_step_table = lossy_quant_d;
860 for (k = 0; k < s->prim_channels; k++) {
861 for (l = 0; l < s->vq_start_subband[k]; l++) {
864 /* Select the mid-tread linear quantizer */
865 int abits = s->bitalloc[k][l];
867 float quant_step_size = quant_step_table[abits];
871 * Determine quantization index code book and its type
874 /* Select quantization index code book */
875 int sel = s->quant_index_huffman[k][abits];
878 * Extract bits from the bit stream
881 memset(subband_samples[k][l], 0, 8 * sizeof(subband_samples[0][0][0]));
882 }else if(abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table){
885 int block_code1, block_code2, size, levels;
888 size = abits_sizes[abits-1];
889 levels = abits_levels[abits-1];
891 block_code1 = get_bits(&s->gb, size);
892 /* FIXME Should test return value */
893 decode_blockcode(block_code1, levels, block);
894 block_code2 = get_bits(&s->gb, size);
895 decode_blockcode(block_code2, levels, &block[4]);
896 for (m = 0; m < 8; m++)
897 subband_samples[k][l][m] = block[m];
900 for (m = 0; m < 8; m++)
901 subband_samples[k][l][m] = get_sbits(&s->gb, abits - 3);
905 for (m = 0; m < 8; m++)
906 subband_samples[k][l][m] = get_bitalloc(&s->gb, &dca_smpl_bitalloc[abits], sel);
909 /* Deal with transients */
910 if (s->transition_mode[k][l] &&
911 subsubframe >= s->transition_mode[k][l])
912 rscale = quant_step_size * s->scale_factor[k][l][1];
914 rscale = quant_step_size * s->scale_factor[k][l][0];
916 rscale *= s->scalefactor_adj[k][sel];
918 for (m = 0; m < 8; m++)
919 subband_samples[k][l][m] *= rscale;
922 * Inverse ADPCM if in prediction mode
924 if (s->prediction_mode[k][l]) {
926 for (m = 0; m < 8; m++) {
927 for (n = 1; n <= 4; n++)
929 subband_samples[k][l][m] +=
930 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
931 subband_samples[k][l][m - n] / 8192);
932 else if (s->predictor_history)
933 subband_samples[k][l][m] +=
934 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
935 s->subband_samples_hist[k][l][m - n +
942 * Decode VQ encoded high frequencies
944 for (l = s->vq_start_subband[k]; l < s->subband_activity[k]; l++) {
945 /* 1 vector -> 32 samples but we only need the 8 samples
946 * for this subsubframe. */
949 if (!s->debug_flag & 0x01) {
950 av_log(s->avctx, AV_LOG_DEBUG, "Stream with high frequencies VQ coding\n");
951 s->debug_flag |= 0x01;
954 for (m = 0; m < 8; m++) {
955 subband_samples[k][l][m] =
956 high_freq_vq[s->high_freq_vq[k][l]][subsubframe * 8 +
958 * (float) s->scale_factor[k][l][0] / 16.0;
963 /* Check for DSYNC after subsubframe */
964 if (s->aspf || subsubframe == s->subsubframes - 1) {
965 if (0xFFFF == get_bits(&s->gb, 16)) { /* 0xFFFF */
967 av_log(s->avctx, AV_LOG_DEBUG, "Got subframe DSYNC\n");
970 av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
974 /* Backup predictor history for adpcm */
975 for (k = 0; k < s->prim_channels; k++)
976 for (l = 0; l < s->vq_start_subband[k]; l++)
977 memcpy(s->subband_samples_hist[k][l], &subband_samples[k][l][4],
978 4 * sizeof(subband_samples[0][0][0]));
980 /* 32 subbands QMF */
981 for (k = 0; k < s->prim_channels; k++) {
982 /* static float pcm_to_double[8] =
983 {32768.0, 32768.0, 524288.0, 524288.0, 0, 8388608.0, 8388608.0};*/
984 qmf_32_subbands(s, k, subband_samples[k], &s->samples[256 * k],
985 M_SQRT1_2*s->scale_bias /*pcm_to_double[s->source_pcm_res] */ ,
991 if (s->prim_channels > dca_channels[s->output & DCA_CHANNEL_MASK]) {
992 dca_downmix(s->samples, s->amode, s->downmix_coef);
995 /* Generate LFE samples for this subsubframe FIXME!!! */
996 if (s->output & DCA_LFE) {
997 int lfe_samples = 2 * s->lfe * s->subsubframes;
998 int i_channels = dca_channels[s->output & DCA_CHANNEL_MASK];
1000 lfe_interpolation_fir(s->lfe, 2 * s->lfe,
1001 s->lfe_data + lfe_samples +
1002 2 * s->lfe * subsubframe,
1003 &s->samples[256 * i_channels],
1004 (1.0/256.0)*s->scale_bias, s->add_bias);
1005 /* Outputs 20bits pcm samples */
1012 static int dca_subframe_footer(DCAContext * s)
1014 int aux_data_count = 0, i;
1018 * Unpack optional information
1022 get_bits(&s->gb, 32);
1025 aux_data_count = get_bits(&s->gb, 6);
1027 for (i = 0; i < aux_data_count; i++)
1028 get_bits(&s->gb, 8);
1030 if (s->crc_present && (s->downmix || s->dynrange))
1031 get_bits(&s->gb, 16);
1033 lfe_samples = 2 * s->lfe * s->subsubframes;
1034 for (i = 0; i < lfe_samples; i++) {
1035 s->lfe_data[i] = s->lfe_data[i + lfe_samples];
1042 * Decode a dca frame block
1044 * @param s pointer to the DCAContext
1047 static int dca_decode_block(DCAContext * s)
1051 if (s->current_subframe >= s->subframes) {
1052 av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1053 s->current_subframe, s->subframes);
1057 if (!s->current_subsubframe) {
1059 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
1061 /* Read subframe header */
1062 if (dca_subframe_header(s))
1066 /* Read subsubframe */
1068 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
1070 if (dca_subsubframe(s))
1074 s->current_subsubframe++;
1075 if (s->current_subsubframe >= s->subsubframes) {
1076 s->current_subsubframe = 0;
1077 s->current_subframe++;
1079 if (s->current_subframe >= s->subframes) {
1081 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
1083 /* Read subframe footer */
1084 if (dca_subframe_footer(s))
1092 * Convert bitstream to one representation based on sync marker
1094 static int dca_convert_bitstream(const uint8_t * src, int src_size, uint8_t * dst,
1099 const uint16_t *ssrc = (const uint16_t *) src;
1100 uint16_t *sdst = (uint16_t *) dst;
1103 if((unsigned)src_size > (unsigned)max_size) {
1104 av_log(NULL, AV_LOG_ERROR, "Input frame size larger then DCA_MAX_FRAME_SIZE!\n");
1110 case DCA_MARKER_RAW_BE:
1111 memcpy(dst, src, src_size);
1113 case DCA_MARKER_RAW_LE:
1114 for (i = 0; i < (src_size + 1) >> 1; i++)
1115 *sdst++ = bswap_16(*ssrc++);
1117 case DCA_MARKER_14B_BE:
1118 case DCA_MARKER_14B_LE:
1119 init_put_bits(&pb, dst, max_size);
1120 for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
1121 tmp = ((mrk == DCA_MARKER_14B_BE) ? AV_RB16(src) : AV_RL16(src)) & 0x3FFF;
1122 put_bits(&pb, 14, tmp);
1124 flush_put_bits(&pb);
1125 return (put_bits_count(&pb) + 7) >> 3;
1132 * Main frame decoding function
1133 * FIXME add arguments
1135 static int dca_decode_frame(AVCodecContext * avctx,
1136 void *data, int *data_size,
1137 const uint8_t * buf, int buf_size)
1141 int16_t *samples = data;
1142 DCAContext *s = avctx->priv_data;
1146 s->dca_buffer_size = dca_convert_bitstream(buf, buf_size, s->dca_buffer, DCA_MAX_FRAME_SIZE);
1147 if (s->dca_buffer_size == -1) {
1148 av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
1152 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
1153 if (dca_parse_frame_header(s) < 0) {
1154 //seems like the frame is corrupt, try with the next one
1158 //set AVCodec values with parsed data
1159 avctx->sample_rate = s->sample_rate;
1160 avctx->bit_rate = s->bit_rate;
1162 channels = s->prim_channels + !!s->lfe;
1163 if(avctx->request_channels == 2 && s->prim_channels > 2) {
1165 s->output = DCA_STEREO;
1168 /* There is nothing that prevents a dts frame to change channel configuration
1169 but FFmpeg doesn't support that so only set the channels if it is previously
1170 unset. Ideally during the first probe for channels the crc should be checked
1171 and only set avctx->channels when the crc is ok. Right now the decoder could
1172 set the channels based on a broken first frame.*/
1173 if (!avctx->channels)
1174 avctx->channels = channels;
1176 if(*data_size < (s->sample_blocks / 8) * 256 * sizeof(int16_t) * channels)
1178 *data_size = 256 / 8 * s->sample_blocks * sizeof(int16_t) * channels;
1179 for (i = 0; i < (s->sample_blocks / 8); i++) {
1180 dca_decode_block(s);
1181 s->dsp.float_to_int16_interleave(samples, s->samples_chanptr, 256, channels);
1182 samples += 256 * channels;
1191 * DCA initialization
1193 * @param avctx pointer to the AVCodecContext
1196 static av_cold int dca_decode_init(AVCodecContext * avctx)
1198 DCAContext *s = avctx->priv_data;
1204 dsputil_init(&s->dsp, avctx);
1205 ff_mdct_init(&s->imdct, 6, 1);
1207 for(i = 0; i < 6; i++)
1208 s->samples_chanptr[i] = s->samples + i * 256;
1209 avctx->sample_fmt = SAMPLE_FMT_S16;
1211 if(s->dsp.float_to_int16 == ff_float_to_int16_c) {
1212 s->add_bias = 385.0f;
1213 s->scale_bias = 1.0 / 32768.0;
1216 s->scale_bias = 1.0;
1218 /* allow downmixing to stereo */
1219 if (avctx->channels > 0 && avctx->request_channels < avctx->channels &&
1220 avctx->request_channels == 2) {
1221 avctx->channels = avctx->request_channels;
1229 static av_cold int dca_decode_end(AVCodecContext * avctx)
1231 DCAContext *s = avctx->priv_data;
1232 ff_mdct_end(&s->imdct);
1236 AVCodec dca_decoder = {
1238 .type = CODEC_TYPE_AUDIO,
1240 .priv_data_size = sizeof(DCAContext),
1241 .init = dca_decode_init,
1242 .decode = dca_decode_frame,
1243 .close = dca_decode_end,
1244 .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),