]> git.sesse.net Git - ffmpeg/blob - libavcodec/dca.c
d9fafbad01e3d8c81fc5bedeb930381f7b3569c1
[ffmpeg] / libavcodec / dca.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/common.h"
30 #include "libavutil/intmath.h"
31 #include "libavutil/intreadwrite.h"
32 #include "libavutil/mathematics.h"
33 #include "libavutil/audioconvert.h"
34 #include "avcodec.h"
35 #include "dsputil.h"
36 #include "fft.h"
37 #include "get_bits.h"
38 #include "put_bits.h"
39 #include "dcadata.h"
40 #include "dcahuff.h"
41 #include "dca.h"
42 #include "dca_parser.h"
43 #include "synth_filter.h"
44 #include "dcadsp.h"
45 #include "fmtconvert.h"
46
47 #if ARCH_ARM
48 #   include "arm/dca.h"
49 #endif
50
51 //#define TRACE
52
53 #define DCA_PRIM_CHANNELS_MAX  (7)
54 #define DCA_SUBBANDS          (32)
55 #define DCA_ABITS_MAX         (32)      /* Should be 28 */
56 #define DCA_SUBSUBFRAMES_MAX   (4)
57 #define DCA_SUBFRAMES_MAX     (16)
58 #define DCA_BLOCKS_MAX        (16)
59 #define DCA_LFE_MAX            (3)
60
61 enum DCAMode {
62     DCA_MONO = 0,
63     DCA_CHANNEL,
64     DCA_STEREO,
65     DCA_STEREO_SUMDIFF,
66     DCA_STEREO_TOTAL,
67     DCA_3F,
68     DCA_2F1R,
69     DCA_3F1R,
70     DCA_2F2R,
71     DCA_3F2R,
72     DCA_4F2R
73 };
74
75 /* these are unconfirmed but should be mostly correct */
76 enum DCAExSSSpeakerMask {
77     DCA_EXSS_FRONT_CENTER          = 0x0001,
78     DCA_EXSS_FRONT_LEFT_RIGHT      = 0x0002,
79     DCA_EXSS_SIDE_REAR_LEFT_RIGHT  = 0x0004,
80     DCA_EXSS_LFE                   = 0x0008,
81     DCA_EXSS_REAR_CENTER           = 0x0010,
82     DCA_EXSS_FRONT_HIGH_LEFT_RIGHT = 0x0020,
83     DCA_EXSS_REAR_LEFT_RIGHT       = 0x0040,
84     DCA_EXSS_FRONT_HIGH_CENTER     = 0x0080,
85     DCA_EXSS_OVERHEAD              = 0x0100,
86     DCA_EXSS_CENTER_LEFT_RIGHT     = 0x0200,
87     DCA_EXSS_WIDE_LEFT_RIGHT       = 0x0400,
88     DCA_EXSS_SIDE_LEFT_RIGHT       = 0x0800,
89     DCA_EXSS_LFE2                  = 0x1000,
90     DCA_EXSS_SIDE_HIGH_LEFT_RIGHT  = 0x2000,
91     DCA_EXSS_REAR_HIGH_CENTER      = 0x4000,
92     DCA_EXSS_REAR_HIGH_LEFT_RIGHT  = 0x8000,
93 };
94
95 enum DCAExtensionMask {
96     DCA_EXT_CORE       = 0x001, ///< core in core substream
97     DCA_EXT_XXCH       = 0x002, ///< XXCh channels extension in core substream
98     DCA_EXT_X96        = 0x004, ///< 96/24 extension in core substream
99     DCA_EXT_XCH        = 0x008, ///< XCh channel extension in core substream
100     DCA_EXT_EXSS_CORE  = 0x010, ///< core in ExSS (extension substream)
101     DCA_EXT_EXSS_XBR   = 0x020, ///< extended bitrate extension in ExSS
102     DCA_EXT_EXSS_XXCH  = 0x040, ///< XXCh channels extension in ExSS
103     DCA_EXT_EXSS_X96   = 0x080, ///< 96/24 extension in ExSS
104     DCA_EXT_EXSS_LBR   = 0x100, ///< low bitrate component in ExSS
105     DCA_EXT_EXSS_XLL   = 0x200, ///< lossless extension in ExSS
106 };
107
108 /* -1 are reserved or unknown */
109 static const int dca_ext_audio_descr_mask[] = {
110     DCA_EXT_XCH,
111     -1,
112     DCA_EXT_X96,
113     DCA_EXT_XCH | DCA_EXT_X96,
114     -1,
115     -1,
116     DCA_EXT_XXCH,
117     -1,
118 };
119
120 /* extensions that reside in core substream */
121 #define DCA_CORE_EXTS (DCA_EXT_XCH | DCA_EXT_XXCH | DCA_EXT_X96)
122
123 /* Tables for mapping dts channel configurations to libavcodec multichannel api.
124  * Some compromises have been made for special configurations. Most configurations
125  * are never used so complete accuracy is not needed.
126  *
127  * L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
128  * S  -> side, when both rear and back are configured move one of them to the side channel
129  * OV -> center back
130  * All 2 channel configurations -> AV_CH_LAYOUT_STEREO
131  */
132 static const uint64_t dca_core_channel_layout[] = {
133     AV_CH_FRONT_CENTER,                                                     ///< 1, A
134     AV_CH_LAYOUT_STEREO,                                                    ///< 2, A + B (dual mono)
135     AV_CH_LAYOUT_STEREO,                                                    ///< 2, L + R (stereo)
136     AV_CH_LAYOUT_STEREO,                                                    ///< 2, (L + R) + (L - R) (sum-difference)
137     AV_CH_LAYOUT_STEREO,                                                    ///< 2, LT + RT (left and right total)
138     AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER,                               ///< 3, C + L + R
139     AV_CH_LAYOUT_STEREO | AV_CH_BACK_CENTER,                                ///< 3, L + R + S
140     AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_BACK_CENTER,           ///< 4, C + L + R + S
141     AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT,               ///< 4, L + R + SL + SR
142
143     AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_SIDE_LEFT |
144     AV_CH_SIDE_RIGHT,                                                       ///< 5, C + L + R + SL + SR
145
146     AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
147     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER,               ///< 6, CL + CR + L + R + SL + SR
148
149     AV_CH_LAYOUT_STEREO | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT |
150     AV_CH_FRONT_CENTER  | AV_CH_BACK_CENTER,                                ///< 6, C + L + R + LR + RR + OV
151
152     AV_CH_FRONT_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
153     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_BACK_CENTER   |
154     AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT,                                     ///< 6, CF + CR + LF + RF + LR + RR
155
156     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER   |
157     AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
158     AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT,                                     ///< 7, CL + C + CR + L + R + SL + SR
159
160     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
161     AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
162     AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT,                                     ///< 8, CL + CR + L + R + SL1 + SL2 + SR1 + SR2
163
164     AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER   |
165     AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
166     AV_CH_SIDE_LEFT | AV_CH_BACK_CENTER | AV_CH_SIDE_RIGHT,                 ///< 8, CL + C + CR + L + R + SL + S + SR
167 };
168
169 static const int8_t dca_lfe_index[] = {
170     1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
171 };
172
173 static const int8_t dca_channel_reorder_lfe[][9] = {
174     { 0, -1, -1, -1, -1, -1, -1, -1, -1},
175     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
176     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
177     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
178     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
179     { 2,  0,  1, -1, -1, -1, -1, -1, -1},
180     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
181     { 2,  0,  1,  4, -1, -1, -1, -1, -1},
182     { 0,  1,  3,  4, -1, -1, -1, -1, -1},
183     { 2,  0,  1,  4,  5, -1, -1, -1, -1},
184     { 3,  4,  0,  1,  5,  6, -1, -1, -1},
185     { 2,  0,  1,  4,  5,  6, -1, -1, -1},
186     { 0,  6,  4,  5,  2,  3, -1, -1, -1},
187     { 4,  2,  5,  0,  1,  6,  7, -1, -1},
188     { 5,  6,  0,  1,  7,  3,  8,  4, -1},
189     { 4,  2,  5,  0,  1,  6,  8,  7, -1},
190 };
191
192 static const int8_t dca_channel_reorder_lfe_xch[][9] = {
193     { 0,  2, -1, -1, -1, -1, -1, -1, -1},
194     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
195     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
196     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
197     { 0,  1,  3, -1, -1, -1, -1, -1, -1},
198     { 2,  0,  1,  4, -1, -1, -1, -1, -1},
199     { 0,  1,  3,  4, -1, -1, -1, -1, -1},
200     { 2,  0,  1,  4,  5, -1, -1, -1, -1},
201     { 0,  1,  4,  5,  3, -1, -1, -1, -1},
202     { 2,  0,  1,  5,  6,  4, -1, -1, -1},
203     { 3,  4,  0,  1,  6,  7,  5, -1, -1},
204     { 2,  0,  1,  4,  5,  6,  7, -1, -1},
205     { 0,  6,  4,  5,  2,  3,  7, -1, -1},
206     { 4,  2,  5,  0,  1,  7,  8,  6, -1},
207     { 5,  6,  0,  1,  8,  3,  9,  4,  7},
208     { 4,  2,  5,  0,  1,  6,  9,  8,  7},
209 };
210
211 static const int8_t dca_channel_reorder_nolfe[][9] = {
212     { 0, -1, -1, -1, -1, -1, -1, -1, -1},
213     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
214     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
215     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
216     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
217     { 2,  0,  1, -1, -1, -1, -1, -1, -1},
218     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
219     { 2,  0,  1,  3, -1, -1, -1, -1, -1},
220     { 0,  1,  2,  3, -1, -1, -1, -1, -1},
221     { 2,  0,  1,  3,  4, -1, -1, -1, -1},
222     { 2,  3,  0,  1,  4,  5, -1, -1, -1},
223     { 2,  0,  1,  3,  4,  5, -1, -1, -1},
224     { 0,  5,  3,  4,  1,  2, -1, -1, -1},
225     { 3,  2,  4,  0,  1,  5,  6, -1, -1},
226     { 4,  5,  0,  1,  6,  2,  7,  3, -1},
227     { 3,  2,  4,  0,  1,  5,  7,  6, -1},
228 };
229
230 static const int8_t dca_channel_reorder_nolfe_xch[][9] = {
231     { 0,  1, -1, -1, -1, -1, -1, -1, -1},
232     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
233     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
234     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
235     { 0,  1,  2, -1, -1, -1, -1, -1, -1},
236     { 2,  0,  1,  3, -1, -1, -1, -1, -1},
237     { 0,  1,  2,  3, -1, -1, -1, -1, -1},
238     { 2,  0,  1,  3,  4, -1, -1, -1, -1},
239     { 0,  1,  3,  4,  2, -1, -1, -1, -1},
240     { 2,  0,  1,  4,  5,  3, -1, -1, -1},
241     { 2,  3,  0,  1,  5,  6,  4, -1, -1},
242     { 2,  0,  1,  3,  4,  5,  6, -1, -1},
243     { 0,  5,  3,  4,  1,  2,  6, -1, -1},
244     { 3,  2,  4,  0,  1,  6,  7,  5, -1},
245     { 4,  5,  0,  1,  7,  2,  8,  3,  6},
246     { 3,  2,  4,  0,  1,  5,  8,  7,  6},
247 };
248
249 #define DCA_DOLBY                  101           /* FIXME */
250
251 #define DCA_CHANNEL_BITS             6
252 #define DCA_CHANNEL_MASK          0x3F
253
254 #define DCA_LFE                   0x80
255
256 #define HEADER_SIZE                 14
257
258 #define DCA_MAX_FRAME_SIZE       16384
259 #define DCA_MAX_EXSS_HEADER_SIZE  4096
260
261 #define DCA_BUFFER_PADDING_SIZE   1024
262
263 /** Bit allocation */
264 typedef struct {
265     int offset;                 ///< code values offset
266     int maxbits[8];             ///< max bits in VLC
267     int wrap;                   ///< wrap for get_vlc2()
268     VLC vlc[8];                 ///< actual codes
269 } BitAlloc;
270
271 static BitAlloc dca_bitalloc_index;    ///< indexes for samples VLC select
272 static BitAlloc dca_tmode;             ///< transition mode VLCs
273 static BitAlloc dca_scalefactor;       ///< scalefactor VLCs
274 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
275
276 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba,
277                                          int idx)
278 {
279     return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) +
280            ba->offset;
281 }
282
283 typedef struct {
284     AVCodecContext *avctx;
285     AVFrame frame;
286     /* Frame header */
287     int frame_type;             ///< type of the current frame
288     int samples_deficit;        ///< deficit sample count
289     int crc_present;            ///< crc is present in the bitstream
290     int sample_blocks;          ///< number of PCM sample blocks
291     int frame_size;             ///< primary frame byte size
292     int amode;                  ///< audio channels arrangement
293     int sample_rate;            ///< audio sampling rate
294     int bit_rate;               ///< transmission bit rate
295     int bit_rate_index;         ///< transmission bit rate index
296
297     int downmix;                ///< embedded downmix enabled
298     int dynrange;               ///< embedded dynamic range flag
299     int timestamp;              ///< embedded time stamp flag
300     int aux_data;               ///< auxiliary data flag
301     int hdcd;                   ///< source material is mastered in HDCD
302     int ext_descr;              ///< extension audio descriptor flag
303     int ext_coding;             ///< extended coding flag
304     int aspf;                   ///< audio sync word insertion flag
305     int lfe;                    ///< low frequency effects flag
306     int predictor_history;      ///< predictor history flag
307     int header_crc;             ///< header crc check bytes
308     int multirate_inter;        ///< multirate interpolator switch
309     int version;                ///< encoder software revision
310     int copy_history;           ///< copy history
311     int source_pcm_res;         ///< source pcm resolution
312     int front_sum;              ///< front sum/difference flag
313     int surround_sum;           ///< surround sum/difference flag
314     int dialog_norm;            ///< dialog normalisation parameter
315
316     /* Primary audio coding header */
317     int subframes;              ///< number of subframes
318     int total_channels;         ///< number of channels including extensions
319     int prim_channels;          ///< number of primary audio channels
320     int subband_activity[DCA_PRIM_CHANNELS_MAX];    ///< subband activity count
321     int vq_start_subband[DCA_PRIM_CHANNELS_MAX];    ///< high frequency vq start subband
322     int joint_intensity[DCA_PRIM_CHANNELS_MAX];     ///< joint intensity coding index
323     int transient_huffman[DCA_PRIM_CHANNELS_MAX];   ///< transient mode code book
324     int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]; ///< scale factor code book
325     int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX];    ///< bit allocation quantizer select
326     int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< quantization index codebook select
327     float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX];   ///< scale factor adjustment
328
329     /* Primary audio coding side information */
330     int subsubframes[DCA_SUBFRAMES_MAX];                         ///< number of subsubframes
331     int partial_samples[DCA_SUBFRAMES_MAX];                      ///< partial subsubframe samples count
332     int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];    ///< prediction mode (ADPCM used or not)
333     int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];      ///< prediction VQ coefs
334     int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];           ///< bit allocation index
335     int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];    ///< transition mode (transients)
336     int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2];    ///< scale factors (2 if transient)
337     int joint_huff[DCA_PRIM_CHANNELS_MAX];                       ///< joint subband scale factors codebook
338     int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< joint subband scale factors
339     int downmix_coef[DCA_PRIM_CHANNELS_MAX][2];                  ///< stereo downmix coefficients
340     int dynrange_coef;                                           ///< dynamic range coefficient
341
342     int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS];       ///< VQ encoded high frequency subbands
343
344     float lfe_data[2 * DCA_LFE_MAX * (DCA_BLOCKS_MAX + 4)];      ///< Low frequency effect data
345     int lfe_scale_factor;
346
347     /* Subband samples history (for ADPCM) */
348     DECLARE_ALIGNED(16, float, subband_samples_hist)[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4];
349     DECLARE_ALIGNED(32, float, subband_fir_hist)[DCA_PRIM_CHANNELS_MAX][512];
350     DECLARE_ALIGNED(32, float, subband_fir_noidea)[DCA_PRIM_CHANNELS_MAX][32];
351     int hist_index[DCA_PRIM_CHANNELS_MAX];
352     DECLARE_ALIGNED(32, float, raXin)[32];
353
354     int output;                 ///< type of output
355     float scale_bias;           ///< output scale
356
357     DECLARE_ALIGNED(32, float, subband_samples)[DCA_BLOCKS_MAX][DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8];
358     DECLARE_ALIGNED(32, float, samples)[(DCA_PRIM_CHANNELS_MAX + 1) * 256];
359     const float *samples_chanptr[DCA_PRIM_CHANNELS_MAX + 1];
360
361     uint8_t dca_buffer[DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE + DCA_BUFFER_PADDING_SIZE];
362     int dca_buffer_size;        ///< how much data is in the dca_buffer
363
364     const int8_t *channel_order_tab;  ///< channel reordering table, lfe and non lfe
365     GetBitContext gb;
366     /* Current position in DCA frame */
367     int current_subframe;
368     int current_subsubframe;
369
370     int core_ext_mask;          ///< present extensions in the core substream
371
372     /* XCh extension information */
373     int xch_present;            ///< XCh extension present and valid
374     int xch_base_channel;       ///< index of first (only) channel containing XCH data
375
376     /* ExSS header parser */
377     int static_fields;          ///< static fields present
378     int mix_metadata;           ///< mixing metadata present
379     int num_mix_configs;        ///< number of mix out configurations
380     int mix_config_num_ch[4];   ///< number of channels in each mix out configuration
381
382     int profile;
383
384     int debug_flag;             ///< used for suppressing repeated error messages output
385     DSPContext dsp;
386     FFTContext imdct;
387     SynthFilterContext synth;
388     DCADSPContext dcadsp;
389     FmtConvertContext fmt_conv;
390 } DCAContext;
391
392 static const uint16_t dca_vlc_offs[] = {
393         0,   512,   640,   768,  1282,  1794,  2436,  3080,  3770,  4454,  5364,
394      5372,  5380,  5388,  5392,  5396,  5412,  5420,  5428,  5460,  5492,  5508,
395      5572,  5604,  5668,  5796,  5860,  5892,  6412,  6668,  6796,  7308,  7564,
396      7820,  8076,  8620,  9132,  9388,  9910, 10166, 10680, 11196, 11726, 12240,
397     12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
398     18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
399 };
400
401 static av_cold void dca_init_vlcs(void)
402 {
403     static int vlcs_initialized = 0;
404     int i, j, c = 14;
405     static VLC_TYPE dca_table[23622][2];
406
407     if (vlcs_initialized)
408         return;
409
410     dca_bitalloc_index.offset = 1;
411     dca_bitalloc_index.wrap = 2;
412     for (i = 0; i < 5; i++) {
413         dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]];
414         dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i];
415         init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
416                  bitalloc_12_bits[i], 1, 1,
417                  bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
418     }
419     dca_scalefactor.offset = -64;
420     dca_scalefactor.wrap = 2;
421     for (i = 0; i < 5; i++) {
422         dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]];
423         dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5];
424         init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
425                  scales_bits[i], 1, 1,
426                  scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
427     }
428     dca_tmode.offset = 0;
429     dca_tmode.wrap = 1;
430     for (i = 0; i < 4; i++) {
431         dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]];
432         dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10];
433         init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
434                  tmode_bits[i], 1, 1,
435                  tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
436     }
437
438     for (i = 0; i < 10; i++)
439         for (j = 0; j < 7; j++) {
440             if (!bitalloc_codes[i][j])
441                 break;
442             dca_smpl_bitalloc[i + 1].offset                 = bitalloc_offsets[i];
443             dca_smpl_bitalloc[i + 1].wrap                   = 1 + (j > 4);
444             dca_smpl_bitalloc[i + 1].vlc[j].table           = &dca_table[dca_vlc_offs[c]];
445             dca_smpl_bitalloc[i + 1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
446
447             init_vlc(&dca_smpl_bitalloc[i + 1].vlc[j], bitalloc_maxbits[i][j],
448                      bitalloc_sizes[i],
449                      bitalloc_bits[i][j], 1, 1,
450                      bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC);
451             c++;
452         }
453     vlcs_initialized = 1;
454 }
455
456 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
457 {
458     while (len--)
459         *dst++ = get_bits(gb, bits);
460 }
461
462 static int dca_parse_audio_coding_header(DCAContext *s, int base_channel)
463 {
464     int i, j;
465     static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
466     static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
467     static const int thr[11]    = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
468
469     s->total_channels = get_bits(&s->gb, 3) + 1 + base_channel;
470     s->prim_channels  = s->total_channels;
471
472     if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
473         s->prim_channels = DCA_PRIM_CHANNELS_MAX;
474
475
476     for (i = base_channel; i < s->prim_channels; i++) {
477         s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
478         if (s->subband_activity[i] > DCA_SUBBANDS)
479             s->subband_activity[i] = DCA_SUBBANDS;
480     }
481     for (i = base_channel; i < s->prim_channels; i++) {
482         s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
483         if (s->vq_start_subband[i] > DCA_SUBBANDS)
484             s->vq_start_subband[i] = DCA_SUBBANDS;
485     }
486     get_array(&s->gb, s->joint_intensity + base_channel,     s->prim_channels - base_channel, 3);
487     get_array(&s->gb, s->transient_huffman + base_channel,   s->prim_channels - base_channel, 2);
488     get_array(&s->gb, s->scalefactor_huffman + base_channel, s->prim_channels - base_channel, 3);
489     get_array(&s->gb, s->bitalloc_huffman + base_channel,    s->prim_channels - base_channel, 3);
490
491     /* Get codebooks quantization indexes */
492     if (!base_channel)
493         memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
494     for (j = 1; j < 11; j++)
495         for (i = base_channel; i < s->prim_channels; i++)
496             s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
497
498     /* Get scale factor adjustment */
499     for (j = 0; j < 11; j++)
500         for (i = base_channel; i < s->prim_channels; i++)
501             s->scalefactor_adj[i][j] = 1;
502
503     for (j = 1; j < 11; j++)
504         for (i = base_channel; i < s->prim_channels; i++)
505             if (s->quant_index_huffman[i][j] < thr[j])
506                 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
507
508     if (s->crc_present) {
509         /* Audio header CRC check */
510         get_bits(&s->gb, 16);
511     }
512
513     s->current_subframe    = 0;
514     s->current_subsubframe = 0;
515
516 #ifdef TRACE
517     av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);
518     av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);
519     for (i = base_channel; i < s->prim_channels; i++) {
520         av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n",
521                s->subband_activity[i]);
522         av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n",
523                s->vq_start_subband[i]);
524         av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n",
525                s->joint_intensity[i]);
526         av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n",
527                s->transient_huffman[i]);
528         av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n",
529                s->scalefactor_huffman[i]);
530         av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n",
531                s->bitalloc_huffman[i]);
532         av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");
533         for (j = 0; j < 11; j++)
534             av_log(s->avctx, AV_LOG_DEBUG, " %i", s->quant_index_huffman[i][j]);
535         av_log(s->avctx, AV_LOG_DEBUG, "\n");
536         av_log(s->avctx, AV_LOG_DEBUG, "scalefac adj:");
537         for (j = 0; j < 11; j++)
538             av_log(s->avctx, AV_LOG_DEBUG, " %1.3f", s->scalefactor_adj[i][j]);
539         av_log(s->avctx, AV_LOG_DEBUG, "\n");
540     }
541 #endif
542
543     return 0;
544 }
545
546 static int dca_parse_frame_header(DCAContext *s)
547 {
548     init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
549
550     /* Sync code */
551     skip_bits_long(&s->gb, 32);
552
553     /* Frame header */
554     s->frame_type        = get_bits(&s->gb, 1);
555     s->samples_deficit   = get_bits(&s->gb, 5) + 1;
556     s->crc_present       = get_bits(&s->gb, 1);
557     s->sample_blocks     = get_bits(&s->gb, 7) + 1;
558     s->frame_size        = get_bits(&s->gb, 14) + 1;
559     if (s->frame_size < 95)
560         return AVERROR_INVALIDDATA;
561     s->amode             = get_bits(&s->gb, 6);
562     s->sample_rate       = dca_sample_rates[get_bits(&s->gb, 4)];
563     if (!s->sample_rate)
564         return AVERROR_INVALIDDATA;
565     s->bit_rate_index    = get_bits(&s->gb, 5);
566     s->bit_rate          = dca_bit_rates[s->bit_rate_index];
567     if (!s->bit_rate)
568         return AVERROR_INVALIDDATA;
569
570     s->downmix           = get_bits(&s->gb, 1);
571     s->dynrange          = get_bits(&s->gb, 1);
572     s->timestamp         = get_bits(&s->gb, 1);
573     s->aux_data          = get_bits(&s->gb, 1);
574     s->hdcd              = get_bits(&s->gb, 1);
575     s->ext_descr         = get_bits(&s->gb, 3);
576     s->ext_coding        = get_bits(&s->gb, 1);
577     s->aspf              = get_bits(&s->gb, 1);
578     s->lfe               = get_bits(&s->gb, 2);
579     s->predictor_history = get_bits(&s->gb, 1);
580
581     /* TODO: check CRC */
582     if (s->crc_present)
583         s->header_crc    = get_bits(&s->gb, 16);
584
585     s->multirate_inter   = get_bits(&s->gb, 1);
586     s->version           = get_bits(&s->gb, 4);
587     s->copy_history      = get_bits(&s->gb, 2);
588     s->source_pcm_res    = get_bits(&s->gb, 3);
589     s->front_sum         = get_bits(&s->gb, 1);
590     s->surround_sum      = get_bits(&s->gb, 1);
591     s->dialog_norm       = get_bits(&s->gb, 4);
592
593     /* FIXME: channels mixing levels */
594     s->output = s->amode;
595     if (s->lfe)
596         s->output |= DCA_LFE;
597
598 #ifdef TRACE
599     av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);
600     av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);
601     av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);
602     av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",
603            s->sample_blocks, s->sample_blocks * 32);
604     av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);
605     av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",
606            s->amode, dca_channels[s->amode]);
607     av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i Hz\n",
608            s->sample_rate);
609     av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i bits/s\n",
610            s->bit_rate);
611     av_log(s->avctx, AV_LOG_DEBUG, "downmix: %i\n", s->downmix);
612     av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);
613     av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);
614     av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);
615     av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);
616     av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);
617     av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);
618     av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);
619     av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);
620     av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",
621            s->predictor_history);
622     av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);
623     av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",
624            s->multirate_inter);
625     av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);
626     av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);
627     av_log(s->avctx, AV_LOG_DEBUG,
628            "source pcm resolution: %i (%i bits/sample)\n",
629            s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);
630     av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);
631     av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);
632     av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);
633     av_log(s->avctx, AV_LOG_DEBUG, "\n");
634 #endif
635
636     /* Primary audio coding header */
637     s->subframes         = get_bits(&s->gb, 4) + 1;
638
639     return dca_parse_audio_coding_header(s, 0);
640 }
641
642
643 static inline int get_scale(GetBitContext *gb, int level, int value, int log2range)
644 {
645     if (level < 5) {
646         /* huffman encoded */
647         value += get_bitalloc(gb, &dca_scalefactor, level);
648         value = av_clip(value, 0, (1 << log2range) - 1);
649     } else if (level < 8) {
650         if (level + 1 > log2range) {
651             skip_bits(gb, level + 1 - log2range);
652             value = get_bits(gb, log2range);
653         } else {
654             value = get_bits(gb, level + 1);
655         }
656     }
657     return value;
658 }
659
660 static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
661 {
662     /* Primary audio coding side information */
663     int j, k;
664
665     if (get_bits_left(&s->gb) < 0)
666         return AVERROR_INVALIDDATA;
667
668     if (!base_channel) {
669         s->subsubframes[s->current_subframe]    = get_bits(&s->gb, 2) + 1;
670         s->partial_samples[s->current_subframe] = get_bits(&s->gb, 3);
671     }
672
673     for (j = base_channel; j < s->prim_channels; j++) {
674         for (k = 0; k < s->subband_activity[j]; k++)
675             s->prediction_mode[j][k] = get_bits(&s->gb, 1);
676     }
677
678     /* Get prediction codebook */
679     for (j = base_channel; j < s->prim_channels; j++) {
680         for (k = 0; k < s->subband_activity[j]; k++) {
681             if (s->prediction_mode[j][k] > 0) {
682                 /* (Prediction coefficient VQ address) */
683                 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
684             }
685         }
686     }
687
688     /* Bit allocation index */
689     for (j = base_channel; j < s->prim_channels; j++) {
690         for (k = 0; k < s->vq_start_subband[j]; k++) {
691             if (s->bitalloc_huffman[j] == 6)
692                 s->bitalloc[j][k] = get_bits(&s->gb, 5);
693             else if (s->bitalloc_huffman[j] == 5)
694                 s->bitalloc[j][k] = get_bits(&s->gb, 4);
695             else if (s->bitalloc_huffman[j] == 7) {
696                 av_log(s->avctx, AV_LOG_ERROR,
697                        "Invalid bit allocation index\n");
698                 return AVERROR_INVALIDDATA;
699             } else {
700                 s->bitalloc[j][k] =
701                     get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
702             }
703
704             if (s->bitalloc[j][k] > 26) {
705                 // av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index [%i][%i] too big (%i)\n",
706                 //        j, k, s->bitalloc[j][k]);
707                 return AVERROR_INVALIDDATA;
708             }
709         }
710     }
711
712     /* Transition mode */
713     for (j = base_channel; j < s->prim_channels; j++) {
714         for (k = 0; k < s->subband_activity[j]; k++) {
715             s->transition_mode[j][k] = 0;
716             if (s->subsubframes[s->current_subframe] > 1 &&
717                 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
718                 s->transition_mode[j][k] =
719                     get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
720             }
721         }
722     }
723
724     if (get_bits_left(&s->gb) < 0)
725         return AVERROR_INVALIDDATA;
726
727     for (j = base_channel; j < s->prim_channels; j++) {
728         const uint32_t *scale_table;
729         int scale_sum, log_size;
730
731         memset(s->scale_factor[j], 0,
732                s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
733
734         if (s->scalefactor_huffman[j] == 6) {
735             scale_table = scale_factor_quant7;
736             log_size = 7;
737         } else {
738             scale_table = scale_factor_quant6;
739             log_size = 6;
740         }
741
742         /* When huffman coded, only the difference is encoded */
743         scale_sum = 0;
744
745         for (k = 0; k < s->subband_activity[j]; k++) {
746             if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
747                 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
748                 s->scale_factor[j][k][0] = scale_table[scale_sum];
749             }
750
751             if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
752                 /* Get second scale factor */
753                 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
754                 s->scale_factor[j][k][1] = scale_table[scale_sum];
755             }
756         }
757     }
758
759     /* Joint subband scale factor codebook select */
760     for (j = base_channel; j < s->prim_channels; j++) {
761         /* Transmitted only if joint subband coding enabled */
762         if (s->joint_intensity[j] > 0)
763             s->joint_huff[j] = get_bits(&s->gb, 3);
764     }
765
766     if (get_bits_left(&s->gb) < 0)
767         return AVERROR_INVALIDDATA;
768
769     /* Scale factors for joint subband coding */
770     for (j = base_channel; j < s->prim_channels; j++) {
771         int source_channel;
772
773         /* Transmitted only if joint subband coding enabled */
774         if (s->joint_intensity[j] > 0) {
775             int scale = 0;
776             source_channel = s->joint_intensity[j] - 1;
777
778             /* When huffman coded, only the difference is encoded
779              * (is this valid as well for joint scales ???) */
780
781             for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
782                 scale = get_scale(&s->gb, s->joint_huff[j], 64 /* bias */, 7);
783                 s->joint_scale_factor[j][k] = scale;    /*joint_scale_table[scale]; */
784             }
785
786             if (!(s->debug_flag & 0x02)) {
787                 av_log(s->avctx, AV_LOG_DEBUG,
788                        "Joint stereo coding not supported\n");
789                 s->debug_flag |= 0x02;
790             }
791         }
792     }
793
794     /* Stereo downmix coefficients */
795     if (!base_channel && s->prim_channels > 2) {
796         if (s->downmix) {
797             for (j = base_channel; j < s->prim_channels; j++) {
798                 s->downmix_coef[j][0] = get_bits(&s->gb, 7);
799                 s->downmix_coef[j][1] = get_bits(&s->gb, 7);
800             }
801         } else {
802             int am = s->amode & DCA_CHANNEL_MASK;
803             if (am >= FF_ARRAY_ELEMS(dca_default_coeffs)) {
804                 av_log(s->avctx, AV_LOG_ERROR,
805                        "Invalid channel mode %d\n", am);
806                 return AVERROR_INVALIDDATA;
807             }
808             for (j = base_channel; j < s->prim_channels; j++) {
809                 s->downmix_coef[j][0] = dca_default_coeffs[am][j][0];
810                 s->downmix_coef[j][1] = dca_default_coeffs[am][j][1];
811             }
812         }
813     }
814
815     /* Dynamic range coefficient */
816     if (!base_channel && s->dynrange)
817         s->dynrange_coef = get_bits(&s->gb, 8);
818
819     /* Side information CRC check word */
820     if (s->crc_present) {
821         get_bits(&s->gb, 16);
822     }
823
824     /*
825      * Primary audio data arrays
826      */
827
828     /* VQ encoded high frequency subbands */
829     for (j = base_channel; j < s->prim_channels; j++)
830         for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
831             /* 1 vector -> 32 samples */
832             s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
833
834     /* Low frequency effect data */
835     if (!base_channel && s->lfe) {
836         int quant7;
837         /* LFE samples */
838         int lfe_samples = 2 * s->lfe * (4 + block_index);
839         int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
840         float lfe_scale;
841
842         for (j = lfe_samples; j < lfe_end_sample; j++) {
843             /* Signed 8 bits int */
844             s->lfe_data[j] = get_sbits(&s->gb, 8);
845         }
846
847         /* Scale factor index */
848         quant7 = get_bits(&s->gb, 8);
849         if (quant7 > 127) {
850             av_log_ask_for_sample(s->avctx, "LFEScaleIndex larger than 127\n");
851             return AVERROR_INVALIDDATA;
852         }
853         s->lfe_scale_factor = scale_factor_quant7[quant7];
854
855         /* Quantization step size * scale factor */
856         lfe_scale = 0.035 * s->lfe_scale_factor;
857
858         for (j = lfe_samples; j < lfe_end_sample; j++)
859             s->lfe_data[j] *= lfe_scale;
860     }
861
862 #ifdef TRACE
863     av_log(s->avctx, AV_LOG_DEBUG, "subsubframes: %i\n",
864            s->subsubframes[s->current_subframe]);
865     av_log(s->avctx, AV_LOG_DEBUG, "partial samples: %i\n",
866            s->partial_samples[s->current_subframe]);
867
868     for (j = base_channel; j < s->prim_channels; j++) {
869         av_log(s->avctx, AV_LOG_DEBUG, "prediction mode:");
870         for (k = 0; k < s->subband_activity[j]; k++)
871             av_log(s->avctx, AV_LOG_DEBUG, " %i", s->prediction_mode[j][k]);
872         av_log(s->avctx, AV_LOG_DEBUG, "\n");
873     }
874     for (j = base_channel; j < s->prim_channels; j++) {
875         for (k = 0; k < s->subband_activity[j]; k++)
876             av_log(s->avctx, AV_LOG_DEBUG,
877                    "prediction coefs: %f, %f, %f, %f\n",
878                    (float) adpcm_vb[s->prediction_vq[j][k]][0] / 8192,
879                    (float) adpcm_vb[s->prediction_vq[j][k]][1] / 8192,
880                    (float) adpcm_vb[s->prediction_vq[j][k]][2] / 8192,
881                    (float) adpcm_vb[s->prediction_vq[j][k]][3] / 8192);
882     }
883     for (j = base_channel; j < s->prim_channels; j++) {
884         av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index: ");
885         for (k = 0; k < s->vq_start_subband[j]; k++)
886             av_log(s->avctx, AV_LOG_DEBUG, "%2.2i ", s->bitalloc[j][k]);
887         av_log(s->avctx, AV_LOG_DEBUG, "\n");
888     }
889     for (j = base_channel; j < s->prim_channels; j++) {
890         av_log(s->avctx, AV_LOG_DEBUG, "Transition mode:");
891         for (k = 0; k < s->subband_activity[j]; k++)
892             av_log(s->avctx, AV_LOG_DEBUG, " %i", s->transition_mode[j][k]);
893         av_log(s->avctx, AV_LOG_DEBUG, "\n");
894     }
895     for (j = base_channel; j < s->prim_channels; j++) {
896         av_log(s->avctx, AV_LOG_DEBUG, "Scale factor:");
897         for (k = 0; k < s->subband_activity[j]; k++) {
898             if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0)
899                 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->scale_factor[j][k][0]);
900             if (k < s->vq_start_subband[j] && s->transition_mode[j][k])
901                 av_log(s->avctx, AV_LOG_DEBUG, " %i(t)", s->scale_factor[j][k][1]);
902         }
903         av_log(s->avctx, AV_LOG_DEBUG, "\n");
904     }
905     for (j = base_channel; j < s->prim_channels; j++) {
906         if (s->joint_intensity[j] > 0) {
907             int source_channel = s->joint_intensity[j] - 1;
908             av_log(s->avctx, AV_LOG_DEBUG, "Joint scale factor index:\n");
909             for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++)
910                 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->joint_scale_factor[j][k]);
911             av_log(s->avctx, AV_LOG_DEBUG, "\n");
912         }
913     }
914     if (!base_channel && s->prim_channels > 2 && s->downmix) {
915         av_log(s->avctx, AV_LOG_DEBUG, "Downmix coeffs:\n");
916         for (j = 0; j < s->prim_channels; j++) {
917             av_log(s->avctx, AV_LOG_DEBUG, "Channel 0, %d = %f\n", j,
918                    dca_downmix_coeffs[s->downmix_coef[j][0]]);
919             av_log(s->avctx, AV_LOG_DEBUG, "Channel 1, %d = %f\n", j,
920                    dca_downmix_coeffs[s->downmix_coef[j][1]]);
921         }
922         av_log(s->avctx, AV_LOG_DEBUG, "\n");
923     }
924     for (j = base_channel; j < s->prim_channels; j++)
925         for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
926             av_log(s->avctx, AV_LOG_DEBUG, "VQ index: %i\n", s->high_freq_vq[j][k]);
927     if (!base_channel && s->lfe) {
928         int lfe_samples = 2 * s->lfe * (4 + block_index);
929         int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
930
931         av_log(s->avctx, AV_LOG_DEBUG, "LFE samples:\n");
932         for (j = lfe_samples; j < lfe_end_sample; j++)
933             av_log(s->avctx, AV_LOG_DEBUG, " %f", s->lfe_data[j]);
934         av_log(s->avctx, AV_LOG_DEBUG, "\n");
935     }
936 #endif
937
938     return 0;
939 }
940
941 static void qmf_32_subbands(DCAContext *s, int chans,
942                             float samples_in[32][8], float *samples_out,
943                             float scale)
944 {
945     const float *prCoeff;
946     int i;
947
948     int sb_act = s->subband_activity[chans];
949     int subindex;
950
951     scale *= sqrt(1 / 8.0);
952
953     /* Select filter */
954     if (!s->multirate_inter)    /* Non-perfect reconstruction */
955         prCoeff = fir_32bands_nonperfect;
956     else                        /* Perfect reconstruction */
957         prCoeff = fir_32bands_perfect;
958
959     for (i = sb_act; i < 32; i++)
960         s->raXin[i] = 0.0;
961
962     /* Reconstructed channel sample index */
963     for (subindex = 0; subindex < 8; subindex++) {
964         /* Load in one sample from each subband and clear inactive subbands */
965         for (i = 0; i < sb_act; i++) {
966             unsigned sign = (i - 1) & 2;
967             uint32_t v    = AV_RN32A(&samples_in[i][subindex]) ^ sign << 30;
968             AV_WN32A(&s->raXin[i], v);
969         }
970
971         s->synth.synth_filter_float(&s->imdct,
972                                     s->subband_fir_hist[chans],
973                                     &s->hist_index[chans],
974                                     s->subband_fir_noidea[chans], prCoeff,
975                                     samples_out, s->raXin, scale);
976         samples_out += 32;
977     }
978 }
979
980 static void lfe_interpolation_fir(DCAContext *s, int decimation_select,
981                                   int num_deci_sample, float *samples_in,
982                                   float *samples_out, float scale)
983 {
984     /* samples_in: An array holding decimated samples.
985      *   Samples in current subframe starts from samples_in[0],
986      *   while samples_in[-1], samples_in[-2], ..., stores samples
987      *   from last subframe as history.
988      *
989      * samples_out: An array holding interpolated samples
990      */
991
992     int decifactor;
993     const float *prCoeff;
994     int deciindex;
995
996     /* Select decimation filter */
997     if (decimation_select == 1) {
998         decifactor = 64;
999         prCoeff = lfe_fir_128;
1000     } else {
1001         decifactor = 32;
1002         prCoeff = lfe_fir_64;
1003     }
1004     /* Interpolation */
1005     for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1006         s->dcadsp.lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1007         samples_in++;
1008         samples_out += 2 * decifactor;
1009     }
1010 }
1011
1012 /* downmixing routines */
1013 #define MIX_REAR1(samples, si1, rs, coef)           \
1014     samples[i]     += samples[si1] * coef[rs][0];   \
1015     samples[i+256] += samples[si1] * coef[rs][1];
1016
1017 #define MIX_REAR2(samples, si1, si2, rs, coef)                                     \
1018     samples[i]     += samples[si1] * coef[rs][0] + samples[si2] * coef[rs + 1][0]; \
1019     samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs + 1][1];
1020
1021 #define MIX_FRONT3(samples, coef)                                      \
1022     t = samples[i + c];                                                \
1023     u = samples[i + l];                                                \
1024     v = samples[i + r];                                                \
1025     samples[i]     = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1026     samples[i+256] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1027
1028 #define DOWNMIX_TO_STEREO(op1, op2)             \
1029     for (i = 0; i < 256; i++) {                 \
1030         op1                                     \
1031         op2                                     \
1032     }
1033
1034 static void dca_downmix(float *samples, int srcfmt,
1035                         int downmix_coef[DCA_PRIM_CHANNELS_MAX][2],
1036                         const int8_t *channel_mapping)
1037 {
1038     int c, l, r, sl, sr, s;
1039     int i;
1040     float t, u, v;
1041     float coef[DCA_PRIM_CHANNELS_MAX][2];
1042
1043     for (i = 0; i < DCA_PRIM_CHANNELS_MAX; i++) {
1044         coef[i][0] = dca_downmix_coeffs[downmix_coef[i][0]];
1045         coef[i][1] = dca_downmix_coeffs[downmix_coef[i][1]];
1046     }
1047
1048     switch (srcfmt) {
1049     case DCA_MONO:
1050     case DCA_CHANNEL:
1051     case DCA_STEREO_TOTAL:
1052     case DCA_STEREO_SUMDIFF:
1053     case DCA_4F2R:
1054         av_log(NULL, 0, "Not implemented!\n");
1055         break;
1056     case DCA_STEREO:
1057         break;
1058     case DCA_3F:
1059         c = channel_mapping[0] * 256;
1060         l = channel_mapping[1] * 256;
1061         r = channel_mapping[2] * 256;
1062         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef), );
1063         break;
1064     case DCA_2F1R:
1065         s = channel_mapping[2] * 256;
1066         DOWNMIX_TO_STEREO(MIX_REAR1(samples, i + s, 2, coef), );
1067         break;
1068     case DCA_3F1R:
1069         c = channel_mapping[0] * 256;
1070         l = channel_mapping[1] * 256;
1071         r = channel_mapping[2] * 256;
1072         s = channel_mapping[3] * 256;
1073         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1074                           MIX_REAR1(samples, i + s, 3, coef));
1075         break;
1076     case DCA_2F2R:
1077         sl = channel_mapping[2] * 256;
1078         sr = channel_mapping[3] * 256;
1079         DOWNMIX_TO_STEREO(MIX_REAR2(samples, i + sl, i + sr, 2, coef), );
1080         break;
1081     case DCA_3F2R:
1082         c  = channel_mapping[0] * 256;
1083         l  = channel_mapping[1] * 256;
1084         r  = channel_mapping[2] * 256;
1085         sl = channel_mapping[3] * 256;
1086         sr = channel_mapping[4] * 256;
1087         DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1088                           MIX_REAR2(samples, i + sl, i + sr, 3, coef));
1089         break;
1090     }
1091 }
1092
1093
1094 #ifndef decode_blockcodes
1095 /* Very compact version of the block code decoder that does not use table
1096  * look-up but is slightly slower */
1097 static int decode_blockcode(int code, int levels, int *values)
1098 {
1099     int i;
1100     int offset = (levels - 1) >> 1;
1101
1102     for (i = 0; i < 4; i++) {
1103         int div = FASTDIV(code, levels);
1104         values[i] = code - offset - div * levels;
1105         code = div;
1106     }
1107
1108     return code;
1109 }
1110
1111 static int decode_blockcodes(int code1, int code2, int levels, int *values)
1112 {
1113     return decode_blockcode(code1, levels, values) |
1114            decode_blockcode(code2, levels, values + 4);
1115 }
1116 #endif
1117
1118 static const uint8_t abits_sizes[7]  = { 7, 10, 12, 13, 15, 17, 19 };
1119 static const uint8_t abits_levels[7] = { 3,  5,  7,  9, 13, 17, 25 };
1120
1121 #ifndef int8x8_fmul_int32
1122 static inline void int8x8_fmul_int32(float *dst, const int8_t *src, int scale)
1123 {
1124     float fscale = scale / 16.0;
1125     int i;
1126     for (i = 0; i < 8; i++)
1127         dst[i] = src[i] * fscale;
1128 }
1129 #endif
1130
1131 static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
1132 {
1133     int k, l;
1134     int subsubframe = s->current_subsubframe;
1135
1136     const float *quant_step_table;
1137
1138     /* FIXME */
1139     float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1140     LOCAL_ALIGNED_16(int, block, [8]);
1141
1142     /*
1143      * Audio data
1144      */
1145
1146     /* Select quantization step size table */
1147     if (s->bit_rate_index == 0x1f)
1148         quant_step_table = lossless_quant_d;
1149     else
1150         quant_step_table = lossy_quant_d;
1151
1152     for (k = base_channel; k < s->prim_channels; k++) {
1153         if (get_bits_left(&s->gb) < 0)
1154             return AVERROR_INVALIDDATA;
1155
1156         for (l = 0; l < s->vq_start_subband[k]; l++) {
1157             int m;
1158
1159             /* Select the mid-tread linear quantizer */
1160             int abits = s->bitalloc[k][l];
1161
1162             float quant_step_size = quant_step_table[abits];
1163
1164             /*
1165              * Determine quantization index code book and its type
1166              */
1167
1168             /* Select quantization index code book */
1169             int sel = s->quant_index_huffman[k][abits];
1170
1171             /*
1172              * Extract bits from the bit stream
1173              */
1174             if (!abits) {
1175                 memset(subband_samples[k][l], 0, 8 * sizeof(subband_samples[0][0][0]));
1176             } else {
1177                 /* Deal with transients */
1178                 int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l];
1179                 float rscale = quant_step_size * s->scale_factor[k][l][sfi] *
1180                                s->scalefactor_adj[k][sel];
1181
1182                 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1183                     if (abits <= 7) {
1184                         /* Block code */
1185                         int block_code1, block_code2, size, levels, err;
1186
1187                         size   = abits_sizes[abits - 1];
1188                         levels = abits_levels[abits - 1];
1189
1190                         block_code1 = get_bits(&s->gb, size);
1191                         block_code2 = get_bits(&s->gb, size);
1192                         err = decode_blockcodes(block_code1, block_code2,
1193                                                 levels, block);
1194                         if (err) {
1195                             av_log(s->avctx, AV_LOG_ERROR,
1196                                    "ERROR: block code look-up failed\n");
1197                             return AVERROR_INVALIDDATA;
1198                         }
1199                     } else {
1200                         /* no coding */
1201                         for (m = 0; m < 8; m++)
1202                             block[m] = get_sbits(&s->gb, abits - 3);
1203                     }
1204                 } else {
1205                     /* Huffman coded */
1206                     for (m = 0; m < 8; m++)
1207                         block[m] = get_bitalloc(&s->gb,
1208                                                 &dca_smpl_bitalloc[abits], sel);
1209                 }
1210
1211                 s->fmt_conv.int32_to_float_fmul_scalar(subband_samples[k][l],
1212                                                        block, rscale, 8);
1213             }
1214
1215             /*
1216              * Inverse ADPCM if in prediction mode
1217              */
1218             if (s->prediction_mode[k][l]) {
1219                 int n;
1220                 for (m = 0; m < 8; m++) {
1221                     for (n = 1; n <= 4; n++)
1222                         if (m >= n)
1223                             subband_samples[k][l][m] +=
1224                                 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1225                                  subband_samples[k][l][m - n] / 8192);
1226                         else if (s->predictor_history)
1227                             subband_samples[k][l][m] +=
1228                                 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1229                                  s->subband_samples_hist[k][l][m - n + 4] / 8192);
1230                 }
1231             }
1232         }
1233
1234         /*
1235          * Decode VQ encoded high frequencies
1236          */
1237         for (l = s->vq_start_subband[k]; l < s->subband_activity[k]; l++) {
1238             /* 1 vector -> 32 samples but we only need the 8 samples
1239              * for this subsubframe. */
1240             int hfvq = s->high_freq_vq[k][l];
1241
1242             if (!s->debug_flag & 0x01) {
1243                 av_log(s->avctx, AV_LOG_DEBUG,
1244                        "Stream with high frequencies VQ coding\n");
1245                 s->debug_flag |= 0x01;
1246             }
1247
1248             int8x8_fmul_int32(subband_samples[k][l],
1249                               &high_freq_vq[hfvq][subsubframe * 8],
1250                               s->scale_factor[k][l][0]);
1251         }
1252     }
1253
1254     /* Check for DSYNC after subsubframe */
1255     if (s->aspf || subsubframe == s->subsubframes[s->current_subframe] - 1) {
1256         if (0xFFFF == get_bits(&s->gb, 16)) {   /* 0xFFFF */
1257 #ifdef TRACE
1258             av_log(s->avctx, AV_LOG_DEBUG, "Got subframe DSYNC\n");
1259 #endif
1260         } else {
1261             av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
1262         }
1263     }
1264
1265     /* Backup predictor history for adpcm */
1266     for (k = base_channel; k < s->prim_channels; k++)
1267         for (l = 0; l < s->vq_start_subband[k]; l++)
1268             memcpy(s->subband_samples_hist[k][l],
1269                    &subband_samples[k][l][4],
1270                    4 * sizeof(subband_samples[0][0][0]));
1271
1272     return 0;
1273 }
1274
1275 static int dca_filter_channels(DCAContext *s, int block_index)
1276 {
1277     float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1278     int k;
1279
1280     /* 32 subbands QMF */
1281     for (k = 0; k < s->prim_channels; k++) {
1282 /*        static float pcm_to_double[8] = { 32768.0, 32768.0, 524288.0, 524288.0,
1283                                             0, 8388608.0, 8388608.0 };*/
1284         qmf_32_subbands(s, k, subband_samples[k],
1285                         &s->samples[256 * s->channel_order_tab[k]],
1286                         M_SQRT1_2 * s->scale_bias /* pcm_to_double[s->source_pcm_res] */);
1287     }
1288
1289     /* Down mixing */
1290     if (s->avctx->request_channels == 2 && s->prim_channels > 2) {
1291         dca_downmix(s->samples, s->amode, s->downmix_coef, s->channel_order_tab);
1292     }
1293
1294     /* Generate LFE samples for this subsubframe FIXME!!! */
1295     if (s->output & DCA_LFE) {
1296         lfe_interpolation_fir(s, s->lfe, 2 * s->lfe,
1297                               s->lfe_data + 2 * s->lfe * (block_index + 4),
1298                               &s->samples[256 * dca_lfe_index[s->amode]],
1299                               (1.0 / 256.0) * s->scale_bias);
1300         /* Outputs 20bits pcm samples */
1301     }
1302
1303     return 0;
1304 }
1305
1306
1307 static int dca_subframe_footer(DCAContext *s, int base_channel)
1308 {
1309     int aux_data_count = 0, i;
1310
1311     /*
1312      * Unpack optional information
1313      */
1314
1315     /* presumably optional information only appears in the core? */
1316     if (!base_channel) {
1317         if (s->timestamp)
1318             skip_bits_long(&s->gb, 32);
1319
1320         if (s->aux_data)
1321             aux_data_count = get_bits(&s->gb, 6);
1322
1323         for (i = 0; i < aux_data_count; i++)
1324             get_bits(&s->gb, 8);
1325
1326         if (s->crc_present && (s->downmix || s->dynrange))
1327             get_bits(&s->gb, 16);
1328     }
1329
1330     return 0;
1331 }
1332
1333 /**
1334  * Decode a dca frame block
1335  *
1336  * @param s     pointer to the DCAContext
1337  */
1338
1339 static int dca_decode_block(DCAContext *s, int base_channel, int block_index)
1340 {
1341     int ret;
1342
1343     /* Sanity check */
1344     if (s->current_subframe >= s->subframes) {
1345         av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1346                s->current_subframe, s->subframes);
1347         return AVERROR_INVALIDDATA;
1348     }
1349
1350     if (!s->current_subsubframe) {
1351 #ifdef TRACE
1352         av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
1353 #endif
1354         /* Read subframe header */
1355         if ((ret = dca_subframe_header(s, base_channel, block_index)))
1356             return ret;
1357     }
1358
1359     /* Read subsubframe */
1360 #ifdef TRACE
1361     av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
1362 #endif
1363     if ((ret = dca_subsubframe(s, base_channel, block_index)))
1364         return ret;
1365
1366     /* Update state */
1367     s->current_subsubframe++;
1368     if (s->current_subsubframe >= s->subsubframes[s->current_subframe]) {
1369         s->current_subsubframe = 0;
1370         s->current_subframe++;
1371     }
1372     if (s->current_subframe >= s->subframes) {
1373 #ifdef TRACE
1374         av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
1375 #endif
1376         /* Read subframe footer */
1377         if ((ret = dca_subframe_footer(s, base_channel)))
1378             return ret;
1379     }
1380
1381     return 0;
1382 }
1383
1384 /**
1385  * Return the number of channels in an ExSS speaker mask (HD)
1386  */
1387 static int dca_exss_mask2count(int mask)
1388 {
1389     /* count bits that mean speaker pairs twice */
1390     return av_popcount(mask) +
1391            av_popcount(mask & (DCA_EXSS_CENTER_LEFT_RIGHT      |
1392                                DCA_EXSS_FRONT_LEFT_RIGHT       |
1393                                DCA_EXSS_FRONT_HIGH_LEFT_RIGHT  |
1394                                DCA_EXSS_WIDE_LEFT_RIGHT        |
1395                                DCA_EXSS_SIDE_LEFT_RIGHT        |
1396                                DCA_EXSS_SIDE_HIGH_LEFT_RIGHT   |
1397                                DCA_EXSS_SIDE_REAR_LEFT_RIGHT   |
1398                                DCA_EXSS_REAR_LEFT_RIGHT        |
1399                                DCA_EXSS_REAR_HIGH_LEFT_RIGHT));
1400 }
1401
1402 /**
1403  * Skip mixing coefficients of a single mix out configuration (HD)
1404  */
1405 static void dca_exss_skip_mix_coeffs(GetBitContext *gb, int channels, int out_ch)
1406 {
1407     int i;
1408
1409     for (i = 0; i < channels; i++) {
1410         int mix_map_mask = get_bits(gb, out_ch);
1411         int num_coeffs = av_popcount(mix_map_mask);
1412         skip_bits_long(gb, num_coeffs * 6);
1413     }
1414 }
1415
1416 /**
1417  * Parse extension substream asset header (HD)
1418  */
1419 static int dca_exss_parse_asset_header(DCAContext *s)
1420 {
1421     int header_pos = get_bits_count(&s->gb);
1422     int header_size;
1423     int channels = 0;
1424     int embedded_stereo = 0;
1425     int embedded_6ch    = 0;
1426     int drc_code_present;
1427     int av_uninit(extensions_mask);
1428     int i, j;
1429
1430     if (get_bits_left(&s->gb) < 16)
1431         return -1;
1432
1433     /* We will parse just enough to get to the extensions bitmask with which
1434      * we can set the profile value. */
1435
1436     header_size = get_bits(&s->gb, 9) + 1;
1437     skip_bits(&s->gb, 3); // asset index
1438
1439     if (s->static_fields) {
1440         if (get_bits1(&s->gb))
1441             skip_bits(&s->gb, 4); // asset type descriptor
1442         if (get_bits1(&s->gb))
1443             skip_bits_long(&s->gb, 24); // language descriptor
1444
1445         if (get_bits1(&s->gb)) {
1446             /* How can one fit 1024 bytes of text here if the maximum value
1447              * for the asset header size field above was 512 bytes? */
1448             int text_length = get_bits(&s->gb, 10) + 1;
1449             if (get_bits_left(&s->gb) < text_length * 8)
1450                 return -1;
1451             skip_bits_long(&s->gb, text_length * 8); // info text
1452         }
1453
1454         skip_bits(&s->gb, 5); // bit resolution - 1
1455         skip_bits(&s->gb, 4); // max sample rate code
1456         channels = get_bits(&s->gb, 8) + 1;
1457
1458         if (get_bits1(&s->gb)) { // 1-to-1 channels to speakers
1459             int spkr_remap_sets;
1460             int spkr_mask_size = 16;
1461             int num_spkrs[7];
1462
1463             if (channels > 2)
1464                 embedded_stereo = get_bits1(&s->gb);
1465             if (channels > 6)
1466                 embedded_6ch = get_bits1(&s->gb);
1467
1468             if (get_bits1(&s->gb)) {
1469                 spkr_mask_size = (get_bits(&s->gb, 2) + 1) << 2;
1470                 skip_bits(&s->gb, spkr_mask_size); // spkr activity mask
1471             }
1472
1473             spkr_remap_sets = get_bits(&s->gb, 3);
1474
1475             for (i = 0; i < spkr_remap_sets; i++) {
1476                 /* std layout mask for each remap set */
1477                 num_spkrs[i] = dca_exss_mask2count(get_bits(&s->gb, spkr_mask_size));
1478             }
1479
1480             for (i = 0; i < spkr_remap_sets; i++) {
1481                 int num_dec_ch_remaps = get_bits(&s->gb, 5) + 1;
1482                 if (get_bits_left(&s->gb) < 0)
1483                     return -1;
1484
1485                 for (j = 0; j < num_spkrs[i]; j++) {
1486                     int remap_dec_ch_mask = get_bits_long(&s->gb, num_dec_ch_remaps);
1487                     int num_dec_ch = av_popcount(remap_dec_ch_mask);
1488                     skip_bits_long(&s->gb, num_dec_ch * 5); // remap codes
1489                 }
1490             }
1491
1492         } else {
1493             skip_bits(&s->gb, 3); // representation type
1494         }
1495     }
1496
1497     drc_code_present = get_bits1(&s->gb);
1498     if (drc_code_present)
1499         get_bits(&s->gb, 8); // drc code
1500
1501     if (get_bits1(&s->gb))
1502         skip_bits(&s->gb, 5); // dialog normalization code
1503
1504     if (drc_code_present && embedded_stereo)
1505         get_bits(&s->gb, 8); // drc stereo code
1506
1507     if (s->mix_metadata && get_bits1(&s->gb)) {
1508         skip_bits(&s->gb, 1); // external mix
1509         skip_bits(&s->gb, 6); // post mix gain code
1510
1511         if (get_bits(&s->gb, 2) != 3) // mixer drc code
1512             skip_bits(&s->gb, 3); // drc limit
1513         else
1514             skip_bits(&s->gb, 8); // custom drc code
1515
1516         if (get_bits1(&s->gb)) // channel specific scaling
1517             for (i = 0; i < s->num_mix_configs; i++)
1518                 skip_bits_long(&s->gb, s->mix_config_num_ch[i] * 6); // scale codes
1519         else
1520             skip_bits_long(&s->gb, s->num_mix_configs * 6); // scale codes
1521
1522         for (i = 0; i < s->num_mix_configs; i++) {
1523             if (get_bits_left(&s->gb) < 0)
1524                 return -1;
1525             dca_exss_skip_mix_coeffs(&s->gb, channels, s->mix_config_num_ch[i]);
1526             if (embedded_6ch)
1527                 dca_exss_skip_mix_coeffs(&s->gb, 6, s->mix_config_num_ch[i]);
1528             if (embedded_stereo)
1529                 dca_exss_skip_mix_coeffs(&s->gb, 2, s->mix_config_num_ch[i]);
1530         }
1531     }
1532
1533     switch (get_bits(&s->gb, 2)) {
1534     case 0: extensions_mask = get_bits(&s->gb, 12); break;
1535     case 1: extensions_mask = DCA_EXT_EXSS_XLL;     break;
1536     case 2: extensions_mask = DCA_EXT_EXSS_LBR;     break;
1537     case 3: extensions_mask = 0; /* aux coding */   break;
1538     }
1539
1540     /* not parsed further, we were only interested in the extensions mask */
1541
1542     if (get_bits_left(&s->gb) < 0)
1543         return -1;
1544
1545     if (get_bits_count(&s->gb) - header_pos > header_size * 8) {
1546         av_log(s->avctx, AV_LOG_WARNING, "Asset header size mismatch.\n");
1547         return -1;
1548     }
1549     skip_bits_long(&s->gb, header_pos + header_size * 8 - get_bits_count(&s->gb));
1550
1551     if (extensions_mask & DCA_EXT_EXSS_XLL)
1552         s->profile = FF_PROFILE_DTS_HD_MA;
1553     else if (extensions_mask & (DCA_EXT_EXSS_XBR | DCA_EXT_EXSS_X96 |
1554                                 DCA_EXT_EXSS_XXCH))
1555         s->profile = FF_PROFILE_DTS_HD_HRA;
1556
1557     if (!(extensions_mask & DCA_EXT_CORE))
1558         av_log(s->avctx, AV_LOG_WARNING, "DTS core detection mismatch.\n");
1559     if ((extensions_mask & DCA_CORE_EXTS) != s->core_ext_mask)
1560         av_log(s->avctx, AV_LOG_WARNING,
1561                "DTS extensions detection mismatch (%d, %d)\n",
1562                extensions_mask & DCA_CORE_EXTS, s->core_ext_mask);
1563
1564     return 0;
1565 }
1566
1567 /**
1568  * Parse extension substream header (HD)
1569  */
1570 static void dca_exss_parse_header(DCAContext *s)
1571 {
1572     int ss_index;
1573     int blownup;
1574     int num_audiop = 1;
1575     int num_assets = 1;
1576     int active_ss_mask[8];
1577     int i, j;
1578
1579     if (get_bits_left(&s->gb) < 52)
1580         return;
1581
1582     skip_bits(&s->gb, 8); // user data
1583     ss_index = get_bits(&s->gb, 2);
1584
1585     blownup = get_bits1(&s->gb);
1586     skip_bits(&s->gb,  8 + 4 * blownup); // header_size
1587     skip_bits(&s->gb, 16 + 4 * blownup); // hd_size
1588
1589     s->static_fields = get_bits1(&s->gb);
1590     if (s->static_fields) {
1591         skip_bits(&s->gb, 2); // reference clock code
1592         skip_bits(&s->gb, 3); // frame duration code
1593
1594         if (get_bits1(&s->gb))
1595             skip_bits_long(&s->gb, 36); // timestamp
1596
1597         /* a single stream can contain multiple audio assets that can be
1598          * combined to form multiple audio presentations */
1599
1600         num_audiop = get_bits(&s->gb, 3) + 1;
1601         if (num_audiop > 1) {
1602             av_log_ask_for_sample(s->avctx, "Multiple DTS-HD audio presentations.");
1603             /* ignore such streams for now */
1604             return;
1605         }
1606
1607         num_assets = get_bits(&s->gb, 3) + 1;
1608         if (num_assets > 1) {
1609             av_log_ask_for_sample(s->avctx, "Multiple DTS-HD audio assets.");
1610             /* ignore such streams for now */
1611             return;
1612         }
1613
1614         for (i = 0; i < num_audiop; i++)
1615             active_ss_mask[i] = get_bits(&s->gb, ss_index + 1);
1616
1617         for (i = 0; i < num_audiop; i++)
1618             for (j = 0; j <= ss_index; j++)
1619                 if (active_ss_mask[i] & (1 << j))
1620                     skip_bits(&s->gb, 8); // active asset mask
1621
1622         s->mix_metadata = get_bits1(&s->gb);
1623         if (s->mix_metadata) {
1624             int mix_out_mask_size;
1625
1626             skip_bits(&s->gb, 2); // adjustment level
1627             mix_out_mask_size  = (get_bits(&s->gb, 2) + 1) << 2;
1628             s->num_mix_configs =  get_bits(&s->gb, 2) + 1;
1629
1630             for (i = 0; i < s->num_mix_configs; i++) {
1631                 int mix_out_mask        = get_bits(&s->gb, mix_out_mask_size);
1632                 s->mix_config_num_ch[i] = dca_exss_mask2count(mix_out_mask);
1633             }
1634         }
1635     }
1636
1637     for (i = 0; i < num_assets; i++)
1638         skip_bits_long(&s->gb, 16 + 4 * blownup);  // asset size
1639
1640     for (i = 0; i < num_assets; i++) {
1641         if (dca_exss_parse_asset_header(s))
1642             return;
1643     }
1644
1645     /* not parsed further, we were only interested in the extensions mask
1646      * from the asset header */
1647 }
1648
1649 /**
1650  * Main frame decoding function
1651  * FIXME add arguments
1652  */
1653 static int dca_decode_frame(AVCodecContext *avctx, void *data,
1654                             int *got_frame_ptr, AVPacket *avpkt)
1655 {
1656     const uint8_t *buf = avpkt->data;
1657     int buf_size = avpkt->size;
1658
1659     int lfe_samples;
1660     int num_core_channels = 0;
1661     int i, ret;
1662     float   *samples_flt;
1663     int16_t *samples_s16;
1664     DCAContext *s = avctx->priv_data;
1665     int channels;
1666     int core_ss_end;
1667
1668
1669     s->xch_present = 0;
1670
1671     s->dca_buffer_size = ff_dca_convert_bitstream(buf, buf_size, s->dca_buffer,
1672                                                   DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
1673     if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
1674         av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
1675         return AVERROR_INVALIDDATA;
1676     }
1677
1678     init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
1679     if ((ret = dca_parse_frame_header(s)) < 0) {
1680         //seems like the frame is corrupt, try with the next one
1681         return ret;
1682     }
1683     //set AVCodec values with parsed data
1684     avctx->sample_rate = s->sample_rate;
1685     avctx->bit_rate    = s->bit_rate;
1686
1687     s->profile = FF_PROFILE_DTS;
1688
1689     for (i = 0; i < (s->sample_blocks / 8); i++) {
1690         if ((ret = dca_decode_block(s, 0, i))) {
1691             av_log(avctx, AV_LOG_ERROR, "error decoding block\n");
1692             return ret;
1693         }
1694     }
1695
1696     /* record number of core channels incase less than max channels are requested */
1697     num_core_channels = s->prim_channels;
1698
1699     if (s->ext_coding)
1700         s->core_ext_mask = dca_ext_audio_descr_mask[s->ext_descr];
1701     else
1702         s->core_ext_mask = 0;
1703
1704     core_ss_end = FFMIN(s->frame_size, s->dca_buffer_size) * 8;
1705
1706     /* only scan for extensions if ext_descr was unknown or indicated a
1707      * supported XCh extension */
1708     if (s->core_ext_mask < 0 || s->core_ext_mask & DCA_EXT_XCH) {
1709
1710         /* if ext_descr was unknown, clear s->core_ext_mask so that the
1711          * extensions scan can fill it up */
1712         s->core_ext_mask = FFMAX(s->core_ext_mask, 0);
1713
1714         /* extensions start at 32-bit boundaries into bitstream */
1715         skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1716
1717         while (core_ss_end - get_bits_count(&s->gb) >= 32) {
1718             uint32_t bits = get_bits_long(&s->gb, 32);
1719
1720             switch (bits) {
1721             case 0x5a5a5a5a: {
1722                 int ext_amode, xch_fsize;
1723
1724                 s->xch_base_channel = s->prim_channels;
1725
1726                 /* validate sync word using XCHFSIZE field */
1727                 xch_fsize = show_bits(&s->gb, 10);
1728                 if ((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) &&
1729                     (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1))
1730                     continue;
1731
1732                 /* skip length-to-end-of-frame field for the moment */
1733                 skip_bits(&s->gb, 10);
1734
1735                 s->core_ext_mask |= DCA_EXT_XCH;
1736
1737                 /* extension amode(number of channels in extension) should be 1 */
1738                 /* AFAIK XCh is not used for more channels */
1739                 if ((ext_amode = get_bits(&s->gb, 4)) != 1) {
1740                     av_log(avctx, AV_LOG_ERROR, "XCh extension amode %d not"
1741                            " supported!\n", ext_amode);
1742                     continue;
1743                 }
1744
1745                 /* much like core primary audio coding header */
1746                 dca_parse_audio_coding_header(s, s->xch_base_channel);
1747
1748                 for (i = 0; i < (s->sample_blocks / 8); i++)
1749                     if ((ret = dca_decode_block(s, s->xch_base_channel, i))) {
1750                         av_log(avctx, AV_LOG_ERROR, "error decoding XCh extension\n");
1751                         continue;
1752                     }
1753
1754                 s->xch_present = 1;
1755                 break;
1756             }
1757             case 0x47004a03:
1758                 /* XXCh: extended channels */
1759                 /* usually found either in core or HD part in DTS-HD HRA streams,
1760                  * but not in DTS-ES which contains XCh extensions instead */
1761                 s->core_ext_mask |= DCA_EXT_XXCH;
1762                 break;
1763
1764             case 0x1d95f262: {
1765                 int fsize96 = show_bits(&s->gb, 12) + 1;
1766                 if (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + fsize96)
1767                     continue;
1768
1769                 av_log(avctx, AV_LOG_DEBUG, "X96 extension found at %d bits\n",
1770                        get_bits_count(&s->gb));
1771                 skip_bits(&s->gb, 12);
1772                 av_log(avctx, AV_LOG_DEBUG, "FSIZE96 = %d bytes\n", fsize96);
1773                 av_log(avctx, AV_LOG_DEBUG, "REVNO = %d\n", get_bits(&s->gb, 4));
1774
1775                 s->core_ext_mask |= DCA_EXT_X96;
1776                 break;
1777             }
1778             }
1779
1780             skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1781         }
1782     } else {
1783         /* no supported extensions, skip the rest of the core substream */
1784         skip_bits_long(&s->gb, core_ss_end - get_bits_count(&s->gb));
1785     }
1786
1787     if (s->core_ext_mask & DCA_EXT_X96)
1788         s->profile = FF_PROFILE_DTS_96_24;
1789     else if (s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH))
1790         s->profile = FF_PROFILE_DTS_ES;
1791
1792     /* check for ExSS (HD part) */
1793     if (s->dca_buffer_size - s->frame_size > 32 &&
1794         get_bits_long(&s->gb, 32) == DCA_HD_MARKER)
1795         dca_exss_parse_header(s);
1796
1797     avctx->profile = s->profile;
1798
1799     channels = s->prim_channels + !!s->lfe;
1800
1801     if (s->amode < 16) {
1802         avctx->channel_layout = dca_core_channel_layout[s->amode];
1803
1804         if (s->xch_present && (!avctx->request_channels ||
1805                                avctx->request_channels > num_core_channels + !!s->lfe)) {
1806             avctx->channel_layout |= AV_CH_BACK_CENTER;
1807             if (s->lfe) {
1808                 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1809                 s->channel_order_tab = dca_channel_reorder_lfe_xch[s->amode];
1810             } else {
1811                 s->channel_order_tab = dca_channel_reorder_nolfe_xch[s->amode];
1812             }
1813         } else {
1814             channels = num_core_channels + !!s->lfe;
1815             s->xch_present = 0; /* disable further xch processing */
1816             if (s->lfe) {
1817                 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1818                 s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
1819             } else
1820                 s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
1821         }
1822
1823         if (channels > !!s->lfe &&
1824             s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
1825             return AVERROR_INVALIDDATA;
1826
1827         if (avctx->request_channels == 2 && s->prim_channels > 2) {
1828             channels = 2;
1829             s->output = DCA_STEREO;
1830             avctx->channel_layout = AV_CH_LAYOUT_STEREO;
1831         }
1832         else if (avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE) {
1833             static const int8_t dca_channel_order_native[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
1834             s->channel_order_tab = dca_channel_order_native;
1835         }
1836     } else {
1837         av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n", s->amode);
1838         return AVERROR_INVALIDDATA;
1839     }
1840
1841     if (avctx->channels != channels) {
1842         if (avctx->channels)
1843             av_log(avctx, AV_LOG_INFO, "Number of channels changed in DCA decoder (%d -> %d)\n", avctx->channels, channels);
1844         avctx->channels = channels;
1845     }
1846
1847     /* get output buffer */
1848     s->frame.nb_samples = 256 * (s->sample_blocks / 8);
1849     if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) {
1850         av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1851         return ret;
1852     }
1853     samples_flt = (float *)   s->frame.data[0];
1854     samples_s16 = (int16_t *) s->frame.data[0];
1855
1856     /* filter to get final output */
1857     for (i = 0; i < (s->sample_blocks / 8); i++) {
1858         dca_filter_channels(s, i);
1859
1860         /* If this was marked as a DTS-ES stream we need to subtract back- */
1861         /* channel from SL & SR to remove matrixed back-channel signal */
1862         if ((s->source_pcm_res & 1) && s->xch_present) {
1863             float *back_chan = s->samples + s->channel_order_tab[s->xch_base_channel]     * 256;
1864             float *lt_chan   = s->samples + s->channel_order_tab[s->xch_base_channel - 2] * 256;
1865             float *rt_chan   = s->samples + s->channel_order_tab[s->xch_base_channel - 1] * 256;
1866             s->dsp.vector_fmac_scalar(lt_chan, back_chan, -M_SQRT1_2, 256);
1867             s->dsp.vector_fmac_scalar(rt_chan, back_chan, -M_SQRT1_2, 256);
1868         }
1869
1870         if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT) {
1871             s->fmt_conv.float_interleave(samples_flt, s->samples_chanptr, 256,
1872                                          channels);
1873             samples_flt += 256 * channels;
1874         } else {
1875             s->fmt_conv.float_to_int16_interleave(samples_s16,
1876                                                   s->samples_chanptr, 256,
1877                                                   channels);
1878             samples_s16 += 256 * channels;
1879         }
1880     }
1881
1882     /* update lfe history */
1883     lfe_samples = 2 * s->lfe * (s->sample_blocks / 8);
1884     for (i = 0; i < 2 * s->lfe * 4; i++)
1885         s->lfe_data[i] = s->lfe_data[i + lfe_samples];
1886
1887     *got_frame_ptr    = 1;
1888     *(AVFrame *) data = s->frame;
1889
1890     return buf_size;
1891 }
1892
1893
1894
1895 /**
1896  * DCA initialization
1897  *
1898  * @param avctx     pointer to the AVCodecContext
1899  */
1900
1901 static av_cold int dca_decode_init(AVCodecContext *avctx)
1902 {
1903     DCAContext *s = avctx->priv_data;
1904     int i;
1905
1906     s->avctx = avctx;
1907     dca_init_vlcs();
1908
1909     ff_dsputil_init(&s->dsp, avctx);
1910     ff_mdct_init(&s->imdct, 6, 1, 1.0);
1911     ff_synth_filter_init(&s->synth);
1912     ff_dcadsp_init(&s->dcadsp);
1913     ff_fmt_convert_init(&s->fmt_conv, avctx);
1914
1915     for (i = 0; i < DCA_PRIM_CHANNELS_MAX + 1; i++)
1916         s->samples_chanptr[i] = s->samples + i * 256;
1917
1918     if (avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT) {
1919         avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
1920         s->scale_bias     = 1.0 / 32768.0;
1921     } else {
1922         avctx->sample_fmt = AV_SAMPLE_FMT_S16;
1923         s->scale_bias     = 1.0;
1924     }
1925
1926     /* allow downmixing to stereo */
1927     if (avctx->channels > 0 && avctx->request_channels < avctx->channels &&
1928         avctx->request_channels == 2) {
1929         avctx->channels = avctx->request_channels;
1930     }
1931
1932     avcodec_get_frame_defaults(&s->frame);
1933     avctx->coded_frame = &s->frame;
1934
1935     return 0;
1936 }
1937
1938 static av_cold int dca_decode_end(AVCodecContext *avctx)
1939 {
1940     DCAContext *s = avctx->priv_data;
1941     ff_mdct_end(&s->imdct);
1942     return 0;
1943 }
1944
1945 static const AVProfile profiles[] = {
1946     { FF_PROFILE_DTS,        "DTS"        },
1947     { FF_PROFILE_DTS_ES,     "DTS-ES"     },
1948     { FF_PROFILE_DTS_96_24,  "DTS 96/24"  },
1949     { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
1950     { FF_PROFILE_DTS_HD_MA,  "DTS-HD MA"  },
1951     { FF_PROFILE_UNKNOWN },
1952 };
1953
1954 AVCodec ff_dca_decoder = {
1955     .name            = "dca",
1956     .type            = AVMEDIA_TYPE_AUDIO,
1957     .id              = CODEC_ID_DTS,
1958     .priv_data_size  = sizeof(DCAContext),
1959     .init            = dca_decode_init,
1960     .decode          = dca_decode_frame,
1961     .close           = dca_decode_end,
1962     .long_name       = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
1963     .capabilities    = CODEC_CAP_CHANNEL_CONF | CODEC_CAP_DR1,
1964     .sample_fmts     = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT,
1965                                                        AV_SAMPLE_FMT_S16,
1966                                                        AV_SAMPLE_FMT_NONE },
1967     .profiles        = NULL_IF_CONFIG_SMALL(profiles),
1968 };