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);
835 if (!base_channel && s->
lfe) {
837 int lfe_samples = 2 * s->
lfe * (4 + block_index);
841 for (j = lfe_samples; j < lfe_end_sample; j++) {
853 for (j = lfe_samples; j < lfe_end_sample; j++)
872 "prediction coefs: %f, %f, %f, %f\n",
904 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++)
922 if (!base_channel && s->
lfe) {
923 int lfe_samples = 2 * s->
lfe * (4 + block_index);
927 for (j = lfe_samples; j < lfe_end_sample; j++)
937 float samples_in[32][8],
float *samples_out,
940 const float *prCoeff;
946 scale *= sqrt(1 / 8.0);
954 for (i = sb_act; i < 32; i++)
958 for (subindex = 0; subindex < 8; subindex++) {
960 for (i = 0; i < sb_act; i++) {
961 unsigned sign = (i - 1) & 2;
962 uint32_t
v =
AV_RN32A(&samples_in[i][subindex]) ^ sign << 30;
970 samples_out, s->
raXin, scale);
976 int num_deci_sample,
float *samples_in,
977 float *samples_out,
float scale)
988 const float *prCoeff;
992 if (decimation_select == 1) {
1000 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1001 s->
dcadsp.
lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1003 samples_out += 2 * decifactor;
1008 #define MIX_REAR1(samples, si1, rs, coef) \
1009 samples[i] += samples[si1] * coef[rs][0]; \
1010 samples[i+256] += samples[si1] * coef[rs][1];
1012 #define MIX_REAR2(samples, si1, si2, rs, coef) \
1013 samples[i] += samples[si1] * coef[rs][0] + samples[si2] * coef[rs + 1][0]; \
1014 samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs + 1][1];
1016 #define MIX_FRONT3(samples, coef) \
1017 t = samples[i + c]; \
1018 u = samples[i + l]; \
1019 v = samples[i + r]; \
1020 samples[i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1021 samples[i+256] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1023 #define DOWNMIX_TO_STEREO(op1, op2) \
1024 for (i = 0; i < 256; i++) { \
1031 const int8_t *channel_mapping)
1033 int c, l,
r, sl, sr, s;
1054 c = channel_mapping[0] * 256;
1055 l = channel_mapping[1] * 256;
1056 r = channel_mapping[2] * 256;
1060 s = channel_mapping[2] * 256;
1064 c = channel_mapping[0] * 256;
1065 l = channel_mapping[1] * 256;
1066 r = channel_mapping[2] * 256;
1067 s = channel_mapping[3] * 256;
1072 sl = channel_mapping[2] * 256;
1073 sr = channel_mapping[3] * 256;
1077 c = channel_mapping[0] * 256;
1078 l = channel_mapping[1] * 256;
1079 r = channel_mapping[2] * 256;
1080 sl = channel_mapping[3] * 256;
1081 sr = channel_mapping[4] * 256;
1083 MIX_REAR2(samples, i + sl, i + sr, 3, coef));
1089 #ifndef decode_blockcodes
1095 int offset = (levels - 1) >> 1;
1097 for (i = 0; i < 4; i++) {
1098 int div =
FASTDIV(code, levels);
1099 values[i] = code - offset - div * levels;
1116 #ifndef int8x8_fmul_int32
1119 float fscale = scale / 16.0;
1121 for (i = 0; i < 8; i++)
1122 dst[i] = src[i] * fscale;
1131 const float *quant_step_table;
1157 float quant_step_size = quant_step_table[abits];
1170 memset(subband_samples[k][l], 0, 8 *
sizeof(subband_samples[0][0][0]));
1174 float rscale = quant_step_size * s->
scale_factor[k][l][sfi] *
1177 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1180 int block_code1, block_code2,
size, levels, err;
1191 "ERROR: block code look-up failed\n");
1196 for (m = 0; m < 8; m++)
1201 for (m = 0; m < 8; m++)
1203 &dca_smpl_bitalloc[abits], sel);
1215 for (m = 0; m < 8; m++) {
1216 for (n = 1; n <= 4; n++)
1218 subband_samples[k][l][m] +=
1220 subband_samples[k][l][m - n] / 8192);
1222 subband_samples[k][l][m] +=
1239 "Stream with high frequencies VQ coding\n");
1264 &subband_samples[k][l][4],
1265 4 *
sizeof(subband_samples[0][0][0]));
1304 int aux_data_count = 0, i;
1311 if (!base_channel) {
1318 for (i = 0; i < aux_data_count; i++)
1387 const uint16_t *ssrc = (
const uint16_t *) src;
1388 uint16_t *sdst = (uint16_t *) dst;
1391 if ((
unsigned) src_size > (unsigned) max_size) {
1394 src_size = max_size;
1400 memcpy(dst, src, src_size);
1403 for (i = 0; i < (src_size + 1) >> 1; i++)
1409 for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
1426 return av_popcount(mask) +
1445 for (i = 0; i < channels; i++) {
1446 int mix_map_mask =
get_bits(gb, out_ch);
1447 int num_coeffs = av_popcount(mix_map_mask);
1460 int embedded_stereo = 0;
1461 int embedded_6ch = 0;
1462 int drc_code_present;
1463 int extensions_mask;
1495 int spkr_remap_sets;
1496 int spkr_mask_size = 16;
1505 spkr_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1511 for (i = 0; i < spkr_remap_sets; i++) {
1516 for (i = 0; i < spkr_remap_sets; i++) {
1517 int num_dec_ch_remaps =
get_bits(&s->
gb, 5) + 1;
1521 for (j = 0; j < num_spkrs[i]; j++) {
1523 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1534 if (drc_code_present)
1540 if (drc_code_present && embedded_stereo)
1564 if (embedded_stereo)
1570 case 0: extensions_mask =
get_bits(&s->
gb, 12);
break;
1573 case 3: extensions_mask = 0;
break;
1597 "DTS extensions detection mismatch (%d, %d)\n",
1612 int active_ss_mask[8];
1637 if (num_audiop > 1) {
1644 if (num_assets > 1) {
1650 for (i = 0; i < num_audiop; i++)
1651 active_ss_mask[i] =
get_bits(&s->
gb, ss_index + 1);
1653 for (i = 0; i < num_audiop; i++)
1654 for (j = 0; j <= ss_index; j++)
1655 if (active_ss_mask[i] & (1 << j))
1660 int mix_out_mask_size;
1663 mix_out_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1667 int mix_out_mask =
get_bits(&s->
gb, mix_out_mask_size);
1673 for (i = 0; i < num_assets; i++)
1676 for (i = 0; i < num_assets; i++) {
1690 int *got_frame_ptr,
AVPacket *avpkt)
1692 const uint8_t *buf = avpkt->
data;
1693 int buf_size = avpkt->
size;
1696 int num_core_channels = 0;
1699 int16_t *samples_s16;
1759 int ext_amode, xch_fsize;
1776 if ((ext_amode =
get_bits(&s->
gb, 4)) != 1) {
1778 " supported!\n", ext_amode);
1838 if (s->
amode < 16) {
1841 if (s->
xch_present && (!avctx->request_channels ||
1842 avctx->request_channels > num_core_channels + !!s->
lfe)) {
1851 channels = num_core_channels + !!s->
lfe;
1860 if (channels > !!s->
lfe &&
1886 "channels changing in stream. Skipping frame.\n");
1896 samples_flt = (
float *) s->
frame.
data[0];
1897 samples_s16 = (int16_t *) s->
frame.
data[0];
1916 samples_flt += 256 * channels;
1921 samples_s16 += 256 * channels;
1927 for (i = 0; i < 2 * s->
lfe * 4; i++)
1971 avctx->request_channels == 2) {
1972 avctx->
channels = avctx->request_channels;