]> git.sesse.net Git - ffmpeg/blob - libavcodec/dcadec.c
Merge remote-tracking branch 'qatar/master'
[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/intmath.h"
33 #include "libavutil/intreadwrite.h"
34 #include "libavutil/mathematics.h"
35 #include "libavutil/samplefmt.h"
36 #include "avcodec.h"
37 #include "dsputil.h"
38 #include "fft.h"
39 #include "get_bits.h"
40 #include "put_bits.h"
41 #include "dcadata.h"
42 #include "dcahuff.h"
43 #include "dca.h"
44 #include "dca_parser.h"
45 #include "synth_filter.h"
46 #include "dcadsp.h"
47 #include "fmtconvert.h"
48
49 #if ARCH_ARM
50 #   include "arm/dca.h"
51 #endif
52
53 //#define TRACE
54
55 #define DCA_PRIM_CHANNELS_MAX  (7)
56 #define DCA_SUBBANDS          (64)
57 #define DCA_ABITS_MAX         (32)      /* Should be 28 */
58 #define DCA_SUBSUBFRAMES_MAX   (4)
59 #define DCA_SUBFRAMES_MAX     (16)
60 #define DCA_BLOCKS_MAX        (16)
61 #define DCA_LFE_MAX            (3)
62 #define DCA_CHSETS_MAX         (4)
63 #define DCA_CHSET_CHANS_MAX    (8)
64
65 enum DCAMode {
66     DCA_MONO = 0,
67     DCA_CHANNEL,
68     DCA_STEREO,
69     DCA_STEREO_SUMDIFF,
70     DCA_STEREO_TOTAL,
71     DCA_3F,
72     DCA_2F1R,
73     DCA_3F1R,
74     DCA_2F2R,
75     DCA_3F2R,
76     DCA_4F2R
77 };
78
79 /* these are unconfirmed but should be mostly correct */
80 enum DCAExSSSpeakerMask {
81     DCA_EXSS_FRONT_CENTER          = 0x0001,
82     DCA_EXSS_FRONT_LEFT_RIGHT      = 0x0002,
83     DCA_EXSS_SIDE_REAR_LEFT_RIGHT  = 0x0004,
84     DCA_EXSS_LFE                   = 0x0008,
85     DCA_EXSS_REAR_CENTER           = 0x0010,
86     DCA_EXSS_FRONT_HIGH_LEFT_RIGHT = 0x0020,
87     DCA_EXSS_REAR_LEFT_RIGHT       = 0x0040,
88     DCA_EXSS_FRONT_HIGH_CENTER     = 0x0080,
89     DCA_EXSS_OVERHEAD              = 0x0100,
90     DCA_EXSS_CENTER_LEFT_RIGHT     = 0x0200,
91     DCA_EXSS_WIDE_LEFT_RIGHT       = 0x0400,
92     DCA_EXSS_SIDE_LEFT_RIGHT       = 0x0800,
93     DCA_EXSS_LFE2                  = 0x1000,
94     DCA_EXSS_SIDE_HIGH_LEFT_RIGHT  = 0x2000,
95     DCA_EXSS_REAR_HIGH_CENTER      = 0x4000,
96     DCA_EXSS_REAR_HIGH_LEFT_RIGHT  = 0x8000,
97 };
98
99 enum DCAXxchSpeakerMask {
100     DCA_XXCH_FRONT_CENTER          = 0x0000001,
101     DCA_XXCH_FRONT_LEFT            = 0x0000002,
102     DCA_XXCH_FRONT_RIGHT           = 0x0000004,
103     DCA_XXCH_SIDE_REAR_LEFT        = 0x0000008,
104     DCA_XXCH_SIDE_REAR_RIGHT       = 0x0000010,
105     DCA_XXCH_LFE1                  = 0x0000020,
106     DCA_XXCH_REAR_CENTER           = 0x0000040,
107     DCA_XXCH_SURROUND_REAR_LEFT    = 0x0000080,
108     DCA_XXCH_SURROUND_REAR_RIGHT   = 0x0000100,
109     DCA_XXCH_SIDE_SURROUND_LEFT    = 0x0000200,
110     DCA_XXCH_SIDE_SURROUND_RIGHT   = 0x0000400,
111     DCA_XXCH_FRONT_CENTER_LEFT     = 0x0000800,
112     DCA_XXCH_FRONT_CENTER_RIGHT    = 0x0001000,
113     DCA_XXCH_FRONT_HIGH_LEFT       = 0x0002000,
114     DCA_XXCH_FRONT_HIGH_CENTER     = 0x0004000,
115     DCA_XXCH_FRONT_HIGH_RIGHT      = 0x0008000,
116     DCA_XXCH_LFE2                  = 0x0010000,
117     DCA_XXCH_SIDE_FRONT_LEFT       = 0x0020000,
118     DCA_XXCH_SIDE_FRONT_RIGHT      = 0x0040000,
119     DCA_XXCH_OVERHEAD              = 0x0080000,
120     DCA_XXCH_SIDE_HIGH_LEFT        = 0x0100000,
121     DCA_XXCH_SIDE_HIGH_RIGHT       = 0x0200000,
122     DCA_XXCH_REAR_HIGH_CENTER      = 0x0400000,
123     DCA_XXCH_REAR_HIGH_LEFT        = 0x0800000,
124     DCA_XXCH_REAR_HIGH_RIGHT       = 0x1000000,
125     DCA_XXCH_REAR_LOW_CENTER       = 0x2000000,
126     DCA_XXCH_REAR_LOW_LEFT         = 0x4000000,
127     DCA_XXCH_REAR_LOW_RIGHT        = 0x8000000,
128 };
129
130 static const uint32_t map_xxch_to_native[28] = {
131     AV_CH_FRONT_CENTER,
132     AV_CH_FRONT_LEFT,
133     AV_CH_FRONT_RIGHT,
134     AV_CH_SIDE_LEFT,
135     AV_CH_SIDE_RIGHT,
136     AV_CH_LOW_FREQUENCY,
137     AV_CH_BACK_CENTER,
138     AV_CH_BACK_LEFT,
139     AV_CH_BACK_RIGHT,
140     AV_CH_SIDE_LEFT,           /* side surround left -- dup sur side L */
141     AV_CH_SIDE_RIGHT,          /* side surround right -- dup sur side R */
142     AV_CH_FRONT_LEFT_OF_CENTER,
143     AV_CH_FRONT_RIGHT_OF_CENTER,
144     AV_CH_TOP_FRONT_LEFT,
145     AV_CH_TOP_FRONT_CENTER,
146     AV_CH_TOP_FRONT_RIGHT,
147     AV_CH_LOW_FREQUENCY,        /* lfe2 -- duplicate lfe1 position */
148     AV_CH_FRONT_LEFT_OF_CENTER, /* side front left -- dup front cntr L */
149     AV_CH_FRONT_RIGHT_OF_CENTER,/* side front right -- dup front cntr R */
150     AV_CH_TOP_CENTER,           /* overhead */
151     AV_CH_TOP_FRONT_LEFT,       /* side high left -- dup */
152     AV_CH_TOP_FRONT_RIGHT,      /* side high right -- dup */
153     AV_CH_TOP_BACK_CENTER,
154     AV_CH_TOP_BACK_LEFT,
155     AV_CH_TOP_BACK_RIGHT,
156     AV_CH_BACK_CENTER,          /* rear low center -- dup */
157     AV_CH_BACK_LEFT,            /* rear low left -- dup */
158     AV_CH_BACK_RIGHT            /* read low right -- dup  */
159 };
160
161 enum DCAExtensionMask {
162     DCA_EXT_CORE       = 0x001, ///< core in core substream
163     DCA_EXT_XXCH       = 0x002, ///< XXCh channels extension in core substream
164     DCA_EXT_X96        = 0x004, ///< 96/24 extension in core substream
165     DCA_EXT_XCH        = 0x008, ///< XCh channel extension in core substream
166     DCA_EXT_EXSS_CORE  = 0x010, ///< core in ExSS (extension substream)
167     DCA_EXT_EXSS_XBR   = 0x020, ///< extended bitrate extension in ExSS
168     DCA_EXT_EXSS_XXCH  = 0x040, ///< XXCh channels extension in ExSS
169     DCA_EXT_EXSS_X96   = 0x080, ///< 96/24 extension in ExSS
170     DCA_EXT_EXSS_LBR   = 0x100, ///< low bitrate component in ExSS
171     DCA_EXT_EXSS_XLL   = 0x200, ///< lossless extension in ExSS
172 };
173
174 /* -1 are reserved or unknown */
175 static const int dca_ext_audio_descr_mask[] = {
176     DCA_EXT_XCH,
177     -1,
178     DCA_EXT_X96,
179     DCA_EXT_XCH | DCA_EXT_X96,
180     -1,
181     -1,
182     DCA_EXT_XXCH,
183     -1,
184 };
185
186 /* extensions that reside in core substream */
187 #define DCA_CORE_EXTS (DCA_EXT_XCH | DCA_EXT_XXCH | DCA_EXT_X96)
188
189 /* Tables for mapping dts channel configurations to libavcodec multichannel api.
190  * Some compromises have been made for special configurations. Most configurations
191  * are never used so complete accuracy is not needed.
192  *
193  * L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
194  * S  -> side, when both rear and back are configured move one of them to the side channel
195  * OV -> center back
196  * All 2 channel configurations -> AV_CH_LAYOUT_STEREO
197  */
198 static const uint64_t dca_core_channel_layout[] = {
199     AV_CH_FRONT_CENTER,                                                     ///< 1, A
200     AV_CH_LAYOUT_STEREO,                                                    ///< 2, A + B (dual mono)
201     AV_CH_LAYOUT_STEREO,                                                    ///< 2, L + R (stereo)
202     AV_CH_LAYOUT_STEREO,                                                    ///< 2, (L + R) + (L - R) (sum-difference)
203     AV_CH_LAYOUT_STEREO,                                                    ///< 2, LT + RT (left and right total)
204     AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER,                               ///< 3, C + L + R
205     AV_CH_LAYOUT_STEREO | AV_CH_BACK_CENTER,                                ///< 3, L + R + S
206     AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_BACK_CENTER,           ///< 4, C + L + R + S
207     AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT,               ///< 4, L + R + SL + SR
208
209     AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_SIDE_LEFT |
210     AV_CH_SIDE_RIGHT,                                                       ///< 5, C + L + R + SL + SR
211
212     AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
213     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER,               ///< 6, CL + CR + L + R + SL + SR
214
215     AV_CH_LAYOUT_STEREO | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT |
216     AV_CH_FRONT_CENTER  | AV_CH_BACK_CENTER,                                ///< 6, C + L + R + LR + RR + OV
217
218     AV_CH_FRONT_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
219     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_BACK_CENTER   |
220     AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT,                                     ///< 6, CF + CR + LF + RF + LR + RR
221
222     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER   |
223     AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
224     AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT,                                     ///< 7, CL + C + CR + L + R + SL + SR
225
226     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
227     AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
228     AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT,                                     ///< 8, CL + CR + L + R + SL1 + SL2 + SR1 + SR2
229
230     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER   |
231     AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
232     AV_CH_SIDE_LEFT | AV_CH_BACK_CENTER | AV_CH_SIDE_RIGHT,                 ///< 8, CL + C + CR + L + R + SL + S + SR
233 };
234
235 static const int8_t dca_lfe_index[] = {
236     1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
237 };
238
239 static const int8_t dca_channel_reorder_lfe[][9] = {
240     { 0, -1, -1, -1, -1, -1, -1, -1, -1},
241     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
242     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
243     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
244     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
245     { 2,  0,  1, -1, -1, -1, -1, -1, -1},
246     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
247     { 2,  0,  1,  4, -1, -1, -1, -1, -1},
248     { 0,  1,  3,  4, -1, -1, -1, -1, -1},
249     { 2,  0,  1,  4,  5, -1, -1, -1, -1},
250     { 3,  4,  0,  1,  5,  6, -1, -1, -1},
251     { 2,  0,  1,  4,  5,  6, -1, -1, -1},
252     { 0,  6,  4,  5,  2,  3, -1, -1, -1},
253     { 4,  2,  5,  0,  1,  6,  7, -1, -1},
254     { 5,  6,  0,  1,  7,  3,  8,  4, -1},
255     { 4,  2,  5,  0,  1,  6,  8,  7, -1},
256 };
257
258 static const int8_t dca_channel_reorder_lfe_xch[][9] = {
259     { 0,  2, -1, -1, -1, -1, -1, -1, -1},
260     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
261     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
262     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
263     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
264     { 2,  0,  1,  4, -1, -1, -1, -1, -1},
265     { 0,  1,  3,  4, -1, -1, -1, -1, -1},
266     { 2,  0,  1,  4,  5, -1, -1, -1, -1},
267     { 0,  1,  4,  5,  3, -1, -1, -1, -1},
268     { 2,  0,  1,  5,  6,  4, -1, -1, -1},
269     { 3,  4,  0,  1,  6,  7,  5, -1, -1},
270     { 2,  0,  1,  4,  5,  6,  7, -1, -1},
271     { 0,  6,  4,  5,  2,  3,  7, -1, -1},
272     { 4,  2,  5,  0,  1,  7,  8,  6, -1},
273     { 5,  6,  0,  1,  8,  3,  9,  4,  7},
274     { 4,  2,  5,  0,  1,  6,  9,  8,  7},
275 };
276
277 static const int8_t dca_channel_reorder_nolfe[][9] = {
278     { 0, -1, -1, -1, -1, -1, -1, -1, -1},
279     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
280     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
281     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
282     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
283     { 2,  0,  1, -1, -1, -1, -1, -1, -1},
284     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
285     { 2,  0,  1,  3, -1, -1, -1, -1, -1},
286     { 0,  1,  2,  3, -1, -1, -1, -1, -1},
287     { 2,  0,  1,  3,  4, -1, -1, -1, -1},
288     { 2,  3,  0,  1,  4,  5, -1, -1, -1},
289     { 2,  0,  1,  3,  4,  5, -1, -1, -1},
290     { 0,  5,  3,  4,  1,  2, -1, -1, -1},
291     { 3,  2,  4,  0,  1,  5,  6, -1, -1},
292     { 4,  5,  0,  1,  6,  2,  7,  3, -1},
293     { 3,  2,  4,  0,  1,  5,  7,  6, -1},
294 };
295
296 static const int8_t dca_channel_reorder_nolfe_xch[][9] = {
297     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
298     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
299     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
300     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
301     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
302     { 2,  0,  1,  3, -1, -1, -1, -1, -1},
303     { 0,  1,  2,  3, -1, -1, -1, -1, -1},
304     { 2,  0,  1,  3,  4, -1, -1, -1, -1},
305     { 0,  1,  3,  4,  2, -1, -1, -1, -1},
306     { 2,  0,  1,  4,  5,  3, -1, -1, -1},
307     { 2,  3,  0,  1,  5,  6,  4, -1, -1},
308     { 2,  0,  1,  3,  4,  5,  6, -1, -1},
309     { 0,  5,  3,  4,  1,  2,  6, -1, -1},
310     { 3,  2,  4,  0,  1,  6,  7,  5, -1},
311     { 4,  5,  0,  1,  7,  2,  8,  3,  6},
312     { 3,  2,  4,  0,  1,  5,  8,  7,  6},
313 };
314
315 #define DCA_DOLBY                  101           /* FIXME */
316
317 #define DCA_CHANNEL_BITS             6
318 #define DCA_CHANNEL_MASK          0x3F
319
320 #define DCA_LFE                   0x80
321
322 #define HEADER_SIZE                 14
323
324 #define DCA_MAX_FRAME_SIZE       16384
325 #define DCA_MAX_EXSS_HEADER_SIZE  4096
326
327 #define DCA_BUFFER_PADDING_SIZE   1024
328
329 /** Bit allocation */
330 typedef struct {
331     int offset;                 ///< code values offset
332     int maxbits[8];             ///< max bits in VLC
333     int wrap;                   ///< wrap for get_vlc2()
334     VLC vlc[8];                 ///< actual codes
335 } BitAlloc;
336
337 static BitAlloc dca_bitalloc_index;    ///< indexes for samples VLC select
338 static BitAlloc dca_tmode;             ///< transition mode VLCs
339 static BitAlloc dca_scalefactor;       ///< scalefactor VLCs
340 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
341
342 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba,
343                                          int idx)
344 {
345     return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) +
346            ba->offset;
347 }
348
349 typedef struct {
350     AVCodecContext *avctx;
351     AVFrame frame;
352     /* Frame header */
353     int frame_type;             ///< type of the current frame
354     int samples_deficit;        ///< deficit sample count
355     int crc_present;            ///< crc is present in the bitstream
356     int sample_blocks;          ///< number of PCM sample blocks
357     int frame_size;             ///< primary frame byte size
358     int amode;                  ///< audio channels arrangement
359     int sample_rate;            ///< audio sampling rate
360     int bit_rate;               ///< transmission bit rate
361     int bit_rate_index;         ///< transmission bit rate index
362
363     int downmix;                ///< embedded downmix enabled
364     int dynrange;               ///< embedded dynamic range flag
365     int timestamp;              ///< embedded time stamp flag
366     int aux_data;               ///< auxiliary data flag
367     int hdcd;                   ///< source material is mastered in HDCD
368     int ext_descr;              ///< extension audio descriptor flag
369     int ext_coding;             ///< extended coding flag
370     int aspf;                   ///< audio sync word insertion flag
371     int lfe;                    ///< low frequency effects flag
372     int predictor_history;      ///< predictor history flag
373     int header_crc;             ///< header crc check bytes
374     int multirate_inter;        ///< multirate interpolator switch
375     int version;                ///< encoder software revision
376     int copy_history;           ///< copy history
377     int source_pcm_res;         ///< source pcm resolution
378     int front_sum;              ///< front sum/difference flag
379     int surround_sum;           ///< surround sum/difference flag
380     int dialog_norm;            ///< dialog normalisation parameter
381
382     /* Primary audio coding header */
383     int subframes;              ///< number of subframes
384     int total_channels;         ///< number of channels including extensions
385     int prim_channels;          ///< number of primary audio channels
386     int subband_activity[DCA_PRIM_CHANNELS_MAX];    ///< subband activity count
387     int vq_start_subband[DCA_PRIM_CHANNELS_MAX];    ///< high frequency vq start subband
388     int joint_intensity[DCA_PRIM_CHANNELS_MAX];     ///< joint intensity coding index
389     int transient_huffman[DCA_PRIM_CHANNELS_MAX];   ///< transient mode code book
390     int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]; ///< scale factor code book
391     int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX];    ///< bit allocation quantizer select
392     int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< quantization index codebook select
393     float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX];   ///< scale factor adjustment
394
395     /* Primary audio coding side information */
396     int subsubframes[DCA_SUBFRAMES_MAX];                         ///< number of subsubframes
397     int partial_samples[DCA_SUBFRAMES_MAX];                      ///< partial subsubframe samples count
398     int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];    ///< prediction mode (ADPCM used or not)
399     int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];      ///< prediction VQ coefs
400     int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];           ///< bit allocation index
401     int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];    ///< transition mode (transients)
402     int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2];    ///< scale factors (2 if transient)
403     int joint_huff[DCA_PRIM_CHANNELS_MAX];                       ///< joint subband scale factors codebook
404     int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< joint subband scale factors
405     int downmix_coef[DCA_PRIM_CHANNELS_MAX][2];                  ///< stereo downmix coefficients
406     int dynrange_coef;                                           ///< dynamic range coefficient
407
408     int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];       ///< VQ encoded high frequency subbands
409
410     float lfe_data[2 * DCA_LFE_MAX * (DCA_BLOCKS_MAX + 4)];      ///< Low frequency effect data
411     int lfe_scale_factor;
412
413     /* Subband samples history (for ADPCM) */
414     DECLARE_ALIGNED(16, float, subband_samples_hist)[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4];
415     DECLARE_ALIGNED(32, float, subband_fir_hist)[DCA_PRIM_CHANNELS_MAX][512];
416     DECLARE_ALIGNED(32, float, subband_fir_noidea)[DCA_PRIM_CHANNELS_MAX][32];
417     int hist_index[DCA_PRIM_CHANNELS_MAX];
418     DECLARE_ALIGNED(32, float, raXin)[32];
419
420     int output;                 ///< type of output
421
422     DECLARE_ALIGNED(32, float, subband_samples)[DCA_BLOCKS_MAX][DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8];
423     float *samples_chanptr[DCA_PRIM_CHANNELS_MAX + 1];
424     float *extra_channels[DCA_PRIM_CHANNELS_MAX + 1];
425     uint8_t *extra_channels_buffer;
426     unsigned int extra_channels_buffer_size;
427
428     uint8_t dca_buffer[DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE + DCA_BUFFER_PADDING_SIZE];
429     int dca_buffer_size;        ///< how much data is in the dca_buffer
430
431     const int8_t *channel_order_tab;  ///< channel reordering table, lfe and non lfe
432     GetBitContext gb;
433     /* Current position in DCA frame */
434     int current_subframe;
435     int current_subsubframe;
436
437     int core_ext_mask;          ///< present extensions in the core substream
438
439     /* XCh extension information */
440     int xch_present;            ///< XCh extension present and valid
441     int xch_base_channel;       ///< index of first (only) channel containing XCH data
442
443     /* XXCH extension information */
444     int xxch_chset;
445     int xxch_nbits_spk_mask;
446     uint32_t xxch_core_spkmask;
447     uint32_t xxch_spk_masks[4]; /* speaker masks, last element is core mask */
448     int xxch_chset_nch[4];
449     float xxch_dmix_sf[DCA_CHSETS_MAX];
450
451     uint32_t xxch_dmix_embedded;  /* lower layer has mix pre-embedded, per chset */
452     float xxch_dmix_coeff[DCA_PRIM_CHANNELS_MAX][32]; /* worst case sizing */
453
454     int8_t xxch_order_tab[32];
455     int8_t lfe_index;
456
457     /* ExSS header parser */
458     int static_fields;          ///< static fields present
459     int mix_metadata;           ///< mixing metadata present
460     int num_mix_configs;        ///< number of mix out configurations
461     int mix_config_num_ch[4];   ///< number of channels in each mix out configuration
462
463     int profile;
464
465     int debug_flag;             ///< used for suppressing repeated error messages output
466     AVFloatDSPContext fdsp;
467     FFTContext imdct;
468     SynthFilterContext synth;
469     DCADSPContext dcadsp;
470     FmtConvertContext fmt_conv;
471 } DCAContext;
472
473 static const uint16_t dca_vlc_offs[] = {
474         0,   512,   640,   768,  1282,  1794,  2436,  3080,  3770,  4454,  5364,
475      5372,  5380,  5388,  5392,  5396,  5412,  5420,  5428,  5460,  5492,  5508,
476      5572,  5604,  5668,  5796,  5860,  5892,  6412,  6668,  6796,  7308,  7564,
477      7820,  8076,  8620,  9132,  9388,  9910, 10166, 10680, 11196, 11726, 12240,
478     12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
479     18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
480 };
481
482 static av_cold void dca_init_vlcs(void)
483 {
484     static int vlcs_initialized = 0;
485     int i, j, c = 14;
486     static VLC_TYPE dca_table[23622][2];
487
488     if (vlcs_initialized)
489         return;
490
491     dca_bitalloc_index.offset = 1;
492     dca_bitalloc_index.wrap = 2;
493     for (i = 0; i < 5; i++) {
494         dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]];
495         dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i];
496         init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
497                  bitalloc_12_bits[i], 1, 1,
498                  bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
499     }
500     dca_scalefactor.offset = -64;
501     dca_scalefactor.wrap = 2;
502     for (i = 0; i < 5; i++) {
503         dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]];
504         dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5];
505         init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
506                  scales_bits[i], 1, 1,
507                  scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
508     }
509     dca_tmode.offset = 0;
510     dca_tmode.wrap = 1;
511     for (i = 0; i < 4; i++) {
512         dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]];
513         dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10];
514         init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
515                  tmode_bits[i], 1, 1,
516                  tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
517     }
518
519     for (i = 0; i < 10; i++)
520         for (j = 0; j < 7; j++) {
521             if (!bitalloc_codes[i][j])
522                 break;
523             dca_smpl_bitalloc[i + 1].offset                 = bitalloc_offsets[i];
524             dca_smpl_bitalloc[i + 1].wrap                   = 1 + (j > 4);
525             dca_smpl_bitalloc[i + 1].vlc[j].table           = &dca_table[dca_vlc_offs[c]];
526             dca_smpl_bitalloc[i + 1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
527
528             init_vlc(&dca_smpl_bitalloc[i + 1].vlc[j], bitalloc_maxbits[i][j],
529                      bitalloc_sizes[i],
530                      bitalloc_bits[i][j], 1, 1,
531                      bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC);
532             c++;
533         }
534     vlcs_initialized = 1;
535 }
536
537 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
538 {
539     while (len--)
540         *dst++ = get_bits(gb, bits);
541 }
542
543 static inline int dca_xxch2index(DCAContext *s, int xxch_ch)
544 {
545     int i, base, mask;
546
547     /* locate channel set containing the channel */
548     for (i = -1, base = 0, mask = (s->xxch_core_spkmask & ~DCA_XXCH_LFE1);
549          i <= s->xxch_chset && !(mask & xxch_ch); mask = s->xxch_spk_masks[++i])
550         base += av_popcount(mask);
551
552     return base + av_popcount(mask & (xxch_ch - 1));
553 }
554
555 static int dca_parse_audio_coding_header(DCAContext *s, int base_channel,
556                                          int xxch)
557 {
558     int i, j;
559     static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
560     static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
561     static const int thr[11]    = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
562     int hdr_pos = 0, hdr_size = 0;
563     float sign, mag, scale_factor;
564     int this_chans, acc_mask;
565     int embedded_downmix;
566     int nchans, mask[8];
567     int coeff, ichan;
568
569     /* xxch has arbitrary sized audio coding headers */
570     if (xxch) {
571         hdr_pos  = get_bits_count(&s->gb);
572         hdr_size = get_bits(&s->gb, 7) + 1;
573     }
574
575     nchans = get_bits(&s->gb, 3) + 1;
576     s->total_channels = nchans + base_channel;
577     s->prim_channels  = s->total_channels;
578
579     /* obtain speaker layout mask & downmix coefficients for XXCH */
580     if (xxch) {
581         acc_mask = s->xxch_core_spkmask;
582
583         this_chans = get_bits(&s->gb, s->xxch_nbits_spk_mask - 6) << 6;
584         s->xxch_spk_masks[s->xxch_chset] = this_chans;
585         s->xxch_chset_nch[s->xxch_chset] = nchans;
586
587         for (i = 0; i <= s->xxch_chset; i++)
588             acc_mask |= s->xxch_spk_masks[i];
589
590         /* check for downmixing information */
591         if (get_bits1(&s->gb)) {
592             embedded_downmix = get_bits1(&s->gb);
593             scale_factor     =
594                1.0f / dca_downmix_scale_factors[(get_bits(&s->gb, 6) - 1) << 2];
595
596             s->xxch_dmix_sf[s->xxch_chset] = scale_factor;
597
598             for (i = base_channel; i < s->prim_channels; i++) {
599                 mask[i] = get_bits(&s->gb, s->xxch_nbits_spk_mask);
600             }
601
602             for (j = base_channel; j < s->prim_channels; j++) {
603                 memset(s->xxch_dmix_coeff[j], 0, sizeof(s->xxch_dmix_coeff[0]));
604                 s->xxch_dmix_embedded |= (embedded_downmix << j);
605                 for (i = 0; i < s->xxch_nbits_spk_mask; i++) {
606                     if (mask[j] & (1 << i)) {
607                         if ((1 << i) == DCA_XXCH_LFE1) {
608                             av_log(s->avctx, AV_LOG_WARNING,
609                                    "DCA-XXCH: dmix to LFE1 not supported.\n");
610                             continue;
611                         }
612
613                         coeff = get_bits(&s->gb, 7);
614                         sign  = (coeff & 64) ? 1.0 : -1.0;
615                         mag   = dca_downmix_scale_factors[((coeff & 63) - 1) << 2];
616                         ichan = dca_xxch2index(s, 1 << i);
617                         s->xxch_dmix_coeff[j][ichan] = sign * mag;
618                     }
619                 }
620             }
621         }
622     }
623
624     if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
625         s->prim_channels = DCA_PRIM_CHANNELS_MAX;
626
627
628     for (i = base_channel; i < s->prim_channels; i++) {
629         s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
630         if (s->subband_activity[i] > DCA_SUBBANDS)
631             s->subband_activity[i] = DCA_SUBBANDS;
632     }
633     for (i = base_channel; i < s->prim_channels; i++) {
634         s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
635         if (s->vq_start_subband[i] > DCA_SUBBANDS)
636             s->vq_start_subband[i] = DCA_SUBBANDS;
637     }
638     get_array(&s->gb, s->joint_intensity + base_channel,     s->prim_channels - base_channel, 3);
639     get_array(&s->gb, s->transient_huffman + base_channel,   s->prim_channels - base_channel, 2);
640     get_array(&s->gb, s->scalefactor_huffman + base_channel, s->prim_channels - base_channel, 3);
641     get_array(&s->gb, s->bitalloc_huffman + base_channel,    s->prim_channels - base_channel, 3);
642
643     /* Get codebooks quantization indexes */
644     if (!base_channel)
645         memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
646     for (j = 1; j < 11; j++)
647         for (i = base_channel; i < s->prim_channels; i++)
648             s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
649
650     /* Get scale factor adjustment */
651     for (j = 0; j < 11; j++)
652         for (i = base_channel; i < s->prim_channels; i++)
653             s->scalefactor_adj[i][j] = 1;
654
655     for (j = 1; j < 11; j++)
656         for (i = base_channel; i < s->prim_channels; i++)
657             if (s->quant_index_huffman[i][j] < thr[j])
658                 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
659
660     if (!xxch) {
661         if (s->crc_present) {
662             /* Audio header CRC check */
663             get_bits(&s->gb, 16);
664         }
665     } else {
666         /* Skip to the end of the header, also ignore CRC if present  */
667         i = get_bits_count(&s->gb);
668         if (hdr_pos + 8 * hdr_size > i)
669             skip_bits_long(&s->gb, hdr_pos + 8 * hdr_size - i);
670     }
671
672     s->current_subframe    = 0;
673     s->current_subsubframe = 0;
674
675 #ifdef TRACE
676     av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);
677     av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);
678     for (i = base_channel; i < s->prim_channels; i++) {
679         av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n",
680                s->subband_activity[i]);
681         av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n",
682                s->vq_start_subband[i]);
683         av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n",
684                s->joint_intensity[i]);
685         av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n",
686                s->transient_huffman[i]);
687         av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n",
688                s->scalefactor_huffman[i]);
689         av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n",
690                s->bitalloc_huffman[i]);
691         av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");
692         for (j = 0; j < 11; j++)
693             av_log(s->avctx, AV_LOG_DEBUG, " %i", s->quant_index_huffman[i][j]);
694         av_log(s->avctx, AV_LOG_DEBUG, "\n");
695         av_log(s->avctx, AV_LOG_DEBUG, "scalefac adj:");
696         for (j = 0; j < 11; j++)
697             av_log(s->avctx, AV_LOG_DEBUG, " %1.3f", s->scalefactor_adj[i][j]);
698         av_log(s->avctx, AV_LOG_DEBUG, "\n");
699     }
700 #endif
701
702     return 0;
703 }
704
705 static int dca_parse_frame_header(DCAContext *s)
706 {
707     init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
708
709     /* Sync code */
710     skip_bits_long(&s->gb, 32);
711
712     /* Frame header */
713     s->frame_type        = get_bits(&s->gb, 1);
714     s->samples_deficit   = get_bits(&s->gb, 5) + 1;
715     s->crc_present       = get_bits(&s->gb, 1);
716     s->sample_blocks     = get_bits(&s->gb, 7) + 1;
717     s->frame_size        = get_bits(&s->gb, 14) + 1;
718     if (s->frame_size < 95)
719         return AVERROR_INVALIDDATA;
720     s->amode             = get_bits(&s->gb, 6);
721     s->sample_rate       = avpriv_dca_sample_rates[get_bits(&s->gb, 4)];
722     if (!s->sample_rate)
723         return AVERROR_INVALIDDATA;
724     s->bit_rate_index    = get_bits(&s->gb, 5);
725     s->bit_rate          = dca_bit_rates[s->bit_rate_index];
726     if (!s->bit_rate)
727         return AVERROR_INVALIDDATA;
728
729     s->downmix           = get_bits(&s->gb, 1); /* note: this is FixedBit == 0 */
730     s->dynrange          = get_bits(&s->gb, 1);
731     s->timestamp         = get_bits(&s->gb, 1);
732     s->aux_data          = get_bits(&s->gb, 1);
733     s->hdcd              = get_bits(&s->gb, 1);
734     s->ext_descr         = get_bits(&s->gb, 3);
735     s->ext_coding        = get_bits(&s->gb, 1);
736     s->aspf              = get_bits(&s->gb, 1);
737     s->lfe               = get_bits(&s->gb, 2);
738     s->predictor_history = get_bits(&s->gb, 1);
739
740     if (s->lfe == 3) {
741         s->lfe = 0;
742         av_log_ask_for_sample(s->avctx, "LFE is 3\n");
743         return AVERROR_PATCHWELCOME;
744     }
745
746     /* TODO: check CRC */
747     if (s->crc_present)
748         s->header_crc    = get_bits(&s->gb, 16);
749
750     s->multirate_inter   = get_bits(&s->gb, 1);
751     s->version           = get_bits(&s->gb, 4);
752     s->copy_history      = get_bits(&s->gb, 2);
753     s->source_pcm_res    = get_bits(&s->gb, 3);
754     s->front_sum         = get_bits(&s->gb, 1);
755     s->surround_sum      = get_bits(&s->gb, 1);
756     s->dialog_norm       = get_bits(&s->gb, 4);
757
758     /* FIXME: channels mixing levels */
759     s->output = s->amode;
760     if (s->lfe)
761         s->output |= DCA_LFE;
762
763 #ifdef TRACE
764     av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);
765     av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);
766     av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);
767     av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",
768            s->sample_blocks, s->sample_blocks * 32);
769     av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);
770     av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",
771            s->amode, dca_channels[s->amode]);
772     av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i Hz\n",
773            s->sample_rate);
774     av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i bits/s\n",
775            s->bit_rate);
776     av_log(s->avctx, AV_LOG_DEBUG, "downmix: %i\n", s->downmix);
777     av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);
778     av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);
779     av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);
780     av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);
781     av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);
782     av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);
783     av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);
784     av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);
785     av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",
786            s->predictor_history);
787     av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);
788     av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",
789            s->multirate_inter);
790     av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);
791     av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);
792     av_log(s->avctx, AV_LOG_DEBUG,
793            "source pcm resolution: %i (%i bits/sample)\n",
794            s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);
795     av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);
796     av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);
797     av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);
798     av_log(s->avctx, AV_LOG_DEBUG, "\n");
799 #endif
800
801     /* Primary audio coding header */
802     s->subframes         = get_bits(&s->gb, 4) + 1;
803
804     return dca_parse_audio_coding_header(s, 0, 0);
805 }
806
807
808 static inline int get_scale(GetBitContext *gb, int level, int value, int log2range)
809 {
810     if (level < 5) {
811         /* huffman encoded */
812         value += get_bitalloc(gb, &dca_scalefactor, level);
813         value = av_clip(value, 0, (1 << log2range) - 1);
814     } else if (level < 8) {
815         if (level + 1 > log2range) {
816             skip_bits(gb, level + 1 - log2range);
817             value = get_bits(gb, log2range);
818         } else {
819             value = get_bits(gb, level + 1);
820         }
821     }
822     return value;
823 }
824
825 static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
826 {
827     /* Primary audio coding side information */
828     int j, k;
829
830     if (get_bits_left(&s->gb) < 0)
831         return AVERROR_INVALIDDATA;
832
833     if (!base_channel) {
834         s->subsubframes[s->current_subframe]    = get_bits(&s->gb, 2) + 1;
835         s->partial_samples[s->current_subframe] = get_bits(&s->gb, 3);
836     }
837
838     for (j = base_channel; j < s->prim_channels; j++) {
839         for (k = 0; k < s->subband_activity[j]; k++)
840             s->prediction_mode[j][k] = get_bits(&s->gb, 1);
841     }
842
843     /* Get prediction codebook */
844     for (j = base_channel; j < s->prim_channels; j++) {
845         for (k = 0; k < s->subband_activity[j]; k++) {
846             if (s->prediction_mode[j][k] > 0) {
847                 /* (Prediction coefficient VQ address) */
848                 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
849             }
850         }
851     }
852
853     /* Bit allocation index */
854     for (j = base_channel; j < s->prim_channels; j++) {
855         for (k = 0; k < s->vq_start_subband[j]; k++) {
856             if (s->bitalloc_huffman[j] == 6)
857                 s->bitalloc[j][k] = get_bits(&s->gb, 5);
858             else if (s->bitalloc_huffman[j] == 5)
859                 s->bitalloc[j][k] = get_bits(&s->gb, 4);
860             else if (s->bitalloc_huffman[j] == 7) {
861                 av_log(s->avctx, AV_LOG_ERROR,
862                        "Invalid bit allocation index\n");
863                 return AVERROR_INVALIDDATA;
864             } else {
865                 s->bitalloc[j][k] =
866                     get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
867             }
868
869             if (s->bitalloc[j][k] > 26) {
870                 av_dlog(s->avctx, "bitalloc index [%i][%i] too big (%i)\n",
871                         j, k, s->bitalloc[j][k]);
872                 return AVERROR_INVALIDDATA;
873             }
874         }
875     }
876
877     /* Transition mode */
878     for (j = base_channel; j < s->prim_channels; j++) {
879         for (k = 0; k < s->subband_activity[j]; k++) {
880             s->transition_mode[j][k] = 0;
881             if (s->subsubframes[s->current_subframe] > 1 &&
882                 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
883                 s->transition_mode[j][k] =
884                     get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
885             }
886         }
887     }
888
889     if (get_bits_left(&s->gb) < 0)
890         return AVERROR_INVALIDDATA;
891
892     for (j = base_channel; j < s->prim_channels; j++) {
893         const uint32_t *scale_table;
894         int scale_sum, log_size;
895
896         memset(s->scale_factor[j], 0,
897                s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
898
899         if (s->scalefactor_huffman[j] == 6) {
900             scale_table = scale_factor_quant7;
901             log_size = 7;
902         } else {
903             scale_table = scale_factor_quant6;
904             log_size = 6;
905         }
906
907         /* When huffman coded, only the difference is encoded */
908         scale_sum = 0;
909
910         for (k = 0; k < s->subband_activity[j]; k++) {
911             if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
912                 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
913                 s->scale_factor[j][k][0] = scale_table[scale_sum];
914             }
915
916             if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
917                 /* Get second scale factor */
918                 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
919                 s->scale_factor[j][k][1] = scale_table[scale_sum];
920             }
921         }
922     }
923
924     /* Joint subband scale factor codebook select */
925     for (j = base_channel; j < s->prim_channels; j++) {
926         /* Transmitted only if joint subband coding enabled */
927         if (s->joint_intensity[j] > 0)
928             s->joint_huff[j] = get_bits(&s->gb, 3);
929     }
930
931     if (get_bits_left(&s->gb) < 0)
932         return AVERROR_INVALIDDATA;
933
934     /* Scale factors for joint subband coding */
935     for (j = base_channel; j < s->prim_channels; j++) {
936         int source_channel;
937
938         /* Transmitted only if joint subband coding enabled */
939         if (s->joint_intensity[j] > 0) {
940             int scale = 0;
941             source_channel = s->joint_intensity[j] - 1;
942
943             /* When huffman coded, only the difference is encoded
944              * (is this valid as well for joint scales ???) */
945
946             for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
947                 scale = get_scale(&s->gb, s->joint_huff[j], 64 /* bias */, 7);
948                 s->joint_scale_factor[j][k] = scale;    /*joint_scale_table[scale]; */
949             }
950
951             if (!(s->debug_flag & 0x02)) {
952                 av_log(s->avctx, AV_LOG_DEBUG,
953                        "Joint stereo coding not supported\n");
954                 s->debug_flag |= 0x02;
955             }
956         }
957     }
958
959     /* Stereo downmix coefficients */
960     if (!base_channel && s->prim_channels > 2) {
961         if (s->downmix) {
962             for (j = base_channel; j < s->prim_channels; j++) {
963                 s->downmix_coef[j][0] = get_bits(&s->gb, 7);
964                 s->downmix_coef[j][1] = get_bits(&s->gb, 7);
965             }
966         } else {
967             int am = s->amode & DCA_CHANNEL_MASK;
968             if (am >= FF_ARRAY_ELEMS(dca_default_coeffs)) {
969                 av_log(s->avctx, AV_LOG_ERROR,
970                        "Invalid channel mode %d\n", am);
971                 return AVERROR_INVALIDDATA;
972             }
973             for (j = base_channel; j < FFMIN(s->prim_channels, FF_ARRAY_ELEMS(dca_default_coeffs[am])); j++) {
974                 s->downmix_coef[j][0] = dca_default_coeffs[am][j][0];
975                 s->downmix_coef[j][1] = dca_default_coeffs[am][j][1];
976             }
977         }
978     }
979
980     /* Dynamic range coefficient */
981     if (!base_channel && s->dynrange)
982         s->dynrange_coef = get_bits(&s->gb, 8);
983
984     /* Side information CRC check word */
985     if (s->crc_present) {
986         get_bits(&s->gb, 16);
987     }
988
989     /*
990      * Primary audio data arrays
991      */
992
993     /* VQ encoded high frequency subbands */
994     for (j = base_channel; j < s->prim_channels; j++)
995         for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
996             /* 1 vector -> 32 samples */
997             s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
998
999     /* Low frequency effect data */
1000     if (!base_channel && s->lfe) {
1001         int quant7;
1002         /* LFE samples */
1003         int lfe_samples = 2 * s->lfe * (4 + block_index);
1004         int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
1005         float lfe_scale;
1006
1007         for (j = lfe_samples; j < lfe_end_sample; j++) {
1008             /* Signed 8 bits int */
1009             s->lfe_data[j] = get_sbits(&s->gb, 8);
1010         }
1011
1012         /* Scale factor index */
1013         quant7 = get_bits(&s->gb, 8);
1014         if (quant7 > 127) {
1015             av_log_ask_for_sample(s->avctx, "LFEScaleIndex larger than 127\n");
1016             return AVERROR_INVALIDDATA;
1017         }
1018         s->lfe_scale_factor = scale_factor_quant7[quant7];
1019
1020         /* Quantization step size * scale factor */
1021         lfe_scale = 0.035 * s->lfe_scale_factor;
1022
1023         for (j = lfe_samples; j < lfe_end_sample; j++)
1024             s->lfe_data[j] *= lfe_scale;
1025     }
1026
1027 #ifdef TRACE
1028     av_log(s->avctx, AV_LOG_DEBUG, "subsubframes: %i\n",
1029            s->subsubframes[s->current_subframe]);
1030     av_log(s->avctx, AV_LOG_DEBUG, "partial samples: %i\n",
1031            s->partial_samples[s->current_subframe]);
1032
1033     for (j = base_channel; j < s->prim_channels; j++) {
1034         av_log(s->avctx, AV_LOG_DEBUG, "prediction mode:");
1035         for (k = 0; k < s->subband_activity[j]; k++)
1036             av_log(s->avctx, AV_LOG_DEBUG, " %i", s->prediction_mode[j][k]);
1037         av_log(s->avctx, AV_LOG_DEBUG, "\n");
1038     }
1039     for (j = base_channel; j < s->prim_channels; j++) {
1040         for (k = 0; k < s->subband_activity[j]; k++)
1041             av_log(s->avctx, AV_LOG_DEBUG,
1042                    "prediction coefs: %f, %f, %f, %f\n",
1043                    (float) adpcm_vb[s->prediction_vq[j][k]][0] / 8192,
1044                    (float) adpcm_vb[s->prediction_vq[j][k]][1] / 8192,
1045                    (float) adpcm_vb[s->prediction_vq[j][k]][2] / 8192,
1046                    (float) adpcm_vb[s->prediction_vq[j][k]][3] / 8192);
1047     }
1048     for (j = base_channel; j < s->prim_channels; j++) {
1049         av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index: ");
1050         for (k = 0; k < s->vq_start_subband[j]; k++)
1051             av_log(s->avctx, AV_LOG_DEBUG, "%2.2i ", s->bitalloc[j][k]);
1052         av_log(s->avctx, AV_LOG_DEBUG, "\n");
1053     }
1054     for (j = base_channel; j < s->prim_channels; j++) {
1055         av_log(s->avctx, AV_LOG_DEBUG, "Transition mode:");
1056         for (k = 0; k < s->subband_activity[j]; k++)
1057             av_log(s->avctx, AV_LOG_DEBUG, " %i", s->transition_mode[j][k]);
1058         av_log(s->avctx, AV_LOG_DEBUG, "\n");
1059     }
1060     for (j = base_channel; j < s->prim_channels; j++) {
1061         av_log(s->avctx, AV_LOG_DEBUG, "Scale factor:");
1062         for (k = 0; k < s->subband_activity[j]; k++) {
1063             if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0)
1064                 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->scale_factor[j][k][0]);
1065             if (k < s->vq_start_subband[j] && s->transition_mode[j][k])
1066                 av_log(s->avctx, AV_LOG_DEBUG, " %i(t)", s->scale_factor[j][k][1]);
1067         }
1068         av_log(s->avctx, AV_LOG_DEBUG, "\n");
1069     }
1070     for (j = base_channel; j < s->prim_channels; j++) {
1071         if (s->joint_intensity[j] > 0) {
1072             int source_channel = s->joint_intensity[j] - 1;
1073             av_log(s->avctx, AV_LOG_DEBUG, "Joint scale factor index:\n");
1074             for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++)
1075                 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->joint_scale_factor[j][k]);
1076             av_log(s->avctx, AV_LOG_DEBUG, "\n");
1077         }
1078     }
1079     if (!base_channel && s->prim_channels > 2 && s->downmix) {
1080         av_log(s->avctx, AV_LOG_DEBUG, "Downmix coeffs:\n");
1081         for (j = 0; j < s->prim_channels; j++) {
1082             av_log(s->avctx, AV_LOG_DEBUG, "Channel 0, %d = %f\n", j,
1083                    dca_downmix_coeffs[s->downmix_coef[j][0]]);
1084             av_log(s->avctx, AV_LOG_DEBUG, "Channel 1, %d = %f\n", j,
1085                    dca_downmix_coeffs[s->downmix_coef[j][1]]);
1086         }
1087         av_log(s->avctx, AV_LOG_DEBUG, "\n");
1088     }
1089     for (j = base_channel; j < s->prim_channels; j++)
1090         for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
1091             av_log(s->avctx, AV_LOG_DEBUG, "VQ index: %i\n", s->high_freq_vq[j][k]);
1092     if (!base_channel && s->lfe) {
1093         int lfe_samples = 2 * s->lfe * (4 + block_index);
1094         int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
1095
1096         av_log(s->avctx, AV_LOG_DEBUG, "LFE samples:\n");
1097         for (j = lfe_samples; j < lfe_end_sample; j++)
1098             av_log(s->avctx, AV_LOG_DEBUG, " %f", s->lfe_data[j]);
1099         av_log(s->avctx, AV_LOG_DEBUG, "\n");
1100     }
1101 #endif
1102
1103     return 0;
1104 }
1105
1106 static void qmf_32_subbands(DCAContext *s, int chans,
1107                             float samples_in[32][8], float *samples_out,
1108                             float scale)
1109 {
1110     const float *prCoeff;
1111     int i;
1112
1113     int sb_act = s->subband_activity[chans];
1114     int subindex;
1115
1116     scale *= sqrt(1 / 8.0);
1117
1118     /* Select filter */
1119     if (!s->multirate_inter)    /* Non-perfect reconstruction */
1120         prCoeff = fir_32bands_nonperfect;
1121     else                        /* Perfect reconstruction */
1122         prCoeff = fir_32bands_perfect;
1123
1124     for (i = sb_act; i < 32; i++)
1125         s->raXin[i] = 0.0;
1126
1127     /* Reconstructed channel sample index */
1128     for (subindex = 0; subindex < 8; subindex++) {
1129         /* Load in one sample from each subband and clear inactive subbands */
1130         for (i = 0; i < sb_act; i++) {
1131             unsigned sign = (i - 1) & 2;
1132             uint32_t v    = AV_RN32A(&samples_in[i][subindex]) ^ sign << 30;
1133             AV_WN32A(&s->raXin[i], v);
1134         }
1135
1136         s->synth.synth_filter_float(&s->imdct,
1137                                     s->subband_fir_hist[chans],
1138                                     &s->hist_index[chans],
1139                                     s->subband_fir_noidea[chans], prCoeff,
1140                                     samples_out, s->raXin, scale);
1141         samples_out += 32;
1142     }
1143 }
1144
1145 static void lfe_interpolation_fir(DCAContext *s, int decimation_select,
1146                                   int num_deci_sample, float *samples_in,
1147                                   float *samples_out, float scale)
1148 {
1149     /* samples_in: An array holding decimated samples.
1150      *   Samples in current subframe starts from samples_in[0],
1151      *   while samples_in[-1], samples_in[-2], ..., stores samples
1152      *   from last subframe as history.
1153      *
1154      * samples_out: An array holding interpolated samples
1155      */
1156
1157     int decifactor;
1158     const float *prCoeff;
1159     int deciindex;
1160
1161     /* Select decimation filter */
1162     if (decimation_select == 1) {
1163         decifactor = 64;
1164         prCoeff = lfe_fir_128;
1165     } else {
1166         decifactor = 32;
1167         prCoeff = lfe_fir_64;
1168     }
1169     /* Interpolation */
1170     for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1171         s->dcadsp.lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1172         samples_in++;
1173         samples_out += 2 * decifactor;
1174     }
1175 }
1176
1177 /* downmixing routines */
1178 #define MIX_REAR1(samples, s1, rs, coef)            \
1179     samples[0][i] += samples[s1][i] * coef[rs][0];  \
1180     samples[1][i] += samples[s1][i] * coef[rs][1];
1181
1182 #define MIX_REAR2(samples, s1, s2, rs, coef)                                          \
1183     samples[0][i] += samples[s1][i] * coef[rs][0] + samples[s2][i] * coef[rs + 1][0]; \
1184     samples[1][i] += samples[s1][i] * coef[rs][1] + samples[s2][i] * coef[rs + 1][1];
1185
1186 #define MIX_FRONT3(samples, coef)                                      \
1187     t = samples[c][i];                                                 \
1188     u = samples[l][i];                                                 \
1189     v = samples[r][i];                                                 \
1190     samples[0][i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0];  \
1191     samples[1][i] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1192
1193 #define DOWNMIX_TO_STEREO(op1, op2)             \
1194     for (i = 0; i < 256; i++) {                 \
1195         op1                                     \
1196         op2                                     \
1197     }
1198
1199 static void dca_downmix(float **samples, int srcfmt,
1200                         int downmix_coef[DCA_PRIM_CHANNELS_MAX][2],
1201                         const int8_t *channel_mapping)
1202 {
1203     int c, l, r, sl, sr, s;
1204     int i;
1205     float t, u, v;
1206     float coef[DCA_PRIM_CHANNELS_MAX][2];
1207
1208     for (i = 0; i < DCA_PRIM_CHANNELS_MAX; i++) {
1209         coef[i][0] = dca_downmix_coeffs[downmix_coef[i][0]];
1210         coef[i][1] = dca_downmix_coeffs[downmix_coef[i][1]];
1211     }
1212
1213     switch (srcfmt) {
1214     case DCA_MONO:
1215     case DCA_CHANNEL:
1216     case DCA_STEREO_TOTAL:
1217     case DCA_STEREO_SUMDIFF:
1218     case DCA_4F2R:
1219         av_log(NULL, AV_LOG_ERROR, "Not implemented!\n");
1220         break;
1221     case DCA_STEREO:
1222         break;
1223     case DCA_3F:
1224         c = channel_mapping[0];
1225         l = channel_mapping[1];
1226         r = channel_mapping[2];
1227         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef), );
1228         break;
1229     case DCA_2F1R:
1230         s = channel_mapping[2];
1231         DOWNMIX_TO_STEREO(MIX_REAR1(samples, s, 2, coef), );
1232         break;
1233     case DCA_3F1R:
1234         c = channel_mapping[0];
1235         l = channel_mapping[1];
1236         r = channel_mapping[2];
1237         s = channel_mapping[3];
1238         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1239                           MIX_REAR1(samples, s, 3, coef));
1240         break;
1241     case DCA_2F2R:
1242         sl = channel_mapping[2];
1243         sr = channel_mapping[3];
1244         DOWNMIX_TO_STEREO(MIX_REAR2(samples, sl, sr, 2, coef), );
1245         break;
1246     case DCA_3F2R:
1247         c  = channel_mapping[0];
1248         l  = channel_mapping[1];
1249         r  = channel_mapping[2];
1250         sl = channel_mapping[3];
1251         sr = channel_mapping[4];
1252         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1253                           MIX_REAR2(samples, sl, sr, 3, coef));
1254         break;
1255     }
1256 }
1257
1258
1259 #ifndef decode_blockcodes
1260 /* Very compact version of the block code decoder that does not use table
1261  * look-up but is slightly slower */
1262 static int decode_blockcode(int code, int levels, int *values)
1263 {
1264     int i;
1265     int offset = (levels - 1) >> 1;
1266
1267     for (i = 0; i < 4; i++) {
1268         int div = FASTDIV(code, levels);
1269         values[i] = code - offset - div * levels;
1270         code = div;
1271     }
1272
1273     return code;
1274 }
1275
1276 static int decode_blockcodes(int code1, int code2, int levels, int *values)
1277 {
1278     return decode_blockcode(code1, levels, values) |
1279            decode_blockcode(code2, levels, values + 4);
1280 }
1281 #endif
1282
1283 static const uint8_t abits_sizes[7]  = { 7, 10, 12, 13, 15, 17, 19 };
1284 static const uint8_t abits_levels[7] = { 3,  5,  7,  9, 13, 17, 25 };
1285
1286 #ifndef int8x8_fmul_int32
1287 static inline void int8x8_fmul_int32(float *dst, const int8_t *src, int scale)
1288 {
1289     float fscale = scale / 16.0;
1290     int i;
1291     for (i = 0; i < 8; i++)
1292         dst[i] = src[i] * fscale;
1293 }
1294 #endif
1295
1296 static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
1297 {
1298     int k, l;
1299     int subsubframe = s->current_subsubframe;
1300
1301     const float *quant_step_table;
1302
1303     /* FIXME */
1304     float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1305     LOCAL_ALIGNED_16(int, block, [8]);
1306
1307     /*
1308      * Audio data
1309      */
1310
1311     /* Select quantization step size table */
1312     if (s->bit_rate_index == 0x1f)
1313         quant_step_table = lossless_quant_d;
1314     else
1315         quant_step_table = lossy_quant_d;
1316
1317     for (k = base_channel; k < s->prim_channels; k++) {
1318         if (get_bits_left(&s->gb) < 0)
1319             return AVERROR_INVALIDDATA;
1320
1321         for (l = 0; l < s->vq_start_subband[k]; l++) {
1322             int m;
1323
1324             /* Select the mid-tread linear quantizer */
1325             int abits = s->bitalloc[k][l];
1326
1327             float quant_step_size = quant_step_table[abits];
1328
1329             /*
1330              * Determine quantization index code book and its type
1331              */
1332
1333             /* Select quantization index code book */
1334             int sel = s->quant_index_huffman[k][abits];
1335
1336             /*
1337              * Extract bits from the bit stream
1338              */
1339             if (!abits) {
1340                 memset(subband_samples[k][l], 0, 8 * sizeof(subband_samples[0][0][0]));
1341             } else {
1342                 /* Deal with transients */
1343                 int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l];
1344                 float rscale = quant_step_size * s->scale_factor[k][l][sfi] *
1345                                s->scalefactor_adj[k][sel];
1346
1347                 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1348                     if (abits <= 7) {
1349                         /* Block code */
1350                         int block_code1, block_code2, size, levels, err;
1351
1352                         size   = abits_sizes[abits - 1];
1353                         levels = abits_levels[abits - 1];
1354
1355                         block_code1 = get_bits(&s->gb, size);
1356                         block_code2 = get_bits(&s->gb, size);
1357                         err = decode_blockcodes(block_code1, block_code2,
1358                                                 levels, block);
1359                         if (err) {
1360                             av_log(s->avctx, AV_LOG_ERROR,
1361                                    "ERROR: block code look-up failed\n");
1362                             return AVERROR_INVALIDDATA;
1363                         }
1364                     } else {
1365                         /* no coding */
1366                         for (m = 0; m < 8; m++)
1367                             block[m] = get_sbits(&s->gb, abits - 3);
1368                     }
1369                 } else {
1370                     /* Huffman coded */
1371                     for (m = 0; m < 8; m++)
1372                         block[m] = get_bitalloc(&s->gb,
1373                                                 &dca_smpl_bitalloc[abits], sel);
1374                 }
1375
1376                 s->fmt_conv.int32_to_float_fmul_scalar(subband_samples[k][l],
1377                                                        block, rscale, 8);
1378             }
1379
1380             /*
1381              * Inverse ADPCM if in prediction mode
1382              */
1383             if (s->prediction_mode[k][l]) {
1384                 int n;
1385                 for (m = 0; m < 8; m++) {
1386                     for (n = 1; n <= 4; n++)
1387                         if (m >= n)
1388                             subband_samples[k][l][m] +=
1389                                 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1390                                  subband_samples[k][l][m - n] / 8192);
1391                         else if (s->predictor_history)
1392                             subband_samples[k][l][m] +=
1393                                 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1394                                  s->subband_samples_hist[k][l][m - n + 4] / 8192);
1395                 }
1396             }
1397         }
1398
1399         /*
1400          * Decode VQ encoded high frequencies
1401          */
1402         for (l = s->vq_start_subband[k]; l < s->subband_activity[k]; l++) {
1403             /* 1 vector -> 32 samples but we only need the 8 samples
1404              * for this subsubframe. */
1405             int hfvq = s->high_freq_vq[k][l];
1406
1407             if (!s->debug_flag & 0x01) {
1408                 av_log(s->avctx, AV_LOG_DEBUG,
1409                        "Stream with high frequencies VQ coding\n");
1410                 s->debug_flag |= 0x01;
1411             }
1412
1413             int8x8_fmul_int32(subband_samples[k][l],
1414                               &high_freq_vq[hfvq][subsubframe * 8],
1415                               s->scale_factor[k][l][0]);
1416         }
1417     }
1418
1419     /* Check for DSYNC after subsubframe */
1420     if (s->aspf || subsubframe == s->subsubframes[s->current_subframe] - 1) {
1421         if (0xFFFF == get_bits(&s->gb, 16)) {   /* 0xFFFF */
1422 #ifdef TRACE
1423             av_log(s->avctx, AV_LOG_DEBUG, "Got subframe DSYNC\n");
1424 #endif
1425         } else {
1426             av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
1427         }
1428     }
1429
1430     /* Backup predictor history for adpcm */
1431     for (k = base_channel; k < s->prim_channels; k++)
1432         for (l = 0; l < s->vq_start_subband[k]; l++)
1433             memcpy(s->subband_samples_hist[k][l],
1434                    &subband_samples[k][l][4],
1435                    4 * sizeof(subband_samples[0][0][0]));
1436
1437     return 0;
1438 }
1439
1440 static int dca_filter_channels(DCAContext *s, int block_index)
1441 {
1442     float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1443     int k;
1444
1445     /* 32 subbands QMF */
1446     for (k = 0; k < s->prim_channels; k++) {
1447 /*        static float pcm_to_double[8] = { 32768.0, 32768.0, 524288.0, 524288.0,
1448                                             0, 8388608.0, 8388608.0 };*/
1449         if (s->channel_order_tab[k] >= 0)
1450             qmf_32_subbands(s, k, subband_samples[k],
1451                             s->samples_chanptr[s->channel_order_tab[k]],
1452                             M_SQRT1_2 / 32768.0 /* pcm_to_double[s->source_pcm_res] */);
1453     }
1454
1455     /* Down mixing */
1456     if (s->avctx->request_channels == 2 && s->prim_channels > 2) {
1457         dca_downmix(s->samples_chanptr, s->amode, s->downmix_coef, s->channel_order_tab);
1458     }
1459
1460     /* Generate LFE samples for this subsubframe FIXME!!! */
1461     if (s->output & DCA_LFE) {
1462         lfe_interpolation_fir(s, s->lfe, 2 * s->lfe,
1463                               s->lfe_data + 2 * s->lfe * (block_index + 4),
1464                               s->samples_chanptr[s->lfe_index],
1465                               1.0 / (256.0 * 32768.0));
1466         /* Outputs 20bits pcm samples */
1467     }
1468
1469     return 0;
1470 }
1471
1472
1473 static int dca_subframe_footer(DCAContext *s, int base_channel)
1474 {
1475     int aux_data_count = 0, i;
1476
1477     /*
1478      * Unpack optional information
1479      */
1480
1481     /* presumably optional information only appears in the core? */
1482     if (!base_channel) {
1483         if (s->timestamp)
1484             skip_bits_long(&s->gb, 32);
1485
1486         if (s->aux_data)
1487             aux_data_count = get_bits(&s->gb, 6);
1488
1489         for (i = 0; i < aux_data_count; i++)
1490             get_bits(&s->gb, 8);
1491
1492         if (s->crc_present && (s->downmix || s->dynrange))
1493             get_bits(&s->gb, 16);
1494     }
1495
1496     return 0;
1497 }
1498
1499 /**
1500  * Decode a dca frame block
1501  *
1502  * @param s     pointer to the DCAContext
1503  */
1504
1505 static int dca_decode_block(DCAContext *s, int base_channel, int block_index)
1506 {
1507     int ret;
1508
1509     /* Sanity check */
1510     if (s->current_subframe >= s->subframes) {
1511         av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1512                s->current_subframe, s->subframes);
1513         return AVERROR_INVALIDDATA;
1514     }
1515
1516     if (!s->current_subsubframe) {
1517 #ifdef TRACE
1518         av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
1519 #endif
1520         /* Read subframe header */
1521         if ((ret = dca_subframe_header(s, base_channel, block_index)))
1522             return ret;
1523     }
1524
1525     /* Read subsubframe */
1526 #ifdef TRACE
1527     av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
1528 #endif
1529     if ((ret = dca_subsubframe(s, base_channel, block_index)))
1530         return ret;
1531
1532     /* Update state */
1533     s->current_subsubframe++;
1534     if (s->current_subsubframe >= s->subsubframes[s->current_subframe]) {
1535         s->current_subsubframe = 0;
1536         s->current_subframe++;
1537     }
1538     if (s->current_subframe >= s->subframes) {
1539 #ifdef TRACE
1540         av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
1541 #endif
1542         /* Read subframe footer */
1543         if ((ret = dca_subframe_footer(s, base_channel)))
1544             return ret;
1545     }
1546
1547     return 0;
1548 }
1549
1550 /**
1551  * Return the number of channels in an ExSS speaker mask (HD)
1552  */
1553 static int dca_exss_mask2count(int mask)
1554 {
1555     /* count bits that mean speaker pairs twice */
1556     return av_popcount(mask) +
1557            av_popcount(mask & (DCA_EXSS_CENTER_LEFT_RIGHT      |
1558                                DCA_EXSS_FRONT_LEFT_RIGHT       |
1559                                DCA_EXSS_FRONT_HIGH_LEFT_RIGHT  |
1560                                DCA_EXSS_WIDE_LEFT_RIGHT        |
1561                                DCA_EXSS_SIDE_LEFT_RIGHT        |
1562                                DCA_EXSS_SIDE_HIGH_LEFT_RIGHT   |
1563                                DCA_EXSS_SIDE_REAR_LEFT_RIGHT   |
1564                                DCA_EXSS_REAR_LEFT_RIGHT        |
1565                                DCA_EXSS_REAR_HIGH_LEFT_RIGHT));
1566 }
1567
1568 /**
1569  * Skip mixing coefficients of a single mix out configuration (HD)
1570  */
1571 static void dca_exss_skip_mix_coeffs(GetBitContext *gb, int channels, int out_ch)
1572 {
1573     int i;
1574
1575     for (i = 0; i < channels; i++) {
1576         int mix_map_mask = get_bits(gb, out_ch);
1577         int num_coeffs = av_popcount(mix_map_mask);
1578         skip_bits_long(gb, num_coeffs * 6);
1579     }
1580 }
1581
1582 /**
1583  * Parse extension substream asset header (HD)
1584  */
1585 static int dca_exss_parse_asset_header(DCAContext *s)
1586 {
1587     int header_pos = get_bits_count(&s->gb);
1588     int header_size;
1589     int channels = 0;
1590     int embedded_stereo = 0;
1591     int embedded_6ch    = 0;
1592     int drc_code_present;
1593     int av_uninit(extensions_mask);
1594     int i, j;
1595
1596     if (get_bits_left(&s->gb) < 16)
1597         return -1;
1598
1599     /* We will parse just enough to get to the extensions bitmask with which
1600      * we can set the profile value. */
1601
1602     header_size = get_bits(&s->gb, 9) + 1;
1603     skip_bits(&s->gb, 3); // asset index
1604
1605     if (s->static_fields) {
1606         if (get_bits1(&s->gb))
1607             skip_bits(&s->gb, 4); // asset type descriptor
1608         if (get_bits1(&s->gb))
1609             skip_bits_long(&s->gb, 24); // language descriptor
1610
1611         if (get_bits1(&s->gb)) {
1612             /* How can one fit 1024 bytes of text here if the maximum value
1613              * for the asset header size field above was 512 bytes? */
1614             int text_length = get_bits(&s->gb, 10) + 1;
1615             if (get_bits_left(&s->gb) < text_length * 8)
1616                 return -1;
1617             skip_bits_long(&s->gb, text_length * 8); // info text
1618         }
1619
1620         skip_bits(&s->gb, 5); // bit resolution - 1
1621         skip_bits(&s->gb, 4); // max sample rate code
1622         channels = get_bits(&s->gb, 8) + 1;
1623
1624         if (get_bits1(&s->gb)) { // 1-to-1 channels to speakers
1625             int spkr_remap_sets;
1626             int spkr_mask_size = 16;
1627             int num_spkrs[7];
1628
1629             if (channels > 2)
1630                 embedded_stereo = get_bits1(&s->gb);
1631             if (channels > 6)
1632                 embedded_6ch = get_bits1(&s->gb);
1633
1634             if (get_bits1(&s->gb)) {
1635                 spkr_mask_size = (get_bits(&s->gb, 2) + 1) << 2;
1636                 skip_bits(&s->gb, spkr_mask_size); // spkr activity mask
1637             }
1638
1639             spkr_remap_sets = get_bits(&s->gb, 3);
1640
1641             for (i = 0; i < spkr_remap_sets; i++) {
1642                 /* std layout mask for each remap set */
1643                 num_spkrs[i] = dca_exss_mask2count(get_bits(&s->gb, spkr_mask_size));
1644             }
1645
1646             for (i = 0; i < spkr_remap_sets; i++) {
1647                 int num_dec_ch_remaps = get_bits(&s->gb, 5) + 1;
1648                 if (get_bits_left(&s->gb) < 0)
1649                     return -1;
1650
1651                 for (j = 0; j < num_spkrs[i]; j++) {
1652                     int remap_dec_ch_mask = get_bits_long(&s->gb, num_dec_ch_remaps);
1653                     int num_dec_ch = av_popcount(remap_dec_ch_mask);
1654                     skip_bits_long(&s->gb, num_dec_ch * 5); // remap codes
1655                 }
1656             }
1657
1658         } else {
1659             skip_bits(&s->gb, 3); // representation type
1660         }
1661     }
1662
1663     drc_code_present = get_bits1(&s->gb);
1664     if (drc_code_present)
1665         get_bits(&s->gb, 8); // drc code
1666
1667     if (get_bits1(&s->gb))
1668         skip_bits(&s->gb, 5); // dialog normalization code
1669
1670     if (drc_code_present && embedded_stereo)
1671         get_bits(&s->gb, 8); // drc stereo code
1672
1673     if (s->mix_metadata && get_bits1(&s->gb)) {
1674         skip_bits(&s->gb, 1); // external mix
1675         skip_bits(&s->gb, 6); // post mix gain code
1676
1677         if (get_bits(&s->gb, 2) != 3) // mixer drc code
1678             skip_bits(&s->gb, 3); // drc limit
1679         else
1680             skip_bits(&s->gb, 8); // custom drc code
1681
1682         if (get_bits1(&s->gb)) // channel specific scaling
1683             for (i = 0; i < s->num_mix_configs; i++)
1684                 skip_bits_long(&s->gb, s->mix_config_num_ch[i] * 6); // scale codes
1685         else
1686             skip_bits_long(&s->gb, s->num_mix_configs * 6); // scale codes
1687
1688         for (i = 0; i < s->num_mix_configs; i++) {
1689             if (get_bits_left(&s->gb) < 0)
1690                 return -1;
1691             dca_exss_skip_mix_coeffs(&s->gb, channels, s->mix_config_num_ch[i]);
1692             if (embedded_6ch)
1693                 dca_exss_skip_mix_coeffs(&s->gb, 6, s->mix_config_num_ch[i]);
1694             if (embedded_stereo)
1695                 dca_exss_skip_mix_coeffs(&s->gb, 2, s->mix_config_num_ch[i]);
1696         }
1697     }
1698
1699     switch (get_bits(&s->gb, 2)) {
1700     case 0: extensions_mask = get_bits(&s->gb, 12); break;
1701     case 1: extensions_mask = DCA_EXT_EXSS_XLL;     break;
1702     case 2: extensions_mask = DCA_EXT_EXSS_LBR;     break;
1703     case 3: extensions_mask = 0; /* aux coding */   break;
1704     }
1705
1706     /* not parsed further, we were only interested in the extensions mask */
1707
1708     if (get_bits_left(&s->gb) < 0)
1709         return -1;
1710
1711     if (get_bits_count(&s->gb) - header_pos > header_size * 8) {
1712         av_log(s->avctx, AV_LOG_WARNING, "Asset header size mismatch.\n");
1713         return -1;
1714     }
1715     skip_bits_long(&s->gb, header_pos + header_size * 8 - get_bits_count(&s->gb));
1716
1717     if (extensions_mask & DCA_EXT_EXSS_XLL)
1718         s->profile = FF_PROFILE_DTS_HD_MA;
1719     else if (extensions_mask & (DCA_EXT_EXSS_XBR | DCA_EXT_EXSS_X96 |
1720                                 DCA_EXT_EXSS_XXCH))
1721         s->profile = FF_PROFILE_DTS_HD_HRA;
1722
1723     if (!(extensions_mask & DCA_EXT_CORE))
1724         av_log(s->avctx, AV_LOG_WARNING, "DTS core detection mismatch.\n");
1725     if ((extensions_mask & DCA_CORE_EXTS) != s->core_ext_mask)
1726         av_log(s->avctx, AV_LOG_WARNING,
1727                "DTS extensions detection mismatch (%d, %d)\n",
1728                extensions_mask & DCA_CORE_EXTS, s->core_ext_mask);
1729
1730     return 0;
1731 }
1732
1733 static int dca_xbr_parse_frame(DCAContext *s)
1734 {
1735     int scale_table_high[DCA_CHSET_CHANS_MAX][DCA_SUBBANDS][2];
1736     int active_bands[DCA_CHSETS_MAX][DCA_CHSET_CHANS_MAX];
1737     int abits_high[DCA_CHSET_CHANS_MAX][DCA_SUBBANDS];
1738     int anctemp[DCA_CHSET_CHANS_MAX];
1739     int chset_fsize[DCA_CHSETS_MAX];
1740     int n_xbr_ch[DCA_CHSETS_MAX];
1741     int hdr_size, num_chsets, xbr_tmode, hdr_pos;
1742     int i, j, k, l, chset, chan_base;
1743
1744     av_log(s->avctx, AV_LOG_DEBUG, "DTS-XBR: decoding XBR extension\n");
1745
1746     /* get bit position of sync header */
1747     hdr_pos = get_bits_count(&s->gb) - 32;
1748
1749     hdr_size = get_bits(&s->gb, 6) + 1;
1750     num_chsets = get_bits(&s->gb, 2) + 1;
1751
1752     for(i = 0; i < num_chsets; i++)
1753         chset_fsize[i] = get_bits(&s->gb, 14) + 1;
1754
1755     xbr_tmode = get_bits1(&s->gb);
1756
1757     for(i = 0; i < num_chsets; i++) {
1758         n_xbr_ch[i] = get_bits(&s->gb, 3) + 1;
1759         k = get_bits(&s->gb, 2) + 5;
1760         for(j = 0; j < n_xbr_ch[i]; j++)
1761             active_bands[i][j] = get_bits(&s->gb, k) + 1;
1762     }
1763
1764     /* skip to the end of the header */
1765     i = get_bits_count(&s->gb);
1766     if(hdr_pos + hdr_size * 8 > i)
1767         skip_bits_long(&s->gb, hdr_pos + hdr_size * 8 - i);
1768
1769     /* loop over the channel data sets */
1770     /* only decode as many channels as we've decoded base data for */
1771     for(chset = 0, chan_base = 0;
1772         chset < num_chsets && chan_base + n_xbr_ch[chset] <= s->prim_channels;
1773         chan_base += n_xbr_ch[chset++]) {
1774         int start_posn = get_bits_count(&s->gb);
1775         int subsubframe = 0;
1776         int subframe = 0;
1777
1778         /* loop over subframes */
1779         for (k = 0; k < (s->sample_blocks / 8); k++) {
1780             /* parse header if we're on first subsubframe of a block */
1781             if(subsubframe == 0) {
1782                 /* Parse subframe header */
1783                 for(i = 0; i < n_xbr_ch[chset]; i++) {
1784                     anctemp[i] = get_bits(&s->gb, 2) + 2;
1785                 }
1786
1787                 for(i = 0; i < n_xbr_ch[chset]; i++) {
1788                     get_array(&s->gb, abits_high[i], active_bands[chset][i], anctemp[i]);
1789                 }
1790
1791                 for(i = 0; i < n_xbr_ch[chset]; i++) {
1792                     anctemp[i] = get_bits(&s->gb, 3);
1793                     if(anctemp[i] < 1) {
1794                         av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: SYNC ERROR\n");
1795                         return AVERROR_INVALIDDATA;
1796                     }
1797                 }
1798
1799                 /* generate scale factors */
1800                 for(i = 0; i < n_xbr_ch[chset]; i++) {
1801                     const uint32_t *scale_table;
1802                     int nbits;
1803
1804                     if (s->scalefactor_huffman[chan_base+i] == 6) {
1805                         scale_table = scale_factor_quant7;
1806                     } else {
1807                         scale_table = scale_factor_quant6;
1808                     }
1809
1810                     nbits = anctemp[i];
1811
1812                     for(j = 0; j < active_bands[chset][i]; j++) {
1813                         if(abits_high[i][j] > 0) {
1814                             scale_table_high[i][j][0] =
1815                                 scale_table[get_bits(&s->gb, nbits)];
1816
1817                             if(xbr_tmode && s->transition_mode[i][j]) {
1818                                 scale_table_high[i][j][1] =
1819                                     scale_table[get_bits(&s->gb, nbits)];
1820                             }
1821                         }
1822                     }
1823                 }
1824             }
1825
1826             /* decode audio array for this block */
1827             for(i = 0; i < n_xbr_ch[chset]; i++) {
1828                 for(j = 0; j < active_bands[chset][i]; j++) {
1829                     const int xbr_abits = abits_high[i][j];
1830                     const float quant_step_size = lossless_quant_d[xbr_abits];
1831                     const int sfi = xbr_tmode && s->transition_mode[i][j] && subsubframe >= s->transition_mode[i][j];
1832                     const float rscale = quant_step_size * scale_table_high[i][j][sfi];
1833                     float *subband_samples = s->subband_samples[k][chan_base+i][j];
1834                     int block[8];
1835
1836                     if(xbr_abits <= 0)
1837                         continue;
1838
1839                     if(xbr_abits > 7) {
1840                         get_array(&s->gb, block, 8, xbr_abits - 3);
1841                     } else {
1842                         int block_code1, block_code2, size, levels, err;
1843
1844                         size   = abits_sizes[xbr_abits - 1];
1845                         levels = abits_levels[xbr_abits - 1];
1846
1847                         block_code1 = get_bits(&s->gb, size);
1848                         block_code2 = get_bits(&s->gb, size);
1849                         err = decode_blockcodes(block_code1, block_code2,
1850                                                 levels, block);
1851                         if (err) {
1852                             av_log(s->avctx, AV_LOG_ERROR,
1853                                    "ERROR: DTS-XBR: block code look-up failed\n");
1854                             return AVERROR_INVALIDDATA;
1855                         }
1856                     }
1857
1858                     /* scale & sum into subband */
1859                     for(l = 0; l < 8; l++)
1860                         subband_samples[l] += (float)block[l] * rscale;
1861                 }
1862             }
1863
1864             /* check DSYNC marker */
1865             if(s->aspf || subsubframe == s->subsubframes[subframe] - 1) {
1866                 if(get_bits(&s->gb, 16) != 0xffff) {
1867                     av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: Didn't get subframe DSYNC\n");
1868                     return AVERROR_INVALIDDATA;
1869                 }
1870             }
1871
1872             /* advance sub-sub-frame index */
1873             if(++subsubframe >= s->subsubframes[subframe]) {
1874                 subsubframe = 0;
1875                 subframe++;
1876             }
1877         }
1878
1879         /* skip to next channel set */
1880         i = get_bits_count(&s->gb);
1881         if(start_posn + chset_fsize[chset] * 8 != i) {
1882             j = start_posn + chset_fsize[chset] * 8 - i;
1883             if(j < 0 || j >= 8)
1884                 av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: end of channel set,"
1885                        " skipping further than expected (%d bits)\n", j);
1886             skip_bits_long(&s->gb, j);
1887         }
1888     }
1889
1890     return 0;
1891 }
1892
1893 /* parse initial header for XXCH and dump details */
1894 static int dca_xxch_decode_frame(DCAContext *s)
1895 {
1896     int hdr_size, spkmsk_bits, num_chsets, core_spk, hdr_pos;
1897     int i, chset, base_channel, chstart, fsize[8];
1898
1899     /* assume header word has already been parsed */
1900     hdr_pos     = get_bits_count(&s->gb) - 32;
1901     hdr_size    = get_bits(&s->gb, 6) + 1;
1902   /*chhdr_crc   =*/ skip_bits1(&s->gb);
1903     spkmsk_bits = get_bits(&s->gb, 5) + 1;
1904     num_chsets  = get_bits(&s->gb, 2) + 1;
1905
1906     for (i = 0; i < num_chsets; i++)
1907         fsize[i] = get_bits(&s->gb, 14) + 1;
1908
1909     core_spk               = get_bits(&s->gb, spkmsk_bits);
1910     s->xxch_core_spkmask   = core_spk;
1911     s->xxch_nbits_spk_mask = spkmsk_bits;
1912     s->xxch_dmix_embedded  = 0;
1913
1914     /* skip to the end of the header */
1915     i = get_bits_count(&s->gb);
1916     if (hdr_pos + hdr_size * 8 > i)
1917         skip_bits_long(&s->gb, hdr_pos + hdr_size * 8 - i);
1918
1919     for (chset = 0; chset < num_chsets; chset++) {
1920         chstart       = get_bits_count(&s->gb);
1921         base_channel  = s->prim_channels;
1922         s->xxch_chset = chset;
1923
1924         /* XXCH and Core headers differ, see 6.4.2 "XXCH Channel Set Header" vs.
1925            5.3.2 "Primary Audio Coding Header", DTS Spec 1.3.1 */
1926         dca_parse_audio_coding_header(s, base_channel, 1);
1927
1928         /* decode channel data */
1929         for (i = 0; i < (s->sample_blocks / 8); i++) {
1930             if (dca_decode_block(s, base_channel, i)) {
1931                 av_log(s->avctx, AV_LOG_ERROR,
1932                        "Error decoding DTS-XXCH extension\n");
1933                 continue;
1934             }
1935         }
1936
1937         /* skip to end of this section */
1938         i = get_bits_count(&s->gb);
1939         if (chstart + fsize[chset] * 8 > i)
1940             skip_bits_long(&s->gb, chstart + fsize[chset] * 8 - i);
1941     }
1942     s->xxch_chset = num_chsets;
1943
1944     return 0;
1945 }
1946
1947 /**
1948  * Parse extension substream header (HD)
1949  */
1950 static void dca_exss_parse_header(DCAContext *s)
1951 {
1952     int asset_size[8];
1953     int ss_index;
1954     int blownup;
1955     int num_audiop = 1;
1956     int num_assets = 1;
1957     int active_ss_mask[8];
1958     int i, j;
1959     int start_posn;
1960     int hdrsize;
1961     uint32_t mkr;
1962
1963     if (get_bits_left(&s->gb) < 52)
1964         return;
1965
1966     start_posn = get_bits_count(&s->gb) - 32;
1967
1968     skip_bits(&s->gb, 8); // user data
1969     ss_index = get_bits(&s->gb, 2);
1970
1971     blownup = get_bits1(&s->gb);
1972     hdrsize = get_bits(&s->gb,  8 + 4 * blownup) + 1; // header_size
1973     skip_bits(&s->gb, 16 + 4 * blownup); // hd_size
1974
1975     s->static_fields = get_bits1(&s->gb);
1976     if (s->static_fields) {
1977         skip_bits(&s->gb, 2); // reference clock code
1978         skip_bits(&s->gb, 3); // frame duration code
1979
1980         if (get_bits1(&s->gb))
1981             skip_bits_long(&s->gb, 36); // timestamp
1982
1983         /* a single stream can contain multiple audio assets that can be
1984          * combined to form multiple audio presentations */
1985
1986         num_audiop = get_bits(&s->gb, 3) + 1;
1987         if (num_audiop > 1) {
1988             av_log_ask_for_sample(s->avctx, "Multiple DTS-HD audio presentations.");
1989             /* ignore such streams for now */
1990             return;
1991         }
1992
1993         num_assets = get_bits(&s->gb, 3) + 1;
1994         if (num_assets > 1) {
1995             av_log_ask_for_sample(s->avctx, "Multiple DTS-HD audio assets.");
1996             /* ignore such streams for now */
1997             return;
1998         }
1999
2000         for (i = 0; i < num_audiop; i++)
2001             active_ss_mask[i] = get_bits(&s->gb, ss_index + 1);
2002
2003         for (i = 0; i < num_audiop; i++)
2004             for (j = 0; j <= ss_index; j++)
2005                 if (active_ss_mask[i] & (1 << j))
2006                     skip_bits(&s->gb, 8); // active asset mask
2007
2008         s->mix_metadata = get_bits1(&s->gb);
2009         if (s->mix_metadata) {
2010             int mix_out_mask_size;
2011
2012             skip_bits(&s->gb, 2); // adjustment level
2013             mix_out_mask_size  = (get_bits(&s->gb, 2) + 1) << 2;
2014             s->num_mix_configs =  get_bits(&s->gb, 2) + 1;
2015
2016             for (i = 0; i < s->num_mix_configs; i++) {
2017                 int mix_out_mask        = get_bits(&s->gb, mix_out_mask_size);
2018                 s->mix_config_num_ch[i] = dca_exss_mask2count(mix_out_mask);
2019             }
2020         }
2021     }
2022
2023     for (i = 0; i < num_assets; i++)
2024         asset_size[i] = get_bits_long(&s->gb, 16 + 4 * blownup);
2025
2026     for (i = 0; i < num_assets; i++) {
2027         if (dca_exss_parse_asset_header(s))
2028             return;
2029     }
2030
2031     /* not parsed further, we were only interested in the extensions mask
2032      * from the asset header */
2033
2034     if (num_assets > 0) {
2035         j = get_bits_count(&s->gb);
2036         if (start_posn + hdrsize * 8 > j)
2037             skip_bits_long(&s->gb, start_posn + hdrsize * 8 - j);
2038
2039         for (i = 0; i < num_assets; i++) {
2040             start_posn = get_bits_count(&s->gb);
2041             mkr        = get_bits_long(&s->gb, 32);
2042
2043             /* parse extensions that we know about */
2044             if (mkr == 0x655e315e) {
2045                 dca_xbr_parse_frame(s);
2046             } else if (mkr == 0x47004a03) {
2047                 dca_xxch_decode_frame(s);
2048                 s->core_ext_mask |= DCA_EXT_XXCH; /* xxx use for chan reordering */
2049             } else {
2050                 av_log(s->avctx, AV_LOG_DEBUG,
2051                        "DTS-ExSS: unknown marker = 0x%08x\n", mkr);
2052             }
2053
2054             /* skip to end of block */
2055             j = get_bits_count(&s->gb);
2056             if (start_posn + asset_size[i] * 8 > j)
2057                 skip_bits_long(&s->gb, start_posn + asset_size[i] * 8 - j);
2058         }
2059     }
2060 }
2061
2062 /**
2063  * Main frame decoding function
2064  * FIXME add arguments
2065  */
2066 static int dca_decode_frame(AVCodecContext *avctx, void *data,
2067                             int *got_frame_ptr, AVPacket *avpkt)
2068 {
2069     const uint8_t *buf = avpkt->data;
2070     int buf_size = avpkt->size;
2071     int channel_mask;
2072     int channel_layout;
2073     int lfe_samples;
2074     int num_core_channels = 0;
2075     int i, ret;
2076     float **samples_flt;
2077     float *src_chan;
2078     float *dst_chan;
2079     DCAContext *s = avctx->priv_data;
2080     int core_ss_end;
2081     int channels, full_channels;
2082     float scale;
2083     int achan;
2084     int chset;
2085     int mask;
2086     int lavc;
2087     int posn;
2088     int j, k;
2089     int endch;
2090
2091     s->xch_present = 0;
2092
2093     s->dca_buffer_size = ff_dca_convert_bitstream(buf, buf_size, s->dca_buffer,
2094                                                   DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
2095     if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
2096         av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
2097         return AVERROR_INVALIDDATA;
2098     }
2099
2100     init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
2101     if ((ret = dca_parse_frame_header(s)) < 0) {
2102         //seems like the frame is corrupt, try with the next one
2103         return ret;
2104     }
2105     //set AVCodec values with parsed data
2106     avctx->sample_rate = s->sample_rate;
2107     avctx->bit_rate    = s->bit_rate;
2108
2109     s->profile = FF_PROFILE_DTS;
2110
2111     for (i = 0; i < (s->sample_blocks / 8); i++) {
2112         if ((ret = dca_decode_block(s, 0, i))) {
2113             av_log(avctx, AV_LOG_ERROR, "error decoding block\n");
2114             return ret;
2115         }
2116     }
2117
2118     /* record number of core channels incase less than max channels are requested */
2119     num_core_channels = s->prim_channels;
2120
2121     if (s->ext_coding)
2122         s->core_ext_mask = dca_ext_audio_descr_mask[s->ext_descr];
2123     else
2124         s->core_ext_mask = 0;
2125
2126     core_ss_end = FFMIN(s->frame_size, s->dca_buffer_size) * 8;
2127
2128     /* only scan for extensions if ext_descr was unknown or indicated a
2129      * supported XCh extension */
2130     if (s->core_ext_mask < 0 || s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH)) {
2131
2132         /* if ext_descr was unknown, clear s->core_ext_mask so that the
2133          * extensions scan can fill it up */
2134         s->core_ext_mask = FFMAX(s->core_ext_mask, 0);
2135
2136         /* extensions start at 32-bit boundaries into bitstream */
2137         skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
2138
2139         while (core_ss_end - get_bits_count(&s->gb) >= 32) {
2140             uint32_t bits = get_bits_long(&s->gb, 32);
2141
2142             switch (bits) {
2143             case 0x5a5a5a5a: {
2144                 int ext_amode, xch_fsize;
2145
2146                 s->xch_base_channel = s->prim_channels;
2147
2148                 /* validate sync word using XCHFSIZE field */
2149                 xch_fsize = show_bits(&s->gb, 10);
2150                 if ((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) &&
2151                     (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1))
2152                     continue;
2153
2154                 /* skip length-to-end-of-frame field for the moment */
2155                 skip_bits(&s->gb, 10);
2156
2157                 s->core_ext_mask |= DCA_EXT_XCH;
2158
2159                 /* extension amode(number of channels in extension) should be 1 */
2160                 /* AFAIK XCh is not used for more channels */
2161                 if ((ext_amode = get_bits(&s->gb, 4)) != 1) {
2162                     av_log(avctx, AV_LOG_ERROR, "XCh extension amode %d not"
2163                            " supported!\n", ext_amode);
2164                     continue;
2165                 }
2166
2167                 if (s->xch_base_channel < 2) {
2168                     av_log_ask_for_sample(avctx, "XCh with fewer than 2 base channels is not supported\n");
2169                     continue;
2170                 }
2171
2172                 /* much like core primary audio coding header */
2173                 dca_parse_audio_coding_header(s, s->xch_base_channel, 0);
2174
2175                 for (i = 0; i < (s->sample_blocks / 8); i++)
2176                     if ((ret = dca_decode_block(s, s->xch_base_channel, i))) {
2177                         av_log(avctx, AV_LOG_ERROR, "error decoding XCh extension\n");
2178                         continue;
2179                     }
2180
2181                 s->xch_present = 1;
2182                 break;
2183             }
2184             case 0x47004a03:
2185                 /* XXCh: extended channels */
2186                 /* usually found either in core or HD part in DTS-HD HRA streams,
2187                  * but not in DTS-ES which contains XCh extensions instead */
2188                 s->core_ext_mask |= DCA_EXT_XXCH;
2189                 dca_xxch_decode_frame(s);
2190                 break;
2191
2192             case 0x1d95f262: {
2193                 int fsize96 = show_bits(&s->gb, 12) + 1;
2194                 if (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + fsize96)
2195                     continue;
2196
2197                 av_log(avctx, AV_LOG_DEBUG, "X96 extension found at %d bits\n",
2198                        get_bits_count(&s->gb));
2199                 skip_bits(&s->gb, 12);
2200                 av_log(avctx, AV_LOG_DEBUG, "FSIZE96 = %d bytes\n", fsize96);
2201                 av_log(avctx, AV_LOG_DEBUG, "REVNO = %d\n", get_bits(&s->gb, 4));
2202
2203                 s->core_ext_mask |= DCA_EXT_X96;
2204                 break;
2205             }
2206             }
2207
2208             skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
2209         }
2210     } else {
2211         /* no supported extensions, skip the rest of the core substream */
2212         skip_bits_long(&s->gb, core_ss_end - get_bits_count(&s->gb));
2213     }
2214
2215     if (s->core_ext_mask & DCA_EXT_X96)
2216         s->profile = FF_PROFILE_DTS_96_24;
2217     else if (s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH))
2218         s->profile = FF_PROFILE_DTS_ES;
2219
2220     /* check for ExSS (HD part) */
2221     if (s->dca_buffer_size - s->frame_size > 32 &&
2222         get_bits_long(&s->gb, 32) == DCA_HD_MARKER)
2223         dca_exss_parse_header(s);
2224
2225     avctx->profile = s->profile;
2226
2227     full_channels = channels = s->prim_channels + !!s->lfe;
2228
2229     /* If we have XXCH then the channel layout is managed differently */
2230     /* note that XLL will also have another way to do things */
2231     if (!(s->core_ext_mask & DCA_EXT_XXCH)
2232         || (s->core_ext_mask & DCA_EXT_XXCH && avctx->request_channels > 0
2233             && avctx->request_channels
2234             < num_core_channels + !!s->lfe + s->xxch_chset_nch[0]))
2235     { /* xxx should also do MA extensions */
2236         if (s->amode < 16) {
2237             avctx->channel_layout = dca_core_channel_layout[s->amode];
2238
2239             if (s->xch_present && (!avctx->request_channels ||
2240                                    avctx->request_channels
2241                                    > num_core_channels + !!s->lfe)) {
2242                 avctx->channel_layout |= AV_CH_BACK_CENTER;
2243                 if (s->lfe) {
2244                     avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
2245                     s->channel_order_tab = dca_channel_reorder_lfe_xch[s->amode];
2246                 } else {
2247                     s->channel_order_tab = dca_channel_reorder_nolfe_xch[s->amode];
2248                 }
2249             } else {
2250                 channels = num_core_channels + !!s->lfe;
2251                 s->xch_present = 0; /* disable further xch processing */
2252                 if (s->lfe) {
2253                     avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
2254                     s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
2255                 } else
2256                     s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
2257             }
2258
2259             if (channels > !!s->lfe &&
2260                 s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
2261                 return AVERROR_INVALIDDATA;
2262
2263             if (av_get_channel_layout_nb_channels(avctx->channel_layout) != channels) {
2264                 av_log(avctx, AV_LOG_ERROR, "Number of channels %d mismatches layout %d\n", channels, av_get_channel_layout_nb_channels(avctx->channel_layout));
2265                 return AVERROR_INVALIDDATA;
2266             }
2267
2268             if (avctx->request_channels == 2 && s->prim_channels > 2) {
2269                 channels = 2;
2270                 s->output = DCA_STEREO;
2271                 avctx->channel_layout = AV_CH_LAYOUT_STEREO;
2272             }
2273             else if (avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE) {
2274                 static const int8_t dca_channel_order_native[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
2275                 s->channel_order_tab = dca_channel_order_native;
2276             }
2277             s->lfe_index = dca_lfe_index[s->amode];
2278         } else {
2279             av_log(avctx, AV_LOG_ERROR,
2280                    "Non standard configuration %d !\n", s->amode);
2281             return AVERROR_INVALIDDATA;
2282         }
2283
2284         s->xxch_dmix_embedded = 0;
2285     } else {
2286         /* we only get here if an XXCH channel set can be added to the mix */
2287         channel_mask = s->xxch_core_spkmask;
2288
2289         if (avctx->request_channels > 0
2290             && avctx->request_channels < s->prim_channels) {
2291             channels = num_core_channels + !!s->lfe;
2292             for (i = 0; i < s->xxch_chset && channels + s->xxch_chset_nch[i]
2293                                               <= avctx->request_channels; i++) {
2294                 channels += s->xxch_chset_nch[i];
2295                 channel_mask |= s->xxch_spk_masks[i];
2296             }
2297         } else {
2298             channels = s->prim_channels + !!s->lfe;
2299             for (i = 0; i < s->xxch_chset; i++) {
2300                 channel_mask |= s->xxch_spk_masks[i];
2301             }
2302         }
2303
2304         /* Given the DTS spec'ed channel mask, generate an avcodec version */
2305         channel_layout = 0;
2306         for (i = 0; i < s->xxch_nbits_spk_mask; ++i) {
2307             if (channel_mask & (1 << i)) {
2308                 channel_layout |= map_xxch_to_native[i];
2309             }
2310         }
2311
2312         /* make sure that we have managed to get equivelant dts/avcodec channel
2313          * masks in some sense -- unfortunately some channels could overlap */
2314         if (av_popcount(channel_mask) != av_popcount(channel_layout)) {
2315             av_log(avctx, AV_LOG_DEBUG,
2316                    "DTS-XXCH: Inconsistant avcodec/dts channel layouts\n");
2317             return AVERROR_INVALIDDATA;
2318         }
2319
2320         avctx->channel_layout = channel_layout;
2321
2322         if (!(avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE)) {
2323             /* Estimate DTS --> avcodec ordering table */
2324             for (chset = -1, j = 0; chset < s->xxch_chset; ++chset) {
2325                 mask = chset >= 0 ? s->xxch_spk_masks[chset]
2326                                   : s->xxch_core_spkmask;
2327                 for (i = 0; i < s->xxch_nbits_spk_mask; i++) {
2328                     if (mask & ~(DCA_XXCH_LFE1 | DCA_XXCH_LFE2) & (1 << i)) {
2329                         lavc = map_xxch_to_native[i];
2330                         posn = av_popcount(channel_layout & (lavc - 1));
2331                         s->xxch_order_tab[j++] = posn;
2332                     }
2333                 }
2334             }
2335
2336             s->lfe_index = av_popcount(channel_layout & (AV_CH_LOW_FREQUENCY-1));
2337         } else { /* native ordering */
2338             for (i = 0; i < channels; i++)
2339                 s->xxch_order_tab[i] = i;
2340
2341             s->lfe_index = channels - 1;
2342         }
2343
2344         s->channel_order_tab = s->xxch_order_tab;
2345     }
2346
2347     if (avctx->channels != channels) {
2348         if (avctx->channels)
2349             av_log(avctx, AV_LOG_INFO, "Number of channels changed in DCA decoder (%d -> %d)\n", avctx->channels, channels);
2350         avctx->channels = channels;
2351     }
2352
2353     /* get output buffer */
2354     s->frame.nb_samples = 256 * (s->sample_blocks / 8);
2355     if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) {
2356         av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
2357         return ret;
2358     }
2359     samples_flt = (float  **) s->frame.extended_data;
2360
2361     /* allocate buffer for extra channels if downmixing */
2362     if (avctx->channels < full_channels) {
2363         ret = av_samples_get_buffer_size(NULL, full_channels - channels,
2364                                          s->frame.nb_samples,
2365                                          avctx->sample_fmt, 0);
2366         if (ret < 0)
2367             return ret;
2368
2369         av_fast_malloc(&s->extra_channels_buffer,
2370                        &s->extra_channels_buffer_size, ret);
2371         if (!s->extra_channels_buffer)
2372             return AVERROR(ENOMEM);
2373
2374         ret = av_samples_fill_arrays((uint8_t **)s->extra_channels, NULL,
2375                                      s->extra_channels_buffer,
2376                                      full_channels - channels,
2377                                      s->frame.nb_samples, avctx->sample_fmt, 0);
2378         if (ret < 0)
2379             return ret;
2380     }
2381
2382     /* filter to get final output */
2383     for (i = 0; i < (s->sample_blocks / 8); i++) {
2384         int ch;
2385
2386         for (ch = 0; ch < channels; ch++)
2387             s->samples_chanptr[ch] = samples_flt[ch] + i * 256;
2388         for (; ch < full_channels; ch++)
2389             s->samples_chanptr[ch] = s->extra_channels[ch - channels] + i * 256;
2390
2391         dca_filter_channels(s, i);
2392
2393         /* If this was marked as a DTS-ES stream we need to subtract back- */
2394         /* channel from SL & SR to remove matrixed back-channel signal */
2395         if ((s->source_pcm_res & 1) && s->xch_present) {
2396             float *back_chan = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel]];
2397             float *lt_chan   = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel - 2]];
2398             float *rt_chan   = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel - 1]];
2399             s->fdsp.vector_fmac_scalar(lt_chan, back_chan, -M_SQRT1_2, 256);
2400             s->fdsp.vector_fmac_scalar(rt_chan, back_chan, -M_SQRT1_2, 256);
2401         }
2402
2403         /* If stream contains XXCH, we might need to undo an embedded downmix */
2404         if (s->xxch_dmix_embedded) {
2405             /* Loop over channel sets in turn */
2406             ch = num_core_channels;
2407             for (chset = 0; chset < s->xxch_chset; chset++) {
2408                 endch = ch + s->xxch_chset_nch[chset];
2409                 mask = s->xxch_dmix_embedded;
2410
2411                 /* undo downmix */
2412                 for (j = ch; j < endch; j++) {
2413                     if (mask & (1 << j)) { /* this channel has been mixed-out */
2414                         src_chan = s->samples_chanptr[s->channel_order_tab[j]];
2415                         for (k = 0; k < endch; k++) {
2416                             achan = s->channel_order_tab[k];
2417                             scale = s->xxch_dmix_coeff[j][k];
2418                             if (scale != 0.0) {
2419                                 dst_chan = s->samples_chanptr[achan];
2420                                 s->fdsp.vector_fmac_scalar(dst_chan, src_chan,
2421                                                            -scale, 256);
2422                             }
2423                         }
2424                     }
2425                 }
2426
2427                 /* if a downmix has been embedded then undo the pre-scaling */
2428                 if ((mask & (1 << ch)) && s->xxch_dmix_sf[chset] != 1.0f) {
2429                     scale = s->xxch_dmix_sf[chset];
2430
2431                     for (j = 0; j < ch; j++) {
2432                         src_chan = s->samples_chanptr[s->channel_order_tab[j]];
2433                         for (k = 0; k < 256; k++)
2434                             src_chan[k] *= scale;
2435                     }
2436
2437                     /* LFE channel is always part of core, scale if it exists */
2438                     if (s->lfe) {
2439                         src_chan = s->samples_chanptr[s->lfe_index];
2440                         for (k = 0; k < 256; k++)
2441                             src_chan[k] *= scale;
2442                     }
2443                 }
2444
2445                 ch = endch;
2446             }
2447
2448         }
2449     }
2450
2451     /* update lfe history */
2452     lfe_samples = 2 * s->lfe * (s->sample_blocks / 8);
2453     for (i = 0; i < 2 * s->lfe * 4; i++)
2454         s->lfe_data[i] = s->lfe_data[i + lfe_samples];
2455
2456     *got_frame_ptr    = 1;
2457     *(AVFrame *) data = s->frame;
2458
2459     return buf_size;
2460 }
2461
2462
2463
2464 /**
2465  * DCA initialization
2466  *
2467  * @param avctx     pointer to the AVCodecContext
2468  */
2469
2470 static av_cold int dca_decode_init(AVCodecContext *avctx)
2471 {
2472     DCAContext *s = avctx->priv_data;
2473
2474     s->avctx = avctx;
2475     dca_init_vlcs();
2476
2477     avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
2478     ff_mdct_init(&s->imdct, 6, 1, 1.0);
2479     ff_synth_filter_init(&s->synth);
2480     ff_dcadsp_init(&s->dcadsp);
2481     ff_fmt_convert_init(&s->fmt_conv, avctx);
2482
2483     avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
2484
2485     /* allow downmixing to stereo */
2486     if (avctx->channels > 0 && avctx->request_channels < avctx->channels &&
2487         avctx->request_channels == 2) {
2488         avctx->channels = avctx->request_channels;
2489     }
2490
2491     avcodec_get_frame_defaults(&s->frame);
2492     avctx->coded_frame = &s->frame;
2493
2494     return 0;
2495 }
2496
2497 static av_cold int dca_decode_end(AVCodecContext *avctx)
2498 {
2499     DCAContext *s = avctx->priv_data;
2500     ff_mdct_end(&s->imdct);
2501     av_freep(&s->extra_channels_buffer);
2502     return 0;
2503 }
2504
2505 static const AVProfile profiles[] = {
2506     { FF_PROFILE_DTS,        "DTS"        },
2507     { FF_PROFILE_DTS_ES,     "DTS-ES"     },
2508     { FF_PROFILE_DTS_96_24,  "DTS 96/24"  },
2509     { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
2510     { FF_PROFILE_DTS_HD_MA,  "DTS-HD MA"  },
2511     { FF_PROFILE_UNKNOWN },
2512 };
2513
2514 AVCodec ff_dca_decoder = {
2515     .name            = "dca",
2516     .type            = AVMEDIA_TYPE_AUDIO,
2517     .id              = AV_CODEC_ID_DTS,
2518     .priv_data_size  = sizeof(DCAContext),
2519     .init            = dca_decode_init,
2520     .decode          = dca_decode_frame,
2521     .close           = dca_decode_end,
2522     .long_name       = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
2523     .capabilities    = CODEC_CAP_CHANNEL_CONF | CODEC_CAP_DR1,
2524     .sample_fmts     = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
2525                                                        AV_SAMPLE_FMT_NONE },
2526     .profiles        = NULL_IF_CONFIG_SMALL(profiles),
2527 };