2 * DCA compatible decoder
3 * Copyright (C) 2004 Gildas Bazin
4 * Copyright (C) 2004 Benjamin Zores
5 * Copyright (C) 2006 Benjamin Larsson
6 * Copyright (C) 2007 Konstantin Shishkov
8 * This file is part of FFmpeg.
10 * FFmpeg is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
15 * FFmpeg is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with FFmpeg; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29 #include "libavutil/common.h"
30 #include "libavutil/intmath.h"
31 #include "libavutil/intreadwrite.h"
32 #include "libavutil/audioconvert.h"
41 #include "synth_filter.h"
43 #include "fmtconvert.h"
51 #define DCA_PRIM_CHANNELS_MAX (7)
52 #define DCA_SUBBANDS (32)
53 #define DCA_ABITS_MAX (32) /* Should be 28 */
54 #define DCA_SUBSUBFRAMES_MAX (4)
55 #define DCA_SUBFRAMES_MAX (16)
56 #define DCA_BLOCKS_MAX (16)
57 #define DCA_LFE_MAX (3)
73 /* these are unconfirmed but should be mostly correct */
74 enum DCAExSSSpeakerMask {
75 DCA_EXSS_FRONT_CENTER = 0x0001,
76 DCA_EXSS_FRONT_LEFT_RIGHT = 0x0002,
77 DCA_EXSS_SIDE_REAR_LEFT_RIGHT = 0x0004,
78 DCA_EXSS_LFE = 0x0008,
79 DCA_EXSS_REAR_CENTER = 0x0010,
80 DCA_EXSS_FRONT_HIGH_LEFT_RIGHT = 0x0020,
81 DCA_EXSS_REAR_LEFT_RIGHT = 0x0040,
82 DCA_EXSS_FRONT_HIGH_CENTER = 0x0080,
83 DCA_EXSS_OVERHEAD = 0x0100,
84 DCA_EXSS_CENTER_LEFT_RIGHT = 0x0200,
85 DCA_EXSS_WIDE_LEFT_RIGHT = 0x0400,
86 DCA_EXSS_SIDE_LEFT_RIGHT = 0x0800,
87 DCA_EXSS_LFE2 = 0x1000,
88 DCA_EXSS_SIDE_HIGH_LEFT_RIGHT = 0x2000,
89 DCA_EXSS_REAR_HIGH_CENTER = 0x4000,
90 DCA_EXSS_REAR_HIGH_LEFT_RIGHT = 0x8000,
93 enum DCAExtensionMask {
94 DCA_EXT_CORE = 0x001, ///< core in core substream
95 DCA_EXT_XXCH = 0x002, ///< XXCh channels extension in core substream
96 DCA_EXT_X96 = 0x004, ///< 96/24 extension in core substream
97 DCA_EXT_XCH = 0x008, ///< XCh channel extension in core substream
98 DCA_EXT_EXSS_CORE = 0x010, ///< core in ExSS (extension substream)
99 DCA_EXT_EXSS_XBR = 0x020, ///< extended bitrate extension in ExSS
100 DCA_EXT_EXSS_XXCH = 0x040, ///< XXCh channels extension in ExSS
101 DCA_EXT_EXSS_X96 = 0x080, ///< 96/24 extension in ExSS
102 DCA_EXT_EXSS_LBR = 0x100, ///< low bitrate component in ExSS
103 DCA_EXT_EXSS_XLL = 0x200, ///< lossless extension in ExSS
106 /* -1 are reserved or unknown */
107 static const int dca_ext_audio_descr_mask[] = {
111 DCA_EXT_XCH | DCA_EXT_X96,
118 /* extensions that reside in core substream */
119 #define DCA_CORE_EXTS (DCA_EXT_XCH | DCA_EXT_XXCH | DCA_EXT_X96)
121 /* Tables for mapping dts channel configurations to libavcodec multichannel api.
122 * Some compromises have been made for special configurations. Most configurations
123 * are never used so complete accuracy is not needed.
125 * L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
126 * S -> side, when both rear and back are configured move one of them to the side channel
128 * All 2 channel configurations -> AV_CH_LAYOUT_STEREO
130 static const uint64_t dca_core_channel_layout[] = {
131 AV_CH_FRONT_CENTER, ///< 1, A
132 AV_CH_LAYOUT_STEREO, ///< 2, A + B (dual mono)
133 AV_CH_LAYOUT_STEREO, ///< 2, L + R (stereo)
134 AV_CH_LAYOUT_STEREO, ///< 2, (L + R) + (L - R) (sum-difference)
135 AV_CH_LAYOUT_STEREO, ///< 2, LT + RT (left and right total)
136 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER, ///< 3, C + L + R
137 AV_CH_LAYOUT_STEREO | AV_CH_BACK_CENTER, ///< 3, L + R + S
138 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_BACK_CENTER, ///< 4, C + L + R + S
139 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT, ///< 4, L + R + SL + SR
141 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_SIDE_LEFT |
142 AV_CH_SIDE_RIGHT, ///< 5, C + L + R + SL + SR
144 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
145 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER, ///< 6, CL + CR + L + R + SL + SR
147 AV_CH_LAYOUT_STEREO | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT |
148 AV_CH_FRONT_CENTER | AV_CH_BACK_CENTER, ///< 6, C + L + R + LR + RR + OV
150 AV_CH_FRONT_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
151 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_BACK_CENTER |
152 AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT, ///< 6, CF + CR + LF + RF + LR + RR
154 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER |
155 AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
156 AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT, ///< 7, CL + C + CR + L + R + SL + SR
158 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
159 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
160 AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT, ///< 8, CL + CR + L + R + SL1 + SL2 + SR1 + SR2
162 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER |
163 AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
164 AV_CH_SIDE_LEFT | AV_CH_BACK_CENTER | AV_CH_SIDE_RIGHT, ///< 8, CL + C + CR + L + R + SL + S + SR
167 static const int8_t dca_lfe_index[] = {
168 1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
171 static const int8_t dca_channel_reorder_lfe[][9] = {
172 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
173 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
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 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
178 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
179 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
180 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
181 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
182 { 3, 4, 0, 1, 5, 6, -1, -1, -1},
183 { 2, 0, 1, 4, 5, 6, -1, -1, -1},
184 { 0, 6, 4, 5, 2, 3, -1, -1, -1},
185 { 4, 2, 5, 0, 1, 6, 7, -1, -1},
186 { 5, 6, 0, 1, 7, 3, 8, 4, -1},
187 { 4, 2, 5, 0, 1, 6, 8, 7, -1},
190 static const int8_t dca_channel_reorder_lfe_xch[][9] = {
191 { 0, 2, -1, -1, -1, -1, -1, -1, -1},
192 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
193 { 0, 1, 3, -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 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
197 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
198 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
199 { 0, 1, 4, 5, 3, -1, -1, -1, -1},
200 { 2, 0, 1, 5, 6, 4, -1, -1, -1},
201 { 3, 4, 0, 1, 6, 7, 5, -1, -1},
202 { 2, 0, 1, 4, 5, 6, 7, -1, -1},
203 { 0, 6, 4, 5, 2, 3, 7, -1, -1},
204 { 4, 2, 5, 0, 1, 7, 8, 6, -1},
205 { 5, 6, 0, 1, 8, 3, 9, 4, 7},
206 { 4, 2, 5, 0, 1, 6, 9, 8, 7},
209 static const int8_t dca_channel_reorder_nolfe[][9] = {
210 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
211 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
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 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
216 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
217 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
218 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
219 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
220 { 2, 3, 0, 1, 4, 5, -1, -1, -1},
221 { 2, 0, 1, 3, 4, 5, -1, -1, -1},
222 { 0, 5, 3, 4, 1, 2, -1, -1, -1},
223 { 3, 2, 4, 0, 1, 5, 6, -1, -1},
224 { 4, 5, 0, 1, 6, 2, 7, 3, -1},
225 { 3, 2, 4, 0, 1, 5, 7, 6, -1},
228 static const int8_t dca_channel_reorder_nolfe_xch[][9] = {
229 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
230 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
231 { 0, 1, 2, -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 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
235 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
236 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
237 { 0, 1, 3, 4, 2, -1, -1, -1, -1},
238 { 2, 0, 1, 4, 5, 3, -1, -1, -1},
239 { 2, 3, 0, 1, 5, 6, 4, -1, -1},
240 { 2, 0, 1, 3, 4, 5, 6, -1, -1},
241 { 0, 5, 3, 4, 1, 2, 6, -1, -1},
242 { 3, 2, 4, 0, 1, 6, 7, 5, -1},
243 { 4, 5, 0, 1, 7, 2, 8, 3, 6},
244 { 3, 2, 4, 0, 1, 5, 8, 7, 6},
247 #define DCA_DOLBY 101 /* FIXME */
249 #define DCA_CHANNEL_BITS 6
250 #define DCA_CHANNEL_MASK 0x3F
254 #define HEADER_SIZE 14
256 #define DCA_MAX_FRAME_SIZE 16384
257 #define DCA_MAX_EXSS_HEADER_SIZE 4096
259 #define DCA_BUFFER_PADDING_SIZE 1024
261 /** Bit allocation */
263 int offset; ///< code values offset
264 int maxbits[8]; ///< max bits in VLC
265 int wrap; ///< wrap for get_vlc2()
266 VLC vlc[8]; ///< actual codes
269 static BitAlloc dca_bitalloc_index; ///< indexes for samples VLC select
270 static BitAlloc dca_tmode; ///< transition mode VLCs
271 static BitAlloc dca_scalefactor; ///< scalefactor VLCs
272 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
274 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba,
277 return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) +
282 AVCodecContext *avctx;
285 int frame_type; ///< type of the current frame
286 int samples_deficit; ///< deficit sample count
287 int crc_present; ///< crc is present in the bitstream
288 int sample_blocks; ///< number of PCM sample blocks
289 int frame_size; ///< primary frame byte size
290 int amode; ///< audio channels arrangement
291 int sample_rate; ///< audio sampling rate
292 int bit_rate; ///< transmission bit rate
293 int bit_rate_index; ///< transmission bit rate index
295 int downmix; ///< embedded downmix enabled
296 int dynrange; ///< embedded dynamic range flag
297 int timestamp; ///< embedded time stamp flag
298 int aux_data; ///< auxiliary data flag
299 int hdcd; ///< source material is mastered in HDCD
300 int ext_descr; ///< extension audio descriptor flag
301 int ext_coding; ///< extended coding flag
302 int aspf; ///< audio sync word insertion flag
303 int lfe; ///< low frequency effects flag
304 int predictor_history; ///< predictor history flag
305 int header_crc; ///< header crc check bytes
306 int multirate_inter; ///< multirate interpolator switch
307 int version; ///< encoder software revision
308 int copy_history; ///< copy history
309 int source_pcm_res; ///< source pcm resolution
310 int front_sum; ///< front sum/difference flag
311 int surround_sum; ///< surround sum/difference flag
312 int dialog_norm; ///< dialog normalisation parameter
314 /* Primary audio coding header */
315 int subframes; ///< number of subframes
316 int total_channels; ///< number of channels including extensions
317 int prim_channels; ///< number of primary audio channels
318 int subband_activity[DCA_PRIM_CHANNELS_MAX]; ///< subband activity count
319 int vq_start_subband[DCA_PRIM_CHANNELS_MAX]; ///< high frequency vq start subband
320 int joint_intensity[DCA_PRIM_CHANNELS_MAX]; ///< joint intensity coding index
321 int transient_huffman[DCA_PRIM_CHANNELS_MAX]; ///< transient mode code book
322 int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]; ///< scale factor code book
323 int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX]; ///< bit allocation quantizer select
324 int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< quantization index codebook select
325 float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< scale factor adjustment
327 /* Primary audio coding side information */
328 int subsubframes[DCA_SUBFRAMES_MAX]; ///< number of subsubframes
329 int partial_samples[DCA_SUBFRAMES_MAX]; ///< partial subsubframe samples count
330 int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction mode (ADPCM used or not)
331 int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction VQ coefs
332 int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< bit allocation index
333 int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< transition mode (transients)
334 int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2]; ///< scale factors (2 if transient)
335 int joint_huff[DCA_PRIM_CHANNELS_MAX]; ///< joint subband scale factors codebook
336 int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< joint subband scale factors
337 int downmix_coef[DCA_PRIM_CHANNELS_MAX][2]; ///< stereo downmix coefficients
338 int dynrange_coef; ///< dynamic range coefficient
340 int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< VQ encoded high frequency subbands
342 float lfe_data[2 * DCA_LFE_MAX * (DCA_BLOCKS_MAX + 4)]; ///< Low frequency effect data
343 int lfe_scale_factor;
345 /* Subband samples history (for ADPCM) */
346 DECLARE_ALIGNED(16, float, subband_samples_hist)[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4];
347 DECLARE_ALIGNED(32, float, subband_fir_hist)[DCA_PRIM_CHANNELS_MAX][512];
348 DECLARE_ALIGNED(32, float, subband_fir_noidea)[DCA_PRIM_CHANNELS_MAX][32];
349 int hist_index[DCA_PRIM_CHANNELS_MAX];
350 DECLARE_ALIGNED(32, float, raXin)[32];
352 int output; ///< type of output
353 float scale_bias; ///< output scale
355 DECLARE_ALIGNED(32, float, subband_samples)[DCA_BLOCKS_MAX][DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8];
356 DECLARE_ALIGNED(32, float, samples)[(DCA_PRIM_CHANNELS_MAX + 1) * 256];
357 const float *samples_chanptr[DCA_PRIM_CHANNELS_MAX + 1];
359 uint8_t dca_buffer[DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE + DCA_BUFFER_PADDING_SIZE];
360 int dca_buffer_size; ///< how much data is in the dca_buffer
362 const int8_t *channel_order_tab; ///< channel reordering table, lfe and non lfe
364 /* Current position in DCA frame */
365 int current_subframe;
366 int current_subsubframe;
368 int core_ext_mask; ///< present extensions in the core substream
370 /* XCh extension information */
371 int xch_present; ///< XCh extension present and valid
372 int xch_base_channel; ///< index of first (only) channel containing XCH data
374 /* ExSS header parser */
375 int static_fields; ///< static fields present
376 int mix_metadata; ///< mixing metadata present
377 int num_mix_configs; ///< number of mix out configurations
378 int mix_config_num_ch[4]; ///< number of channels in each mix out configuration
382 int debug_flag; ///< used for suppressing repeated error messages output
385 SynthFilterContext synth;
386 DCADSPContext dcadsp;
387 FmtConvertContext fmt_conv;
390 static const uint16_t dca_vlc_offs[] = {
391 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364,
392 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508,
393 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564,
394 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240,
395 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
396 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
399 static av_cold void dca_init_vlcs(void)
401 static int vlcs_initialized = 0;
403 static VLC_TYPE dca_table[23622][2];
405 if (vlcs_initialized)
408 dca_bitalloc_index.offset = 1;
409 dca_bitalloc_index.wrap = 2;
410 for (i = 0; i < 5; i++) {
411 dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]];
412 dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i];
413 init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
414 bitalloc_12_bits[i], 1, 1,
415 bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
417 dca_scalefactor.offset = -64;
418 dca_scalefactor.wrap = 2;
419 for (i = 0; i < 5; i++) {
420 dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]];
421 dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5];
422 init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
423 scales_bits[i], 1, 1,
424 scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
426 dca_tmode.offset = 0;
428 for (i = 0; i < 4; i++) {
429 dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]];
430 dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10];
431 init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
433 tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
436 for (i = 0; i < 10; i++)
437 for (j = 0; j < 7; j++) {
438 if (!bitalloc_codes[i][j])
440 dca_smpl_bitalloc[i + 1].offset = bitalloc_offsets[i];
441 dca_smpl_bitalloc[i + 1].wrap = 1 + (j > 4);
442 dca_smpl_bitalloc[i + 1].vlc[j].table = &dca_table[dca_vlc_offs[c]];
443 dca_smpl_bitalloc[i + 1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
445 init_vlc(&dca_smpl_bitalloc[i + 1].vlc[j], bitalloc_maxbits[i][j],
447 bitalloc_bits[i][j], 1, 1,
448 bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC);
451 vlcs_initialized = 1;
454 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
457 *dst++ = get_bits(gb, bits);
460 static int dca_parse_audio_coding_header(DCAContext *s, int base_channel)
463 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
464 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
465 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
467 s->total_channels = get_bits(&s->gb, 3) + 1 + base_channel;
468 s->prim_channels = s->total_channels;
470 if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
471 s->prim_channels = DCA_PRIM_CHANNELS_MAX;
474 for (i = base_channel; i < s->prim_channels; i++) {
475 s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
476 if (s->subband_activity[i] > DCA_SUBBANDS)
477 s->subband_activity[i] = DCA_SUBBANDS;
479 for (i = base_channel; i < s->prim_channels; i++) {
480 s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
481 if (s->vq_start_subband[i] > DCA_SUBBANDS)
482 s->vq_start_subband[i] = DCA_SUBBANDS;
484 get_array(&s->gb, s->joint_intensity + base_channel, s->prim_channels - base_channel, 3);
485 get_array(&s->gb, s->transient_huffman + base_channel, s->prim_channels - base_channel, 2);
486 get_array(&s->gb, s->scalefactor_huffman + base_channel, s->prim_channels - base_channel, 3);
487 get_array(&s->gb, s->bitalloc_huffman + base_channel, s->prim_channels - base_channel, 3);
489 /* Get codebooks quantization indexes */
491 memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
492 for (j = 1; j < 11; j++)
493 for (i = base_channel; i < s->prim_channels; i++)
494 s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
496 /* Get scale factor adjustment */
497 for (j = 0; j < 11; j++)
498 for (i = base_channel; i < s->prim_channels; i++)
499 s->scalefactor_adj[i][j] = 1;
501 for (j = 1; j < 11; j++)
502 for (i = base_channel; i < s->prim_channels; i++)
503 if (s->quant_index_huffman[i][j] < thr[j])
504 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
506 if (s->crc_present) {
507 /* Audio header CRC check */
508 get_bits(&s->gb, 16);
511 s->current_subframe = 0;
512 s->current_subsubframe = 0;
515 av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);
516 av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);
517 for (i = base_channel; i < s->prim_channels; i++) {
518 av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n",
519 s->subband_activity[i]);
520 av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n",
521 s->vq_start_subband[i]);
522 av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n",
523 s->joint_intensity[i]);
524 av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n",
525 s->transient_huffman[i]);
526 av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n",
527 s->scalefactor_huffman[i]);
528 av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n",
529 s->bitalloc_huffman[i]);
530 av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");
531 for (j = 0; j < 11; j++)
532 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->quant_index_huffman[i][j]);
533 av_log(s->avctx, AV_LOG_DEBUG, "\n");
534 av_log(s->avctx, AV_LOG_DEBUG, "scalefac adj:");
535 for (j = 0; j < 11; j++)
536 av_log(s->avctx, AV_LOG_DEBUG, " %1.3f", s->scalefactor_adj[i][j]);
537 av_log(s->avctx, AV_LOG_DEBUG, "\n");
544 static int dca_parse_frame_header(DCAContext *s)
546 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
549 skip_bits_long(&s->gb, 32);
552 s->frame_type = get_bits(&s->gb, 1);
553 s->samples_deficit = get_bits(&s->gb, 5) + 1;
554 s->crc_present = get_bits(&s->gb, 1);
555 s->sample_blocks = get_bits(&s->gb, 7) + 1;
556 s->frame_size = get_bits(&s->gb, 14) + 1;
557 if (s->frame_size < 95)
558 return AVERROR_INVALIDDATA;
559 s->amode = get_bits(&s->gb, 6);
560 s->sample_rate = dca_sample_rates[get_bits(&s->gb, 4)];
562 return AVERROR_INVALIDDATA;
563 s->bit_rate_index = get_bits(&s->gb, 5);
564 s->bit_rate = dca_bit_rates[s->bit_rate_index];
566 return AVERROR_INVALIDDATA;
568 s->downmix = get_bits(&s->gb, 1);
569 s->dynrange = get_bits(&s->gb, 1);
570 s->timestamp = get_bits(&s->gb, 1);
571 s->aux_data = get_bits(&s->gb, 1);
572 s->hdcd = get_bits(&s->gb, 1);
573 s->ext_descr = get_bits(&s->gb, 3);
574 s->ext_coding = get_bits(&s->gb, 1);
575 s->aspf = get_bits(&s->gb, 1);
576 s->lfe = get_bits(&s->gb, 2);
577 s->predictor_history = get_bits(&s->gb, 1);
579 /* TODO: check CRC */
581 s->header_crc = get_bits(&s->gb, 16);
583 s->multirate_inter = get_bits(&s->gb, 1);
584 s->version = get_bits(&s->gb, 4);
585 s->copy_history = get_bits(&s->gb, 2);
586 s->source_pcm_res = get_bits(&s->gb, 3);
587 s->front_sum = get_bits(&s->gb, 1);
588 s->surround_sum = get_bits(&s->gb, 1);
589 s->dialog_norm = get_bits(&s->gb, 4);
591 /* FIXME: channels mixing levels */
592 s->output = s->amode;
594 s->output |= DCA_LFE;
597 av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);
598 av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);
599 av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);
600 av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",
601 s->sample_blocks, s->sample_blocks * 32);
602 av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);
603 av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",
604 s->amode, dca_channels[s->amode]);
605 av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i Hz\n",
607 av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i bits/s\n",
609 av_log(s->avctx, AV_LOG_DEBUG, "downmix: %i\n", s->downmix);
610 av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);
611 av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);
612 av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);
613 av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);
614 av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);
615 av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);
616 av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);
617 av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);
618 av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",
619 s->predictor_history);
620 av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);
621 av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",
623 av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);
624 av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);
625 av_log(s->avctx, AV_LOG_DEBUG,
626 "source pcm resolution: %i (%i bits/sample)\n",
627 s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);
628 av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);
629 av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);
630 av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);
631 av_log(s->avctx, AV_LOG_DEBUG, "\n");
634 /* Primary audio coding header */
635 s->subframes = get_bits(&s->gb, 4) + 1;
637 return dca_parse_audio_coding_header(s, 0);
641 static inline int get_scale(GetBitContext *gb, int level, int value)
644 /* huffman encoded */
645 value += get_bitalloc(gb, &dca_scalefactor, level);
646 } else if (level < 8)
647 value = get_bits(gb, level + 1);
651 static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
653 /* Primary audio coding side information */
656 if (get_bits_left(&s->gb) < 0)
657 return AVERROR_INVALIDDATA;
660 s->subsubframes[s->current_subframe] = get_bits(&s->gb, 2) + 1;
661 s->partial_samples[s->current_subframe] = get_bits(&s->gb, 3);
664 for (j = base_channel; j < s->prim_channels; j++) {
665 for (k = 0; k < s->subband_activity[j]; k++)
666 s->prediction_mode[j][k] = get_bits(&s->gb, 1);
669 /* Get prediction codebook */
670 for (j = base_channel; j < s->prim_channels; j++) {
671 for (k = 0; k < s->subband_activity[j]; k++) {
672 if (s->prediction_mode[j][k] > 0) {
673 /* (Prediction coefficient VQ address) */
674 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
679 /* Bit allocation index */
680 for (j = base_channel; j < s->prim_channels; j++) {
681 for (k = 0; k < s->vq_start_subband[j]; k++) {
682 if (s->bitalloc_huffman[j] == 6)
683 s->bitalloc[j][k] = get_bits(&s->gb, 5);
684 else if (s->bitalloc_huffman[j] == 5)
685 s->bitalloc[j][k] = get_bits(&s->gb, 4);
686 else if (s->bitalloc_huffman[j] == 7) {
687 av_log(s->avctx, AV_LOG_ERROR,
688 "Invalid bit allocation index\n");
689 return AVERROR_INVALIDDATA;
692 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
695 if (s->bitalloc[j][k] > 26) {
696 // av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index [%i][%i] too big (%i)\n",
697 // j, k, s->bitalloc[j][k]);
698 return AVERROR_INVALIDDATA;
703 /* Transition mode */
704 for (j = base_channel; j < s->prim_channels; j++) {
705 for (k = 0; k < s->subband_activity[j]; k++) {
706 s->transition_mode[j][k] = 0;
707 if (s->subsubframes[s->current_subframe] > 1 &&
708 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
709 s->transition_mode[j][k] =
710 get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
715 if (get_bits_left(&s->gb) < 0)
716 return AVERROR_INVALIDDATA;
718 for (j = base_channel; j < s->prim_channels; j++) {
719 const uint32_t *scale_table;
722 memset(s->scale_factor[j], 0,
723 s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
725 if (s->scalefactor_huffman[j] == 6)
726 scale_table = scale_factor_quant7;
728 scale_table = scale_factor_quant6;
730 /* When huffman coded, only the difference is encoded */
733 for (k = 0; k < s->subband_activity[j]; k++) {
734 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
735 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
736 s->scale_factor[j][k][0] = scale_table[scale_sum];
739 if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
740 /* Get second scale factor */
741 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
742 s->scale_factor[j][k][1] = scale_table[scale_sum];
747 /* Joint subband scale factor codebook select */
748 for (j = base_channel; j < s->prim_channels; j++) {
749 /* Transmitted only if joint subband coding enabled */
750 if (s->joint_intensity[j] > 0)
751 s->joint_huff[j] = get_bits(&s->gb, 3);
754 if (get_bits_left(&s->gb) < 0)
755 return AVERROR_INVALIDDATA;
757 /* Scale factors for joint subband coding */
758 for (j = base_channel; j < s->prim_channels; j++) {
761 /* Transmitted only if joint subband coding enabled */
762 if (s->joint_intensity[j] > 0) {
764 source_channel = s->joint_intensity[j] - 1;
766 /* When huffman coded, only the difference is encoded
767 * (is this valid as well for joint scales ???) */
769 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
770 scale = get_scale(&s->gb, s->joint_huff[j], 0);
771 scale += 64; /* bias */
772 s->joint_scale_factor[j][k] = scale; /*joint_scale_table[scale]; */
775 if (!(s->debug_flag & 0x02)) {
776 av_log(s->avctx, AV_LOG_DEBUG,
777 "Joint stereo coding not supported\n");
778 s->debug_flag |= 0x02;
783 /* Stereo downmix coefficients */
784 if (!base_channel && s->prim_channels > 2) {
786 for (j = base_channel; j < s->prim_channels; j++) {
787 s->downmix_coef[j][0] = get_bits(&s->gb, 7);
788 s->downmix_coef[j][1] = get_bits(&s->gb, 7);
791 int am = s->amode & DCA_CHANNEL_MASK;
792 for (j = base_channel; j < s->prim_channels; j++) {
793 s->downmix_coef[j][0] = dca_default_coeffs[am][j][0];
794 s->downmix_coef[j][1] = dca_default_coeffs[am][j][1];
799 /* Dynamic range coefficient */
800 if (!base_channel && s->dynrange)
801 s->dynrange_coef = get_bits(&s->gb, 8);
803 /* Side information CRC check word */
804 if (s->crc_present) {
805 get_bits(&s->gb, 16);
809 * Primary audio data arrays
812 /* VQ encoded high frequency subbands */
813 for (j = base_channel; j < s->prim_channels; j++)
814 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
815 /* 1 vector -> 32 samples */
816 s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
818 /* Low frequency effect data */
819 if (!base_channel && s->lfe) {
822 int lfe_samples = 2 * s->lfe * (4 + block_index);
823 int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
826 for (j = lfe_samples; j < lfe_end_sample; j++) {
827 /* Signed 8 bits int */
828 s->lfe_data[j] = get_sbits(&s->gb, 8);
831 /* Scale factor index */
832 quant7 = get_bits(&s->gb, 8);
834 av_log_ask_for_sample(s->avctx, "LFEScaleIndex larger than 127\n");
835 return AVERROR_INVALIDDATA;
837 s->lfe_scale_factor = scale_factor_quant7[quant7];
839 /* Quantization step size * scale factor */
840 lfe_scale = 0.035 * s->lfe_scale_factor;
842 for (j = lfe_samples; j < lfe_end_sample; j++)
843 s->lfe_data[j] *= lfe_scale;
847 av_log(s->avctx, AV_LOG_DEBUG, "subsubframes: %i\n",
848 s->subsubframes[s->current_subframe]);
849 av_log(s->avctx, AV_LOG_DEBUG, "partial samples: %i\n",
850 s->partial_samples[s->current_subframe]);
852 for (j = base_channel; j < s->prim_channels; j++) {
853 av_log(s->avctx, AV_LOG_DEBUG, "prediction mode:");
854 for (k = 0; k < s->subband_activity[j]; k++)
855 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->prediction_mode[j][k]);
856 av_log(s->avctx, AV_LOG_DEBUG, "\n");
858 for (j = base_channel; j < s->prim_channels; j++) {
859 for (k = 0; k < s->subband_activity[j]; k++)
860 av_log(s->avctx, AV_LOG_DEBUG,
861 "prediction coefs: %f, %f, %f, %f\n",
862 (float) adpcm_vb[s->prediction_vq[j][k]][0] / 8192,
863 (float) adpcm_vb[s->prediction_vq[j][k]][1] / 8192,
864 (float) adpcm_vb[s->prediction_vq[j][k]][2] / 8192,
865 (float) adpcm_vb[s->prediction_vq[j][k]][3] / 8192);
867 for (j = base_channel; j < s->prim_channels; j++) {
868 av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index: ");
869 for (k = 0; k < s->vq_start_subband[j]; k++)
870 av_log(s->avctx, AV_LOG_DEBUG, "%2.2i ", s->bitalloc[j][k]);
871 av_log(s->avctx, AV_LOG_DEBUG, "\n");
873 for (j = base_channel; j < s->prim_channels; j++) {
874 av_log(s->avctx, AV_LOG_DEBUG, "Transition mode:");
875 for (k = 0; k < s->subband_activity[j]; k++)
876 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->transition_mode[j][k]);
877 av_log(s->avctx, AV_LOG_DEBUG, "\n");
879 for (j = base_channel; j < s->prim_channels; j++) {
880 av_log(s->avctx, AV_LOG_DEBUG, "Scale factor:");
881 for (k = 0; k < s->subband_activity[j]; k++) {
882 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0)
883 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->scale_factor[j][k][0]);
884 if (k < s->vq_start_subband[j] && s->transition_mode[j][k])
885 av_log(s->avctx, AV_LOG_DEBUG, " %i(t)", s->scale_factor[j][k][1]);
887 av_log(s->avctx, AV_LOG_DEBUG, "\n");
889 for (j = base_channel; j < s->prim_channels; j++) {
890 if (s->joint_intensity[j] > 0) {
891 int source_channel = s->joint_intensity[j] - 1;
892 av_log(s->avctx, AV_LOG_DEBUG, "Joint scale factor index:\n");
893 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++)
894 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->joint_scale_factor[j][k]);
895 av_log(s->avctx, AV_LOG_DEBUG, "\n");
898 if (!base_channel && s->prim_channels > 2 && s->downmix) {
899 av_log(s->avctx, AV_LOG_DEBUG, "Downmix coeffs:\n");
900 for (j = 0; j < s->prim_channels; j++) {
901 av_log(s->avctx, AV_LOG_DEBUG, "Channel 0, %d = %f\n", j,
902 dca_downmix_coeffs[s->downmix_coef[j][0]]);
903 av_log(s->avctx, AV_LOG_DEBUG, "Channel 1, %d = %f\n", j,
904 dca_downmix_coeffs[s->downmix_coef[j][1]]);
906 av_log(s->avctx, AV_LOG_DEBUG, "\n");
908 for (j = base_channel; j < s->prim_channels; j++)
909 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
910 av_log(s->avctx, AV_LOG_DEBUG, "VQ index: %i\n", s->high_freq_vq[j][k]);
911 if (!base_channel && s->lfe) {
912 int lfe_samples = 2 * s->lfe * (4 + block_index);
913 int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
915 av_log(s->avctx, AV_LOG_DEBUG, "LFE samples:\n");
916 for (j = lfe_samples; j < lfe_end_sample; j++)
917 av_log(s->avctx, AV_LOG_DEBUG, " %f", s->lfe_data[j]);
918 av_log(s->avctx, AV_LOG_DEBUG, "\n");
925 static void qmf_32_subbands(DCAContext *s, int chans,
926 float samples_in[32][8], float *samples_out,
929 const float *prCoeff;
932 int sb_act = s->subband_activity[chans];
935 scale *= sqrt(1 / 8.0);
938 if (!s->multirate_inter) /* Non-perfect reconstruction */
939 prCoeff = fir_32bands_nonperfect;
940 else /* Perfect reconstruction */
941 prCoeff = fir_32bands_perfect;
943 for (i = sb_act; i < 32; i++)
946 /* Reconstructed channel sample index */
947 for (subindex = 0; subindex < 8; subindex++) {
948 /* Load in one sample from each subband and clear inactive subbands */
949 for (i = 0; i < sb_act; i++) {
950 unsigned sign = (i - 1) & 2;
951 uint32_t v = AV_RN32A(&samples_in[i][subindex]) ^ sign << 30;
952 AV_WN32A(&s->raXin[i], v);
955 s->synth.synth_filter_float(&s->imdct,
956 s->subband_fir_hist[chans],
957 &s->hist_index[chans],
958 s->subband_fir_noidea[chans], prCoeff,
959 samples_out, s->raXin, scale);
964 static void lfe_interpolation_fir(DCAContext *s, int decimation_select,
965 int num_deci_sample, float *samples_in,
966 float *samples_out, float scale)
968 /* samples_in: An array holding decimated samples.
969 * Samples in current subframe starts from samples_in[0],
970 * while samples_in[-1], samples_in[-2], ..., stores samples
971 * from last subframe as history.
973 * samples_out: An array holding interpolated samples
977 const float *prCoeff;
980 /* Select decimation filter */
981 if (decimation_select == 1) {
983 prCoeff = lfe_fir_128;
986 prCoeff = lfe_fir_64;
989 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
990 s->dcadsp.lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
992 samples_out += 2 * decifactor;
996 /* downmixing routines */
997 #define MIX_REAR1(samples, si1, rs, coef) \
998 samples[i] += samples[si1] * coef[rs][0]; \
999 samples[i+256] += samples[si1] * coef[rs][1];
1001 #define MIX_REAR2(samples, si1, si2, rs, coef) \
1002 samples[i] += samples[si1] * coef[rs][0] + samples[si2] * coef[rs + 1][0]; \
1003 samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs + 1][1];
1005 #define MIX_FRONT3(samples, coef) \
1006 t = samples[i + c]; \
1007 u = samples[i + l]; \
1008 v = samples[i + r]; \
1009 samples[i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1010 samples[i+256] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1012 #define DOWNMIX_TO_STEREO(op1, op2) \
1013 for (i = 0; i < 256; i++) { \
1018 static void dca_downmix(float *samples, int srcfmt,
1019 int downmix_coef[DCA_PRIM_CHANNELS_MAX][2],
1020 const int8_t *channel_mapping)
1022 int c, l, r, sl, sr, s;
1025 float coef[DCA_PRIM_CHANNELS_MAX][2];
1027 for (i = 0; i < DCA_PRIM_CHANNELS_MAX; i++) {
1028 coef[i][0] = dca_downmix_coeffs[downmix_coef[i][0]];
1029 coef[i][1] = dca_downmix_coeffs[downmix_coef[i][1]];
1035 case DCA_STEREO_TOTAL:
1036 case DCA_STEREO_SUMDIFF:
1038 av_log(NULL, 0, "Not implemented!\n");
1043 c = channel_mapping[0] * 256;
1044 l = channel_mapping[1] * 256;
1045 r = channel_mapping[2] * 256;
1046 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef), );
1049 s = channel_mapping[2] * 256;
1050 DOWNMIX_TO_STEREO(MIX_REAR1(samples, i + s, 2, coef), );
1053 c = channel_mapping[0] * 256;
1054 l = channel_mapping[1] * 256;
1055 r = channel_mapping[2] * 256;
1056 s = channel_mapping[3] * 256;
1057 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1058 MIX_REAR1(samples, i + s, 3, coef));
1061 sl = channel_mapping[2] * 256;
1062 sr = channel_mapping[3] * 256;
1063 DOWNMIX_TO_STEREO(MIX_REAR2(samples, i + sl, i + sr, 2, coef), );
1066 c = channel_mapping[0] * 256;
1067 l = channel_mapping[1] * 256;
1068 r = channel_mapping[2] * 256;
1069 sl = channel_mapping[3] * 256;
1070 sr = channel_mapping[4] * 256;
1071 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1072 MIX_REAR2(samples, i + sl, i + sr, 3, coef));
1078 #ifndef decode_blockcodes
1079 /* Very compact version of the block code decoder that does not use table
1080 * look-up but is slightly slower */
1081 static int decode_blockcode(int code, int levels, int *values)
1084 int offset = (levels - 1) >> 1;
1086 for (i = 0; i < 4; i++) {
1087 int div = FASTDIV(code, levels);
1088 values[i] = code - offset - div * levels;
1095 static int decode_blockcodes(int code1, int code2, int levels, int *values)
1097 return decode_blockcode(code1, levels, values) |
1098 decode_blockcode(code2, levels, values + 4);
1102 static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 };
1103 static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 };
1105 #ifndef int8x8_fmul_int32
1106 static inline void int8x8_fmul_int32(float *dst, const int8_t *src, int scale)
1108 float fscale = scale / 16.0;
1110 for (i = 0; i < 8; i++)
1111 dst[i] = src[i] * fscale;
1115 static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
1118 int subsubframe = s->current_subsubframe;
1120 const float *quant_step_table;
1123 float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1124 LOCAL_ALIGNED_16(int, block, [8]);
1130 /* Select quantization step size table */
1131 if (s->bit_rate_index == 0x1f)
1132 quant_step_table = lossless_quant_d;
1134 quant_step_table = lossy_quant_d;
1136 for (k = base_channel; k < s->prim_channels; k++) {
1137 if (get_bits_left(&s->gb) < 0)
1138 return AVERROR_INVALIDDATA;
1140 for (l = 0; l < s->vq_start_subband[k]; l++) {
1143 /* Select the mid-tread linear quantizer */
1144 int abits = s->bitalloc[k][l];
1146 float quant_step_size = quant_step_table[abits];
1149 * Determine quantization index code book and its type
1152 /* Select quantization index code book */
1153 int sel = s->quant_index_huffman[k][abits];
1156 * Extract bits from the bit stream
1159 memset(subband_samples[k][l], 0, 8 * sizeof(subband_samples[0][0][0]));
1161 /* Deal with transients */
1162 int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l];
1163 float rscale = quant_step_size * s->scale_factor[k][l][sfi] *
1164 s->scalefactor_adj[k][sel];
1166 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1169 int block_code1, block_code2, size, levels, err;
1171 size = abits_sizes[abits - 1];
1172 levels = abits_levels[abits - 1];
1174 block_code1 = get_bits(&s->gb, size);
1175 block_code2 = get_bits(&s->gb, size);
1176 err = decode_blockcodes(block_code1, block_code2,
1179 av_log(s->avctx, AV_LOG_ERROR,
1180 "ERROR: block code look-up failed\n");
1181 return AVERROR_INVALIDDATA;
1185 for (m = 0; m < 8; m++)
1186 block[m] = get_sbits(&s->gb, abits - 3);
1190 for (m = 0; m < 8; m++)
1191 block[m] = get_bitalloc(&s->gb,
1192 &dca_smpl_bitalloc[abits], sel);
1195 s->fmt_conv.int32_to_float_fmul_scalar(subband_samples[k][l],
1200 * Inverse ADPCM if in prediction mode
1202 if (s->prediction_mode[k][l]) {
1204 for (m = 0; m < 8; m++) {
1205 for (n = 1; n <= 4; n++)
1207 subband_samples[k][l][m] +=
1208 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1209 subband_samples[k][l][m - n] / 8192);
1210 else if (s->predictor_history)
1211 subband_samples[k][l][m] +=
1212 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1213 s->subband_samples_hist[k][l][m - n + 4] / 8192);
1219 * Decode VQ encoded high frequencies
1221 for (l = s->vq_start_subband[k]; l < s->subband_activity[k]; l++) {
1222 /* 1 vector -> 32 samples but we only need the 8 samples
1223 * for this subsubframe. */
1224 int hfvq = s->high_freq_vq[k][l];
1226 if (!s->debug_flag & 0x01) {
1227 av_log(s->avctx, AV_LOG_DEBUG,
1228 "Stream with high frequencies VQ coding\n");
1229 s->debug_flag |= 0x01;
1232 int8x8_fmul_int32(subband_samples[k][l],
1233 &high_freq_vq[hfvq][subsubframe * 8],
1234 s->scale_factor[k][l][0]);
1238 /* Check for DSYNC after subsubframe */
1239 if (s->aspf || subsubframe == s->subsubframes[s->current_subframe] - 1) {
1240 if (0xFFFF == get_bits(&s->gb, 16)) { /* 0xFFFF */
1242 av_log(s->avctx, AV_LOG_DEBUG, "Got subframe DSYNC\n");
1245 av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
1249 /* Backup predictor history for adpcm */
1250 for (k = base_channel; k < s->prim_channels; k++)
1251 for (l = 0; l < s->vq_start_subband[k]; l++)
1252 memcpy(s->subband_samples_hist[k][l],
1253 &subband_samples[k][l][4],
1254 4 * sizeof(subband_samples[0][0][0]));
1259 static int dca_filter_channels(DCAContext *s, int block_index)
1261 float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1264 /* 32 subbands QMF */
1265 for (k = 0; k < s->prim_channels; k++) {
1266 /* static float pcm_to_double[8] = { 32768.0, 32768.0, 524288.0, 524288.0,
1267 0, 8388608.0, 8388608.0 };*/
1268 qmf_32_subbands(s, k, subband_samples[k],
1269 &s->samples[256 * s->channel_order_tab[k]],
1270 M_SQRT1_2 * s->scale_bias /* pcm_to_double[s->source_pcm_res] */);
1274 if (s->avctx->request_channels == 2 && s->prim_channels > 2) {
1275 dca_downmix(s->samples, s->amode, s->downmix_coef, s->channel_order_tab);
1278 /* Generate LFE samples for this subsubframe FIXME!!! */
1279 if (s->output & DCA_LFE) {
1280 lfe_interpolation_fir(s, s->lfe, 2 * s->lfe,
1281 s->lfe_data + 2 * s->lfe * (block_index + 4),
1282 &s->samples[256 * dca_lfe_index[s->amode]],
1283 (1.0 / 256.0) * s->scale_bias);
1284 /* Outputs 20bits pcm samples */
1291 static int dca_subframe_footer(DCAContext *s, int base_channel)
1293 int aux_data_count = 0, i;
1296 * Unpack optional information
1299 /* presumably optional information only appears in the core? */
1300 if (!base_channel) {
1302 skip_bits_long(&s->gb, 32);
1305 aux_data_count = get_bits(&s->gb, 6);
1307 for (i = 0; i < aux_data_count; i++)
1308 get_bits(&s->gb, 8);
1310 if (s->crc_present && (s->downmix || s->dynrange))
1311 get_bits(&s->gb, 16);
1318 * Decode a dca frame block
1320 * @param s pointer to the DCAContext
1323 static int dca_decode_block(DCAContext *s, int base_channel, int block_index)
1328 if (s->current_subframe >= s->subframes) {
1329 av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1330 s->current_subframe, s->subframes);
1331 return AVERROR_INVALIDDATA;
1334 if (!s->current_subsubframe) {
1336 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
1338 /* Read subframe header */
1339 if ((ret = dca_subframe_header(s, base_channel, block_index)))
1343 /* Read subsubframe */
1345 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
1347 if ((ret = dca_subsubframe(s, base_channel, block_index)))
1351 s->current_subsubframe++;
1352 if (s->current_subsubframe >= s->subsubframes[s->current_subframe]) {
1353 s->current_subsubframe = 0;
1354 s->current_subframe++;
1356 if (s->current_subframe >= s->subframes) {
1358 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
1360 /* Read subframe footer */
1361 if ((ret = dca_subframe_footer(s, base_channel)))
1369 * Convert bitstream to one representation based on sync marker
1371 static int dca_convert_bitstream(const uint8_t *src, int src_size, uint8_t *dst,
1376 const uint16_t *ssrc = (const uint16_t *) src;
1377 uint16_t *sdst = (uint16_t *) dst;
1380 if ((unsigned) src_size > (unsigned) max_size) {
1381 // av_log(NULL, AV_LOG_ERROR, "Input frame size larger than DCA_MAX_FRAME_SIZE!\n");
1383 src_size = max_size;
1388 case DCA_MARKER_RAW_BE:
1389 memcpy(dst, src, src_size);
1391 case DCA_MARKER_RAW_LE:
1392 for (i = 0; i < (src_size + 1) >> 1; i++)
1393 *sdst++ = av_bswap16(*ssrc++);
1395 case DCA_MARKER_14B_BE:
1396 case DCA_MARKER_14B_LE:
1397 init_put_bits(&pb, dst, max_size);
1398 for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
1399 tmp = ((mrk == DCA_MARKER_14B_BE) ? AV_RB16(src) : AV_RL16(src)) & 0x3FFF;
1400 put_bits(&pb, 14, tmp);
1402 flush_put_bits(&pb);
1403 return (put_bits_count(&pb) + 7) >> 3;
1405 return AVERROR_INVALIDDATA;
1410 * Return the number of channels in an ExSS speaker mask (HD)
1412 static int dca_exss_mask2count(int mask)
1414 /* count bits that mean speaker pairs twice */
1415 return av_popcount(mask) +
1416 av_popcount(mask & (DCA_EXSS_CENTER_LEFT_RIGHT |
1417 DCA_EXSS_FRONT_LEFT_RIGHT |
1418 DCA_EXSS_FRONT_HIGH_LEFT_RIGHT |
1419 DCA_EXSS_WIDE_LEFT_RIGHT |
1420 DCA_EXSS_SIDE_LEFT_RIGHT |
1421 DCA_EXSS_SIDE_HIGH_LEFT_RIGHT |
1422 DCA_EXSS_SIDE_REAR_LEFT_RIGHT |
1423 DCA_EXSS_REAR_LEFT_RIGHT |
1424 DCA_EXSS_REAR_HIGH_LEFT_RIGHT));
1428 * Skip mixing coefficients of a single mix out configuration (HD)
1430 static void dca_exss_skip_mix_coeffs(GetBitContext *gb, int channels, int out_ch)
1434 for (i = 0; i < channels; i++) {
1435 int mix_map_mask = get_bits(gb, out_ch);
1436 int num_coeffs = av_popcount(mix_map_mask);
1437 skip_bits_long(gb, num_coeffs * 6);
1442 * Parse extension substream asset header (HD)
1444 static int dca_exss_parse_asset_header(DCAContext *s)
1446 int header_pos = get_bits_count(&s->gb);
1449 int embedded_stereo = 0;
1450 int embedded_6ch = 0;
1451 int drc_code_present;
1452 int av_uninit(extensions_mask);
1455 if (get_bits_left(&s->gb) < 16)
1458 /* We will parse just enough to get to the extensions bitmask with which
1459 * we can set the profile value. */
1461 header_size = get_bits(&s->gb, 9) + 1;
1462 skip_bits(&s->gb, 3); // asset index
1464 if (s->static_fields) {
1465 if (get_bits1(&s->gb))
1466 skip_bits(&s->gb, 4); // asset type descriptor
1467 if (get_bits1(&s->gb))
1468 skip_bits_long(&s->gb, 24); // language descriptor
1470 if (get_bits1(&s->gb)) {
1471 /* How can one fit 1024 bytes of text here if the maximum value
1472 * for the asset header size field above was 512 bytes? */
1473 int text_length = get_bits(&s->gb, 10) + 1;
1474 if (get_bits_left(&s->gb) < text_length * 8)
1476 skip_bits_long(&s->gb, text_length * 8); // info text
1479 skip_bits(&s->gb, 5); // bit resolution - 1
1480 skip_bits(&s->gb, 4); // max sample rate code
1481 channels = get_bits(&s->gb, 8) + 1;
1483 if (get_bits1(&s->gb)) { // 1-to-1 channels to speakers
1484 int spkr_remap_sets;
1485 int spkr_mask_size = 16;
1489 embedded_stereo = get_bits1(&s->gb);
1491 embedded_6ch = get_bits1(&s->gb);
1493 if (get_bits1(&s->gb)) {
1494 spkr_mask_size = (get_bits(&s->gb, 2) + 1) << 2;
1495 skip_bits(&s->gb, spkr_mask_size); // spkr activity mask
1498 spkr_remap_sets = get_bits(&s->gb, 3);
1500 for (i = 0; i < spkr_remap_sets; i++) {
1501 /* std layout mask for each remap set */
1502 num_spkrs[i] = dca_exss_mask2count(get_bits(&s->gb, spkr_mask_size));
1505 for (i = 0; i < spkr_remap_sets; i++) {
1506 int num_dec_ch_remaps = get_bits(&s->gb, 5) + 1;
1507 if (get_bits_left(&s->gb) < 0)
1510 for (j = 0; j < num_spkrs[i]; j++) {
1511 int remap_dec_ch_mask = get_bits_long(&s->gb, num_dec_ch_remaps);
1512 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1513 skip_bits_long(&s->gb, num_dec_ch * 5); // remap codes
1518 skip_bits(&s->gb, 3); // representation type
1522 drc_code_present = get_bits1(&s->gb);
1523 if (drc_code_present)
1524 get_bits(&s->gb, 8); // drc code
1526 if (get_bits1(&s->gb))
1527 skip_bits(&s->gb, 5); // dialog normalization code
1529 if (drc_code_present && embedded_stereo)
1530 get_bits(&s->gb, 8); // drc stereo code
1532 if (s->mix_metadata && get_bits1(&s->gb)) {
1533 skip_bits(&s->gb, 1); // external mix
1534 skip_bits(&s->gb, 6); // post mix gain code
1536 if (get_bits(&s->gb, 2) != 3) // mixer drc code
1537 skip_bits(&s->gb, 3); // drc limit
1539 skip_bits(&s->gb, 8); // custom drc code
1541 if (get_bits1(&s->gb)) // channel specific scaling
1542 for (i = 0; i < s->num_mix_configs; i++)
1543 skip_bits_long(&s->gb, s->mix_config_num_ch[i] * 6); // scale codes
1545 skip_bits_long(&s->gb, s->num_mix_configs * 6); // scale codes
1547 for (i = 0; i < s->num_mix_configs; i++) {
1548 if (get_bits_left(&s->gb) < 0)
1550 dca_exss_skip_mix_coeffs(&s->gb, channels, s->mix_config_num_ch[i]);
1552 dca_exss_skip_mix_coeffs(&s->gb, 6, s->mix_config_num_ch[i]);
1553 if (embedded_stereo)
1554 dca_exss_skip_mix_coeffs(&s->gb, 2, s->mix_config_num_ch[i]);
1558 switch (get_bits(&s->gb, 2)) {
1559 case 0: extensions_mask = get_bits(&s->gb, 12); break;
1560 case 1: extensions_mask = DCA_EXT_EXSS_XLL; break;
1561 case 2: extensions_mask = DCA_EXT_EXSS_LBR; break;
1562 case 3: extensions_mask = 0; /* aux coding */ break;
1565 /* not parsed further, we were only interested in the extensions mask */
1567 if (get_bits_left(&s->gb) < 0)
1570 if (get_bits_count(&s->gb) - header_pos > header_size * 8) {
1571 av_log(s->avctx, AV_LOG_WARNING, "Asset header size mismatch.\n");
1574 skip_bits_long(&s->gb, header_pos + header_size * 8 - get_bits_count(&s->gb));
1576 if (extensions_mask & DCA_EXT_EXSS_XLL)
1577 s->profile = FF_PROFILE_DTS_HD_MA;
1578 else if (extensions_mask & (DCA_EXT_EXSS_XBR | DCA_EXT_EXSS_X96 |
1580 s->profile = FF_PROFILE_DTS_HD_HRA;
1582 if (!(extensions_mask & DCA_EXT_CORE))
1583 av_log(s->avctx, AV_LOG_WARNING, "DTS core detection mismatch.\n");
1584 if ((extensions_mask & DCA_CORE_EXTS) != s->core_ext_mask)
1585 av_log(s->avctx, AV_LOG_WARNING,
1586 "DTS extensions detection mismatch (%d, %d)\n",
1587 extensions_mask & DCA_CORE_EXTS, s->core_ext_mask);
1593 * Parse extension substream header (HD)
1595 static void dca_exss_parse_header(DCAContext *s)
1601 int active_ss_mask[8];
1604 if (get_bits_left(&s->gb) < 52)
1607 skip_bits(&s->gb, 8); // user data
1608 ss_index = get_bits(&s->gb, 2);
1610 blownup = get_bits1(&s->gb);
1611 skip_bits(&s->gb, 8 + 4 * blownup); // header_size
1612 skip_bits(&s->gb, 16 + 4 * blownup); // hd_size
1614 s->static_fields = get_bits1(&s->gb);
1615 if (s->static_fields) {
1616 skip_bits(&s->gb, 2); // reference clock code
1617 skip_bits(&s->gb, 3); // frame duration code
1619 if (get_bits1(&s->gb))
1620 skip_bits_long(&s->gb, 36); // timestamp
1622 /* a single stream can contain multiple audio assets that can be
1623 * combined to form multiple audio presentations */
1625 num_audiop = get_bits(&s->gb, 3) + 1;
1626 if (num_audiop > 1) {
1627 av_log_ask_for_sample(s->avctx, "Multiple DTS-HD audio presentations.");
1628 /* ignore such streams for now */
1632 num_assets = get_bits(&s->gb, 3) + 1;
1633 if (num_assets > 1) {
1634 av_log_ask_for_sample(s->avctx, "Multiple DTS-HD audio assets.");
1635 /* ignore such streams for now */
1639 for (i = 0; i < num_audiop; i++)
1640 active_ss_mask[i] = get_bits(&s->gb, ss_index + 1);
1642 for (i = 0; i < num_audiop; i++)
1643 for (j = 0; j <= ss_index; j++)
1644 if (active_ss_mask[i] & (1 << j))
1645 skip_bits(&s->gb, 8); // active asset mask
1647 s->mix_metadata = get_bits1(&s->gb);
1648 if (s->mix_metadata) {
1649 int mix_out_mask_size;
1651 skip_bits(&s->gb, 2); // adjustment level
1652 mix_out_mask_size = (get_bits(&s->gb, 2) + 1) << 2;
1653 s->num_mix_configs = get_bits(&s->gb, 2) + 1;
1655 for (i = 0; i < s->num_mix_configs; i++) {
1656 int mix_out_mask = get_bits(&s->gb, mix_out_mask_size);
1657 s->mix_config_num_ch[i] = dca_exss_mask2count(mix_out_mask);
1662 for (i = 0; i < num_assets; i++)
1663 skip_bits_long(&s->gb, 16 + 4 * blownup); // asset size
1665 for (i = 0; i < num_assets; i++) {
1666 if (dca_exss_parse_asset_header(s))
1670 /* not parsed further, we were only interested in the extensions mask
1671 * from the asset header */
1675 * Main frame decoding function
1676 * FIXME add arguments
1678 static int dca_decode_frame(AVCodecContext *avctx, void *data,
1679 int *got_frame_ptr, AVPacket *avpkt)
1681 const uint8_t *buf = avpkt->data;
1682 int buf_size = avpkt->size;
1685 int num_core_channels = 0;
1688 int16_t *samples_s16;
1689 DCAContext *s = avctx->priv_data;
1696 s->dca_buffer_size = dca_convert_bitstream(buf, buf_size, s->dca_buffer,
1697 DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
1698 if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
1699 av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
1700 return AVERROR_INVALIDDATA;
1703 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
1704 if ((ret = dca_parse_frame_header(s)) < 0) {
1705 //seems like the frame is corrupt, try with the next one
1708 //set AVCodec values with parsed data
1709 avctx->sample_rate = s->sample_rate;
1710 avctx->bit_rate = s->bit_rate;
1711 avctx->frame_size = s->sample_blocks * 32;
1713 s->profile = FF_PROFILE_DTS;
1715 for (i = 0; i < (s->sample_blocks / 8); i++) {
1716 if ((ret = dca_decode_block(s, 0, i))) {
1717 av_log(avctx, AV_LOG_ERROR, "error decoding block\n");
1722 /* record number of core channels incase less than max channels are requested */
1723 num_core_channels = s->prim_channels;
1726 s->core_ext_mask = dca_ext_audio_descr_mask[s->ext_descr];
1728 s->core_ext_mask = 0;
1730 core_ss_end = FFMIN(s->frame_size, s->dca_buffer_size) * 8;
1732 /* only scan for extensions if ext_descr was unknown or indicated a
1733 * supported XCh extension */
1734 if (s->core_ext_mask < 0 || s->core_ext_mask & DCA_EXT_XCH) {
1736 /* if ext_descr was unknown, clear s->core_ext_mask so that the
1737 * extensions scan can fill it up */
1738 s->core_ext_mask = FFMAX(s->core_ext_mask, 0);
1740 /* extensions start at 32-bit boundaries into bitstream */
1741 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1743 while (core_ss_end - get_bits_count(&s->gb) >= 32) {
1744 uint32_t bits = get_bits_long(&s->gb, 32);
1748 int ext_amode, xch_fsize;
1750 s->xch_base_channel = s->prim_channels;
1752 /* validate sync word using XCHFSIZE field */
1753 xch_fsize = show_bits(&s->gb, 10);
1754 if ((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) &&
1755 (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1))
1758 /* skip length-to-end-of-frame field for the moment */
1759 skip_bits(&s->gb, 10);
1761 s->core_ext_mask |= DCA_EXT_XCH;
1763 /* extension amode(number of channels in extension) should be 1 */
1764 /* AFAIK XCh is not used for more channels */
1765 if ((ext_amode = get_bits(&s->gb, 4)) != 1) {
1766 av_log(avctx, AV_LOG_ERROR, "XCh extension amode %d not"
1767 " supported!\n", ext_amode);
1771 /* much like core primary audio coding header */
1772 dca_parse_audio_coding_header(s, s->xch_base_channel);
1774 for (i = 0; i < (s->sample_blocks / 8); i++)
1775 if ((ret = dca_decode_block(s, s->xch_base_channel, i))) {
1776 av_log(avctx, AV_LOG_ERROR, "error decoding XCh extension\n");
1784 /* XXCh: extended channels */
1785 /* usually found either in core or HD part in DTS-HD HRA streams,
1786 * but not in DTS-ES which contains XCh extensions instead */
1787 s->core_ext_mask |= DCA_EXT_XXCH;
1791 int fsize96 = show_bits(&s->gb, 12) + 1;
1792 if (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + fsize96)
1795 av_log(avctx, AV_LOG_DEBUG, "X96 extension found at %d bits\n",
1796 get_bits_count(&s->gb));
1797 skip_bits(&s->gb, 12);
1798 av_log(avctx, AV_LOG_DEBUG, "FSIZE96 = %d bytes\n", fsize96);
1799 av_log(avctx, AV_LOG_DEBUG, "REVNO = %d\n", get_bits(&s->gb, 4));
1801 s->core_ext_mask |= DCA_EXT_X96;
1806 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1809 /* no supported extensions, skip the rest of the core substream */
1810 skip_bits_long(&s->gb, core_ss_end - get_bits_count(&s->gb));
1813 if (s->core_ext_mask & DCA_EXT_X96)
1814 s->profile = FF_PROFILE_DTS_96_24;
1815 else if (s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH))
1816 s->profile = FF_PROFILE_DTS_ES;
1818 /* check for ExSS (HD part) */
1819 if (s->dca_buffer_size - s->frame_size > 32 &&
1820 get_bits_long(&s->gb, 32) == DCA_HD_MARKER)
1821 dca_exss_parse_header(s);
1823 avctx->profile = s->profile;
1825 channels = s->prim_channels + !!s->lfe;
1827 if (s->amode < 16) {
1828 avctx->channel_layout = dca_core_channel_layout[s->amode];
1830 if (s->xch_present && (!avctx->request_channels ||
1831 avctx->request_channels > num_core_channels + !!s->lfe)) {
1832 avctx->channel_layout |= AV_CH_BACK_CENTER;
1834 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1835 s->channel_order_tab = dca_channel_reorder_lfe_xch[s->amode];
1837 s->channel_order_tab = dca_channel_reorder_nolfe_xch[s->amode];
1840 channels = num_core_channels + !!s->lfe;
1841 s->xch_present = 0; /* disable further xch processing */
1843 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
1844 s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
1846 s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
1849 if (channels > !!s->lfe &&
1850 s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
1851 return AVERROR_INVALIDDATA;
1853 if (avctx->request_channels == 2 && s->prim_channels > 2) {
1855 s->output = DCA_STEREO;
1856 avctx->channel_layout = AV_CH_LAYOUT_STEREO;
1858 else if (avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE) {
1859 static const int8_t dca_channel_order_native[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
1860 s->channel_order_tab = dca_channel_order_native;
1863 av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n", s->amode);
1864 return AVERROR_INVALIDDATA;
1867 if (avctx->channels != channels) {
1868 if (avctx->channels)
1869 av_log(avctx, AV_LOG_INFO, "Number of channels changed in DCA decoder (%d -> %d)\n", avctx->channels, channels);
1870 avctx->channels = channels;
1873 /* get output buffer */
1874 s->frame.nb_samples = 256 * (s->sample_blocks / 8);
1875 if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) {
1876 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1879 samples_flt = (float *) s->frame.data[0];
1880 samples_s16 = (int16_t *) s->frame.data[0];
1882 /* filter to get final output */
1883 for (i = 0; i < (s->sample_blocks / 8); i++) {
1884 dca_filter_channels(s, i);
1886 /* If this was marked as a DTS-ES stream we need to subtract back- */
1887 /* channel from SL & SR to remove matrixed back-channel signal */
1888 if ((s->source_pcm_res & 1) && s->xch_present) {
1889 float *back_chan = s->samples + s->channel_order_tab[s->xch_base_channel] * 256;
1890 float *lt_chan = s->samples + s->channel_order_tab[s->xch_base_channel - 2] * 256;
1891 float *rt_chan = s->samples + s->channel_order_tab[s->xch_base_channel - 1] * 256;
1892 s->dsp.vector_fmac_scalar(lt_chan, back_chan, -M_SQRT1_2, 256);
1893 s->dsp.vector_fmac_scalar(rt_chan, back_chan, -M_SQRT1_2, 256);
1896 if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT) {
1897 s->fmt_conv.float_interleave(samples_flt, s->samples_chanptr, 256,
1899 samples_flt += 256 * channels;
1901 s->fmt_conv.float_to_int16_interleave(samples_s16,
1902 s->samples_chanptr, 256,
1904 samples_s16 += 256 * channels;
1908 /* update lfe history */
1909 lfe_samples = 2 * s->lfe * (s->sample_blocks / 8);
1910 for (i = 0; i < 2 * s->lfe * 4; i++)
1911 s->lfe_data[i] = s->lfe_data[i + lfe_samples];
1914 *(AVFrame *) data = s->frame;
1922 * DCA initialization
1924 * @param avctx pointer to the AVCodecContext
1927 static av_cold int dca_decode_init(AVCodecContext *avctx)
1929 DCAContext *s = avctx->priv_data;
1935 ff_dsputil_init(&s->dsp, avctx);
1936 ff_mdct_init(&s->imdct, 6, 1, 1.0);
1937 ff_synth_filter_init(&s->synth);
1938 ff_dcadsp_init(&s->dcadsp);
1939 ff_fmt_convert_init(&s->fmt_conv, avctx);
1941 for (i = 0; i < DCA_PRIM_CHANNELS_MAX + 1; i++)
1942 s->samples_chanptr[i] = s->samples + i * 256;
1944 if (avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT) {
1945 avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
1946 s->scale_bias = 1.0 / 32768.0;
1948 avctx->sample_fmt = AV_SAMPLE_FMT_S16;
1949 s->scale_bias = 1.0;
1952 /* allow downmixing to stereo */
1953 if (avctx->channels > 0 && avctx->request_channels < avctx->channels &&
1954 avctx->request_channels == 2) {
1955 avctx->channels = avctx->request_channels;
1958 avcodec_get_frame_defaults(&s->frame);
1959 avctx->coded_frame = &s->frame;
1964 static av_cold int dca_decode_end(AVCodecContext *avctx)
1966 DCAContext *s = avctx->priv_data;
1967 ff_mdct_end(&s->imdct);
1971 static const AVProfile profiles[] = {
1972 { FF_PROFILE_DTS, "DTS" },
1973 { FF_PROFILE_DTS_ES, "DTS-ES" },
1974 { FF_PROFILE_DTS_96_24, "DTS 96/24" },
1975 { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
1976 { FF_PROFILE_DTS_HD_MA, "DTS-HD MA" },
1977 { FF_PROFILE_UNKNOWN },
1980 AVCodec ff_dca_decoder = {
1982 .type = AVMEDIA_TYPE_AUDIO,
1984 .priv_data_size = sizeof(DCAContext),
1985 .init = dca_decode_init,
1986 .decode = dca_decode_frame,
1987 .close = dca_decode_end,
1988 .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
1989 .capabilities = CODEC_CAP_CHANNEL_CONF | CODEC_CAP_DR1,
1990 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT,
1992 AV_SAMPLE_FMT_NONE },
1993 .profiles = NULL_IF_CONFIG_SMALL(profiles),