]> git.sesse.net Git - ffmpeg/blob - libavcodec/dcadec.c
Merge commit '12251f997bbc0abb93be39c51021e6d404ca385f'
[ffmpeg] / libavcodec / dcadec.c
1 /*
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
7  *
8  * This file is part of FFmpeg.
9  *
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.
14  *
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.
19  *
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
23  */
24
25 #include <math.h>
26 #include <stddef.h>
27 #include <stdio.h>
28
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"
37
38 #include "avcodec.h"
39 #include "dca.h"
40 #include "dcadata.h"
41 #include "dcadsp.h"
42 #include "dcahuff.h"
43 #include "fft.h"
44 #include "fmtconvert.h"
45 #include "get_bits.h"
46 #include "internal.h"
47 #include "mathops.h"
48 #include "synth_filter.h"
49
50 #if ARCH_ARM
51 #   include "arm/dca.h"
52 #endif
53
54 enum DCAMode {
55     DCA_MONO = 0,
56     DCA_CHANNEL,
57     DCA_STEREO,
58     DCA_STEREO_SUMDIFF,
59     DCA_STEREO_TOTAL,
60     DCA_3F,
61     DCA_2F1R,
62     DCA_3F1R,
63     DCA_2F2R,
64     DCA_3F2R,
65     DCA_4F2R
66 };
67
68
69 enum DCAXxchSpeakerMask {
70     DCA_XXCH_FRONT_CENTER          = 0x0000001,
71     DCA_XXCH_FRONT_LEFT            = 0x0000002,
72     DCA_XXCH_FRONT_RIGHT           = 0x0000004,
73     DCA_XXCH_SIDE_REAR_LEFT        = 0x0000008,
74     DCA_XXCH_SIDE_REAR_RIGHT       = 0x0000010,
75     DCA_XXCH_LFE1                  = 0x0000020,
76     DCA_XXCH_REAR_CENTER           = 0x0000040,
77     DCA_XXCH_SURROUND_REAR_LEFT    = 0x0000080,
78     DCA_XXCH_SURROUND_REAR_RIGHT   = 0x0000100,
79     DCA_XXCH_SIDE_SURROUND_LEFT    = 0x0000200,
80     DCA_XXCH_SIDE_SURROUND_RIGHT   = 0x0000400,
81     DCA_XXCH_FRONT_CENTER_LEFT     = 0x0000800,
82     DCA_XXCH_FRONT_CENTER_RIGHT    = 0x0001000,
83     DCA_XXCH_FRONT_HIGH_LEFT       = 0x0002000,
84     DCA_XXCH_FRONT_HIGH_CENTER     = 0x0004000,
85     DCA_XXCH_FRONT_HIGH_RIGHT      = 0x0008000,
86     DCA_XXCH_LFE2                  = 0x0010000,
87     DCA_XXCH_SIDE_FRONT_LEFT       = 0x0020000,
88     DCA_XXCH_SIDE_FRONT_RIGHT      = 0x0040000,
89     DCA_XXCH_OVERHEAD              = 0x0080000,
90     DCA_XXCH_SIDE_HIGH_LEFT        = 0x0100000,
91     DCA_XXCH_SIDE_HIGH_RIGHT       = 0x0200000,
92     DCA_XXCH_REAR_HIGH_CENTER      = 0x0400000,
93     DCA_XXCH_REAR_HIGH_LEFT        = 0x0800000,
94     DCA_XXCH_REAR_HIGH_RIGHT       = 0x1000000,
95     DCA_XXCH_REAR_LOW_CENTER       = 0x2000000,
96     DCA_XXCH_REAR_LOW_LEFT         = 0x4000000,
97     DCA_XXCH_REAR_LOW_RIGHT        = 0x8000000,
98 };
99
100 #define DCA_DOLBY                  101           /* FIXME */
101
102 #define DCA_CHANNEL_BITS             6
103 #define DCA_CHANNEL_MASK          0x3F
104
105 #define DCA_LFE                   0x80
106
107 #define HEADER_SIZE                 14
108
109 #define DCA_NSYNCAUX        0x9A1105A0
110
111
112 /** Bit allocation */
113 typedef struct BitAlloc {
114     int offset;                 ///< code values offset
115     int maxbits[8];             ///< max bits in VLC
116     int wrap;                   ///< wrap for get_vlc2()
117     VLC vlc[8];                 ///< actual codes
118 } BitAlloc;
119
120 static BitAlloc dca_bitalloc_index;    ///< indexes for samples VLC select
121 static BitAlloc dca_tmode;             ///< transition mode VLCs
122 static BitAlloc dca_scalefactor;       ///< scalefactor VLCs
123 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
124
125 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba,
126                                          int idx)
127 {
128     return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) +
129            ba->offset;
130 }
131
132 static float dca_dmix_code(unsigned code);
133
134 static av_cold void dca_init_vlcs(void)
135 {
136     static int vlcs_initialized = 0;
137     int i, j, c = 14;
138     static VLC_TYPE dca_table[23622][2];
139
140     if (vlcs_initialized)
141         return;
142
143     dca_bitalloc_index.offset = 1;
144     dca_bitalloc_index.wrap   = 2;
145     for (i = 0; i < 5; i++) {
146         dca_bitalloc_index.vlc[i].table           = &dca_table[ff_dca_vlc_offs[i]];
147         dca_bitalloc_index.vlc[i].table_allocated = ff_dca_vlc_offs[i + 1] - ff_dca_vlc_offs[i];
148         init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
149                  bitalloc_12_bits[i], 1, 1,
150                  bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
151     }
152     dca_scalefactor.offset = -64;
153     dca_scalefactor.wrap   = 2;
154     for (i = 0; i < 5; i++) {
155         dca_scalefactor.vlc[i].table           = &dca_table[ff_dca_vlc_offs[i + 5]];
156         dca_scalefactor.vlc[i].table_allocated = ff_dca_vlc_offs[i + 6] - ff_dca_vlc_offs[i + 5];
157         init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
158                  scales_bits[i], 1, 1,
159                  scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
160     }
161     dca_tmode.offset = 0;
162     dca_tmode.wrap   = 1;
163     for (i = 0; i < 4; i++) {
164         dca_tmode.vlc[i].table           = &dca_table[ff_dca_vlc_offs[i + 10]];
165         dca_tmode.vlc[i].table_allocated = ff_dca_vlc_offs[i + 11] - ff_dca_vlc_offs[i + 10];
166         init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
167                  tmode_bits[i], 1, 1,
168                  tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
169     }
170
171     for (i = 0; i < 10; i++)
172         for (j = 0; j < 7; j++) {
173             if (!bitalloc_codes[i][j])
174                 break;
175             dca_smpl_bitalloc[i + 1].offset                 = bitalloc_offsets[i];
176             dca_smpl_bitalloc[i + 1].wrap                   = 1 + (j > 4);
177             dca_smpl_bitalloc[i + 1].vlc[j].table           = &dca_table[ff_dca_vlc_offs[c]];
178             dca_smpl_bitalloc[i + 1].vlc[j].table_allocated = ff_dca_vlc_offs[c + 1] - ff_dca_vlc_offs[c];
179
180             init_vlc(&dca_smpl_bitalloc[i + 1].vlc[j], bitalloc_maxbits[i][j],
181                      bitalloc_sizes[i],
182                      bitalloc_bits[i][j], 1, 1,
183                      bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC);
184             c++;
185         }
186     vlcs_initialized = 1;
187 }
188
189 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
190 {
191     while (len--)
192         *dst++ = get_bits(gb, bits);
193 }
194
195 static inline int dca_xxch2index(DCAContext *s, int xxch_ch)
196 {
197     int i, base, mask;
198
199     /* locate channel set containing the channel */
200     for (i = -1, base = 0, mask = (s->xxch_core_spkmask & ~DCA_XXCH_LFE1);
201          i <= s->xxch_chset && !(mask & xxch_ch); mask = s->xxch_spk_masks[++i])
202         base += av_popcount(mask);
203
204     return base + av_popcount(mask & (xxch_ch - 1));
205 }
206
207 static int dca_parse_audio_coding_header(DCAContext *s, int base_channel,
208                                          int xxch)
209 {
210     int i, j;
211     static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
212     static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
213     static const int thr[11]    = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
214     int hdr_pos = 0, hdr_size = 0;
215     float scale_factor;
216     int this_chans, acc_mask;
217     int embedded_downmix;
218     int nchans, mask[8];
219     int coeff, ichan;
220
221     /* xxch has arbitrary sized audio coding headers */
222     if (xxch) {
223         hdr_pos  = get_bits_count(&s->gb);
224         hdr_size = get_bits(&s->gb, 7) + 1;
225     }
226
227     nchans = get_bits(&s->gb, 3) + 1;
228     s->total_channels = nchans + base_channel;
229     s->prim_channels  = s->total_channels;
230
231     /* obtain speaker layout mask & downmix coefficients for XXCH */
232     if (xxch) {
233         acc_mask = s->xxch_core_spkmask;
234
235         this_chans = get_bits(&s->gb, s->xxch_nbits_spk_mask - 6) << 6;
236         s->xxch_spk_masks[s->xxch_chset] = this_chans;
237         s->xxch_chset_nch[s->xxch_chset] = nchans;
238
239         for (i = 0; i <= s->xxch_chset; i++)
240             acc_mask |= s->xxch_spk_masks[i];
241
242         /* check for downmixing information */
243         if (get_bits1(&s->gb)) {
244             embedded_downmix = get_bits1(&s->gb);
245             coeff            = get_bits(&s->gb, 6);
246
247             if (coeff<1 || coeff>61) {
248                 av_log(s->avctx, AV_LOG_ERROR, "6bit coeff %d is out of range\n", coeff);
249                 return AVERROR_INVALIDDATA;
250             }
251
252             scale_factor     = -1.0f / dca_dmix_code((coeff<<2)-3);
253
254             s->xxch_dmix_sf[s->xxch_chset] = scale_factor;
255
256             for (i = base_channel; i < s->prim_channels; i++) {
257                 mask[i] = get_bits(&s->gb, s->xxch_nbits_spk_mask);
258             }
259
260             for (j = base_channel; j < s->prim_channels; j++) {
261                 memset(s->xxch_dmix_coeff[j], 0, sizeof(s->xxch_dmix_coeff[0]));
262                 s->xxch_dmix_embedded |= (embedded_downmix << j);
263                 for (i = 0; i < s->xxch_nbits_spk_mask; i++) {
264                     if (mask[j] & (1 << i)) {
265                         if ((1 << i) == DCA_XXCH_LFE1) {
266                             av_log(s->avctx, AV_LOG_WARNING,
267                                    "DCA-XXCH: dmix to LFE1 not supported.\n");
268                             continue;
269                         }
270
271                         coeff = get_bits(&s->gb, 7);
272                         ichan = dca_xxch2index(s, 1 << i);
273                         if ((coeff&63)<1 || (coeff&63)>61) {
274                             av_log(s->avctx, AV_LOG_ERROR, "7bit coeff %d is out of range\n", coeff);
275                             return AVERROR_INVALIDDATA;
276                         }
277                         s->xxch_dmix_coeff[j][ichan] = dca_dmix_code((coeff<<2)-3);
278                     }
279                 }
280             }
281         }
282     }
283
284     if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
285         s->prim_channels = DCA_PRIM_CHANNELS_MAX;
286
287     for (i = base_channel; i < s->prim_channels; i++) {
288         s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
289         if (s->subband_activity[i] > DCA_SUBBANDS)
290             s->subband_activity[i] = DCA_SUBBANDS;
291     }
292     for (i = base_channel; i < s->prim_channels; i++) {
293         s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
294         if (s->vq_start_subband[i] > DCA_SUBBANDS)
295             s->vq_start_subband[i] = DCA_SUBBANDS;
296     }
297     get_array(&s->gb, s->joint_intensity + base_channel,     s->prim_channels - base_channel, 3);
298     get_array(&s->gb, s->transient_huffman + base_channel,   s->prim_channels - base_channel, 2);
299     get_array(&s->gb, s->scalefactor_huffman + base_channel, s->prim_channels - base_channel, 3);
300     get_array(&s->gb, s->bitalloc_huffman + base_channel,    s->prim_channels - base_channel, 3);
301
302     /* Get codebooks quantization indexes */
303     if (!base_channel)
304         memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
305     for (j = 1; j < 11; j++)
306         for (i = base_channel; i < s->prim_channels; i++)
307             s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
308
309     /* Get scale factor adjustment */
310     for (j = 0; j < 11; j++)
311         for (i = base_channel; i < s->prim_channels; i++)
312             s->scalefactor_adj[i][j] = 1;
313
314     for (j = 1; j < 11; j++)
315         for (i = base_channel; i < s->prim_channels; i++)
316             if (s->quant_index_huffman[i][j] < thr[j])
317                 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
318
319     if (!xxch) {
320         if (s->crc_present) {
321             /* Audio header CRC check */
322             get_bits(&s->gb, 16);
323         }
324     } else {
325         /* Skip to the end of the header, also ignore CRC if present  */
326         i = get_bits_count(&s->gb);
327         if (hdr_pos + 8 * hdr_size > i)
328             skip_bits_long(&s->gb, hdr_pos + 8 * hdr_size - i);
329     }
330
331     s->current_subframe    = 0;
332     s->current_subsubframe = 0;
333
334     return 0;
335 }
336
337 static int dca_parse_frame_header(DCAContext *s)
338 {
339     init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
340
341     /* Sync code */
342     skip_bits_long(&s->gb, 32);
343
344     /* Frame header */
345     s->frame_type        = get_bits(&s->gb, 1);
346     s->samples_deficit   = get_bits(&s->gb, 5) + 1;
347     s->crc_present       = get_bits(&s->gb, 1);
348     s->sample_blocks     = get_bits(&s->gb, 7) + 1;
349     s->frame_size        = get_bits(&s->gb, 14) + 1;
350     if (s->frame_size < 95)
351         return AVERROR_INVALIDDATA;
352     s->amode             = get_bits(&s->gb, 6);
353     s->sample_rate       = avpriv_dca_sample_rates[get_bits(&s->gb, 4)];
354     if (!s->sample_rate)
355         return AVERROR_INVALIDDATA;
356     s->bit_rate_index    = get_bits(&s->gb, 5);
357     s->bit_rate          = ff_dca_bit_rates[s->bit_rate_index];
358     if (!s->bit_rate)
359         return AVERROR_INVALIDDATA;
360
361     skip_bits1(&s->gb); // always 0 (reserved, cf. ETSI TS 102 114 V1.4.1)
362     s->dynrange          = get_bits(&s->gb, 1);
363     s->timestamp         = get_bits(&s->gb, 1);
364     s->aux_data          = get_bits(&s->gb, 1);
365     s->hdcd              = get_bits(&s->gb, 1);
366     s->ext_descr         = get_bits(&s->gb, 3);
367     s->ext_coding        = get_bits(&s->gb, 1);
368     s->aspf              = get_bits(&s->gb, 1);
369     s->lfe               = get_bits(&s->gb, 2);
370     s->predictor_history = get_bits(&s->gb, 1);
371
372     if (s->lfe > 2) {
373         s->lfe = 0;
374         av_log(s->avctx, AV_LOG_ERROR, "Invalid LFE value: %d\n", s->lfe);
375         return AVERROR_INVALIDDATA;
376     }
377
378     /* TODO: check CRC */
379     if (s->crc_present)
380         s->header_crc    = get_bits(&s->gb, 16);
381
382     s->multirate_inter   = get_bits(&s->gb, 1);
383     s->version           = get_bits(&s->gb, 4);
384     s->copy_history      = get_bits(&s->gb, 2);
385     s->source_pcm_res    = get_bits(&s->gb, 3);
386     s->front_sum         = get_bits(&s->gb, 1);
387     s->surround_sum      = get_bits(&s->gb, 1);
388     s->dialog_norm       = get_bits(&s->gb, 4);
389
390     /* FIXME: channels mixing levels */
391     s->output = s->amode;
392     if (s->lfe)
393         s->output |= DCA_LFE;
394
395     /* Primary audio coding header */
396     s->subframes = get_bits(&s->gb, 4) + 1;
397
398     return dca_parse_audio_coding_header(s, 0, 0);
399 }
400
401 static inline int get_scale(GetBitContext *gb, int level, int value, int log2range)
402 {
403     if (level < 5) {
404         /* huffman encoded */
405         value += get_bitalloc(gb, &dca_scalefactor, level);
406         value  = av_clip(value, 0, (1 << log2range) - 1);
407     } else if (level < 8) {
408         if (level + 1 > log2range) {
409             skip_bits(gb, level + 1 - log2range);
410             value = get_bits(gb, log2range);
411         } else {
412             value = get_bits(gb, level + 1);
413         }
414     }
415     return value;
416 }
417
418 static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
419 {
420     /* Primary audio coding side information */
421     int j, k;
422
423     if (get_bits_left(&s->gb) < 0)
424         return AVERROR_INVALIDDATA;
425
426     if (!base_channel) {
427         s->subsubframes[s->current_subframe]    = get_bits(&s->gb, 2) + 1;
428         s->partial_samples[s->current_subframe] = get_bits(&s->gb, 3);
429     }
430
431     for (j = base_channel; j < s->prim_channels; j++) {
432         for (k = 0; k < s->subband_activity[j]; k++)
433             s->prediction_mode[j][k] = get_bits(&s->gb, 1);
434     }
435
436     /* Get prediction codebook */
437     for (j = base_channel; j < s->prim_channels; j++) {
438         for (k = 0; k < s->subband_activity[j]; k++) {
439             if (s->prediction_mode[j][k] > 0) {
440                 /* (Prediction coefficient VQ address) */
441                 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
442             }
443         }
444     }
445
446     /* Bit allocation index */
447     for (j = base_channel; j < s->prim_channels; j++) {
448         for (k = 0; k < s->vq_start_subband[j]; k++) {
449             if (s->bitalloc_huffman[j] == 6)
450                 s->bitalloc[j][k] = get_bits(&s->gb, 5);
451             else if (s->bitalloc_huffman[j] == 5)
452                 s->bitalloc[j][k] = get_bits(&s->gb, 4);
453             else if (s->bitalloc_huffman[j] == 7) {
454                 av_log(s->avctx, AV_LOG_ERROR,
455                        "Invalid bit allocation index\n");
456                 return AVERROR_INVALIDDATA;
457             } else {
458                 s->bitalloc[j][k] =
459                     get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
460             }
461
462             if (s->bitalloc[j][k] > 26) {
463                 av_dlog(s->avctx, "bitalloc index [%i][%i] too big (%i)\n",
464                         j, k, s->bitalloc[j][k]);
465                 return AVERROR_INVALIDDATA;
466             }
467         }
468     }
469
470     /* Transition mode */
471     for (j = base_channel; j < s->prim_channels; j++) {
472         for (k = 0; k < s->subband_activity[j]; k++) {
473             s->transition_mode[j][k] = 0;
474             if (s->subsubframes[s->current_subframe] > 1 &&
475                 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
476                 s->transition_mode[j][k] =
477                     get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
478             }
479         }
480     }
481
482     if (get_bits_left(&s->gb) < 0)
483         return AVERROR_INVALIDDATA;
484
485     for (j = base_channel; j < s->prim_channels; j++) {
486         const uint32_t *scale_table;
487         int scale_sum, log_size;
488
489         memset(s->scale_factor[j], 0,
490                s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
491
492         if (s->scalefactor_huffman[j] == 6) {
493             scale_table = ff_dca_scale_factor_quant7;
494             log_size    = 7;
495         } else {
496             scale_table = ff_dca_scale_factor_quant6;
497             log_size    = 6;
498         }
499
500         /* When huffman coded, only the difference is encoded */
501         scale_sum = 0;
502
503         for (k = 0; k < s->subband_activity[j]; k++) {
504             if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
505                 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
506                 s->scale_factor[j][k][0] = scale_table[scale_sum];
507             }
508
509             if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
510                 /* Get second scale factor */
511                 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
512                 s->scale_factor[j][k][1] = scale_table[scale_sum];
513             }
514         }
515     }
516
517     /* Joint subband scale factor codebook select */
518     for (j = base_channel; j < s->prim_channels; j++) {
519         /* Transmitted only if joint subband coding enabled */
520         if (s->joint_intensity[j] > 0)
521             s->joint_huff[j] = get_bits(&s->gb, 3);
522     }
523
524     if (get_bits_left(&s->gb) < 0)
525         return AVERROR_INVALIDDATA;
526
527     /* Scale factors for joint subband coding */
528     for (j = base_channel; j < s->prim_channels; j++) {
529         int source_channel;
530
531         /* Transmitted only if joint subband coding enabled */
532         if (s->joint_intensity[j] > 0) {
533             int scale = 0;
534             source_channel = s->joint_intensity[j] - 1;
535
536             /* When huffman coded, only the difference is encoded
537              * (is this valid as well for joint scales ???) */
538
539             for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
540                 scale = get_scale(&s->gb, s->joint_huff[j], 64 /* bias */, 7);
541                 s->joint_scale_factor[j][k] = scale;    /*joint_scale_table[scale]; */
542             }
543
544             if (!(s->debug_flag & 0x02)) {
545                 av_log(s->avctx, AV_LOG_DEBUG,
546                        "Joint stereo coding not supported\n");
547                 s->debug_flag |= 0x02;
548             }
549         }
550     }
551
552     /* Dynamic range coefficient */
553     if (!base_channel && s->dynrange)
554         s->dynrange_coef = get_bits(&s->gb, 8);
555
556     /* Side information CRC check word */
557     if (s->crc_present) {
558         get_bits(&s->gb, 16);
559     }
560
561     /*
562      * Primary audio data arrays
563      */
564
565     /* VQ encoded high frequency subbands */
566     for (j = base_channel; j < s->prim_channels; j++)
567         for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
568             /* 1 vector -> 32 samples */
569             s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
570
571     /* Low frequency effect data */
572     if (!base_channel && s->lfe) {
573         int quant7;
574         /* LFE samples */
575         int lfe_samples    = 2 * s->lfe * (4 + block_index);
576         int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
577         float lfe_scale;
578
579         for (j = lfe_samples; j < lfe_end_sample; j++) {
580             /* Signed 8 bits int */
581             s->lfe_data[j] = get_sbits(&s->gb, 8);
582         }
583
584         /* Scale factor index */
585         quant7 = get_bits(&s->gb, 8);
586         if (quant7 > 127) {
587             avpriv_request_sample(s->avctx, "LFEScaleIndex larger than 127");
588             return AVERROR_INVALIDDATA;
589         }
590         s->lfe_scale_factor = ff_dca_scale_factor_quant7[quant7];
591
592         /* Quantization step size * scale factor */
593         lfe_scale = 0.035 * s->lfe_scale_factor;
594
595         for (j = lfe_samples; j < lfe_end_sample; j++)
596             s->lfe_data[j] *= lfe_scale;
597     }
598
599     return 0;
600 }
601
602 static void qmf_32_subbands(DCAContext *s, int chans,
603                             float samples_in[32][8], float *samples_out,
604                             float scale)
605 {
606     const float *prCoeff;
607
608     int sb_act = s->subband_activity[chans];
609
610     scale *= sqrt(1 / 8.0);
611
612     /* Select filter */
613     if (!s->multirate_inter)    /* Non-perfect reconstruction */
614         prCoeff = ff_dca_fir_32bands_nonperfect;
615     else                        /* Perfect reconstruction */
616         prCoeff = ff_dca_fir_32bands_perfect;
617
618     s->dcadsp.qmf_32_subbands(samples_in, sb_act, &s->synth, &s->imdct,
619                               s->subband_fir_hist[chans],
620                               &s->hist_index[chans],
621                               s->subband_fir_noidea[chans], prCoeff,
622                               samples_out, s->raXin, scale);
623 }
624
625 static void lfe_interpolation_fir(DCAContext *s, int decimation_select,
626                                   int num_deci_sample, float *samples_in,
627                                   float *samples_out)
628 {
629     /* samples_in: An array holding decimated samples.
630      *   Samples in current subframe starts from samples_in[0],
631      *   while samples_in[-1], samples_in[-2], ..., stores samples
632      *   from last subframe as history.
633      *
634      * samples_out: An array holding interpolated samples
635      */
636
637     int idx;
638     const float *prCoeff;
639     int deciindex;
640
641     /* Select decimation filter */
642     if (decimation_select == 1) {
643         idx     = 1;
644         prCoeff = ff_dca_lfe_fir_128;
645     } else {
646         idx     = 0;
647         prCoeff = ff_dca_lfe_fir_64;
648     }
649     /* Interpolation */
650     for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
651         s->dcadsp.lfe_fir[idx](samples_out, samples_in, prCoeff);
652         samples_in++;
653         samples_out += 2 * 32 * (1 + idx);
654     }
655 }
656
657 /* downmixing routines */
658 #define MIX_REAR1(samples, s1, rs, coef)            \
659     samples[0][i] += samples[s1][i] * coef[rs][0];  \
660     samples[1][i] += samples[s1][i] * coef[rs][1];
661
662 #define MIX_REAR2(samples, s1, s2, rs, coef)                                          \
663     samples[0][i] += samples[s1][i] * coef[rs][0] + samples[s2][i] * coef[rs + 1][0]; \
664     samples[1][i] += samples[s1][i] * coef[rs][1] + samples[s2][i] * coef[rs + 1][1];
665
666 #define MIX_FRONT3(samples, coef)                                      \
667     t = samples[c][i];                                                 \
668     u = samples[l][i];                                                 \
669     v = samples[r][i];                                                 \
670     samples[0][i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0];  \
671     samples[1][i] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
672
673 #define DOWNMIX_TO_STEREO(op1, op2)             \
674     for (i = 0; i < 256; i++) {                 \
675         op1                                     \
676         op2                                     \
677     }
678
679 static void dca_downmix(float **samples, int srcfmt, int lfe_present,
680                         float coef[DCA_PRIM_CHANNELS_MAX + 1][2],
681                         const int8_t *channel_mapping)
682 {
683     int c, l, r, sl, sr, s;
684     int i;
685     float t, u, v;
686
687     switch (srcfmt) {
688     case DCA_MONO:
689     case DCA_4F2R:
690         av_log(NULL, AV_LOG_ERROR, "Not implemented!\n");
691         break;
692     case DCA_CHANNEL:
693     case DCA_STEREO:
694     case DCA_STEREO_TOTAL:
695     case DCA_STEREO_SUMDIFF:
696         break;
697     case DCA_3F:
698         c = channel_mapping[0];
699         l = channel_mapping[1];
700         r = channel_mapping[2];
701         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef), );
702         break;
703     case DCA_2F1R:
704         s = channel_mapping[2];
705         DOWNMIX_TO_STEREO(MIX_REAR1(samples, s, 2, coef), );
706         break;
707     case DCA_3F1R:
708         c = channel_mapping[0];
709         l = channel_mapping[1];
710         r = channel_mapping[2];
711         s = channel_mapping[3];
712         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
713                           MIX_REAR1(samples, s, 3, coef));
714         break;
715     case DCA_2F2R:
716         sl = channel_mapping[2];
717         sr = channel_mapping[3];
718         DOWNMIX_TO_STEREO(MIX_REAR2(samples, sl, sr, 2, coef), );
719         break;
720     case DCA_3F2R:
721         c  = channel_mapping[0];
722         l  = channel_mapping[1];
723         r  = channel_mapping[2];
724         sl = channel_mapping[3];
725         sr = channel_mapping[4];
726         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
727                           MIX_REAR2(samples, sl, sr, 3, coef));
728         break;
729     }
730     if (lfe_present) {
731         int lf_buf = ff_dca_lfe_index[srcfmt];
732         int lf_idx =  ff_dca_channels[srcfmt];
733         for (i = 0; i < 256; i++) {
734             samples[0][i] += samples[lf_buf][i] * coef[lf_idx][0];
735             samples[1][i] += samples[lf_buf][i] * coef[lf_idx][1];
736         }
737     }
738 }
739
740 #ifndef decode_blockcodes
741 /* Very compact version of the block code decoder that does not use table
742  * look-up but is slightly slower */
743 static int decode_blockcode(int code, int levels, int32_t *values)
744 {
745     int i;
746     int offset = (levels - 1) >> 1;
747
748     for (i = 0; i < 4; i++) {
749         int div = FASTDIV(code, levels);
750         values[i] = code - offset - div * levels;
751         code      = div;
752     }
753
754     return code;
755 }
756
757 static int decode_blockcodes(int code1, int code2, int levels, int32_t *values)
758 {
759     return decode_blockcode(code1, levels, values) |
760            decode_blockcode(code2, levels, values + 4);
761 }
762 #endif
763
764 static const uint8_t abits_sizes[7]  = { 7, 10, 12, 13, 15, 17, 19 };
765 static const uint8_t abits_levels[7] = { 3,  5,  7,  9, 13, 17, 25 };
766
767 static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
768 {
769     int k, l;
770     int subsubframe = s->current_subsubframe;
771
772     const float *quant_step_table;
773
774     /* FIXME */
775     float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
776     LOCAL_ALIGNED_16(int32_t, block, [8 * DCA_SUBBANDS]);
777
778     /*
779      * Audio data
780      */
781
782     /* Select quantization step size table */
783     if (s->bit_rate_index == 0x1f)
784         quant_step_table = ff_dca_lossless_quant_d;
785     else
786         quant_step_table = ff_dca_lossy_quant_d;
787
788     for (k = base_channel; k < s->prim_channels; k++) {
789         float rscale[DCA_SUBBANDS];
790
791         if (get_bits_left(&s->gb) < 0)
792             return AVERROR_INVALIDDATA;
793
794         for (l = 0; l < s->vq_start_subband[k]; l++) {
795             int m;
796
797             /* Select the mid-tread linear quantizer */
798             int abits = s->bitalloc[k][l];
799
800             float quant_step_size = quant_step_table[abits];
801
802             /*
803              * Determine quantization index code book and its type
804              */
805
806             /* Select quantization index code book */
807             int sel = s->quant_index_huffman[k][abits];
808
809             /*
810              * Extract bits from the bit stream
811              */
812             if (!abits) {
813                 rscale[l] = 0;
814                 memset(block + 8 * l, 0, 8 * sizeof(block[0]));
815             } else {
816                 /* Deal with transients */
817                 int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l];
818                 rscale[l] = quant_step_size * s->scale_factor[k][l][sfi] *
819                             s->scalefactor_adj[k][sel];
820
821                 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
822                     if (abits <= 7) {
823                         /* Block code */
824                         int block_code1, block_code2, size, levels, err;
825
826                         size   = abits_sizes[abits - 1];
827                         levels = abits_levels[abits - 1];
828
829                         block_code1 = get_bits(&s->gb, size);
830                         block_code2 = get_bits(&s->gb, size);
831                         err         = decode_blockcodes(block_code1, block_code2,
832                                                         levels, block + 8 * l);
833                         if (err) {
834                             av_log(s->avctx, AV_LOG_ERROR,
835                                    "ERROR: block code look-up failed\n");
836                             return AVERROR_INVALIDDATA;
837                         }
838                     } else {
839                         /* no coding */
840                         for (m = 0; m < 8; m++)
841                             block[8 * l + m] = get_sbits(&s->gb, abits - 3);
842                     }
843                 } else {
844                     /* Huffman coded */
845                     for (m = 0; m < 8; m++)
846                         block[8 * l + m] = get_bitalloc(&s->gb,
847                                                         &dca_smpl_bitalloc[abits], sel);
848                 }
849             }
850         }
851
852         s->fmt_conv.int32_to_float_fmul_array8(&s->fmt_conv, subband_samples[k][0],
853                                                block, rscale, 8 * s->vq_start_subband[k]);
854
855         for (l = 0; l < s->vq_start_subband[k]; l++) {
856             int m;
857             /*
858              * Inverse ADPCM if in prediction mode
859              */
860             if (s->prediction_mode[k][l]) {
861                 int n;
862                 if (s->predictor_history)
863                     subband_samples[k][l][0] += (ff_dca_adpcm_vb[s->prediction_vq[k][l]][0] *
864                                                  s->subband_samples_hist[k][l][3] +
865                                                  ff_dca_adpcm_vb[s->prediction_vq[k][l]][1] *
866                                                  s->subband_samples_hist[k][l][2] +
867                                                  ff_dca_adpcm_vb[s->prediction_vq[k][l]][2] *
868                                                  s->subband_samples_hist[k][l][1] +
869                                                  ff_dca_adpcm_vb[s->prediction_vq[k][l]][3] *
870                                                  s->subband_samples_hist[k][l][0]) *
871                                                 (1.0f / 8192);
872                 for (m = 1; m < 8; m++) {
873                     float sum = ff_dca_adpcm_vb[s->prediction_vq[k][l]][0] *
874                                 subband_samples[k][l][m - 1];
875                     for (n = 2; n <= 4; n++)
876                         if (m >= n)
877                             sum += ff_dca_adpcm_vb[s->prediction_vq[k][l]][n - 1] *
878                                    subband_samples[k][l][m - n];
879                         else if (s->predictor_history)
880                             sum += ff_dca_adpcm_vb[s->prediction_vq[k][l]][n - 1] *
881                                    s->subband_samples_hist[k][l][m - n + 4];
882                     subband_samples[k][l][m] += sum * (1.0f / 8192);
883                 }
884             }
885         }
886
887         /*
888          * Decode VQ encoded high frequencies
889          */
890         if (s->subband_activity[k] > s->vq_start_subband[k]) {
891             if (!(s->debug_flag & 0x01)) {
892                 av_log(s->avctx, AV_LOG_DEBUG,
893                        "Stream with high frequencies VQ coding\n");
894                 s->debug_flag |= 0x01;
895             }
896             s->dcadsp.decode_hf(subband_samples[k], s->high_freq_vq[k],
897                                 ff_dca_high_freq_vq, subsubframe * 8,
898                                 s->scale_factor[k], s->vq_start_subband[k],
899                                 s->subband_activity[k]);
900         }
901     }
902
903     /* Check for DSYNC after subsubframe */
904     if (s->aspf || subsubframe == s->subsubframes[s->current_subframe] - 1) {
905         if (get_bits(&s->gb, 16) != 0xFFFF) {
906             av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
907             return AVERROR_INVALIDDATA;
908         }
909     }
910
911     /* Backup predictor history for adpcm */
912     for (k = base_channel; k < s->prim_channels; k++)
913         for (l = 0; l < s->vq_start_subband[k]; l++)
914             AV_COPY128(s->subband_samples_hist[k][l], &subband_samples[k][l][4]);
915
916     return 0;
917 }
918
919 static int dca_filter_channels(DCAContext *s, int block_index)
920 {
921     float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
922     int k;
923
924     /* 32 subbands QMF */
925     for (k = 0; k < s->prim_channels; k++) {
926         if (s->channel_order_tab[k] >= 0)
927             qmf_32_subbands(s, k, subband_samples[k],
928                             s->samples_chanptr[s->channel_order_tab[k]],
929                             M_SQRT1_2 / 32768.0);
930     }
931
932     /* Generate LFE samples for this subsubframe FIXME!!! */
933     if (s->lfe) {
934         lfe_interpolation_fir(s, s->lfe, 2 * s->lfe,
935                               s->lfe_data + 2 * s->lfe * (block_index + 4),
936                               s->samples_chanptr[s->lfe_index]);
937         /* Outputs 20bits pcm samples */
938     }
939
940     /* Downmixing to Stereo */
941     if (s->prim_channels + !!s->lfe > 2 &&
942         s->avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
943         dca_downmix(s->samples_chanptr, s->amode, !!s->lfe, s->downmix_coef,
944                     s->channel_order_tab);
945     }
946
947     return 0;
948 }
949
950 static int dca_subframe_footer(DCAContext *s, int base_channel)
951 {
952     int in, out, aux_data_count, aux_data_end, reserved;
953     uint32_t nsyncaux;
954
955     /*
956      * Unpack optional information
957      */
958
959     /* presumably optional information only appears in the core? */
960     if (!base_channel) {
961         if (s->timestamp)
962             skip_bits_long(&s->gb, 32);
963
964         if (s->aux_data) {
965             aux_data_count = get_bits(&s->gb, 6);
966
967             // align (32-bit)
968             skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
969
970             aux_data_end = 8 * aux_data_count + get_bits_count(&s->gb);
971
972             if ((nsyncaux = get_bits_long(&s->gb, 32)) != DCA_NSYNCAUX) {
973                 av_log(s->avctx, AV_LOG_ERROR, "nSYNCAUX mismatch %#"PRIx32"\n",
974                        nsyncaux);
975                 return AVERROR_INVALIDDATA;
976             }
977
978             if (get_bits1(&s->gb)) { // bAUXTimeStampFlag
979                 avpriv_request_sample(s->avctx,
980                                       "Auxiliary Decode Time Stamp Flag");
981                 // align (4-bit)
982                 skip_bits(&s->gb, (-get_bits_count(&s->gb)) & 4);
983                 // 44 bits: nMSByte (8), nMarker (4), nLSByte (28), nMarker (4)
984                 skip_bits_long(&s->gb, 44);
985             }
986
987             if ((s->core_downmix = get_bits1(&s->gb))) {
988                 int am = get_bits(&s->gb, 3);
989                 switch (am) {
990                 case 0:
991                     s->core_downmix_amode = DCA_MONO;
992                     break;
993                 case 1:
994                     s->core_downmix_amode = DCA_STEREO;
995                     break;
996                 case 2:
997                     s->core_downmix_amode = DCA_STEREO_TOTAL;
998                     break;
999                 case 3:
1000                     s->core_downmix_amode = DCA_3F;
1001                     break;
1002                 case 4:
1003                     s->core_downmix_amode = DCA_2F1R;
1004                     break;
1005                 case 5:
1006                     s->core_downmix_amode = DCA_2F2R;
1007                     break;
1008                 case 6:
1009                     s->core_downmix_amode = DCA_3F1R;
1010                     break;
1011                 default:
1012                     av_log(s->avctx, AV_LOG_ERROR,
1013                            "Invalid mode %d for embedded downmix coefficients\n",
1014                            am);
1015                     return AVERROR_INVALIDDATA;
1016                 }
1017                 for (out = 0; out < ff_dca_channels[s->core_downmix_amode]; out++) {
1018                     for (in = 0; in < s->prim_channels + !!s->lfe; in++) {
1019                         uint16_t tmp = get_bits(&s->gb, 9);
1020                         if ((tmp & 0xFF) > 241) {
1021                             av_log(s->avctx, AV_LOG_ERROR,
1022                                    "Invalid downmix coefficient code %"PRIu16"\n",
1023                                    tmp);
1024                             return AVERROR_INVALIDDATA;
1025                         }
1026                         s->core_downmix_codes[in][out] = tmp;
1027                     }
1028                 }
1029             }
1030
1031             align_get_bits(&s->gb); // byte align
1032             skip_bits(&s->gb, 16);  // nAUXCRC16
1033
1034             // additional data (reserved, cf. ETSI TS 102 114 V1.4.1)
1035             if ((reserved = (aux_data_end - get_bits_count(&s->gb))) < 0) {
1036                 av_log(s->avctx, AV_LOG_ERROR,
1037                        "Overread auxiliary data by %d bits\n", -reserved);
1038                 return AVERROR_INVALIDDATA;
1039             } else if (reserved) {
1040                 avpriv_request_sample(s->avctx,
1041                                       "Core auxiliary data reserved content");
1042                 skip_bits_long(&s->gb, reserved);
1043             }
1044         }
1045
1046         if (s->crc_present && s->dynrange)
1047             get_bits(&s->gb, 16);
1048     }
1049
1050     return 0;
1051 }
1052
1053 /**
1054  * Decode a dca frame block
1055  *
1056  * @param s     pointer to the DCAContext
1057  */
1058
1059 static int dca_decode_block(DCAContext *s, int base_channel, int block_index)
1060 {
1061     int ret;
1062
1063     /* Sanity check */
1064     if (s->current_subframe >= s->subframes) {
1065         av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1066                s->current_subframe, s->subframes);
1067         return AVERROR_INVALIDDATA;
1068     }
1069
1070     if (!s->current_subsubframe) {
1071         /* Read subframe header */
1072         if ((ret = dca_subframe_header(s, base_channel, block_index)))
1073             return ret;
1074     }
1075
1076     /* Read subsubframe */
1077     if ((ret = dca_subsubframe(s, base_channel, block_index)))
1078         return ret;
1079
1080     /* Update state */
1081     s->current_subsubframe++;
1082     if (s->current_subsubframe >= s->subsubframes[s->current_subframe]) {
1083         s->current_subsubframe = 0;
1084         s->current_subframe++;
1085     }
1086     if (s->current_subframe >= s->subframes) {
1087         /* Read subframe footer */
1088         if ((ret = dca_subframe_footer(s, base_channel)))
1089             return ret;
1090     }
1091
1092     return 0;
1093 }
1094
1095 int ff_dca_xbr_parse_frame(DCAContext *s)
1096 {
1097     int scale_table_high[DCA_CHSET_CHANS_MAX][DCA_SUBBANDS][2];
1098     int active_bands[DCA_CHSETS_MAX][DCA_CHSET_CHANS_MAX];
1099     int abits_high[DCA_CHSET_CHANS_MAX][DCA_SUBBANDS];
1100     int anctemp[DCA_CHSET_CHANS_MAX];
1101     int chset_fsize[DCA_CHSETS_MAX];
1102     int n_xbr_ch[DCA_CHSETS_MAX];
1103     int hdr_size, num_chsets, xbr_tmode, hdr_pos;
1104     int i, j, k, l, chset, chan_base;
1105
1106     av_log(s->avctx, AV_LOG_DEBUG, "DTS-XBR: decoding XBR extension\n");
1107
1108     /* get bit position of sync header */
1109     hdr_pos = get_bits_count(&s->gb) - 32;
1110
1111     hdr_size = get_bits(&s->gb, 6) + 1;
1112     num_chsets = get_bits(&s->gb, 2) + 1;
1113
1114     for(i = 0; i < num_chsets; i++)
1115         chset_fsize[i] = get_bits(&s->gb, 14) + 1;
1116
1117     xbr_tmode = get_bits1(&s->gb);
1118
1119     for(i = 0; i < num_chsets; i++) {
1120         n_xbr_ch[i] = get_bits(&s->gb, 3) + 1;
1121         k = get_bits(&s->gb, 2) + 5;
1122         for(j = 0; j < n_xbr_ch[i]; j++)
1123             active_bands[i][j] = get_bits(&s->gb, k) + 1;
1124     }
1125
1126     /* skip to the end of the header */
1127     i = get_bits_count(&s->gb);
1128     if(hdr_pos + hdr_size * 8 > i)
1129         skip_bits_long(&s->gb, hdr_pos + hdr_size * 8 - i);
1130
1131     /* loop over the channel data sets */
1132     /* only decode as many channels as we've decoded base data for */
1133     for(chset = 0, chan_base = 0;
1134         chset < num_chsets && chan_base + n_xbr_ch[chset] <= s->prim_channels;
1135         chan_base += n_xbr_ch[chset++]) {
1136         int start_posn = get_bits_count(&s->gb);
1137         int subsubframe = 0;
1138         int subframe = 0;
1139
1140         /* loop over subframes */
1141         for (k = 0; k < (s->sample_blocks / 8); k++) {
1142             /* parse header if we're on first subsubframe of a block */
1143             if(subsubframe == 0) {
1144                 /* Parse subframe header */
1145                 for(i = 0; i < n_xbr_ch[chset]; i++) {
1146                     anctemp[i] = get_bits(&s->gb, 2) + 2;
1147                 }
1148
1149                 for(i = 0; i < n_xbr_ch[chset]; i++) {
1150                     get_array(&s->gb, abits_high[i], active_bands[chset][i], anctemp[i]);
1151                 }
1152
1153                 for(i = 0; i < n_xbr_ch[chset]; i++) {
1154                     anctemp[i] = get_bits(&s->gb, 3);
1155                     if(anctemp[i] < 1) {
1156                         av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: SYNC ERROR\n");
1157                         return AVERROR_INVALIDDATA;
1158                     }
1159                 }
1160
1161                 /* generate scale factors */
1162                 for(i = 0; i < n_xbr_ch[chset]; i++) {
1163                     const uint32_t *scale_table;
1164                     int nbits;
1165
1166                     if (s->scalefactor_huffman[chan_base+i] == 6) {
1167                         scale_table = ff_dca_scale_factor_quant7;
1168                     } else {
1169                         scale_table = ff_dca_scale_factor_quant6;
1170                     }
1171
1172                     nbits = anctemp[i];
1173
1174                     for(j = 0; j < active_bands[chset][i]; j++) {
1175                         if(abits_high[i][j] > 0) {
1176                             scale_table_high[i][j][0] =
1177                                 scale_table[get_bits(&s->gb, nbits)];
1178
1179                             if(xbr_tmode && s->transition_mode[i][j]) {
1180                                 scale_table_high[i][j][1] =
1181                                     scale_table[get_bits(&s->gb, nbits)];
1182                             }
1183                         }
1184                     }
1185                 }
1186             }
1187
1188             /* decode audio array for this block */
1189             for(i = 0; i < n_xbr_ch[chset]; i++) {
1190                 for(j = 0; j < active_bands[chset][i]; j++) {
1191                     const int xbr_abits = abits_high[i][j];
1192                     const float quant_step_size = ff_dca_lossless_quant_d[xbr_abits];
1193                     const int sfi = xbr_tmode && s->transition_mode[i][j] && subsubframe >= s->transition_mode[i][j];
1194                     const float rscale = quant_step_size * scale_table_high[i][j][sfi];
1195                     float *subband_samples = s->subband_samples[k][chan_base+i][j];
1196                     int block[8];
1197
1198                     if(xbr_abits <= 0)
1199                         continue;
1200
1201                     if(xbr_abits > 7) {
1202                         get_array(&s->gb, block, 8, xbr_abits - 3);
1203                     } else {
1204                         int block_code1, block_code2, size, levels, err;
1205
1206                         size   = abits_sizes[xbr_abits - 1];
1207                         levels = abits_levels[xbr_abits - 1];
1208
1209                         block_code1 = get_bits(&s->gb, size);
1210                         block_code2 = get_bits(&s->gb, size);
1211                         err = decode_blockcodes(block_code1, block_code2,
1212                                                 levels, block);
1213                         if (err) {
1214                             av_log(s->avctx, AV_LOG_ERROR,
1215                                    "ERROR: DTS-XBR: block code look-up failed\n");
1216                             return AVERROR_INVALIDDATA;
1217                         }
1218                     }
1219
1220                     /* scale & sum into subband */
1221                     for(l = 0; l < 8; l++)
1222                         subband_samples[l] += (float)block[l] * rscale;
1223                 }
1224             }
1225
1226             /* check DSYNC marker */
1227             if(s->aspf || subsubframe == s->subsubframes[subframe] - 1) {
1228                 if(get_bits(&s->gb, 16) != 0xffff) {
1229                     av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: Didn't get subframe DSYNC\n");
1230                     return AVERROR_INVALIDDATA;
1231                 }
1232             }
1233
1234             /* advance sub-sub-frame index */
1235             if(++subsubframe >= s->subsubframes[subframe]) {
1236                 subsubframe = 0;
1237                 subframe++;
1238             }
1239         }
1240
1241         /* skip to next channel set */
1242         i = get_bits_count(&s->gb);
1243         if(start_posn + chset_fsize[chset] * 8 != i) {
1244             j = start_posn + chset_fsize[chset] * 8 - i;
1245             if(j < 0 || j >= 8)
1246                 av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: end of channel set,"
1247                        " skipping further than expected (%d bits)\n", j);
1248             skip_bits_long(&s->gb, j);
1249         }
1250     }
1251
1252     return 0;
1253 }
1254
1255
1256 /* parse initial header for XXCH and dump details */
1257 int ff_dca_xxch_decode_frame(DCAContext *s)
1258 {
1259     int hdr_size, spkmsk_bits, num_chsets, core_spk, hdr_pos;
1260     int i, chset, base_channel, chstart, fsize[8];
1261
1262     /* assume header word has already been parsed */
1263     hdr_pos     = get_bits_count(&s->gb) - 32;
1264     hdr_size    = get_bits(&s->gb, 6) + 1;
1265   /*chhdr_crc   =*/ skip_bits1(&s->gb);
1266     spkmsk_bits = get_bits(&s->gb, 5) + 1;
1267     num_chsets  = get_bits(&s->gb, 2) + 1;
1268
1269     for (i = 0; i < num_chsets; i++)
1270         fsize[i] = get_bits(&s->gb, 14) + 1;
1271
1272     core_spk               = get_bits(&s->gb, spkmsk_bits);
1273     s->xxch_core_spkmask   = core_spk;
1274     s->xxch_nbits_spk_mask = spkmsk_bits;
1275     s->xxch_dmix_embedded  = 0;
1276
1277     /* skip to the end of the header */
1278     i = get_bits_count(&s->gb);
1279     if (hdr_pos + hdr_size * 8 > i)
1280         skip_bits_long(&s->gb, hdr_pos + hdr_size * 8 - i);
1281
1282     for (chset = 0; chset < num_chsets; chset++) {
1283         chstart       = get_bits_count(&s->gb);
1284         base_channel  = s->prim_channels;
1285         s->xxch_chset = chset;
1286
1287         /* XXCH and Core headers differ, see 6.4.2 "XXCH Channel Set Header" vs.
1288            5.3.2 "Primary Audio Coding Header", DTS Spec 1.3.1 */
1289         dca_parse_audio_coding_header(s, base_channel, 1);
1290
1291         /* decode channel data */
1292         for (i = 0; i < (s->sample_blocks / 8); i++) {
1293             if (dca_decode_block(s, base_channel, i)) {
1294                 av_log(s->avctx, AV_LOG_ERROR,
1295                        "Error decoding DTS-XXCH extension\n");
1296                 continue;
1297             }
1298         }
1299
1300         /* skip to end of this section */
1301         i = get_bits_count(&s->gb);
1302         if (chstart + fsize[chset] * 8 > i)
1303             skip_bits_long(&s->gb, chstart + fsize[chset] * 8 - i);
1304     }
1305     s->xxch_chset = num_chsets;
1306
1307     return 0;
1308 }
1309
1310 static float dca_dmix_code(unsigned code)
1311 {
1312     int sign = (code >> 8) - 1;
1313     code &= 0xff;
1314     return ((ff_dca_dmixtable[code] ^ sign) - sign) * (1.0 / (1 << 15));
1315 }
1316
1317 /**
1318  * Main frame decoding function
1319  * FIXME add arguments
1320  */
1321 static int dca_decode_frame(AVCodecContext *avctx, void *data,
1322                             int *got_frame_ptr, AVPacket *avpkt)
1323 {
1324     AVFrame *frame     = data;
1325     const uint8_t *buf = avpkt->data;
1326     int buf_size       = avpkt->size;
1327     int channel_mask;
1328     int channel_layout;
1329     int lfe_samples;
1330     int num_core_channels = 0;
1331     int i, ret;
1332     float **samples_flt;
1333     float *src_chan;
1334     float *dst_chan;
1335     DCAContext *s = avctx->priv_data;
1336     int core_ss_end;
1337     int channels, full_channels;
1338     float scale;
1339     int achan;
1340     int chset;
1341     int mask;
1342     int lavc;
1343     int posn;
1344     int j, k;
1345     int endch;
1346
1347     s->xch_present = 0;
1348
1349     s->dca_buffer_size = avpriv_dca_convert_bitstream(buf, buf_size, s->dca_buffer,
1350                                                   DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
1351     if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
1352         av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
1353         return AVERROR_INVALIDDATA;
1354     }
1355
1356     if ((ret = dca_parse_frame_header(s)) < 0) {
1357         // seems like the frame is corrupt, try with the next one
1358         return ret;
1359     }
1360     // set AVCodec values with parsed data
1361     avctx->sample_rate = s->sample_rate;
1362     avctx->bit_rate    = s->bit_rate;
1363
1364     s->profile = FF_PROFILE_DTS;
1365
1366     for (i = 0; i < (s->sample_blocks / 8); i++) {
1367         if ((ret = dca_decode_block(s, 0, i))) {
1368             av_log(avctx, AV_LOG_ERROR, "error decoding block\n");
1369             return ret;
1370         }
1371     }
1372
1373     /* record number of core channels incase less than max channels are requested */
1374     num_core_channels = s->prim_channels;
1375
1376     if (s->prim_channels + !!s->lfe > 2 &&
1377         avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
1378             /* Stereo downmix coefficients
1379              *
1380              * The decoder can only downmix to 2-channel, so we need to ensure
1381              * embedded downmix coefficients are actually targeting 2-channel.
1382              */
1383             if (s->core_downmix && (s->core_downmix_amode == DCA_STEREO ||
1384                                     s->core_downmix_amode == DCA_STEREO_TOTAL)) {
1385                 for (i = 0; i < num_core_channels + !!s->lfe; i++) {
1386                     /* Range checked earlier */
1387                     s->downmix_coef[i][0] = dca_dmix_code(s->core_downmix_codes[i][0]);
1388                     s->downmix_coef[i][1] = dca_dmix_code(s->core_downmix_codes[i][1]);
1389                 }
1390                 s->output = s->core_downmix_amode;
1391             } else {
1392                 int am = s->amode & DCA_CHANNEL_MASK;
1393                 if (am >= FF_ARRAY_ELEMS(ff_dca_default_coeffs)) {
1394                     av_log(s->avctx, AV_LOG_ERROR,
1395                            "Invalid channel mode %d\n", am);
1396                     return AVERROR_INVALIDDATA;
1397                 }
1398                 if (num_core_channels + !!s->lfe >
1399                     FF_ARRAY_ELEMS(ff_dca_default_coeffs[0])) {
1400                     avpriv_request_sample(s->avctx, "Downmixing %d channels",
1401                                           s->prim_channels + !!s->lfe);
1402                     return AVERROR_PATCHWELCOME;
1403                 }
1404                 for (i = 0; i < num_core_channels + !!s->lfe; i++) {
1405                     s->downmix_coef[i][0] = ff_dca_default_coeffs[am][i][0];
1406                     s->downmix_coef[i][1] = ff_dca_default_coeffs[am][i][1];
1407                 }
1408             }
1409             av_dlog(s->avctx, "Stereo downmix coeffs:\n");
1410             for (i = 0; i < num_core_channels + !!s->lfe; i++) {
1411                 av_dlog(s->avctx, "L, input channel %d = %f\n", i,
1412                         s->downmix_coef[i][0]);
1413                 av_dlog(s->avctx, "R, input channel %d = %f\n", i,
1414                         s->downmix_coef[i][1]);
1415             }
1416             av_dlog(s->avctx, "\n");
1417     }
1418
1419     if (s->ext_coding)
1420         s->core_ext_mask = ff_dca_ext_audio_descr_mask[s->ext_descr];
1421     else
1422         s->core_ext_mask = 0;
1423
1424     core_ss_end = FFMIN(s->frame_size, s->dca_buffer_size) * 8;
1425
1426     /* only scan for extensions if ext_descr was unknown or indicated a
1427      * supported XCh extension */
1428     if (s->core_ext_mask < 0 || s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH)) {
1429         /* if ext_descr was unknown, clear s->core_ext_mask so that the
1430          * extensions scan can fill it up */
1431         s->core_ext_mask = FFMAX(s->core_ext_mask, 0);
1432
1433         /* extensions start at 32-bit boundaries into bitstream */
1434         skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1435
1436         while (core_ss_end - get_bits_count(&s->gb) >= 32) {
1437             uint32_t bits = get_bits_long(&s->gb, 32);
1438
1439             switch (bits) {
1440             case 0x5a5a5a5a: {
1441                 int ext_amode, xch_fsize;
1442
1443                 s->xch_base_channel = s->prim_channels;
1444
1445                 /* validate sync word using XCHFSIZE field */
1446                 xch_fsize = show_bits(&s->gb, 10);
1447                 if ((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) &&
1448                     (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1))
1449                     continue;
1450
1451                 /* skip length-to-end-of-frame field for the moment */
1452                 skip_bits(&s->gb, 10);
1453
1454                 s->core_ext_mask |= DCA_EXT_XCH;
1455
1456                 /* extension amode(number of channels in extension) should be 1 */
1457                 /* AFAIK XCh is not used for more channels */
1458                 if ((ext_amode = get_bits(&s->gb, 4)) != 1) {
1459                     av_log(avctx, AV_LOG_ERROR,
1460                            "XCh extension amode %d not supported!\n",
1461                            ext_amode);
1462                     continue;
1463                 }
1464
1465                 if (s->xch_base_channel < 2) {
1466                     avpriv_request_sample(avctx, "XCh with fewer than 2 base channels");
1467                     continue;
1468                 }
1469
1470                 /* much like core primary audio coding header */
1471                 dca_parse_audio_coding_header(s, s->xch_base_channel, 0);
1472
1473                 for (i = 0; i < (s->sample_blocks / 8); i++)
1474                     if ((ret = dca_decode_block(s, s->xch_base_channel, i))) {
1475                         av_log(avctx, AV_LOG_ERROR, "error decoding XCh extension\n");
1476                         continue;
1477                     }
1478
1479                 s->xch_present = 1;
1480                 break;
1481             }
1482             case 0x47004a03:
1483                 /* XXCh: extended channels */
1484                 /* usually found either in core or HD part in DTS-HD HRA streams,
1485                  * but not in DTS-ES which contains XCh extensions instead */
1486                 s->core_ext_mask |= DCA_EXT_XXCH;
1487                 ff_dca_xxch_decode_frame(s);
1488                 break;
1489
1490             case 0x1d95f262: {
1491                 int fsize96 = show_bits(&s->gb, 12) + 1;
1492                 if (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + fsize96)
1493                     continue;
1494
1495                 av_log(avctx, AV_LOG_DEBUG, "X96 extension found at %d bits\n",
1496                        get_bits_count(&s->gb));
1497                 skip_bits(&s->gb, 12);
1498                 av_log(avctx, AV_LOG_DEBUG, "FSIZE96 = %d bytes\n", fsize96);
1499                 av_log(avctx, AV_LOG_DEBUG, "REVNO = %d\n", get_bits(&s->gb, 4));
1500
1501                 s->core_ext_mask |= DCA_EXT_X96;
1502                 break;
1503             }
1504             }
1505
1506             skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1507         }
1508     } else {
1509         /* no supported extensions, skip the rest of the core substream */
1510         skip_bits_long(&s->gb, core_ss_end - get_bits_count(&s->gb));
1511     }
1512
1513     if (s->core_ext_mask & DCA_EXT_X96)
1514         s->profile = FF_PROFILE_DTS_96_24;
1515     else if (s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH))
1516         s->profile = FF_PROFILE_DTS_ES;
1517
1518     /* check for ExSS (HD part) */
1519     if (s->dca_buffer_size - s->frame_size > 32 &&
1520         get_bits_long(&s->gb, 32) == DCA_HD_MARKER)
1521         ff_dca_exss_parse_header(s);
1522
1523     avctx->profile = s->profile;
1524
1525     full_channels = channels = s->prim_channels + !!s->lfe;
1526
1527     /* If we have XXCH then the channel layout is managed differently */
1528     /* note that XLL will also have another way to do things */
1529     if (!(s->core_ext_mask & DCA_EXT_XXCH)
1530         || (s->core_ext_mask & DCA_EXT_XXCH && avctx->request_channels > 0
1531             && avctx->request_channels
1532             < num_core_channels + !!s->lfe + s->xxch_chset_nch[0]))
1533     { /* xxx should also do MA extensions */
1534         if (s->amode < 16) {
1535             avctx->channel_layout = ff_dca_core_channel_layout[s->amode];
1536
1537             if (s->prim_channels + !!s->lfe > 2 &&
1538                 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
1539                 /*
1540                  * Neither the core's auxiliary data nor our default tables contain
1541                  * downmix coefficients for the additional channel coded in the XCh
1542                  * extension, so when we're doing a Stereo downmix, don't decode it.
1543                  */
1544                 s->xch_disable = 1;
1545             }
1546
1547 #if FF_API_REQUEST_CHANNELS
1548 FF_DISABLE_DEPRECATION_WARNINGS
1549             if (s->xch_present && !s->xch_disable &&
1550                 (!avctx->request_channels ||
1551                  avctx->request_channels > num_core_channels + !!s->lfe)) {
1552 FF_ENABLE_DEPRECATION_WARNINGS
1553 #else
1554             if (s->xch_present && !s->xch_disable) {
1555 #endif
1556                 if (avctx->channel_layout & AV_CH_BACK_CENTER) {
1557                     avpriv_request_sample(avctx, "XCh with Back center channel");
1558                     return AVERROR_INVALIDDATA;
1559                 }
1560                 avctx->channel_layout |= AV_CH_BACK_CENTER;
1561                 if (s->lfe) {
1562                     avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1563                     s->channel_order_tab = ff_dca_channel_reorder_lfe_xch[s->amode];
1564                 } else {
1565                     s->channel_order_tab = ff_dca_channel_reorder_nolfe_xch[s->amode];
1566                 }
1567                 if (s->channel_order_tab[s->xch_base_channel] < 0)
1568                     return AVERROR_INVALIDDATA;
1569             } else {
1570                 channels       = num_core_channels + !!s->lfe;
1571                 s->xch_present = 0; /* disable further xch processing */
1572                 if (s->lfe) {
1573                     avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1574                     s->channel_order_tab = ff_dca_channel_reorder_lfe[s->amode];
1575                 } else
1576                     s->channel_order_tab = ff_dca_channel_reorder_nolfe[s->amode];
1577             }
1578
1579             if (channels > !!s->lfe &&
1580                 s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
1581                 return AVERROR_INVALIDDATA;
1582
1583             if (av_get_channel_layout_nb_channels(avctx->channel_layout) != channels) {
1584                 av_log(avctx, AV_LOG_ERROR, "Number of channels %d mismatches layout %d\n", channels, av_get_channel_layout_nb_channels(avctx->channel_layout));
1585                 return AVERROR_INVALIDDATA;
1586             }
1587
1588             if (num_core_channels + !!s->lfe > 2 &&
1589                 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
1590                 channels              = 2;
1591                 s->output             = s->prim_channels == 2 ? s->amode : DCA_STEREO;
1592                 avctx->channel_layout = AV_CH_LAYOUT_STEREO;
1593             }
1594             else if (avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE) {
1595                 static const int8_t dca_channel_order_native[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
1596                 s->channel_order_tab = dca_channel_order_native;
1597             }
1598             s->lfe_index = ff_dca_lfe_index[s->amode];
1599         } else {
1600             av_log(avctx, AV_LOG_ERROR,
1601                    "Non standard configuration %d !\n", s->amode);
1602             return AVERROR_INVALIDDATA;
1603         }
1604
1605         s->xxch_dmix_embedded = 0;
1606     } else {
1607         /* we only get here if an XXCH channel set can be added to the mix */
1608         channel_mask = s->xxch_core_spkmask;
1609
1610         if (avctx->request_channels > 0
1611             && avctx->request_channels < s->prim_channels) {
1612             channels = num_core_channels + !!s->lfe;
1613             for (i = 0; i < s->xxch_chset && channels + s->xxch_chset_nch[i]
1614                                               <= avctx->request_channels; i++) {
1615                 channels += s->xxch_chset_nch[i];
1616                 channel_mask |= s->xxch_spk_masks[i];
1617             }
1618         } else {
1619             channels = s->prim_channels + !!s->lfe;
1620             for (i = 0; i < s->xxch_chset; i++) {
1621                 channel_mask |= s->xxch_spk_masks[i];
1622             }
1623         }
1624
1625         /* Given the DTS spec'ed channel mask, generate an avcodec version */
1626         channel_layout = 0;
1627         for (i = 0; i < s->xxch_nbits_spk_mask; ++i) {
1628             if (channel_mask & (1 << i)) {
1629                 channel_layout |= ff_dca_map_xxch_to_native[i];
1630             }
1631         }
1632
1633         /* make sure that we have managed to get equivalent dts/avcodec channel
1634          * masks in some sense -- unfortunately some channels could overlap */
1635         if (av_popcount(channel_mask) != av_popcount(channel_layout)) {
1636             av_log(avctx, AV_LOG_DEBUG,
1637                    "DTS-XXCH: Inconsistent avcodec/dts channel layouts\n");
1638             return AVERROR_INVALIDDATA;
1639         }
1640
1641         avctx->channel_layout = channel_layout;
1642
1643         if (!(avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE)) {
1644             /* Estimate DTS --> avcodec ordering table */
1645             for (chset = -1, j = 0; chset < s->xxch_chset; ++chset) {
1646                 mask = chset >= 0 ? s->xxch_spk_masks[chset]
1647                                   : s->xxch_core_spkmask;
1648                 for (i = 0; i < s->xxch_nbits_spk_mask; i++) {
1649                     if (mask & ~(DCA_XXCH_LFE1 | DCA_XXCH_LFE2) & (1 << i)) {
1650                         lavc = ff_dca_map_xxch_to_native[i];
1651                         posn = av_popcount(channel_layout & (lavc - 1));
1652                         s->xxch_order_tab[j++] = posn;
1653                     }
1654                 }
1655
1656             }
1657
1658             s->lfe_index = av_popcount(channel_layout & (AV_CH_LOW_FREQUENCY-1));
1659         } else { /* native ordering */
1660             for (i = 0; i < channels; i++)
1661                 s->xxch_order_tab[i] = i;
1662
1663             s->lfe_index = channels - 1;
1664         }
1665
1666         s->channel_order_tab = s->xxch_order_tab;
1667     }
1668
1669     if (avctx->channels != channels) {
1670         if (avctx->channels)
1671             av_log(avctx, AV_LOG_INFO, "Number of channels changed in DCA decoder (%d -> %d)\n", avctx->channels, channels);
1672         avctx->channels = channels;
1673     }
1674
1675     /* get output buffer */
1676     frame->nb_samples = 256 * (s->sample_blocks / 8);
1677     if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1678         return ret;
1679     samples_flt = (float **) frame->extended_data;
1680
1681     /* allocate buffer for extra channels if downmixing */
1682     if (avctx->channels < full_channels) {
1683         ret = av_samples_get_buffer_size(NULL, full_channels - channels,
1684                                          frame->nb_samples,
1685                                          avctx->sample_fmt, 0);
1686         if (ret < 0)
1687             return ret;
1688
1689         av_fast_malloc(&s->extra_channels_buffer,
1690                        &s->extra_channels_buffer_size, ret);
1691         if (!s->extra_channels_buffer)
1692             return AVERROR(ENOMEM);
1693
1694         ret = av_samples_fill_arrays((uint8_t **) s->extra_channels, NULL,
1695                                      s->extra_channels_buffer,
1696                                      full_channels - channels,
1697                                      frame->nb_samples, avctx->sample_fmt, 0);
1698         if (ret < 0)
1699             return ret;
1700     }
1701
1702     /* filter to get final output */
1703     for (i = 0; i < (s->sample_blocks / 8); i++) {
1704         int ch;
1705
1706         for (ch = 0; ch < channels; ch++)
1707             s->samples_chanptr[ch] = samples_flt[ch] + i * 256;
1708         for (; ch < full_channels; ch++)
1709             s->samples_chanptr[ch] = s->extra_channels[ch - channels] + i * 256;
1710
1711         dca_filter_channels(s, i);
1712
1713         /* If this was marked as a DTS-ES stream we need to subtract back- */
1714         /* channel from SL & SR to remove matrixed back-channel signal */
1715         if ((s->source_pcm_res & 1) && s->xch_present) {
1716             float *back_chan = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel]];
1717             float *lt_chan   = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel - 2]];
1718             float *rt_chan   = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel - 1]];
1719             s->fdsp->vector_fmac_scalar(lt_chan, back_chan, -M_SQRT1_2, 256);
1720             s->fdsp->vector_fmac_scalar(rt_chan, back_chan, -M_SQRT1_2, 256);
1721         }
1722
1723         /* If stream contains XXCH, we might need to undo an embedded downmix */
1724         if (s->xxch_dmix_embedded) {
1725             /* Loop over channel sets in turn */
1726             ch = num_core_channels;
1727             for (chset = 0; chset < s->xxch_chset; chset++) {
1728                 endch = ch + s->xxch_chset_nch[chset];
1729                 mask = s->xxch_dmix_embedded;
1730
1731                 /* undo downmix */
1732                 for (j = ch; j < endch; j++) {
1733                     if (mask & (1 << j)) { /* this channel has been mixed-out */
1734                         src_chan = s->samples_chanptr[s->channel_order_tab[j]];
1735                         for (k = 0; k < endch; k++) {
1736                             achan = s->channel_order_tab[k];
1737                             scale = s->xxch_dmix_coeff[j][k];
1738                             if (scale != 0.0) {
1739                                 dst_chan = s->samples_chanptr[achan];
1740                                 s->fdsp->vector_fmac_scalar(dst_chan, src_chan,
1741                                                            -scale, 256);
1742                             }
1743                         }
1744                     }
1745                 }
1746
1747                 /* if a downmix has been embedded then undo the pre-scaling */
1748                 if ((mask & (1 << ch)) && s->xxch_dmix_sf[chset] != 1.0f) {
1749                     scale = s->xxch_dmix_sf[chset];
1750
1751                     for (j = 0; j < ch; j++) {
1752                         src_chan = s->samples_chanptr[s->channel_order_tab[j]];
1753                         for (k = 0; k < 256; k++)
1754                             src_chan[k] *= scale;
1755                     }
1756
1757                     /* LFE channel is always part of core, scale if it exists */
1758                     if (s->lfe) {
1759                         src_chan = s->samples_chanptr[s->lfe_index];
1760                         for (k = 0; k < 256; k++)
1761                             src_chan[k] *= scale;
1762                     }
1763                 }
1764
1765                 ch = endch;
1766             }
1767
1768         }
1769     }
1770
1771     /* update lfe history */
1772     lfe_samples = 2 * s->lfe * (s->sample_blocks / 8);
1773     for (i = 0; i < 2 * s->lfe * 4; i++)
1774         s->lfe_data[i] = s->lfe_data[i + lfe_samples];
1775
1776     /* AVMatrixEncoding
1777      *
1778      * DCA_STEREO_TOTAL (Lt/Rt) is equivalent to Dolby Surround */
1779     ret = ff_side_data_update_matrix_encoding(frame,
1780                                               (s->output & ~DCA_LFE) == DCA_STEREO_TOTAL ?
1781                                               AV_MATRIX_ENCODING_DOLBY : AV_MATRIX_ENCODING_NONE);
1782     if (ret < 0)
1783         return ret;
1784
1785     *got_frame_ptr = 1;
1786
1787     return buf_size;
1788 }
1789
1790 /**
1791  * DCA initialization
1792  *
1793  * @param avctx     pointer to the AVCodecContext
1794  */
1795
1796 static av_cold int dca_decode_init(AVCodecContext *avctx)
1797 {
1798     DCAContext *s = avctx->priv_data;
1799
1800     s->avctx = avctx;
1801     dca_init_vlcs();
1802
1803     s->fdsp = avpriv_float_dsp_alloc(avctx->flags & CODEC_FLAG_BITEXACT);
1804     if (!s->fdsp)
1805         return AVERROR(ENOMEM);
1806
1807     ff_mdct_init(&s->imdct, 6, 1, 1.0);
1808     ff_synth_filter_init(&s->synth);
1809     ff_dcadsp_init(&s->dcadsp);
1810     ff_fmt_convert_init(&s->fmt_conv, avctx);
1811
1812     avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
1813
1814     /* allow downmixing to stereo */
1815 #if FF_API_REQUEST_CHANNELS
1816 FF_DISABLE_DEPRECATION_WARNINGS
1817     if (avctx->request_channels == 2)
1818         avctx->request_channel_layout = AV_CH_LAYOUT_STEREO;
1819 FF_ENABLE_DEPRECATION_WARNINGS
1820 #endif
1821     if (avctx->channels > 2 &&
1822         avctx->request_channel_layout == AV_CH_LAYOUT_STEREO)
1823         avctx->channels = 2;
1824
1825     return 0;
1826 }
1827
1828 static av_cold int dca_decode_end(AVCodecContext *avctx)
1829 {
1830     DCAContext *s = avctx->priv_data;
1831     ff_mdct_end(&s->imdct);
1832     av_freep(&s->extra_channels_buffer);
1833     av_freep(&s->fdsp);
1834     return 0;
1835 }
1836
1837 static const AVProfile profiles[] = {
1838     { FF_PROFILE_DTS,        "DTS"        },
1839     { FF_PROFILE_DTS_ES,     "DTS-ES"     },
1840     { FF_PROFILE_DTS_96_24,  "DTS 96/24"  },
1841     { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
1842     { FF_PROFILE_DTS_HD_MA,  "DTS-HD MA"  },
1843     { FF_PROFILE_UNKNOWN },
1844 };
1845
1846 static const AVOption options[] = {
1847     { "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 },
1848     { NULL },
1849 };
1850
1851 static const AVClass dca_decoder_class = {
1852     .class_name = "DCA decoder",
1853     .item_name  = av_default_item_name,
1854     .option     = options,
1855     .version    = LIBAVUTIL_VERSION_INT,
1856     .category   = AV_CLASS_CATEGORY_DECODER,
1857 };
1858
1859 AVCodec ff_dca_decoder = {
1860     .name            = "dca",
1861     .long_name       = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
1862     .type            = AVMEDIA_TYPE_AUDIO,
1863     .id              = AV_CODEC_ID_DTS,
1864     .priv_data_size  = sizeof(DCAContext),
1865     .init            = dca_decode_init,
1866     .decode          = dca_decode_frame,
1867     .close           = dca_decode_end,
1868     .capabilities    = CODEC_CAP_CHANNEL_CONF | CODEC_CAP_DR1,
1869     .sample_fmts     = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
1870                                                        AV_SAMPLE_FMT_NONE },
1871     .profiles        = NULL_IF_CONFIG_SMALL(profiles),
1872     .priv_class      = &dca_decoder_class,
1873 };