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/channel_layout.h"
30 #include "libavutil/common.h"
31 #include "libavutil/float_dsp.h"
32 #include "libavutil/internal.h"
33 #include "libavutil/intreadwrite.h"
34 #include "libavutil/mathematics.h"
35 #include "libavutil/opt.h"
36 #include "libavutil/samplefmt.h"
44 #include "synth_filter.h"
46 #include "fmtconvert.h"
58 #define DCA_PRIM_CHANNELS_MAX (7)
59 #define DCA_SUBBANDS (64)
60 #define DCA_ABITS_MAX (32) /* Should be 28 */
61 #define DCA_SUBSUBFRAMES_MAX (4)
62 #define DCA_SUBFRAMES_MAX (16)
63 #define DCA_BLOCKS_MAX (16)
64 #define DCA_LFE_MAX (3)
65 #define DCA_CHSETS_MAX (4)
66 #define DCA_CHSET_CHANS_MAX (8)
82 /* these are unconfirmed but should be mostly correct */
83 enum DCAExSSSpeakerMask {
84 DCA_EXSS_FRONT_CENTER = 0x0001,
85 DCA_EXSS_FRONT_LEFT_RIGHT = 0x0002,
86 DCA_EXSS_SIDE_REAR_LEFT_RIGHT = 0x0004,
87 DCA_EXSS_LFE = 0x0008,
88 DCA_EXSS_REAR_CENTER = 0x0010,
89 DCA_EXSS_FRONT_HIGH_LEFT_RIGHT = 0x0020,
90 DCA_EXSS_REAR_LEFT_RIGHT = 0x0040,
91 DCA_EXSS_FRONT_HIGH_CENTER = 0x0080,
92 DCA_EXSS_OVERHEAD = 0x0100,
93 DCA_EXSS_CENTER_LEFT_RIGHT = 0x0200,
94 DCA_EXSS_WIDE_LEFT_RIGHT = 0x0400,
95 DCA_EXSS_SIDE_LEFT_RIGHT = 0x0800,
96 DCA_EXSS_LFE2 = 0x1000,
97 DCA_EXSS_SIDE_HIGH_LEFT_RIGHT = 0x2000,
98 DCA_EXSS_REAR_HIGH_CENTER = 0x4000,
99 DCA_EXSS_REAR_HIGH_LEFT_RIGHT = 0x8000,
102 enum DCAXxchSpeakerMask {
103 DCA_XXCH_FRONT_CENTER = 0x0000001,
104 DCA_XXCH_FRONT_LEFT = 0x0000002,
105 DCA_XXCH_FRONT_RIGHT = 0x0000004,
106 DCA_XXCH_SIDE_REAR_LEFT = 0x0000008,
107 DCA_XXCH_SIDE_REAR_RIGHT = 0x0000010,
108 DCA_XXCH_LFE1 = 0x0000020,
109 DCA_XXCH_REAR_CENTER = 0x0000040,
110 DCA_XXCH_SURROUND_REAR_LEFT = 0x0000080,
111 DCA_XXCH_SURROUND_REAR_RIGHT = 0x0000100,
112 DCA_XXCH_SIDE_SURROUND_LEFT = 0x0000200,
113 DCA_XXCH_SIDE_SURROUND_RIGHT = 0x0000400,
114 DCA_XXCH_FRONT_CENTER_LEFT = 0x0000800,
115 DCA_XXCH_FRONT_CENTER_RIGHT = 0x0001000,
116 DCA_XXCH_FRONT_HIGH_LEFT = 0x0002000,
117 DCA_XXCH_FRONT_HIGH_CENTER = 0x0004000,
118 DCA_XXCH_FRONT_HIGH_RIGHT = 0x0008000,
119 DCA_XXCH_LFE2 = 0x0010000,
120 DCA_XXCH_SIDE_FRONT_LEFT = 0x0020000,
121 DCA_XXCH_SIDE_FRONT_RIGHT = 0x0040000,
122 DCA_XXCH_OVERHEAD = 0x0080000,
123 DCA_XXCH_SIDE_HIGH_LEFT = 0x0100000,
124 DCA_XXCH_SIDE_HIGH_RIGHT = 0x0200000,
125 DCA_XXCH_REAR_HIGH_CENTER = 0x0400000,
126 DCA_XXCH_REAR_HIGH_LEFT = 0x0800000,
127 DCA_XXCH_REAR_HIGH_RIGHT = 0x1000000,
128 DCA_XXCH_REAR_LOW_CENTER = 0x2000000,
129 DCA_XXCH_REAR_LOW_LEFT = 0x4000000,
130 DCA_XXCH_REAR_LOW_RIGHT = 0x8000000,
133 static const uint32_t map_xxch_to_native[28] = {
143 AV_CH_SIDE_LEFT, /* side surround left -- dup sur side L */
144 AV_CH_SIDE_RIGHT, /* side surround right -- dup sur side R */
145 AV_CH_FRONT_LEFT_OF_CENTER,
146 AV_CH_FRONT_RIGHT_OF_CENTER,
147 AV_CH_TOP_FRONT_LEFT,
148 AV_CH_TOP_FRONT_CENTER,
149 AV_CH_TOP_FRONT_RIGHT,
150 AV_CH_LOW_FREQUENCY, /* lfe2 -- duplicate lfe1 position */
151 AV_CH_FRONT_LEFT_OF_CENTER, /* side front left -- dup front cntr L */
152 AV_CH_FRONT_RIGHT_OF_CENTER,/* side front right -- dup front cntr R */
153 AV_CH_TOP_CENTER, /* overhead */
154 AV_CH_TOP_FRONT_LEFT, /* side high left -- dup */
155 AV_CH_TOP_FRONT_RIGHT, /* side high right -- dup */
156 AV_CH_TOP_BACK_CENTER,
158 AV_CH_TOP_BACK_RIGHT,
159 AV_CH_BACK_CENTER, /* rear low center -- dup */
160 AV_CH_BACK_LEFT, /* rear low left -- dup */
161 AV_CH_BACK_RIGHT /* read low right -- dup */
164 enum DCAExtensionMask {
165 DCA_EXT_CORE = 0x001, ///< core in core substream
166 DCA_EXT_XXCH = 0x002, ///< XXCh channels extension in core substream
167 DCA_EXT_X96 = 0x004, ///< 96/24 extension in core substream
168 DCA_EXT_XCH = 0x008, ///< XCh channel extension in core substream
169 DCA_EXT_EXSS_CORE = 0x010, ///< core in ExSS (extension substream)
170 DCA_EXT_EXSS_XBR = 0x020, ///< extended bitrate extension in ExSS
171 DCA_EXT_EXSS_XXCH = 0x040, ///< XXCh channels extension in ExSS
172 DCA_EXT_EXSS_X96 = 0x080, ///< 96/24 extension in ExSS
173 DCA_EXT_EXSS_LBR = 0x100, ///< low bitrate component in ExSS
174 DCA_EXT_EXSS_XLL = 0x200, ///< lossless extension in ExSS
177 /* -1 are reserved or unknown */
178 static const int dca_ext_audio_descr_mask[] = {
182 DCA_EXT_XCH | DCA_EXT_X96,
189 /* extensions that reside in core substream */
190 #define DCA_CORE_EXTS (DCA_EXT_XCH | DCA_EXT_XXCH | DCA_EXT_X96)
192 /* Tables for mapping dts channel configurations to libavcodec multichannel api.
193 * Some compromises have been made for special configurations. Most configurations
194 * are never used so complete accuracy is not needed.
196 * L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
197 * S -> side, when both rear and back are configured move one of them to the side channel
199 * All 2 channel configurations -> AV_CH_LAYOUT_STEREO
201 static const uint64_t dca_core_channel_layout[] = {
202 AV_CH_FRONT_CENTER, ///< 1, A
203 AV_CH_LAYOUT_STEREO, ///< 2, A + B (dual mono)
204 AV_CH_LAYOUT_STEREO, ///< 2, L + R (stereo)
205 AV_CH_LAYOUT_STEREO, ///< 2, (L + R) + (L - R) (sum-difference)
206 AV_CH_LAYOUT_STEREO, ///< 2, LT + RT (left and right total)
207 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER, ///< 3, C + L + R
208 AV_CH_LAYOUT_STEREO | AV_CH_BACK_CENTER, ///< 3, L + R + S
209 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_BACK_CENTER, ///< 4, C + L + R + S
210 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT, ///< 4, L + R + SL + SR
212 AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER | AV_CH_SIDE_LEFT |
213 AV_CH_SIDE_RIGHT, ///< 5, C + L + R + SL + SR
215 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
216 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER, ///< 6, CL + CR + L + R + SL + SR
218 AV_CH_LAYOUT_STEREO | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT |
219 AV_CH_FRONT_CENTER | AV_CH_BACK_CENTER, ///< 6, C + L + R + LR + RR + OV
221 AV_CH_FRONT_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
222 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_BACK_CENTER |
223 AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT, ///< 6, CF + CR + LF + RF + LR + RR
225 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER |
226 AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
227 AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT, ///< 7, CL + C + CR + L + R + SL + SR
229 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER |
230 AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT |
231 AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT, ///< 8, CL + CR + L + R + SL1 + SL2 + SR1 + SR2
233 AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_CENTER |
234 AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_LAYOUT_STEREO |
235 AV_CH_SIDE_LEFT | AV_CH_BACK_CENTER | AV_CH_SIDE_RIGHT, ///< 8, CL + C + CR + L + R + SL + S + SR
238 static const int8_t dca_lfe_index[] = {
239 1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
242 static const int8_t dca_channel_reorder_lfe[][9] = {
243 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
244 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
245 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
246 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
247 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
248 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
249 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
250 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
251 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
252 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
253 { 3, 4, 0, 1, 5, 6, -1, -1, -1},
254 { 2, 0, 1, 4, 5, 6, -1, -1, -1},
255 { 0, 6, 4, 5, 2, 3, -1, -1, -1},
256 { 4, 2, 5, 0, 1, 6, 7, -1, -1},
257 { 5, 6, 0, 1, 7, 3, 8, 4, -1},
258 { 4, 2, 5, 0, 1, 6, 8, 7, -1},
261 static const int8_t dca_channel_reorder_lfe_xch[][9] = {
262 { 0, 2, -1, -1, -1, -1, -1, -1, -1},
263 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
264 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
265 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
266 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
267 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
268 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
269 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
270 { 0, 1, 4, 5, 3, -1, -1, -1, -1},
271 { 2, 0, 1, 5, 6, 4, -1, -1, -1},
272 { 3, 4, 0, 1, 6, 7, 5, -1, -1},
273 { 2, 0, 1, 4, 5, 6, 7, -1, -1},
274 { 0, 6, 4, 5, 2, 3, 7, -1, -1},
275 { 4, 2, 5, 0, 1, 7, 8, 6, -1},
276 { 5, 6, 0, 1, 8, 3, 9, 4, 7},
277 { 4, 2, 5, 0, 1, 6, 9, 8, 7},
280 static const int8_t dca_channel_reorder_nolfe[][9] = {
281 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
282 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
283 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
284 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
285 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
286 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
287 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
288 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
289 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
290 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
291 { 2, 3, 0, 1, 4, 5, -1, -1, -1},
292 { 2, 0, 1, 3, 4, 5, -1, -1, -1},
293 { 0, 5, 3, 4, 1, 2, -1, -1, -1},
294 { 3, 2, 4, 0, 1, 5, 6, -1, -1},
295 { 4, 5, 0, 1, 6, 2, 7, 3, -1},
296 { 3, 2, 4, 0, 1, 5, 7, 6, -1},
299 static const int8_t dca_channel_reorder_nolfe_xch[][9] = {
300 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
301 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
302 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
303 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
304 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
305 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
306 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
307 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
308 { 0, 1, 3, 4, 2, -1, -1, -1, -1},
309 { 2, 0, 1, 4, 5, 3, -1, -1, -1},
310 { 2, 3, 0, 1, 5, 6, 4, -1, -1},
311 { 2, 0, 1, 3, 4, 5, 6, -1, -1},
312 { 0, 5, 3, 4, 1, 2, 6, -1, -1},
313 { 3, 2, 4, 0, 1, 6, 7, 5, -1},
314 { 4, 5, 0, 1, 7, 2, 8, 3, 6},
315 { 3, 2, 4, 0, 1, 5, 8, 7, 6},
318 #define DCA_DOLBY 101 /* FIXME */
320 #define DCA_CHANNEL_BITS 6
321 #define DCA_CHANNEL_MASK 0x3F
325 #define HEADER_SIZE 14
327 #define DCA_MAX_FRAME_SIZE 16384
328 #define DCA_MAX_EXSS_HEADER_SIZE 4096
330 #define DCA_BUFFER_PADDING_SIZE 1024
332 #define DCA_NSYNCAUX 0x9A1105A0
334 /** Bit allocation */
336 int offset; ///< code values offset
337 int maxbits[8]; ///< max bits in VLC
338 int wrap; ///< wrap for get_vlc2()
339 VLC vlc[8]; ///< actual codes
342 static BitAlloc dca_bitalloc_index; ///< indexes for samples VLC select
343 static BitAlloc dca_tmode; ///< transition mode VLCs
344 static BitAlloc dca_scalefactor; ///< scalefactor VLCs
345 static BitAlloc dca_smpl_bitalloc[11]; ///< samples VLCs
347 static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba,
350 return get_vlc2(gb, ba->vlc[idx].table, ba->vlc[idx].bits, ba->wrap) +
355 const AVClass *class; ///< class for AVOptions
356 AVCodecContext *avctx;
358 int frame_type; ///< type of the current frame
359 int samples_deficit; ///< deficit sample count
360 int crc_present; ///< crc is present in the bitstream
361 int sample_blocks; ///< number of PCM sample blocks
362 int frame_size; ///< primary frame byte size
363 int amode; ///< audio channels arrangement
364 int sample_rate; ///< audio sampling rate
365 int bit_rate; ///< transmission bit rate
366 int bit_rate_index; ///< transmission bit rate index
368 int dynrange; ///< embedded dynamic range flag
369 int timestamp; ///< embedded time stamp flag
370 int aux_data; ///< auxiliary data flag
371 int hdcd; ///< source material is mastered in HDCD
372 int ext_descr; ///< extension audio descriptor flag
373 int ext_coding; ///< extended coding flag
374 int aspf; ///< audio sync word insertion flag
375 int lfe; ///< low frequency effects flag
376 int predictor_history; ///< predictor history flag
377 int header_crc; ///< header crc check bytes
378 int multirate_inter; ///< multirate interpolator switch
379 int version; ///< encoder software revision
380 int copy_history; ///< copy history
381 int source_pcm_res; ///< source pcm resolution
382 int front_sum; ///< front sum/difference flag
383 int surround_sum; ///< surround sum/difference flag
384 int dialog_norm; ///< dialog normalisation parameter
386 /* Primary audio coding header */
387 int subframes; ///< number of subframes
388 int total_channels; ///< number of channels including extensions
389 int prim_channels; ///< number of primary audio channels
390 int subband_activity[DCA_PRIM_CHANNELS_MAX]; ///< subband activity count
391 int vq_start_subband[DCA_PRIM_CHANNELS_MAX]; ///< high frequency vq start subband
392 int joint_intensity[DCA_PRIM_CHANNELS_MAX]; ///< joint intensity coding index
393 int transient_huffman[DCA_PRIM_CHANNELS_MAX]; ///< transient mode code book
394 int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]; ///< scale factor code book
395 int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX]; ///< bit allocation quantizer select
396 int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< quantization index codebook select
397 float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]; ///< scale factor adjustment
399 /* Primary audio coding side information */
400 int subsubframes[DCA_SUBFRAMES_MAX]; ///< number of subsubframes
401 int partial_samples[DCA_SUBFRAMES_MAX]; ///< partial subsubframe samples count
402 int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction mode (ADPCM used or not)
403 int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< prediction VQ coefs
404 int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< bit allocation index
405 int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< transition mode (transients)
406 int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2]; ///< scale factors (2 if transient)
407 int joint_huff[DCA_PRIM_CHANNELS_MAX]; ///< joint subband scale factors codebook
408 int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< joint subband scale factors
409 float downmix_coef[DCA_PRIM_CHANNELS_MAX + 1][2]; ///< stereo downmix coefficients
410 int dynrange_coef; ///< dynamic range coefficient
412 /* Core substream's embedded downmix coefficients (cf. ETSI TS 102 114 V1.4.1)
413 * Input: primary audio channels (incl. LFE if present)
414 * Output: downmix audio channels (up to 4, no LFE) */
415 uint8_t core_downmix; ///< embedded downmix coefficients available
416 uint8_t core_downmix_amode; ///< audio channel arrangement of embedded downmix
417 uint16_t core_downmix_codes[DCA_PRIM_CHANNELS_MAX + 1][4]; ///< embedded downmix coefficients (9-bit codes)
419 int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]; ///< VQ encoded high frequency subbands
421 float lfe_data[2 * DCA_LFE_MAX * (DCA_BLOCKS_MAX + 4)]; ///< Low frequency effect data
422 int lfe_scale_factor;
424 /* Subband samples history (for ADPCM) */
425 DECLARE_ALIGNED(16, float, subband_samples_hist)[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4];
426 DECLARE_ALIGNED(32, float, subband_fir_hist)[DCA_PRIM_CHANNELS_MAX][512];
427 DECLARE_ALIGNED(32, float, subband_fir_noidea)[DCA_PRIM_CHANNELS_MAX][32];
428 int hist_index[DCA_PRIM_CHANNELS_MAX];
429 DECLARE_ALIGNED(32, float, raXin)[32];
431 int output; ///< type of output
433 DECLARE_ALIGNED(32, float, subband_samples)[DCA_BLOCKS_MAX][DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8];
434 float *samples_chanptr[DCA_PRIM_CHANNELS_MAX + 1];
435 float *extra_channels[DCA_PRIM_CHANNELS_MAX + 1];
436 uint8_t *extra_channels_buffer;
437 unsigned int extra_channels_buffer_size;
439 uint8_t dca_buffer[DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE + DCA_BUFFER_PADDING_SIZE];
440 int dca_buffer_size; ///< how much data is in the dca_buffer
442 const int8_t *channel_order_tab; ///< channel reordering table, lfe and non lfe
444 /* Current position in DCA frame */
445 int current_subframe;
446 int current_subsubframe;
448 int core_ext_mask; ///< present extensions in the core substream
450 /* XCh extension information */
451 int xch_present; ///< XCh extension present and valid
452 int xch_base_channel; ///< index of first (only) channel containing XCH data
453 int xch_disable; ///< whether the XCh extension should be decoded or not
455 /* XXCH extension information */
457 int xxch_nbits_spk_mask;
458 uint32_t xxch_core_spkmask;
459 uint32_t xxch_spk_masks[4]; /* speaker masks, last element is core mask */
460 int xxch_chset_nch[4];
461 float xxch_dmix_sf[DCA_CHSETS_MAX];
463 uint32_t xxch_dmix_embedded; /* lower layer has mix pre-embedded, per chset */
464 float xxch_dmix_coeff[DCA_PRIM_CHANNELS_MAX][32]; /* worst case sizing */
466 int8_t xxch_order_tab[32];
469 /* ExSS header parser */
470 int static_fields; ///< static fields present
471 int mix_metadata; ///< mixing metadata present
472 int num_mix_configs; ///< number of mix out configurations
473 int mix_config_num_ch[4]; ///< number of channels in each mix out configuration
477 int debug_flag; ///< used for suppressing repeated error messages output
478 AVFloatDSPContext fdsp;
480 SynthFilterContext synth;
481 DCADSPContext dcadsp;
482 FmtConvertContext fmt_conv;
485 static const uint16_t dca_vlc_offs[] = {
486 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364,
487 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508,
488 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564,
489 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240,
490 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
491 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
494 static av_cold void dca_init_vlcs(void)
496 static int vlcs_initialized = 0;
498 static VLC_TYPE dca_table[23622][2];
500 if (vlcs_initialized)
503 dca_bitalloc_index.offset = 1;
504 dca_bitalloc_index.wrap = 2;
505 for (i = 0; i < 5; i++) {
506 dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]];
507 dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i];
508 init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12,
509 bitalloc_12_bits[i], 1, 1,
510 bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
512 dca_scalefactor.offset = -64;
513 dca_scalefactor.wrap = 2;
514 for (i = 0; i < 5; i++) {
515 dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]];
516 dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5];
517 init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129,
518 scales_bits[i], 1, 1,
519 scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
521 dca_tmode.offset = 0;
523 for (i = 0; i < 4; i++) {
524 dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]];
525 dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10];
526 init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4,
528 tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
531 for (i = 0; i < 10; i++)
532 for (j = 0; j < 7; j++) {
533 if (!bitalloc_codes[i][j])
535 dca_smpl_bitalloc[i + 1].offset = bitalloc_offsets[i];
536 dca_smpl_bitalloc[i + 1].wrap = 1 + (j > 4);
537 dca_smpl_bitalloc[i + 1].vlc[j].table = &dca_table[dca_vlc_offs[c]];
538 dca_smpl_bitalloc[i + 1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
540 init_vlc(&dca_smpl_bitalloc[i + 1].vlc[j], bitalloc_maxbits[i][j],
542 bitalloc_bits[i][j], 1, 1,
543 bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC);
546 vlcs_initialized = 1;
549 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits)
552 *dst++ = get_bits(gb, bits);
555 static inline int dca_xxch2index(DCAContext *s, int xxch_ch)
559 /* locate channel set containing the channel */
560 for (i = -1, base = 0, mask = (s->xxch_core_spkmask & ~DCA_XXCH_LFE1);
561 i <= s->xxch_chset && !(mask & xxch_ch); mask = s->xxch_spk_masks[++i])
562 base += av_popcount(mask);
564 return base + av_popcount(mask & (xxch_ch - 1));
567 static int dca_parse_audio_coding_header(DCAContext *s, int base_channel,
571 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
572 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
573 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
574 int hdr_pos = 0, hdr_size = 0;
575 float sign, mag, scale_factor;
576 int this_chans, acc_mask;
577 int embedded_downmix;
581 /* xxch has arbitrary sized audio coding headers */
583 hdr_pos = get_bits_count(&s->gb);
584 hdr_size = get_bits(&s->gb, 7) + 1;
587 nchans = get_bits(&s->gb, 3) + 1;
588 s->total_channels = nchans + base_channel;
589 s->prim_channels = s->total_channels;
591 /* obtain speaker layout mask & downmix coefficients for XXCH */
593 acc_mask = s->xxch_core_spkmask;
595 this_chans = get_bits(&s->gb, s->xxch_nbits_spk_mask - 6) << 6;
596 s->xxch_spk_masks[s->xxch_chset] = this_chans;
597 s->xxch_chset_nch[s->xxch_chset] = nchans;
599 for (i = 0; i <= s->xxch_chset; i++)
600 acc_mask |= s->xxch_spk_masks[i];
602 /* check for downmixing information */
603 if (get_bits1(&s->gb)) {
604 embedded_downmix = get_bits1(&s->gb);
606 1.0f / dca_dmixtable[(get_bits(&s->gb, 6) - 1) << 2];
608 s->xxch_dmix_sf[s->xxch_chset] = scale_factor;
610 for (i = base_channel; i < s->prim_channels; i++) {
611 mask[i] = get_bits(&s->gb, s->xxch_nbits_spk_mask);
614 for (j = base_channel; j < s->prim_channels; j++) {
615 memset(s->xxch_dmix_coeff[j], 0, sizeof(s->xxch_dmix_coeff[0]));
616 s->xxch_dmix_embedded |= (embedded_downmix << j);
617 for (i = 0; i < s->xxch_nbits_spk_mask; i++) {
618 if (mask[j] & (1 << i)) {
619 if ((1 << i) == DCA_XXCH_LFE1) {
620 av_log(s->avctx, AV_LOG_WARNING,
621 "DCA-XXCH: dmix to LFE1 not supported.\n");
625 coeff = get_bits(&s->gb, 7);
626 sign = (coeff & 64) ? 1.0 : -1.0;
627 mag = dca_dmixtable[((coeff & 63) - 1) << 2];
628 ichan = dca_xxch2index(s, 1 << i);
629 s->xxch_dmix_coeff[j][ichan] = sign * mag;
636 if (s->prim_channels > DCA_PRIM_CHANNELS_MAX)
637 s->prim_channels = DCA_PRIM_CHANNELS_MAX;
640 for (i = base_channel; i < s->prim_channels; i++) {
641 s->subband_activity[i] = get_bits(&s->gb, 5) + 2;
642 if (s->subband_activity[i] > DCA_SUBBANDS)
643 s->subband_activity[i] = DCA_SUBBANDS;
645 for (i = base_channel; i < s->prim_channels; i++) {
646 s->vq_start_subband[i] = get_bits(&s->gb, 5) + 1;
647 if (s->vq_start_subband[i] > DCA_SUBBANDS)
648 s->vq_start_subband[i] = DCA_SUBBANDS;
650 get_array(&s->gb, s->joint_intensity + base_channel, s->prim_channels - base_channel, 3);
651 get_array(&s->gb, s->transient_huffman + base_channel, s->prim_channels - base_channel, 2);
652 get_array(&s->gb, s->scalefactor_huffman + base_channel, s->prim_channels - base_channel, 3);
653 get_array(&s->gb, s->bitalloc_huffman + base_channel, s->prim_channels - base_channel, 3);
655 /* Get codebooks quantization indexes */
657 memset(s->quant_index_huffman, 0, sizeof(s->quant_index_huffman));
658 for (j = 1; j < 11; j++)
659 for (i = base_channel; i < s->prim_channels; i++)
660 s->quant_index_huffman[i][j] = get_bits(&s->gb, bitlen[j]);
662 /* Get scale factor adjustment */
663 for (j = 0; j < 11; j++)
664 for (i = base_channel; i < s->prim_channels; i++)
665 s->scalefactor_adj[i][j] = 1;
667 for (j = 1; j < 11; j++)
668 for (i = base_channel; i < s->prim_channels; i++)
669 if (s->quant_index_huffman[i][j] < thr[j])
670 s->scalefactor_adj[i][j] = adj_table[get_bits(&s->gb, 2)];
673 if (s->crc_present) {
674 /* Audio header CRC check */
675 get_bits(&s->gb, 16);
678 /* Skip to the end of the header, also ignore CRC if present */
679 i = get_bits_count(&s->gb);
680 if (hdr_pos + 8 * hdr_size > i)
681 skip_bits_long(&s->gb, hdr_pos + 8 * hdr_size - i);
684 s->current_subframe = 0;
685 s->current_subsubframe = 0;
688 av_log(s->avctx, AV_LOG_DEBUG, "subframes: %i\n", s->subframes);
689 av_log(s->avctx, AV_LOG_DEBUG, "prim channels: %i\n", s->prim_channels);
690 for (i = base_channel; i < s->prim_channels; i++) {
691 av_log(s->avctx, AV_LOG_DEBUG, "subband activity: %i\n",
692 s->subband_activity[i]);
693 av_log(s->avctx, AV_LOG_DEBUG, "vq start subband: %i\n",
694 s->vq_start_subband[i]);
695 av_log(s->avctx, AV_LOG_DEBUG, "joint intensity: %i\n",
696 s->joint_intensity[i]);
697 av_log(s->avctx, AV_LOG_DEBUG, "transient mode codebook: %i\n",
698 s->transient_huffman[i]);
699 av_log(s->avctx, AV_LOG_DEBUG, "scale factor codebook: %i\n",
700 s->scalefactor_huffman[i]);
701 av_log(s->avctx, AV_LOG_DEBUG, "bit allocation quantizer: %i\n",
702 s->bitalloc_huffman[i]);
703 av_log(s->avctx, AV_LOG_DEBUG, "quant index huff:");
704 for (j = 0; j < 11; j++)
705 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->quant_index_huffman[i][j]);
706 av_log(s->avctx, AV_LOG_DEBUG, "\n");
707 av_log(s->avctx, AV_LOG_DEBUG, "scalefac adj:");
708 for (j = 0; j < 11; j++)
709 av_log(s->avctx, AV_LOG_DEBUG, " %1.3f", s->scalefactor_adj[i][j]);
710 av_log(s->avctx, AV_LOG_DEBUG, "\n");
717 static int dca_parse_frame_header(DCAContext *s)
719 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
722 skip_bits_long(&s->gb, 32);
725 s->frame_type = get_bits(&s->gb, 1);
726 s->samples_deficit = get_bits(&s->gb, 5) + 1;
727 s->crc_present = get_bits(&s->gb, 1);
728 s->sample_blocks = get_bits(&s->gb, 7) + 1;
729 s->frame_size = get_bits(&s->gb, 14) + 1;
730 if (s->frame_size < 95)
731 return AVERROR_INVALIDDATA;
732 s->amode = get_bits(&s->gb, 6);
733 s->sample_rate = avpriv_dca_sample_rates[get_bits(&s->gb, 4)];
735 return AVERROR_INVALIDDATA;
736 s->bit_rate_index = get_bits(&s->gb, 5);
737 s->bit_rate = dca_bit_rates[s->bit_rate_index];
739 return AVERROR_INVALIDDATA;
741 skip_bits1(&s->gb); // always 0 (reserved, cf. ETSI TS 102 114 V1.4.1)
742 s->dynrange = get_bits(&s->gb, 1);
743 s->timestamp = get_bits(&s->gb, 1);
744 s->aux_data = get_bits(&s->gb, 1);
745 s->hdcd = get_bits(&s->gb, 1);
746 s->ext_descr = get_bits(&s->gb, 3);
747 s->ext_coding = get_bits(&s->gb, 1);
748 s->aspf = get_bits(&s->gb, 1);
749 s->lfe = get_bits(&s->gb, 2);
750 s->predictor_history = get_bits(&s->gb, 1);
754 av_log(s->avctx, AV_LOG_ERROR, "Invalid LFE value: %d\n", s->lfe);
755 return AVERROR_INVALIDDATA;
758 /* TODO: check CRC */
760 s->header_crc = get_bits(&s->gb, 16);
762 s->multirate_inter = get_bits(&s->gb, 1);
763 s->version = get_bits(&s->gb, 4);
764 s->copy_history = get_bits(&s->gb, 2);
765 s->source_pcm_res = get_bits(&s->gb, 3);
766 s->front_sum = get_bits(&s->gb, 1);
767 s->surround_sum = get_bits(&s->gb, 1);
768 s->dialog_norm = get_bits(&s->gb, 4);
770 /* FIXME: channels mixing levels */
771 s->output = s->amode;
773 s->output |= DCA_LFE;
776 av_log(s->avctx, AV_LOG_DEBUG, "frame type: %i\n", s->frame_type);
777 av_log(s->avctx, AV_LOG_DEBUG, "samples deficit: %i\n", s->samples_deficit);
778 av_log(s->avctx, AV_LOG_DEBUG, "crc present: %i\n", s->crc_present);
779 av_log(s->avctx, AV_LOG_DEBUG, "sample blocks: %i (%i samples)\n",
780 s->sample_blocks, s->sample_blocks * 32);
781 av_log(s->avctx, AV_LOG_DEBUG, "frame size: %i bytes\n", s->frame_size);
782 av_log(s->avctx, AV_LOG_DEBUG, "amode: %i (%i channels)\n",
783 s->amode, dca_channels[s->amode]);
784 av_log(s->avctx, AV_LOG_DEBUG, "sample rate: %i Hz\n",
786 av_log(s->avctx, AV_LOG_DEBUG, "bit rate: %i bits/s\n",
788 av_log(s->avctx, AV_LOG_DEBUG, "dynrange: %i\n", s->dynrange);
789 av_log(s->avctx, AV_LOG_DEBUG, "timestamp: %i\n", s->timestamp);
790 av_log(s->avctx, AV_LOG_DEBUG, "aux_data: %i\n", s->aux_data);
791 av_log(s->avctx, AV_LOG_DEBUG, "hdcd: %i\n", s->hdcd);
792 av_log(s->avctx, AV_LOG_DEBUG, "ext descr: %i\n", s->ext_descr);
793 av_log(s->avctx, AV_LOG_DEBUG, "ext coding: %i\n", s->ext_coding);
794 av_log(s->avctx, AV_LOG_DEBUG, "aspf: %i\n", s->aspf);
795 av_log(s->avctx, AV_LOG_DEBUG, "lfe: %i\n", s->lfe);
796 av_log(s->avctx, AV_LOG_DEBUG, "predictor history: %i\n",
797 s->predictor_history);
798 av_log(s->avctx, AV_LOG_DEBUG, "header crc: %i\n", s->header_crc);
799 av_log(s->avctx, AV_LOG_DEBUG, "multirate inter: %i\n",
801 av_log(s->avctx, AV_LOG_DEBUG, "version number: %i\n", s->version);
802 av_log(s->avctx, AV_LOG_DEBUG, "copy history: %i\n", s->copy_history);
803 av_log(s->avctx, AV_LOG_DEBUG,
804 "source pcm resolution: %i (%i bits/sample)\n",
805 s->source_pcm_res, dca_bits_per_sample[s->source_pcm_res]);
806 av_log(s->avctx, AV_LOG_DEBUG, "front sum: %i\n", s->front_sum);
807 av_log(s->avctx, AV_LOG_DEBUG, "surround sum: %i\n", s->surround_sum);
808 av_log(s->avctx, AV_LOG_DEBUG, "dialog norm: %i\n", s->dialog_norm);
809 av_log(s->avctx, AV_LOG_DEBUG, "\n");
812 /* Primary audio coding header */
813 s->subframes = get_bits(&s->gb, 4) + 1;
815 return dca_parse_audio_coding_header(s, 0, 0);
819 static inline int get_scale(GetBitContext *gb, int level, int value, int log2range)
822 /* huffman encoded */
823 value += get_bitalloc(gb, &dca_scalefactor, level);
824 value = av_clip(value, 0, (1 << log2range) - 1);
825 } else if (level < 8) {
826 if (level + 1 > log2range) {
827 skip_bits(gb, level + 1 - log2range);
828 value = get_bits(gb, log2range);
830 value = get_bits(gb, level + 1);
836 static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
838 /* Primary audio coding side information */
841 if (get_bits_left(&s->gb) < 0)
842 return AVERROR_INVALIDDATA;
845 s->subsubframes[s->current_subframe] = get_bits(&s->gb, 2) + 1;
846 s->partial_samples[s->current_subframe] = get_bits(&s->gb, 3);
849 for (j = base_channel; j < s->prim_channels; j++) {
850 for (k = 0; k < s->subband_activity[j]; k++)
851 s->prediction_mode[j][k] = get_bits(&s->gb, 1);
854 /* Get prediction codebook */
855 for (j = base_channel; j < s->prim_channels; j++) {
856 for (k = 0; k < s->subband_activity[j]; k++) {
857 if (s->prediction_mode[j][k] > 0) {
858 /* (Prediction coefficient VQ address) */
859 s->prediction_vq[j][k] = get_bits(&s->gb, 12);
864 /* Bit allocation index */
865 for (j = base_channel; j < s->prim_channels; j++) {
866 for (k = 0; k < s->vq_start_subband[j]; k++) {
867 if (s->bitalloc_huffman[j] == 6)
868 s->bitalloc[j][k] = get_bits(&s->gb, 5);
869 else if (s->bitalloc_huffman[j] == 5)
870 s->bitalloc[j][k] = get_bits(&s->gb, 4);
871 else if (s->bitalloc_huffman[j] == 7) {
872 av_log(s->avctx, AV_LOG_ERROR,
873 "Invalid bit allocation index\n");
874 return AVERROR_INVALIDDATA;
877 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
880 if (s->bitalloc[j][k] > 26) {
881 av_dlog(s->avctx, "bitalloc index [%i][%i] too big (%i)\n",
882 j, k, s->bitalloc[j][k]);
883 return AVERROR_INVALIDDATA;
888 /* Transition mode */
889 for (j = base_channel; j < s->prim_channels; j++) {
890 for (k = 0; k < s->subband_activity[j]; k++) {
891 s->transition_mode[j][k] = 0;
892 if (s->subsubframes[s->current_subframe] > 1 &&
893 k < s->vq_start_subband[j] && s->bitalloc[j][k] > 0) {
894 s->transition_mode[j][k] =
895 get_bitalloc(&s->gb, &dca_tmode, s->transient_huffman[j]);
900 if (get_bits_left(&s->gb) < 0)
901 return AVERROR_INVALIDDATA;
903 for (j = base_channel; j < s->prim_channels; j++) {
904 const uint32_t *scale_table;
905 int scale_sum, log_size;
907 memset(s->scale_factor[j], 0,
908 s->subband_activity[j] * sizeof(s->scale_factor[0][0][0]) * 2);
910 if (s->scalefactor_huffman[j] == 6) {
911 scale_table = scale_factor_quant7;
914 scale_table = scale_factor_quant6;
918 /* When huffman coded, only the difference is encoded */
921 for (k = 0; k < s->subband_activity[j]; k++) {
922 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
923 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
924 s->scale_factor[j][k][0] = scale_table[scale_sum];
927 if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
928 /* Get second scale factor */
929 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum, log_size);
930 s->scale_factor[j][k][1] = scale_table[scale_sum];
935 /* Joint subband scale factor codebook select */
936 for (j = base_channel; j < s->prim_channels; j++) {
937 /* Transmitted only if joint subband coding enabled */
938 if (s->joint_intensity[j] > 0)
939 s->joint_huff[j] = get_bits(&s->gb, 3);
942 if (get_bits_left(&s->gb) < 0)
943 return AVERROR_INVALIDDATA;
945 /* Scale factors for joint subband coding */
946 for (j = base_channel; j < s->prim_channels; j++) {
949 /* Transmitted only if joint subband coding enabled */
950 if (s->joint_intensity[j] > 0) {
952 source_channel = s->joint_intensity[j] - 1;
954 /* When huffman coded, only the difference is encoded
955 * (is this valid as well for joint scales ???) */
957 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
958 scale = get_scale(&s->gb, s->joint_huff[j], 64 /* bias */, 7);
959 s->joint_scale_factor[j][k] = scale; /*joint_scale_table[scale]; */
962 if (!(s->debug_flag & 0x02)) {
963 av_log(s->avctx, AV_LOG_DEBUG,
964 "Joint stereo coding not supported\n");
965 s->debug_flag |= 0x02;
970 /* Dynamic range coefficient */
971 if (!base_channel && s->dynrange)
972 s->dynrange_coef = get_bits(&s->gb, 8);
974 /* Side information CRC check word */
975 if (s->crc_present) {
976 get_bits(&s->gb, 16);
980 * Primary audio data arrays
983 /* VQ encoded high frequency subbands */
984 for (j = base_channel; j < s->prim_channels; j++)
985 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
986 /* 1 vector -> 32 samples */
987 s->high_freq_vq[j][k] = get_bits(&s->gb, 10);
989 /* Low frequency effect data */
990 if (!base_channel && s->lfe) {
993 int lfe_samples = 2 * s->lfe * (4 + block_index);
994 int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
997 for (j = lfe_samples; j < lfe_end_sample; j++) {
998 /* Signed 8 bits int */
999 s->lfe_data[j] = get_sbits(&s->gb, 8);
1002 /* Scale factor index */
1003 quant7 = get_bits(&s->gb, 8);
1005 avpriv_request_sample(s->avctx, "LFEScaleIndex larger than 127");
1006 return AVERROR_INVALIDDATA;
1008 s->lfe_scale_factor = scale_factor_quant7[quant7];
1010 /* Quantization step size * scale factor */
1011 lfe_scale = 0.035 * s->lfe_scale_factor;
1013 for (j = lfe_samples; j < lfe_end_sample; j++)
1014 s->lfe_data[j] *= lfe_scale;
1018 av_log(s->avctx, AV_LOG_DEBUG, "subsubframes: %i\n",
1019 s->subsubframes[s->current_subframe]);
1020 av_log(s->avctx, AV_LOG_DEBUG, "partial samples: %i\n",
1021 s->partial_samples[s->current_subframe]);
1023 for (j = base_channel; j < s->prim_channels; j++) {
1024 av_log(s->avctx, AV_LOG_DEBUG, "prediction mode:");
1025 for (k = 0; k < s->subband_activity[j]; k++)
1026 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->prediction_mode[j][k]);
1027 av_log(s->avctx, AV_LOG_DEBUG, "\n");
1029 for (j = base_channel; j < s->prim_channels; j++) {
1030 for (k = 0; k < s->subband_activity[j]; k++)
1031 av_log(s->avctx, AV_LOG_DEBUG,
1032 "prediction coefs: %f, %f, %f, %f\n",
1033 (float) adpcm_vb[s->prediction_vq[j][k]][0] / 8192,
1034 (float) adpcm_vb[s->prediction_vq[j][k]][1] / 8192,
1035 (float) adpcm_vb[s->prediction_vq[j][k]][2] / 8192,
1036 (float) adpcm_vb[s->prediction_vq[j][k]][3] / 8192);
1038 for (j = base_channel; j < s->prim_channels; j++) {
1039 av_log(s->avctx, AV_LOG_DEBUG, "bitalloc index: ");
1040 for (k = 0; k < s->vq_start_subband[j]; k++)
1041 av_log(s->avctx, AV_LOG_DEBUG, "%2.2i ", s->bitalloc[j][k]);
1042 av_log(s->avctx, AV_LOG_DEBUG, "\n");
1044 for (j = base_channel; j < s->prim_channels; j++) {
1045 av_log(s->avctx, AV_LOG_DEBUG, "Transition mode:");
1046 for (k = 0; k < s->subband_activity[j]; k++)
1047 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->transition_mode[j][k]);
1048 av_log(s->avctx, AV_LOG_DEBUG, "\n");
1050 for (j = base_channel; j < s->prim_channels; j++) {
1051 av_log(s->avctx, AV_LOG_DEBUG, "Scale factor:");
1052 for (k = 0; k < s->subband_activity[j]; k++) {
1053 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0)
1054 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->scale_factor[j][k][0]);
1055 if (k < s->vq_start_subband[j] && s->transition_mode[j][k])
1056 av_log(s->avctx, AV_LOG_DEBUG, " %i(t)", s->scale_factor[j][k][1]);
1058 av_log(s->avctx, AV_LOG_DEBUG, "\n");
1060 for (j = base_channel; j < s->prim_channels; j++) {
1061 if (s->joint_intensity[j] > 0) {
1062 int source_channel = s->joint_intensity[j] - 1;
1063 av_log(s->avctx, AV_LOG_DEBUG, "Joint scale factor index:\n");
1064 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++)
1065 av_log(s->avctx, AV_LOG_DEBUG, " %i", s->joint_scale_factor[j][k]);
1066 av_log(s->avctx, AV_LOG_DEBUG, "\n");
1069 for (j = base_channel; j < s->prim_channels; j++)
1070 for (k = s->vq_start_subband[j]; k < s->subband_activity[j]; k++)
1071 av_log(s->avctx, AV_LOG_DEBUG, "VQ index: %i\n", s->high_freq_vq[j][k]);
1072 if (!base_channel && s->lfe) {
1073 int lfe_samples = 2 * s->lfe * (4 + block_index);
1074 int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]);
1076 av_log(s->avctx, AV_LOG_DEBUG, "LFE samples:\n");
1077 for (j = lfe_samples; j < lfe_end_sample; j++)
1078 av_log(s->avctx, AV_LOG_DEBUG, " %f", s->lfe_data[j]);
1079 av_log(s->avctx, AV_LOG_DEBUG, "\n");
1086 static void qmf_32_subbands(DCAContext *s, int chans,
1087 float samples_in[32][8], float *samples_out,
1090 const float *prCoeff;
1092 int sb_act = s->subband_activity[chans];
1094 scale *= sqrt(1 / 8.0);
1097 if (!s->multirate_inter) /* Non-perfect reconstruction */
1098 prCoeff = fir_32bands_nonperfect;
1099 else /* Perfect reconstruction */
1100 prCoeff = fir_32bands_perfect;
1102 s->dcadsp.qmf_32_subbands(samples_in, sb_act, &s->synth, &s->imdct,
1103 s->subband_fir_hist[chans],
1104 &s->hist_index[chans],
1105 s->subband_fir_noidea[chans], prCoeff,
1106 samples_out, s->raXin, scale);
1109 static void lfe_interpolation_fir(DCAContext *s, int decimation_select,
1110 int num_deci_sample, float *samples_in,
1111 float *samples_out, float scale)
1113 /* samples_in: An array holding decimated samples.
1114 * Samples in current subframe starts from samples_in[0],
1115 * while samples_in[-1], samples_in[-2], ..., stores samples
1116 * from last subframe as history.
1118 * samples_out: An array holding interpolated samples
1122 const float *prCoeff;
1125 /* Select decimation filter */
1126 if (decimation_select == 1) {
1128 prCoeff = lfe_fir_128;
1131 prCoeff = lfe_fir_64;
1134 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1135 s->dcadsp.lfe_fir[idx](samples_out, samples_in, prCoeff, scale);
1137 samples_out += 2 * 32 * (1 + idx);
1141 /* downmixing routines */
1142 #define MIX_REAR1(samples, s1, rs, coef) \
1143 samples[0][i] += samples[s1][i] * coef[rs][0]; \
1144 samples[1][i] += samples[s1][i] * coef[rs][1];
1146 #define MIX_REAR2(samples, s1, s2, rs, coef) \
1147 samples[0][i] += samples[s1][i] * coef[rs][0] + samples[s2][i] * coef[rs + 1][0]; \
1148 samples[1][i] += samples[s1][i] * coef[rs][1] + samples[s2][i] * coef[rs + 1][1];
1150 #define MIX_FRONT3(samples, coef) \
1151 t = samples[c][i]; \
1152 u = samples[l][i]; \
1153 v = samples[r][i]; \
1154 samples[0][i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1155 samples[1][i] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1157 #define DOWNMIX_TO_STEREO(op1, op2) \
1158 for (i = 0; i < 256; i++) { \
1163 static void dca_downmix(float **samples, int srcfmt, int lfe_present,
1164 float coef[DCA_PRIM_CHANNELS_MAX + 1][2],
1165 const int8_t *channel_mapping)
1167 int c, l, r, sl, sr, s;
1174 av_log(NULL, AV_LOG_ERROR, "Not implemented!\n");
1178 case DCA_STEREO_TOTAL:
1179 case DCA_STEREO_SUMDIFF:
1182 c = channel_mapping[0];
1183 l = channel_mapping[1];
1184 r = channel_mapping[2];
1185 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef), );
1188 s = channel_mapping[2];
1189 DOWNMIX_TO_STEREO(MIX_REAR1(samples, s, 2, coef), );
1192 c = channel_mapping[0];
1193 l = channel_mapping[1];
1194 r = channel_mapping[2];
1195 s = channel_mapping[3];
1196 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1197 MIX_REAR1(samples, s, 3, coef));
1200 sl = channel_mapping[2];
1201 sr = channel_mapping[3];
1202 DOWNMIX_TO_STEREO(MIX_REAR2(samples, sl, sr, 2, coef), );
1205 c = channel_mapping[0];
1206 l = channel_mapping[1];
1207 r = channel_mapping[2];
1208 sl = channel_mapping[3];
1209 sr = channel_mapping[4];
1210 DOWNMIX_TO_STEREO(MIX_FRONT3(samples, coef),
1211 MIX_REAR2(samples, sl, sr, 3, coef));
1215 int lf_buf = dca_lfe_index[srcfmt];
1216 int lf_idx = dca_channels [srcfmt];
1217 for (i = 0; i < 256; i++) {
1218 samples[0][i] += samples[lf_buf][i] * coef[lf_idx][0];
1219 samples[1][i] += samples[lf_buf][i] * coef[lf_idx][1];
1225 #ifndef decode_blockcodes
1226 /* Very compact version of the block code decoder that does not use table
1227 * look-up but is slightly slower */
1228 static int decode_blockcode(int code, int levels, int32_t *values)
1231 int offset = (levels - 1) >> 1;
1233 for (i = 0; i < 4; i++) {
1234 int div = FASTDIV(code, levels);
1235 values[i] = code - offset - div * levels;
1242 static int decode_blockcodes(int code1, int code2, int levels, int32_t *values)
1244 return decode_blockcode(code1, levels, values) |
1245 decode_blockcode(code2, levels, values + 4);
1249 static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 };
1250 static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 };
1252 #ifndef int8x8_fmul_int32
1253 static inline void int8x8_fmul_int32(DCADSPContext *dsp, float *dst,
1254 const int8_t *src, int scale)
1256 dsp->int8x8_fmul_int32(dst, src, scale);
1260 static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
1263 int subsubframe = s->current_subsubframe;
1265 const float *quant_step_table;
1268 float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1269 LOCAL_ALIGNED_16(int32_t, block, [8 * DCA_SUBBANDS]);
1275 /* Select quantization step size table */
1276 if (s->bit_rate_index == 0x1f)
1277 quant_step_table = lossless_quant_d;
1279 quant_step_table = lossy_quant_d;
1281 for (k = base_channel; k < s->prim_channels; k++) {
1282 float rscale[DCA_SUBBANDS];
1284 if (get_bits_left(&s->gb) < 0)
1285 return AVERROR_INVALIDDATA;
1287 for (l = 0; l < s->vq_start_subband[k]; l++) {
1290 /* Select the mid-tread linear quantizer */
1291 int abits = s->bitalloc[k][l];
1293 float quant_step_size = quant_step_table[abits];
1296 * Determine quantization index code book and its type
1299 /* Select quantization index code book */
1300 int sel = s->quant_index_huffman[k][abits];
1303 * Extract bits from the bit stream
1307 memset(block + 8 * l, 0, 8 * sizeof(block[0]));
1309 /* Deal with transients */
1310 int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l];
1311 rscale[l] = quant_step_size * s->scale_factor[k][l][sfi] *
1312 s->scalefactor_adj[k][sel];
1314 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1317 int block_code1, block_code2, size, levels, err;
1319 size = abits_sizes[abits - 1];
1320 levels = abits_levels[abits - 1];
1322 block_code1 = get_bits(&s->gb, size);
1323 block_code2 = get_bits(&s->gb, size);
1324 err = decode_blockcodes(block_code1, block_code2,
1325 levels, block + 8 * l);
1327 av_log(s->avctx, AV_LOG_ERROR,
1328 "ERROR: block code look-up failed\n");
1329 return AVERROR_INVALIDDATA;
1333 for (m = 0; m < 8; m++)
1334 block[8 * l + m] = get_sbits(&s->gb, abits - 3);
1338 for (m = 0; m < 8; m++)
1339 block[8 * l + m] = get_bitalloc(&s->gb,
1340 &dca_smpl_bitalloc[abits], sel);
1346 s->fmt_conv.int32_to_float_fmul_array8(&s->fmt_conv, subband_samples[k][0],
1347 block, rscale, 8 * s->vq_start_subband[k]);
1349 for (l = 0; l < s->vq_start_subband[k]; l++) {
1352 * Inverse ADPCM if in prediction mode
1354 if (s->prediction_mode[k][l]) {
1356 for (m = 0; m < 8; m++) {
1357 for (n = 1; n <= 4; n++)
1359 subband_samples[k][l][m] +=
1360 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1361 subband_samples[k][l][m - n] / 8192);
1362 else if (s->predictor_history)
1363 subband_samples[k][l][m] +=
1364 (adpcm_vb[s->prediction_vq[k][l]][n - 1] *
1365 s->subband_samples_hist[k][l][m - n + 4] / 8192);
1371 * Decode VQ encoded high frequencies
1373 for (l = s->vq_start_subband[k]; l < s->subband_activity[k]; l++) {
1374 /* 1 vector -> 32 samples but we only need the 8 samples
1375 * for this subsubframe. */
1376 int hfvq = s->high_freq_vq[k][l];
1378 if (!s->debug_flag & 0x01) {
1379 av_log(s->avctx, AV_LOG_DEBUG,
1380 "Stream with high frequencies VQ coding\n");
1381 s->debug_flag |= 0x01;
1384 int8x8_fmul_int32(&s->dcadsp, subband_samples[k][l],
1385 &high_freq_vq[hfvq][subsubframe * 8],
1386 s->scale_factor[k][l][0]);
1390 /* Check for DSYNC after subsubframe */
1391 if (s->aspf || subsubframe == s->subsubframes[s->current_subframe] - 1) {
1392 if (0xFFFF == get_bits(&s->gb, 16)) { /* 0xFFFF */
1394 av_log(s->avctx, AV_LOG_DEBUG, "Got subframe DSYNC\n");
1397 av_log(s->avctx, AV_LOG_ERROR, "Didn't get subframe DSYNC\n");
1398 return AVERROR_INVALIDDATA;
1402 /* Backup predictor history for adpcm */
1403 for (k = base_channel; k < s->prim_channels; k++)
1404 for (l = 0; l < s->vq_start_subband[k]; l++)
1405 AV_COPY128(s->subband_samples_hist[k][l], &subband_samples[k][l][4]);
1410 static int dca_filter_channels(DCAContext *s, int block_index)
1412 float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
1415 /* 32 subbands QMF */
1416 for (k = 0; k < s->prim_channels; k++) {
1417 /* static float pcm_to_double[8] = { 32768.0, 32768.0, 524288.0, 524288.0,
1418 0, 8388608.0, 8388608.0 };*/
1419 if (s->channel_order_tab[k] >= 0)
1420 qmf_32_subbands(s, k, subband_samples[k],
1421 s->samples_chanptr[s->channel_order_tab[k]],
1422 M_SQRT1_2 / 32768.0 /* pcm_to_double[s->source_pcm_res] */);
1425 /* Generate LFE samples for this subsubframe FIXME!!! */
1427 lfe_interpolation_fir(s, s->lfe, 2 * s->lfe,
1428 s->lfe_data + 2 * s->lfe * (block_index + 4),
1429 s->samples_chanptr[s->lfe_index],
1430 1.0 / (256.0 * 32768.0));
1431 /* Outputs 20bits pcm samples */
1434 /* Downmixing to Stereo */
1435 if (s->prim_channels + !!s->lfe > 2 &&
1436 s->avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
1437 dca_downmix(s->samples_chanptr, s->amode, !!s->lfe, s->downmix_coef,
1438 s->channel_order_tab);
1445 static int dca_subframe_footer(DCAContext *s, int base_channel)
1447 int in, out, aux_data_count, aux_data_end, reserved;
1451 * Unpack optional information
1454 /* presumably optional information only appears in the core? */
1455 if (!base_channel) {
1457 skip_bits_long(&s->gb, 32);
1460 aux_data_count = get_bits(&s->gb, 6);
1463 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
1465 aux_data_end = 8 * aux_data_count + get_bits_count(&s->gb);
1467 if ((nsyncaux = get_bits_long(&s->gb, 32)) != DCA_NSYNCAUX) {
1468 av_log(s->avctx, AV_LOG_ERROR, "nSYNCAUX mismatch %#"PRIx32"\n",
1470 return AVERROR_INVALIDDATA;
1473 if (get_bits1(&s->gb)) { // bAUXTimeStampFlag
1474 avpriv_request_sample(s->avctx,
1475 "Auxiliary Decode Time Stamp Flag");
1477 skip_bits(&s->gb, (-get_bits_count(&s->gb)) & 4);
1478 // 44 bits: nMSByte (8), nMarker (4), nLSByte (28), nMarker (4)
1479 skip_bits_long(&s->gb, 44);
1482 if ((s->core_downmix = get_bits1(&s->gb))) {
1483 int am = get_bits(&s->gb, 3);
1486 s->core_downmix_amode = DCA_MONO;
1489 s->core_downmix_amode = DCA_STEREO;
1492 s->core_downmix_amode = DCA_STEREO_TOTAL;
1495 s->core_downmix_amode = DCA_3F;
1498 s->core_downmix_amode = DCA_2F1R;
1501 s->core_downmix_amode = DCA_2F2R;
1504 s->core_downmix_amode = DCA_3F1R;
1507 av_log(s->avctx, AV_LOG_ERROR,
1508 "Invalid mode %d for embedded downmix coefficients\n",
1510 return AVERROR_INVALIDDATA;
1512 for (out = 0; out < dca_channels[s->core_downmix_amode]; out++) {
1513 for (in = 0; in < s->prim_channels + !!s->lfe; in++) {
1514 uint16_t tmp = get_bits(&s->gb, 9);
1515 if ((tmp & 0xFF) > 241) {
1516 av_log(s->avctx, AV_LOG_ERROR,
1517 "Invalid downmix coefficient code %"PRIu16"\n",
1519 return AVERROR_INVALIDDATA;
1521 s->core_downmix_codes[in][out] = tmp;
1526 align_get_bits(&s->gb); // byte align
1527 skip_bits(&s->gb, 16); // nAUXCRC16
1529 // additional data (reserved, cf. ETSI TS 102 114 V1.4.1)
1530 if ((reserved = (aux_data_end - get_bits_count(&s->gb))) < 0) {
1531 av_log(s->avctx, AV_LOG_ERROR,
1532 "Overread auxiliary data by %d bits\n", -reserved);
1533 return AVERROR_INVALIDDATA;
1534 } else if (reserved) {
1535 avpriv_request_sample(s->avctx,
1536 "Core auxiliary data reserved content");
1537 skip_bits_long(&s->gb, reserved);
1541 if (s->crc_present && s->dynrange)
1542 get_bits(&s->gb, 16);
1549 * Decode a dca frame block
1551 * @param s pointer to the DCAContext
1554 static int dca_decode_block(DCAContext *s, int base_channel, int block_index)
1559 if (s->current_subframe >= s->subframes) {
1560 av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
1561 s->current_subframe, s->subframes);
1562 return AVERROR_INVALIDDATA;
1565 if (!s->current_subsubframe) {
1567 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
1569 /* Read subframe header */
1570 if ((ret = dca_subframe_header(s, base_channel, block_index)))
1574 /* Read subsubframe */
1576 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
1578 if ((ret = dca_subsubframe(s, base_channel, block_index)))
1582 s->current_subsubframe++;
1583 if (s->current_subsubframe >= s->subsubframes[s->current_subframe]) {
1584 s->current_subsubframe = 0;
1585 s->current_subframe++;
1587 if (s->current_subframe >= s->subframes) {
1589 av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
1591 /* Read subframe footer */
1592 if ((ret = dca_subframe_footer(s, base_channel)))
1600 * Return the number of channels in an ExSS speaker mask (HD)
1602 static int dca_exss_mask2count(int mask)
1604 /* count bits that mean speaker pairs twice */
1605 return av_popcount(mask) +
1606 av_popcount(mask & (DCA_EXSS_CENTER_LEFT_RIGHT |
1607 DCA_EXSS_FRONT_LEFT_RIGHT |
1608 DCA_EXSS_FRONT_HIGH_LEFT_RIGHT |
1609 DCA_EXSS_WIDE_LEFT_RIGHT |
1610 DCA_EXSS_SIDE_LEFT_RIGHT |
1611 DCA_EXSS_SIDE_HIGH_LEFT_RIGHT |
1612 DCA_EXSS_SIDE_REAR_LEFT_RIGHT |
1613 DCA_EXSS_REAR_LEFT_RIGHT |
1614 DCA_EXSS_REAR_HIGH_LEFT_RIGHT));
1618 * Skip mixing coefficients of a single mix out configuration (HD)
1620 static void dca_exss_skip_mix_coeffs(GetBitContext *gb, int channels, int out_ch)
1624 for (i = 0; i < channels; i++) {
1625 int mix_map_mask = get_bits(gb, out_ch);
1626 int num_coeffs = av_popcount(mix_map_mask);
1627 skip_bits_long(gb, num_coeffs * 6);
1632 * Parse extension substream asset header (HD)
1634 static int dca_exss_parse_asset_header(DCAContext *s)
1636 int header_pos = get_bits_count(&s->gb);
1639 int embedded_stereo = 0;
1640 int embedded_6ch = 0;
1641 int drc_code_present;
1642 int av_uninit(extensions_mask);
1645 if (get_bits_left(&s->gb) < 16)
1648 /* We will parse just enough to get to the extensions bitmask with which
1649 * we can set the profile value. */
1651 header_size = get_bits(&s->gb, 9) + 1;
1652 skip_bits(&s->gb, 3); // asset index
1654 if (s->static_fields) {
1655 if (get_bits1(&s->gb))
1656 skip_bits(&s->gb, 4); // asset type descriptor
1657 if (get_bits1(&s->gb))
1658 skip_bits_long(&s->gb, 24); // language descriptor
1660 if (get_bits1(&s->gb)) {
1661 /* How can one fit 1024 bytes of text here if the maximum value
1662 * for the asset header size field above was 512 bytes? */
1663 int text_length = get_bits(&s->gb, 10) + 1;
1664 if (get_bits_left(&s->gb) < text_length * 8)
1666 skip_bits_long(&s->gb, text_length * 8); // info text
1669 skip_bits(&s->gb, 5); // bit resolution - 1
1670 skip_bits(&s->gb, 4); // max sample rate code
1671 channels = get_bits(&s->gb, 8) + 1;
1673 if (get_bits1(&s->gb)) { // 1-to-1 channels to speakers
1674 int spkr_remap_sets;
1675 int spkr_mask_size = 16;
1679 embedded_stereo = get_bits1(&s->gb);
1681 embedded_6ch = get_bits1(&s->gb);
1683 if (get_bits1(&s->gb)) {
1684 spkr_mask_size = (get_bits(&s->gb, 2) + 1) << 2;
1685 skip_bits(&s->gb, spkr_mask_size); // spkr activity mask
1688 spkr_remap_sets = get_bits(&s->gb, 3);
1690 for (i = 0; i < spkr_remap_sets; i++) {
1691 /* std layout mask for each remap set */
1692 num_spkrs[i] = dca_exss_mask2count(get_bits(&s->gb, spkr_mask_size));
1695 for (i = 0; i < spkr_remap_sets; i++) {
1696 int num_dec_ch_remaps = get_bits(&s->gb, 5) + 1;
1697 if (get_bits_left(&s->gb) < 0)
1700 for (j = 0; j < num_spkrs[i]; j++) {
1701 int remap_dec_ch_mask = get_bits_long(&s->gb, num_dec_ch_remaps);
1702 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1703 skip_bits_long(&s->gb, num_dec_ch * 5); // remap codes
1708 skip_bits(&s->gb, 3); // representation type
1712 drc_code_present = get_bits1(&s->gb);
1713 if (drc_code_present)
1714 get_bits(&s->gb, 8); // drc code
1716 if (get_bits1(&s->gb))
1717 skip_bits(&s->gb, 5); // dialog normalization code
1719 if (drc_code_present && embedded_stereo)
1720 get_bits(&s->gb, 8); // drc stereo code
1722 if (s->mix_metadata && get_bits1(&s->gb)) {
1723 skip_bits(&s->gb, 1); // external mix
1724 skip_bits(&s->gb, 6); // post mix gain code
1726 if (get_bits(&s->gb, 2) != 3) // mixer drc code
1727 skip_bits(&s->gb, 3); // drc limit
1729 skip_bits(&s->gb, 8); // custom drc code
1731 if (get_bits1(&s->gb)) // channel specific scaling
1732 for (i = 0; i < s->num_mix_configs; i++)
1733 skip_bits_long(&s->gb, s->mix_config_num_ch[i] * 6); // scale codes
1735 skip_bits_long(&s->gb, s->num_mix_configs * 6); // scale codes
1737 for (i = 0; i < s->num_mix_configs; i++) {
1738 if (get_bits_left(&s->gb) < 0)
1740 dca_exss_skip_mix_coeffs(&s->gb, channels, s->mix_config_num_ch[i]);
1742 dca_exss_skip_mix_coeffs(&s->gb, 6, s->mix_config_num_ch[i]);
1743 if (embedded_stereo)
1744 dca_exss_skip_mix_coeffs(&s->gb, 2, s->mix_config_num_ch[i]);
1748 switch (get_bits(&s->gb, 2)) {
1749 case 0: extensions_mask = get_bits(&s->gb, 12); break;
1750 case 1: extensions_mask = DCA_EXT_EXSS_XLL; break;
1751 case 2: extensions_mask = DCA_EXT_EXSS_LBR; break;
1752 case 3: extensions_mask = 0; /* aux coding */ break;
1755 /* not parsed further, we were only interested in the extensions mask */
1757 if (get_bits_left(&s->gb) < 0)
1760 if (get_bits_count(&s->gb) - header_pos > header_size * 8) {
1761 av_log(s->avctx, AV_LOG_WARNING, "Asset header size mismatch.\n");
1764 skip_bits_long(&s->gb, header_pos + header_size * 8 - get_bits_count(&s->gb));
1766 if (extensions_mask & DCA_EXT_EXSS_XLL)
1767 s->profile = FF_PROFILE_DTS_HD_MA;
1768 else if (extensions_mask & (DCA_EXT_EXSS_XBR | DCA_EXT_EXSS_X96 |
1770 s->profile = FF_PROFILE_DTS_HD_HRA;
1772 if (!(extensions_mask & DCA_EXT_CORE))
1773 av_log(s->avctx, AV_LOG_WARNING, "DTS core detection mismatch.\n");
1774 if ((extensions_mask & DCA_CORE_EXTS) != s->core_ext_mask)
1775 av_log(s->avctx, AV_LOG_WARNING,
1776 "DTS extensions detection mismatch (%d, %d)\n",
1777 extensions_mask & DCA_CORE_EXTS, s->core_ext_mask);
1782 static int dca_xbr_parse_frame(DCAContext *s)
1784 int scale_table_high[DCA_CHSET_CHANS_MAX][DCA_SUBBANDS][2];
1785 int active_bands[DCA_CHSETS_MAX][DCA_CHSET_CHANS_MAX];
1786 int abits_high[DCA_CHSET_CHANS_MAX][DCA_SUBBANDS];
1787 int anctemp[DCA_CHSET_CHANS_MAX];
1788 int chset_fsize[DCA_CHSETS_MAX];
1789 int n_xbr_ch[DCA_CHSETS_MAX];
1790 int hdr_size, num_chsets, xbr_tmode, hdr_pos;
1791 int i, j, k, l, chset, chan_base;
1793 av_log(s->avctx, AV_LOG_DEBUG, "DTS-XBR: decoding XBR extension\n");
1795 /* get bit position of sync header */
1796 hdr_pos = get_bits_count(&s->gb) - 32;
1798 hdr_size = get_bits(&s->gb, 6) + 1;
1799 num_chsets = get_bits(&s->gb, 2) + 1;
1801 for(i = 0; i < num_chsets; i++)
1802 chset_fsize[i] = get_bits(&s->gb, 14) + 1;
1804 xbr_tmode = get_bits1(&s->gb);
1806 for(i = 0; i < num_chsets; i++) {
1807 n_xbr_ch[i] = get_bits(&s->gb, 3) + 1;
1808 k = get_bits(&s->gb, 2) + 5;
1809 for(j = 0; j < n_xbr_ch[i]; j++)
1810 active_bands[i][j] = get_bits(&s->gb, k) + 1;
1813 /* skip to the end of the header */
1814 i = get_bits_count(&s->gb);
1815 if(hdr_pos + hdr_size * 8 > i)
1816 skip_bits_long(&s->gb, hdr_pos + hdr_size * 8 - i);
1818 /* loop over the channel data sets */
1819 /* only decode as many channels as we've decoded base data for */
1820 for(chset = 0, chan_base = 0;
1821 chset < num_chsets && chan_base + n_xbr_ch[chset] <= s->prim_channels;
1822 chan_base += n_xbr_ch[chset++]) {
1823 int start_posn = get_bits_count(&s->gb);
1824 int subsubframe = 0;
1827 /* loop over subframes */
1828 for (k = 0; k < (s->sample_blocks / 8); k++) {
1829 /* parse header if we're on first subsubframe of a block */
1830 if(subsubframe == 0) {
1831 /* Parse subframe header */
1832 for(i = 0; i < n_xbr_ch[chset]; i++) {
1833 anctemp[i] = get_bits(&s->gb, 2) + 2;
1836 for(i = 0; i < n_xbr_ch[chset]; i++) {
1837 get_array(&s->gb, abits_high[i], active_bands[chset][i], anctemp[i]);
1840 for(i = 0; i < n_xbr_ch[chset]; i++) {
1841 anctemp[i] = get_bits(&s->gb, 3);
1842 if(anctemp[i] < 1) {
1843 av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: SYNC ERROR\n");
1844 return AVERROR_INVALIDDATA;
1848 /* generate scale factors */
1849 for(i = 0; i < n_xbr_ch[chset]; i++) {
1850 const uint32_t *scale_table;
1853 if (s->scalefactor_huffman[chan_base+i] == 6) {
1854 scale_table = scale_factor_quant7;
1856 scale_table = scale_factor_quant6;
1861 for(j = 0; j < active_bands[chset][i]; j++) {
1862 if(abits_high[i][j] > 0) {
1863 scale_table_high[i][j][0] =
1864 scale_table[get_bits(&s->gb, nbits)];
1866 if(xbr_tmode && s->transition_mode[i][j]) {
1867 scale_table_high[i][j][1] =
1868 scale_table[get_bits(&s->gb, nbits)];
1875 /* decode audio array for this block */
1876 for(i = 0; i < n_xbr_ch[chset]; i++) {
1877 for(j = 0; j < active_bands[chset][i]; j++) {
1878 const int xbr_abits = abits_high[i][j];
1879 const float quant_step_size = lossless_quant_d[xbr_abits];
1880 const int sfi = xbr_tmode && s->transition_mode[i][j] && subsubframe >= s->transition_mode[i][j];
1881 const float rscale = quant_step_size * scale_table_high[i][j][sfi];
1882 float *subband_samples = s->subband_samples[k][chan_base+i][j];
1889 get_array(&s->gb, block, 8, xbr_abits - 3);
1891 int block_code1, block_code2, size, levels, err;
1893 size = abits_sizes[xbr_abits - 1];
1894 levels = abits_levels[xbr_abits - 1];
1896 block_code1 = get_bits(&s->gb, size);
1897 block_code2 = get_bits(&s->gb, size);
1898 err = decode_blockcodes(block_code1, block_code2,
1901 av_log(s->avctx, AV_LOG_ERROR,
1902 "ERROR: DTS-XBR: block code look-up failed\n");
1903 return AVERROR_INVALIDDATA;
1907 /* scale & sum into subband */
1908 for(l = 0; l < 8; l++)
1909 subband_samples[l] += (float)block[l] * rscale;
1913 /* check DSYNC marker */
1914 if(s->aspf || subsubframe == s->subsubframes[subframe] - 1) {
1915 if(get_bits(&s->gb, 16) != 0xffff) {
1916 av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: Didn't get subframe DSYNC\n");
1917 return AVERROR_INVALIDDATA;
1921 /* advance sub-sub-frame index */
1922 if(++subsubframe >= s->subsubframes[subframe]) {
1928 /* skip to next channel set */
1929 i = get_bits_count(&s->gb);
1930 if(start_posn + chset_fsize[chset] * 8 != i) {
1931 j = start_posn + chset_fsize[chset] * 8 - i;
1933 av_log(s->avctx, AV_LOG_ERROR, "DTS-XBR: end of channel set,"
1934 " skipping further than expected (%d bits)\n", j);
1935 skip_bits_long(&s->gb, j);
1942 /* parse initial header for XXCH and dump details */
1943 static int dca_xxch_decode_frame(DCAContext *s)
1945 int hdr_size, spkmsk_bits, num_chsets, core_spk, hdr_pos;
1946 int i, chset, base_channel, chstart, fsize[8];
1948 /* assume header word has already been parsed */
1949 hdr_pos = get_bits_count(&s->gb) - 32;
1950 hdr_size = get_bits(&s->gb, 6) + 1;
1951 /*chhdr_crc =*/ skip_bits1(&s->gb);
1952 spkmsk_bits = get_bits(&s->gb, 5) + 1;
1953 num_chsets = get_bits(&s->gb, 2) + 1;
1955 for (i = 0; i < num_chsets; i++)
1956 fsize[i] = get_bits(&s->gb, 14) + 1;
1958 core_spk = get_bits(&s->gb, spkmsk_bits);
1959 s->xxch_core_spkmask = core_spk;
1960 s->xxch_nbits_spk_mask = spkmsk_bits;
1961 s->xxch_dmix_embedded = 0;
1963 /* skip to the end of the header */
1964 i = get_bits_count(&s->gb);
1965 if (hdr_pos + hdr_size * 8 > i)
1966 skip_bits_long(&s->gb, hdr_pos + hdr_size * 8 - i);
1968 for (chset = 0; chset < num_chsets; chset++) {
1969 chstart = get_bits_count(&s->gb);
1970 base_channel = s->prim_channels;
1971 s->xxch_chset = chset;
1973 /* XXCH and Core headers differ, see 6.4.2 "XXCH Channel Set Header" vs.
1974 5.3.2 "Primary Audio Coding Header", DTS Spec 1.3.1 */
1975 dca_parse_audio_coding_header(s, base_channel, 1);
1977 /* decode channel data */
1978 for (i = 0; i < (s->sample_blocks / 8); i++) {
1979 if (dca_decode_block(s, base_channel, i)) {
1980 av_log(s->avctx, AV_LOG_ERROR,
1981 "Error decoding DTS-XXCH extension\n");
1986 /* skip to end of this section */
1987 i = get_bits_count(&s->gb);
1988 if (chstart + fsize[chset] * 8 > i)
1989 skip_bits_long(&s->gb, chstart + fsize[chset] * 8 - i);
1991 s->xxch_chset = num_chsets;
1997 * Parse extension substream header (HD)
1999 static void dca_exss_parse_header(DCAContext *s)
2006 int active_ss_mask[8];
2012 if (get_bits_left(&s->gb) < 52)
2015 start_posn = get_bits_count(&s->gb) - 32;
2017 skip_bits(&s->gb, 8); // user data
2018 ss_index = get_bits(&s->gb, 2);
2020 blownup = get_bits1(&s->gb);
2021 hdrsize = get_bits(&s->gb, 8 + 4 * blownup) + 1; // header_size
2022 skip_bits(&s->gb, 16 + 4 * blownup); // hd_size
2024 s->static_fields = get_bits1(&s->gb);
2025 if (s->static_fields) {
2026 skip_bits(&s->gb, 2); // reference clock code
2027 skip_bits(&s->gb, 3); // frame duration code
2029 if (get_bits1(&s->gb))
2030 skip_bits_long(&s->gb, 36); // timestamp
2032 /* a single stream can contain multiple audio assets that can be
2033 * combined to form multiple audio presentations */
2035 num_audiop = get_bits(&s->gb, 3) + 1;
2036 if (num_audiop > 1) {
2037 avpriv_request_sample(s->avctx,
2038 "Multiple DTS-HD audio presentations");
2039 /* ignore such streams for now */
2043 num_assets = get_bits(&s->gb, 3) + 1;
2044 if (num_assets > 1) {
2045 avpriv_request_sample(s->avctx, "Multiple DTS-HD audio assets");
2046 /* ignore such streams for now */
2050 for (i = 0; i < num_audiop; i++)
2051 active_ss_mask[i] = get_bits(&s->gb, ss_index + 1);
2053 for (i = 0; i < num_audiop; i++)
2054 for (j = 0; j <= ss_index; j++)
2055 if (active_ss_mask[i] & (1 << j))
2056 skip_bits(&s->gb, 8); // active asset mask
2058 s->mix_metadata = get_bits1(&s->gb);
2059 if (s->mix_metadata) {
2060 int mix_out_mask_size;
2062 skip_bits(&s->gb, 2); // adjustment level
2063 mix_out_mask_size = (get_bits(&s->gb, 2) + 1) << 2;
2064 s->num_mix_configs = get_bits(&s->gb, 2) + 1;
2066 for (i = 0; i < s->num_mix_configs; i++) {
2067 int mix_out_mask = get_bits(&s->gb, mix_out_mask_size);
2068 s->mix_config_num_ch[i] = dca_exss_mask2count(mix_out_mask);
2073 for (i = 0; i < num_assets; i++)
2074 asset_size[i] = get_bits_long(&s->gb, 16 + 4 * blownup);
2076 for (i = 0; i < num_assets; i++) {
2077 if (dca_exss_parse_asset_header(s))
2081 /* not parsed further, we were only interested in the extensions mask
2082 * from the asset header */
2084 if (num_assets > 0) {
2085 j = get_bits_count(&s->gb);
2086 if (start_posn + hdrsize * 8 > j)
2087 skip_bits_long(&s->gb, start_posn + hdrsize * 8 - j);
2089 for (i = 0; i < num_assets; i++) {
2090 start_posn = get_bits_count(&s->gb);
2091 mkr = get_bits_long(&s->gb, 32);
2093 /* parse extensions that we know about */
2094 if (mkr == 0x655e315e) {
2095 dca_xbr_parse_frame(s);
2096 } else if (mkr == 0x47004a03) {
2097 dca_xxch_decode_frame(s);
2098 s->core_ext_mask |= DCA_EXT_XXCH; /* xxx use for chan reordering */
2100 av_log(s->avctx, AV_LOG_DEBUG,
2101 "DTS-ExSS: unknown marker = 0x%08x\n", mkr);
2104 /* skip to end of block */
2105 j = get_bits_count(&s->gb);
2106 if (start_posn + asset_size[i] * 8 > j)
2107 skip_bits_long(&s->gb, start_posn + asset_size[i] * 8 - j);
2113 * Main frame decoding function
2114 * FIXME add arguments
2116 static int dca_decode_frame(AVCodecContext *avctx, void *data,
2117 int *got_frame_ptr, AVPacket *avpkt)
2119 AVFrame *frame = data;
2120 const uint8_t *buf = avpkt->data;
2121 int buf_size = avpkt->size;
2125 int num_core_channels = 0;
2127 float **samples_flt;
2130 DCAContext *s = avctx->priv_data;
2132 int channels, full_channels;
2144 s->dca_buffer_size = ff_dca_convert_bitstream(buf, buf_size, s->dca_buffer,
2145 DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
2146 if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
2147 av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
2148 return AVERROR_INVALIDDATA;
2151 init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
2152 if ((ret = dca_parse_frame_header(s)) < 0) {
2153 //seems like the frame is corrupt, try with the next one
2156 //set AVCodec values with parsed data
2157 avctx->sample_rate = s->sample_rate;
2158 avctx->bit_rate = s->bit_rate;
2160 s->profile = FF_PROFILE_DTS;
2162 for (i = 0; i < (s->sample_blocks / 8); i++) {
2163 if ((ret = dca_decode_block(s, 0, i))) {
2164 av_log(avctx, AV_LOG_ERROR, "error decoding block\n");
2169 /* record number of core channels incase less than max channels are requested */
2170 num_core_channels = s->prim_channels;
2172 if (s->prim_channels + !!s->lfe > 2 &&
2173 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
2174 /* Stereo downmix coefficients
2176 * The decoder can only downmix to 2-channel, so we need to ensure
2177 * embedded downmix coefficients are actually targeting 2-channel.
2179 if (s->core_downmix && (s->core_downmix_amode == DCA_STEREO ||
2180 s->core_downmix_amode == DCA_STEREO_TOTAL)) {
2182 for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
2183 sign = s->core_downmix_codes[i][0] & 0x100 ? 1 : -1;
2184 code = s->core_downmix_codes[i][0] & 0x0FF;
2185 s->downmix_coef[i][0] = (!code ? 0.0f :
2186 sign * dca_dmixtable[code - 1]);
2187 sign = s->core_downmix_codes[i][1] & 0x100 ? 1 : -1;
2188 code = s->core_downmix_codes[i][1] & 0x0FF;
2189 s->downmix_coef[i][1] = (!code ? 0.0f :
2190 sign * dca_dmixtable[code - 1]);
2192 s->output = s->core_downmix_amode;
2194 int am = s->amode & DCA_CHANNEL_MASK;
2195 if (am >= FF_ARRAY_ELEMS(dca_default_coeffs)) {
2196 av_log(s->avctx, AV_LOG_ERROR,
2197 "Invalid channel mode %d\n", am);
2198 return AVERROR_INVALIDDATA;
2200 if (s->prim_channels + !!s->lfe >
2201 FF_ARRAY_ELEMS(dca_default_coeffs[0])) {
2202 avpriv_request_sample(s->avctx, "Downmixing %d channels",
2203 s->prim_channels + !!s->lfe);
2204 return AVERROR_PATCHWELCOME;
2206 for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
2207 s->downmix_coef[i][0] = dca_default_coeffs[am][i][0];
2208 s->downmix_coef[i][1] = dca_default_coeffs[am][i][1];
2211 av_dlog(s->avctx, "Stereo downmix coeffs:\n");
2212 for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
2213 av_dlog(s->avctx, "L, input channel %d = %f\n", i,
2214 s->downmix_coef[i][0]);
2215 av_dlog(s->avctx, "R, input channel %d = %f\n", i,
2216 s->downmix_coef[i][1]);
2218 av_dlog(s->avctx, "\n");
2222 s->core_ext_mask = dca_ext_audio_descr_mask[s->ext_descr];
2224 s->core_ext_mask = 0;
2226 core_ss_end = FFMIN(s->frame_size, s->dca_buffer_size) * 8;
2228 /* only scan for extensions if ext_descr was unknown or indicated a
2229 * supported XCh extension */
2230 if (s->core_ext_mask < 0 || s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH)) {
2232 /* if ext_descr was unknown, clear s->core_ext_mask so that the
2233 * extensions scan can fill it up */
2234 s->core_ext_mask = FFMAX(s->core_ext_mask, 0);
2236 /* extensions start at 32-bit boundaries into bitstream */
2237 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
2239 while (core_ss_end - get_bits_count(&s->gb) >= 32) {
2240 uint32_t bits = get_bits_long(&s->gb, 32);
2244 int ext_amode, xch_fsize;
2246 s->xch_base_channel = s->prim_channels;
2248 /* validate sync word using XCHFSIZE field */
2249 xch_fsize = show_bits(&s->gb, 10);
2250 if ((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) &&
2251 (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1))
2254 /* skip length-to-end-of-frame field for the moment */
2255 skip_bits(&s->gb, 10);
2257 s->core_ext_mask |= DCA_EXT_XCH;
2259 /* extension amode(number of channels in extension) should be 1 */
2260 /* AFAIK XCh is not used for more channels */
2261 if ((ext_amode = get_bits(&s->gb, 4)) != 1) {
2262 av_log(avctx, AV_LOG_ERROR, "XCh extension amode %d not"
2263 " supported!\n", ext_amode);
2267 if (s->xch_base_channel < 2) {
2268 avpriv_request_sample(avctx, "XCh with fewer than 2 base channels");
2272 /* much like core primary audio coding header */
2273 dca_parse_audio_coding_header(s, s->xch_base_channel, 0);
2275 for (i = 0; i < (s->sample_blocks / 8); i++)
2276 if ((ret = dca_decode_block(s, s->xch_base_channel, i))) {
2277 av_log(avctx, AV_LOG_ERROR, "error decoding XCh extension\n");
2285 /* XXCh: extended channels */
2286 /* usually found either in core or HD part in DTS-HD HRA streams,
2287 * but not in DTS-ES which contains XCh extensions instead */
2288 s->core_ext_mask |= DCA_EXT_XXCH;
2289 dca_xxch_decode_frame(s);
2293 int fsize96 = show_bits(&s->gb, 12) + 1;
2294 if (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + fsize96)
2297 av_log(avctx, AV_LOG_DEBUG, "X96 extension found at %d bits\n",
2298 get_bits_count(&s->gb));
2299 skip_bits(&s->gb, 12);
2300 av_log(avctx, AV_LOG_DEBUG, "FSIZE96 = %d bytes\n", fsize96);
2301 av_log(avctx, AV_LOG_DEBUG, "REVNO = %d\n", get_bits(&s->gb, 4));
2303 s->core_ext_mask |= DCA_EXT_X96;
2308 skip_bits_long(&s->gb, (-get_bits_count(&s->gb)) & 31);
2311 /* no supported extensions, skip the rest of the core substream */
2312 skip_bits_long(&s->gb, core_ss_end - get_bits_count(&s->gb));
2315 if (s->core_ext_mask & DCA_EXT_X96)
2316 s->profile = FF_PROFILE_DTS_96_24;
2317 else if (s->core_ext_mask & (DCA_EXT_XCH | DCA_EXT_XXCH))
2318 s->profile = FF_PROFILE_DTS_ES;
2320 /* check for ExSS (HD part) */
2321 if (s->dca_buffer_size - s->frame_size > 32 &&
2322 get_bits_long(&s->gb, 32) == DCA_HD_MARKER)
2323 dca_exss_parse_header(s);
2325 avctx->profile = s->profile;
2327 full_channels = channels = s->prim_channels + !!s->lfe;
2329 /* If we have XXCH then the channel layout is managed differently */
2330 /* note that XLL will also have another way to do things */
2331 if (!(s->core_ext_mask & DCA_EXT_XXCH)
2332 || (s->core_ext_mask & DCA_EXT_XXCH && avctx->request_channels > 0
2333 && avctx->request_channels
2334 < num_core_channels + !!s->lfe + s->xxch_chset_nch[0]))
2335 { /* xxx should also do MA extensions */
2336 if (s->amode < 16) {
2337 avctx->channel_layout = dca_core_channel_layout[s->amode];
2338 #if FF_API_REQUEST_CHANNELS
2339 FF_DISABLE_DEPRECATION_WARNINGS
2340 if (s->xch_present && !s->xch_disable &&
2341 (!avctx->request_channels ||
2342 avctx->request_channels > num_core_channels + !!s->lfe)) {
2343 FF_ENABLE_DEPRECATION_WARNINGS
2345 if (s->xch_present && !s->xch_disable) {
2347 avctx->channel_layout |= AV_CH_BACK_CENTER;
2349 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
2350 s->channel_order_tab = dca_channel_reorder_lfe_xch[s->amode];
2352 s->channel_order_tab = dca_channel_reorder_nolfe_xch[s->amode];
2354 if (s->channel_order_tab[s->xch_base_channel] < 0)
2355 return AVERROR_INVALIDDATA;
2357 channels = num_core_channels + !!s->lfe;
2358 s->xch_present = 0; /* disable further xch processing */
2360 avctx->channel_layout |= AV_CH_LOW_FREQUENCY;
2361 s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
2363 s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
2366 if (channels > !!s->lfe &&
2367 s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
2368 return AVERROR_INVALIDDATA;
2370 if (av_get_channel_layout_nb_channels(avctx->channel_layout) != channels) {
2371 av_log(avctx, AV_LOG_ERROR, "Number of channels %d mismatches layout %d\n", channels, av_get_channel_layout_nb_channels(avctx->channel_layout));
2372 return AVERROR_INVALIDDATA;
2375 if (s->prim_channels + !!s->lfe > 2 &&
2376 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
2378 s->output = s->prim_channels == 2 ? s->amode : DCA_STEREO;
2379 avctx->channel_layout = AV_CH_LAYOUT_STEREO;
2381 else if (avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE) {
2382 static const int8_t dca_channel_order_native[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
2383 s->channel_order_tab = dca_channel_order_native;
2385 s->lfe_index = dca_lfe_index[s->amode];
2387 av_log(avctx, AV_LOG_ERROR,
2388 "Non standard configuration %d !\n", s->amode);
2389 return AVERROR_INVALIDDATA;
2392 s->xxch_dmix_embedded = 0;
2394 /* we only get here if an XXCH channel set can be added to the mix */
2395 channel_mask = s->xxch_core_spkmask;
2397 if (avctx->request_channels > 0
2398 && avctx->request_channels < s->prim_channels) {
2399 channels = num_core_channels + !!s->lfe;
2400 for (i = 0; i < s->xxch_chset && channels + s->xxch_chset_nch[i]
2401 <= avctx->request_channels; i++) {
2402 channels += s->xxch_chset_nch[i];
2403 channel_mask |= s->xxch_spk_masks[i];
2406 channels = s->prim_channels + !!s->lfe;
2407 for (i = 0; i < s->xxch_chset; i++) {
2408 channel_mask |= s->xxch_spk_masks[i];
2412 /* Given the DTS spec'ed channel mask, generate an avcodec version */
2414 for (i = 0; i < s->xxch_nbits_spk_mask; ++i) {
2415 if (channel_mask & (1 << i)) {
2416 channel_layout |= map_xxch_to_native[i];
2420 /* make sure that we have managed to get equivelant dts/avcodec channel
2421 * masks in some sense -- unfortunately some channels could overlap */
2422 if (av_popcount(channel_mask) != av_popcount(channel_layout)) {
2423 av_log(avctx, AV_LOG_DEBUG,
2424 "DTS-XXCH: Inconsistant avcodec/dts channel layouts\n");
2425 return AVERROR_INVALIDDATA;
2428 avctx->channel_layout = channel_layout;
2430 if (!(avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE)) {
2431 /* Estimate DTS --> avcodec ordering table */
2432 for (chset = -1, j = 0; chset < s->xxch_chset; ++chset) {
2433 mask = chset >= 0 ? s->xxch_spk_masks[chset]
2434 : s->xxch_core_spkmask;
2435 for (i = 0; i < s->xxch_nbits_spk_mask; i++) {
2436 if (mask & ~(DCA_XXCH_LFE1 | DCA_XXCH_LFE2) & (1 << i)) {
2437 lavc = map_xxch_to_native[i];
2438 posn = av_popcount(channel_layout & (lavc - 1));
2439 s->xxch_order_tab[j++] = posn;
2444 s->lfe_index = av_popcount(channel_layout & (AV_CH_LOW_FREQUENCY-1));
2445 } else { /* native ordering */
2446 for (i = 0; i < channels; i++)
2447 s->xxch_order_tab[i] = i;
2449 s->lfe_index = channels - 1;
2452 s->channel_order_tab = s->xxch_order_tab;
2455 if (avctx->channels != channels) {
2456 if (avctx->channels)
2457 av_log(avctx, AV_LOG_INFO, "Number of channels changed in DCA decoder (%d -> %d)\n", avctx->channels, channels);
2458 avctx->channels = channels;
2461 /* get output buffer */
2462 frame->nb_samples = 256 * (s->sample_blocks / 8);
2463 if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
2465 samples_flt = (float **)frame->extended_data;
2467 /* allocate buffer for extra channels if downmixing */
2468 if (avctx->channels < full_channels) {
2469 ret = av_samples_get_buffer_size(NULL, full_channels - channels,
2471 avctx->sample_fmt, 0);
2475 av_fast_malloc(&s->extra_channels_buffer,
2476 &s->extra_channels_buffer_size, ret);
2477 if (!s->extra_channels_buffer)
2478 return AVERROR(ENOMEM);
2480 ret = av_samples_fill_arrays((uint8_t **)s->extra_channels, NULL,
2481 s->extra_channels_buffer,
2482 full_channels - channels,
2483 frame->nb_samples, avctx->sample_fmt, 0);
2488 /* filter to get final output */
2489 for (i = 0; i < (s->sample_blocks / 8); i++) {
2492 for (ch = 0; ch < channels; ch++)
2493 s->samples_chanptr[ch] = samples_flt[ch] + i * 256;
2494 for (; ch < full_channels; ch++)
2495 s->samples_chanptr[ch] = s->extra_channels[ch - channels] + i * 256;
2497 dca_filter_channels(s, i);
2499 /* If this was marked as a DTS-ES stream we need to subtract back- */
2500 /* channel from SL & SR to remove matrixed back-channel signal */
2501 if ((s->source_pcm_res & 1) && s->xch_present) {
2502 float *back_chan = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel]];
2503 float *lt_chan = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel - 2]];
2504 float *rt_chan = s->samples_chanptr[s->channel_order_tab[s->xch_base_channel - 1]];
2505 s->fdsp.vector_fmac_scalar(lt_chan, back_chan, -M_SQRT1_2, 256);
2506 s->fdsp.vector_fmac_scalar(rt_chan, back_chan, -M_SQRT1_2, 256);
2509 /* If stream contains XXCH, we might need to undo an embedded downmix */
2510 if (s->xxch_dmix_embedded) {
2511 /* Loop over channel sets in turn */
2512 ch = num_core_channels;
2513 for (chset = 0; chset < s->xxch_chset; chset++) {
2514 endch = ch + s->xxch_chset_nch[chset];
2515 mask = s->xxch_dmix_embedded;
2518 for (j = ch; j < endch; j++) {
2519 if (mask & (1 << j)) { /* this channel has been mixed-out */
2520 src_chan = s->samples_chanptr[s->channel_order_tab[j]];
2521 for (k = 0; k < endch; k++) {
2522 achan = s->channel_order_tab[k];
2523 scale = s->xxch_dmix_coeff[j][k];
2525 dst_chan = s->samples_chanptr[achan];
2526 s->fdsp.vector_fmac_scalar(dst_chan, src_chan,
2533 /* if a downmix has been embedded then undo the pre-scaling */
2534 if ((mask & (1 << ch)) && s->xxch_dmix_sf[chset] != 1.0f) {
2535 scale = s->xxch_dmix_sf[chset];
2537 for (j = 0; j < ch; j++) {
2538 src_chan = s->samples_chanptr[s->channel_order_tab[j]];
2539 for (k = 0; k < 256; k++)
2540 src_chan[k] *= scale;
2543 /* LFE channel is always part of core, scale if it exists */
2545 src_chan = s->samples_chanptr[s->lfe_index];
2546 for (k = 0; k < 256; k++)
2547 src_chan[k] *= scale;
2557 /* update lfe history */
2558 lfe_samples = 2 * s->lfe * (s->sample_blocks / 8);
2559 for (i = 0; i < 2 * s->lfe * 4; i++)
2560 s->lfe_data[i] = s->lfe_data[i + lfe_samples];
2564 * DCA_STEREO_TOTAL (Lt/Rt) is equivalent to Dolby Surround */
2565 ret = ff_side_data_update_matrix_encoding(frame,
2566 (s->output & ~DCA_LFE) == DCA_STEREO_TOTAL ?
2567 AV_MATRIX_ENCODING_DOLBY : AV_MATRIX_ENCODING_NONE);
2579 * DCA initialization
2581 * @param avctx pointer to the AVCodecContext
2584 static av_cold int dca_decode_init(AVCodecContext *avctx)
2586 DCAContext *s = avctx->priv_data;
2591 avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
2592 ff_mdct_init(&s->imdct, 6, 1, 1.0);
2593 ff_synth_filter_init(&s->synth);
2594 ff_dcadsp_init(&s->dcadsp);
2595 ff_fmt_convert_init(&s->fmt_conv, avctx);
2597 avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
2599 /* allow downmixing to stereo */
2600 #if FF_API_REQUEST_CHANNELS
2601 FF_DISABLE_DEPRECATION_WARNINGS
2602 if (avctx->request_channels == 2)
2603 avctx->request_channel_layout = AV_CH_LAYOUT_STEREO;
2604 FF_ENABLE_DEPRECATION_WARNINGS
2606 if (avctx->channels > 2 &&
2607 avctx->request_channel_layout == AV_CH_LAYOUT_STEREO)
2608 avctx->channels = 2;
2613 static av_cold int dca_decode_end(AVCodecContext *avctx)
2615 DCAContext *s = avctx->priv_data;
2616 ff_mdct_end(&s->imdct);
2617 av_freep(&s->extra_channels_buffer);
2621 static const AVProfile profiles[] = {
2622 { FF_PROFILE_DTS, "DTS" },
2623 { FF_PROFILE_DTS_ES, "DTS-ES" },
2624 { FF_PROFILE_DTS_96_24, "DTS 96/24" },
2625 { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
2626 { FF_PROFILE_DTS_HD_MA, "DTS-HD MA" },
2627 { FF_PROFILE_UNKNOWN },
2630 static const AVOption options[] = {
2631 { "disable_xch", "disable decoding of the XCh extension", offsetof(DCAContext, xch_disable), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM|AV_OPT_FLAG_AUDIO_PARAM },
2635 static const AVClass dca_decoder_class = {
2636 .class_name = "DCA decoder",
2637 .item_name = av_default_item_name,
2639 .version = LIBAVUTIL_VERSION_INT,
2640 .category = AV_CLASS_CATEGORY_DECODER,
2643 AVCodec ff_dca_decoder = {
2645 .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
2646 .type = AVMEDIA_TYPE_AUDIO,
2647 .id = AV_CODEC_ID_DTS,
2648 .priv_data_size = sizeof(DCAContext),
2649 .init = dca_decode_init,
2650 .decode = dca_decode_frame,
2651 .close = dca_decode_end,
2652 .capabilities = CODEC_CAP_CHANNEL_CONF | CODEC_CAP_DR1,
2653 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
2654 AV_SAMPLE_FMT_NONE },
2655 .profiles = NULL_IF_CONFIG_SMALL(profiles),
2656 .priv_class = &dca_decoder_class,