52 #define DCA_PRIM_CHANNELS_MAX (7)
53 #define DCA_SUBBANDS (32)
54 #define DCA_ABITS_MAX (32)
55 #define DCA_SUBSUBFRAMES_MAX (4)
56 #define DCA_SUBFRAMES_MAX (16)
57 #define DCA_BLOCKS_MAX (16)
58 #define DCA_LFE_MAX (3)
120 #define DCA_CORE_EXTS (DCA_EXT_XCH | DCA_EXT_XXCH | DCA_EXT_X96)
169 1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
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 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
178 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
179 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
180 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
181 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
182 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
183 { 3, 4, 0, 1, 5, 6, -1, -1, -1},
184 { 2, 0, 1, 4, 5, 6, -1, -1, -1},
185 { 0, 6, 4, 5, 2, 3, -1, -1, -1},
186 { 4, 2, 5, 0, 1, 6, 7, -1, -1},
187 { 5, 6, 0, 1, 7, 3, 8, 4, -1},
188 { 4, 2, 5, 0, 1, 6, 8, 7, -1},
192 { 0, 2, -1, -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 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
197 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
198 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
199 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
200 { 0, 1, 4, 5, 3, -1, -1, -1, -1},
201 { 2, 0, 1, 5, 6, 4, -1, -1, -1},
202 { 3, 4, 0, 1, 6, 7, 5, -1, -1},
203 { 2, 0, 1, 4, 5, 6, 7, -1, -1},
204 { 0, 6, 4, 5, 2, 3, 7, -1, -1},
205 { 4, 2, 5, 0, 1, 7, 8, 6, -1},
206 { 5, 6, 0, 1, 8, 3, 9, 4, 7},
207 { 4, 2, 5, 0, 1, 6, 9, 8, 7},
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 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
216 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
217 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
218 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
219 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
220 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
221 { 2, 3, 0, 1, 4, 5, -1, -1, -1},
222 { 2, 0, 1, 3, 4, 5, -1, -1, -1},
223 { 0, 5, 3, 4, 1, 2, -1, -1, -1},
224 { 3, 2, 4, 0, 1, 5, 6, -1, -1},
225 { 4, 5, 0, 1, 6, 2, 7, 3, -1},
226 { 3, 2, 4, 0, 1, 5, 7, 6, -1},
230 { 0, 1, -1, -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 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
235 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
236 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
237 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
238 { 0, 1, 3, 4, 2, -1, -1, -1, -1},
239 { 2, 0, 1, 4, 5, 3, -1, -1, -1},
240 { 2, 3, 0, 1, 5, 6, 4, -1, -1},
241 { 2, 0, 1, 3, 4, 5, 6, -1, -1},
242 { 0, 5, 3, 4, 1, 2, 6, -1, -1},
243 { 3, 2, 4, 0, 1, 6, 7, 5, -1},
244 { 4, 5, 0, 1, 7, 2, 8, 3, 6},
245 { 3, 2, 4, 0, 1, 5, 8, 7, 6},
248 #define DCA_DOLBY 101
250 #define DCA_CHANNEL_BITS 6
251 #define DCA_CHANNEL_MASK 0x3F
255 #define HEADER_SIZE 14
257 #define DCA_MAX_FRAME_SIZE 16384
258 #define DCA_MAX_EXSS_HEADER_SIZE 4096
260 #define DCA_BUFFER_PADDING_SIZE 1024
380 int mix_config_num_ch[4];
393 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364,
394 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508,
395 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564,
396 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240,
397 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
398 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
403 static int vlcs_initialized = 0;
405 static VLC_TYPE dca_table[23622][2];
407 if (vlcs_initialized)
410 dca_bitalloc_index.
offset = 1;
411 dca_bitalloc_index.
wrap = 2;
412 for (i = 0; i < 5; i++) {
419 dca_scalefactor.
offset = -64;
420 dca_scalefactor.
wrap = 2;
421 for (i = 0; i < 5; i++) {
430 for (i = 0; i < 4; i++) {
438 for (i = 0; i < 10; i++)
439 for (j = 0; j < 7; j++) {
443 dca_smpl_bitalloc[i + 1].
wrap = 1 + (j > 4);
445 dca_smpl_bitalloc[i + 1].
vlc[j].
table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
453 vlcs_initialized = 1;
465 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
466 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
467 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
494 for (j = 1; j < 11; j++)
499 for (j = 0; j < 11; j++)
503 for (j = 1; j < 11; j++)
533 for (j = 0; j < 11; j++)
537 for (j = 0; j < 11; j++)
628 "source pcm resolution: %i (%i bits/sample)\n",
648 value = av_clip(value, 0, (1 << log2range) - 1);
649 }
else if (level < 8) {
650 if (level + 1 > log2range) {
697 "Invalid bit allocation index\n");
717 k < s->vq_start_subband[j] && s->
bitalloc[j][k] > 0) {
728 const uint32_t *scale_table;
729 int scale_sum, log_size;
781 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
788 "Joint stereo coding not supported\n");
805 "Invalid channel mode %d\n", am);
842 if (!base_channel && s->
lfe) {
844 int lfe_samples = 2 * s->
lfe * (4 + block_index);
848 for (j = lfe_samples; j < lfe_end_sample; j++) {
860 for (j = lfe_samples; j < lfe_end_sample; j++)
879 "prediction coefs: %f, %f, %f, %f\n",
911 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++)
929 if (!base_channel && s->
lfe) {
930 int lfe_samples = 2 * s->
lfe * (4 + block_index);
934 for (j = lfe_samples; j < lfe_end_sample; j++)
944 float samples_in[32][8],
float *samples_out,
947 const float *prCoeff;
953 scale *= sqrt(1 / 8.0);
961 for (i = sb_act; i < 32; i++)
965 for (subindex = 0; subindex < 8; subindex++) {
967 for (i = 0; i < sb_act; i++) {
968 unsigned sign = (i - 1) & 2;
969 uint32_t
v =
AV_RN32A(&samples_in[i][subindex]) ^ sign << 30;
977 samples_out, s->
raXin, scale);
983 int num_deci_sample,
float *samples_in,
984 float *samples_out,
float scale)
995 const float *prCoeff;
999 if (decimation_select == 1) {
1007 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1008 s->
dcadsp.
lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1010 samples_out += 2 * decifactor;
1015 #define MIX_REAR1(samples, si1, rs, coef) \
1016 samples[i] += samples[si1] * coef[rs][0]; \
1017 samples[i+256] += samples[si1] * coef[rs][1];
1019 #define MIX_REAR2(samples, si1, si2, rs, coef) \
1020 samples[i] += samples[si1] * coef[rs][0] + samples[si2] * coef[rs + 1][0]; \
1021 samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs + 1][1];
1023 #define MIX_FRONT3(samples, coef) \
1024 t = samples[i + c]; \
1025 u = samples[i + l]; \
1026 v = samples[i + r]; \
1027 samples[i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1028 samples[i+256] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1030 #define DOWNMIX_TO_STEREO(op1, op2) \
1031 for (i = 0; i < 256; i++) { \
1038 const int8_t *channel_mapping)
1040 int c, l,
r, sl, sr, s;
1061 c = channel_mapping[0] * 256;
1062 l = channel_mapping[1] * 256;
1063 r = channel_mapping[2] * 256;
1067 s = channel_mapping[2] * 256;
1071 c = channel_mapping[0] * 256;
1072 l = channel_mapping[1] * 256;
1073 r = channel_mapping[2] * 256;
1074 s = channel_mapping[3] * 256;
1079 sl = channel_mapping[2] * 256;
1080 sr = channel_mapping[3] * 256;
1084 c = channel_mapping[0] * 256;
1085 l = channel_mapping[1] * 256;
1086 r = channel_mapping[2] * 256;
1087 sl = channel_mapping[3] * 256;
1088 sr = channel_mapping[4] * 256;
1090 MIX_REAR2(samples, i + sl, i + sr, 3, coef));
1096 #ifndef decode_blockcodes
1102 int offset = (levels - 1) >> 1;
1104 for (i = 0; i < 4; i++) {
1105 int div =
FASTDIV(code, levels);
1106 values[i] = code - offset - div * levels;
1123 #ifndef int8x8_fmul_int32
1126 float fscale = scale / 16.0;
1128 for (i = 0; i < 8; i++)
1129 dst[i] = src[i] * fscale;
1138 const float *quant_step_table;
1164 float quant_step_size = quant_step_table[abits];
1177 memset(subband_samples[k][l], 0, 8 *
sizeof(subband_samples[0][0][0]));
1181 float rscale = quant_step_size * s->
scale_factor[k][l][sfi] *
1184 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1187 int block_code1, block_code2,
size, levels, err;
1198 "ERROR: block code look-up failed\n");
1203 for (m = 0; m < 8; m++)
1208 for (m = 0; m < 8; m++)
1210 &dca_smpl_bitalloc[abits], sel);
1222 for (m = 0; m < 8; m++) {
1223 for (n = 1; n <= 4; n++)
1225 subband_samples[k][l][m] +=
1227 subband_samples[k][l][m - n] / 8192);
1229 subband_samples[k][l][m] +=
1246 "Stream with high frequencies VQ coding\n");
1272 &subband_samples[k][l][4],
1273 4 *
sizeof(subband_samples[0][0][0]));
1312 int aux_data_count = 0, i;
1319 if (!base_channel) {
1326 for (i = 0; i < aux_data_count; i++)
1395 const uint16_t *ssrc = (
const uint16_t *) src;
1396 uint16_t *sdst = (uint16_t *) dst;
1399 if ((
unsigned) src_size > (unsigned) max_size) {
1402 src_size = max_size;
1408 memcpy(dst, src, src_size);
1411 for (i = 0; i < (src_size + 1) >> 1; i++)
1417 for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
1434 return av_popcount(mask) +
1453 for (i = 0; i < channels; i++) {
1454 int mix_map_mask =
get_bits(gb, out_ch);
1455 int num_coeffs = av_popcount(mix_map_mask);
1468 int embedded_stereo = 0;
1469 int embedded_6ch = 0;
1470 int drc_code_present;
1471 int extensions_mask;
1503 int spkr_remap_sets;
1504 int spkr_mask_size = 16;
1513 spkr_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1519 for (i = 0; i < spkr_remap_sets; i++) {
1524 for (i = 0; i < spkr_remap_sets; i++) {
1525 int num_dec_ch_remaps =
get_bits(&s->
gb, 5) + 1;
1529 for (j = 0; j < num_spkrs[i]; j++) {
1531 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1542 if (drc_code_present)
1548 if (drc_code_present && embedded_stereo)
1572 if (embedded_stereo)
1578 case 0: extensions_mask =
get_bits(&s->
gb, 12);
break;
1581 case 3: extensions_mask = 0;
break;
1605 "DTS extensions detection mismatch (%d, %d)\n",
1620 int active_ss_mask[8];
1645 if (num_audiop > 1) {
1652 if (num_assets > 1) {
1658 for (i = 0; i < num_audiop; i++)
1659 active_ss_mask[i] =
get_bits(&s->
gb, ss_index + 1);
1661 for (i = 0; i < num_audiop; i++)
1662 for (j = 0; j <= ss_index; j++)
1663 if (active_ss_mask[i] & (1 << j))
1668 int mix_out_mask_size;
1671 mix_out_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1675 int mix_out_mask =
get_bits(&s->
gb, mix_out_mask_size);
1681 for (i = 0; i < num_assets; i++)
1684 for (i = 0; i < num_assets; i++) {
1698 int *got_frame_ptr,
AVPacket *avpkt)
1700 const uint8_t *buf = avpkt->
data;
1701 int buf_size = avpkt->
size;
1704 int num_core_channels = 0;
1707 int16_t *samples_s16;
1767 int ext_amode, xch_fsize;
1784 if ((ext_amode =
get_bits(&s->
gb, 4)) != 1) {
1786 " supported!\n", ext_amode);
1846 if (s->
amode < 16) {
1849 if (s->
xch_present && (!avctx->request_channels ||
1850 avctx->request_channels > num_core_channels + !!s->
lfe)) {
1859 channels = num_core_channels + !!s->
lfe;
1868 if (channels > !!s->
lfe &&
1894 "channels changing in stream. Skipping frame.\n");
1904 samples_flt = (
float *) s->
frame.
data[0];
1905 samples_s16 = (int16_t *) s->
frame.
data[0];
1924 samples_flt += 256 * channels;
1929 samples_s16 += 256 * channels;
1935 for (i = 0; i < 2 * s->
lfe * 4; i++)
1979 avctx->request_channels == 2) {
1980 avctx->
channels = avctx->request_channels;