53 #define DCA_PRIM_CHANNELS_MAX (7)
54 #define DCA_SUBBANDS (32)
55 #define DCA_ABITS_MAX (32)
56 #define DCA_SUBSUBFRAMES_MAX (4)
57 #define DCA_SUBFRAMES_MAX (16)
58 #define DCA_BLOCKS_MAX (16)
59 #define DCA_LFE_MAX (3)
121 #define DCA_CORE_EXTS (DCA_EXT_XCH | DCA_EXT_XXCH | DCA_EXT_X96)
170 1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
174 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
175 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
176 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
177 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
178 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
179 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
180 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
181 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
182 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
183 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
184 { 3, 4, 0, 1, 5, 6, -1, -1, -1},
185 { 2, 0, 1, 4, 5, 6, -1, -1, -1},
186 { 0, 6, 4, 5, 2, 3, -1, -1, -1},
187 { 4, 2, 5, 0, 1, 6, 7, -1, -1},
188 { 5, 6, 0, 1, 7, 3, 8, 4, -1},
189 { 4, 2, 5, 0, 1, 6, 8, 7, -1},
193 { 0, 2, -1, -1, -1, -1, -1, -1, -1},
194 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
195 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
196 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
197 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
198 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
199 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
200 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
201 { 0, 1, 4, 5, 3, -1, -1, -1, -1},
202 { 2, 0, 1, 5, 6, 4, -1, -1, -1},
203 { 3, 4, 0, 1, 6, 7, 5, -1, -1},
204 { 2, 0, 1, 4, 5, 6, 7, -1, -1},
205 { 0, 6, 4, 5, 2, 3, 7, -1, -1},
206 { 4, 2, 5, 0, 1, 7, 8, 6, -1},
207 { 5, 6, 0, 1, 8, 3, 9, 4, 7},
208 { 4, 2, 5, 0, 1, 6, 9, 8, 7},
212 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
213 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
214 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
215 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
216 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
217 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
218 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
219 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
220 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
221 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
222 { 2, 3, 0, 1, 4, 5, -1, -1, -1},
223 { 2, 0, 1, 3, 4, 5, -1, -1, -1},
224 { 0, 5, 3, 4, 1, 2, -1, -1, -1},
225 { 3, 2, 4, 0, 1, 5, 6, -1, -1},
226 { 4, 5, 0, 1, 6, 2, 7, 3, -1},
227 { 3, 2, 4, 0, 1, 5, 7, 6, -1},
231 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
232 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
233 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
234 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
235 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
236 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
237 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
238 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
239 { 0, 1, 3, 4, 2, -1, -1, -1, -1},
240 { 2, 0, 1, 4, 5, 3, -1, -1, -1},
241 { 2, 3, 0, 1, 5, 6, 4, -1, -1},
242 { 2, 0, 1, 3, 4, 5, 6, -1, -1},
243 { 0, 5, 3, 4, 1, 2, 6, -1, -1},
244 { 3, 2, 4, 0, 1, 6, 7, 5, -1},
245 { 4, 5, 0, 1, 7, 2, 8, 3, 6},
246 { 3, 2, 4, 0, 1, 5, 8, 7, 6},
249 #define DCA_DOLBY 101
251 #define DCA_CHANNEL_BITS 6
252 #define DCA_CHANNEL_MASK 0x3F
256 #define HEADER_SIZE 14
258 #define DCA_MAX_FRAME_SIZE 16384
259 #define DCA_MAX_EXSS_HEADER_SIZE 4096
261 #define DCA_BUFFER_PADDING_SIZE 1024
381 int mix_config_num_ch[4];
394 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364,
395 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508,
396 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564,
397 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240,
398 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
399 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
404 static int vlcs_initialized = 0;
406 static VLC_TYPE dca_table[23622][2];
408 if (vlcs_initialized)
411 dca_bitalloc_index.
offset = 1;
412 dca_bitalloc_index.
wrap = 2;
413 for (i = 0; i < 5; i++) {
420 dca_scalefactor.
offset = -64;
421 dca_scalefactor.
wrap = 2;
422 for (i = 0; i < 5; i++) {
431 for (i = 0; i < 4; i++) {
439 for (i = 0; i < 10; i++)
440 for (j = 0; j < 7; j++) {
444 dca_smpl_bitalloc[i + 1].
wrap = 1 + (j > 4);
446 dca_smpl_bitalloc[i + 1].
vlc[j].
table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
454 vlcs_initialized = 1;
466 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
467 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
468 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
495 for (j = 1; j < 11; j++)
500 for (j = 0; j < 11; j++)
504 for (j = 1; j < 11; j++)
534 for (j = 0; j < 11; j++)
538 for (j = 0; j < 11; j++)
634 "source pcm resolution: %i (%i bits/sample)\n",
654 value = av_clip(value, 0, (1 << log2range) - 1);
655 }
else if (level < 8) {
656 if (level + 1 > log2range) {
703 "Invalid bit allocation index\n");
723 k < s->vq_start_subband[j] && s->
bitalloc[j][k] > 0) {
734 const uint32_t *scale_table;
735 int scale_sum, log_size;
787 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
794 "Joint stereo coding not supported\n");
811 "Invalid channel mode %d\n", am);
848 if (!base_channel && s->
lfe) {
850 int lfe_samples = 2 * s->
lfe * (4 + block_index);
854 for (j = lfe_samples; j < lfe_end_sample; j++) {
866 for (j = lfe_samples; j < lfe_end_sample; j++)
885 "prediction coefs: %f, %f, %f, %f\n",
917 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++)
935 if (!base_channel && s->
lfe) {
936 int lfe_samples = 2 * s->
lfe * (4 + block_index);
940 for (j = lfe_samples; j < lfe_end_sample; j++)
950 float samples_in[32][8],
float *samples_out,
953 const float *prCoeff;
959 scale *= sqrt(1 / 8.0);
967 for (i = sb_act; i < 32; i++)
971 for (subindex = 0; subindex < 8; subindex++) {
973 for (i = 0; i < sb_act; i++) {
974 unsigned sign = (i - 1) & 2;
975 uint32_t
v =
AV_RN32A(&samples_in[i][subindex]) ^ sign << 30;
983 samples_out, s->
raXin, scale);
989 int num_deci_sample,
float *samples_in,
990 float *samples_out,
float scale)
1001 const float *prCoeff;
1005 if (decimation_select == 1) {
1013 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1014 s->
dcadsp.
lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1016 samples_out += 2 * decifactor;
1021 #define MIX_REAR1(samples, si1, rs, coef) \
1022 samples[i] += samples[si1] * coef[rs][0]; \
1023 samples[i+256] += samples[si1] * coef[rs][1];
1025 #define MIX_REAR2(samples, si1, si2, rs, coef) \
1026 samples[i] += samples[si1] * coef[rs][0] + samples[si2] * coef[rs + 1][0]; \
1027 samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs + 1][1];
1029 #define MIX_FRONT3(samples, coef) \
1030 t = samples[i + c]; \
1031 u = samples[i + l]; \
1032 v = samples[i + r]; \
1033 samples[i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1034 samples[i+256] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1036 #define DOWNMIX_TO_STEREO(op1, op2) \
1037 for (i = 0; i < 256; i++) { \
1044 const int8_t *channel_mapping)
1046 int c, l,
r, sl, sr, s;
1067 c = channel_mapping[0] * 256;
1068 l = channel_mapping[1] * 256;
1069 r = channel_mapping[2] * 256;
1073 s = channel_mapping[2] * 256;
1077 c = channel_mapping[0] * 256;
1078 l = channel_mapping[1] * 256;
1079 r = channel_mapping[2] * 256;
1080 s = channel_mapping[3] * 256;
1085 sl = channel_mapping[2] * 256;
1086 sr = channel_mapping[3] * 256;
1090 c = channel_mapping[0] * 256;
1091 l = channel_mapping[1] * 256;
1092 r = channel_mapping[2] * 256;
1093 sl = channel_mapping[3] * 256;
1094 sr = channel_mapping[4] * 256;
1096 MIX_REAR2(samples, i + sl, i + sr, 3, coef));
1102 #ifndef decode_blockcodes
1108 int offset = (levels - 1) >> 1;
1110 for (i = 0; i < 4; i++) {
1111 int div =
FASTDIV(code, levels);
1112 values[i] = code - offset - div * levels;
1129 #ifndef int8x8_fmul_int32
1132 float fscale = scale / 16.0;
1134 for (i = 0; i < 8; i++)
1135 dst[i] = src[i] * fscale;
1144 const float *quant_step_table;
1170 float quant_step_size = quant_step_table[abits];
1183 memset(subband_samples[k][l], 0, 8 *
sizeof(subband_samples[0][0][0]));
1187 float rscale = quant_step_size * s->
scale_factor[k][l][sfi] *
1190 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1193 int block_code1, block_code2,
size, levels, err;
1204 "ERROR: block code look-up failed\n");
1209 for (m = 0; m < 8; m++)
1214 for (m = 0; m < 8; m++)
1216 &dca_smpl_bitalloc[abits], sel);
1228 for (m = 0; m < 8; m++) {
1229 for (n = 1; n <= 4; n++)
1231 subband_samples[k][l][m] +=
1233 subband_samples[k][l][m - n] / 8192);
1235 subband_samples[k][l][m] +=
1252 "Stream with high frequencies VQ coding\n");
1278 &subband_samples[k][l][4],
1279 4 *
sizeof(subband_samples[0][0][0]));
1318 int aux_data_count = 0, i;
1325 if (!base_channel) {
1332 for (i = 0; i < aux_data_count; i++)
1401 const uint16_t *ssrc = (
const uint16_t *) src;
1402 uint16_t *sdst = (uint16_t *) dst;
1405 if ((
unsigned) src_size > (unsigned) max_size) {
1408 src_size = max_size;
1414 memcpy(dst, src, src_size);
1417 for (i = 0; i < (src_size + 1) >> 1; i++)
1423 for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
1440 return av_popcount(mask) +
1459 for (i = 0; i < channels; i++) {
1460 int mix_map_mask =
get_bits(gb, out_ch);
1461 int num_coeffs = av_popcount(mix_map_mask);
1474 int embedded_stereo = 0;
1475 int embedded_6ch = 0;
1476 int drc_code_present;
1477 int extensions_mask;
1509 int spkr_remap_sets;
1510 int spkr_mask_size = 16;
1519 spkr_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1525 for (i = 0; i < spkr_remap_sets; i++) {
1530 for (i = 0; i < spkr_remap_sets; i++) {
1531 int num_dec_ch_remaps =
get_bits(&s->
gb, 5) + 1;
1535 for (j = 0; j < num_spkrs[i]; j++) {
1537 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1548 if (drc_code_present)
1554 if (drc_code_present && embedded_stereo)
1578 if (embedded_stereo)
1584 case 0: extensions_mask =
get_bits(&s->
gb, 12);
break;
1587 case 3: extensions_mask = 0;
break;
1611 "DTS extensions detection mismatch (%d, %d)\n",
1626 int active_ss_mask[8];
1651 if (num_audiop > 1) {
1658 if (num_assets > 1) {
1664 for (i = 0; i < num_audiop; i++)
1665 active_ss_mask[i] =
get_bits(&s->
gb, ss_index + 1);
1667 for (i = 0; i < num_audiop; i++)
1668 for (j = 0; j <= ss_index; j++)
1669 if (active_ss_mask[i] & (1 << j))
1674 int mix_out_mask_size;
1677 mix_out_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1681 int mix_out_mask =
get_bits(&s->
gb, mix_out_mask_size);
1687 for (i = 0; i < num_assets; i++)
1690 for (i = 0; i < num_assets; i++) {
1704 int *got_frame_ptr,
AVPacket *avpkt)
1706 const uint8_t *buf = avpkt->
data;
1707 int buf_size = avpkt->
size;
1710 int num_core_channels = 0;
1713 int16_t *samples_s16;
1773 int ext_amode, xch_fsize;
1790 if ((ext_amode =
get_bits(&s->
gb, 4)) != 1) {
1792 " supported!\n", ext_amode);
1852 if (s->
amode < 16) {
1855 if (s->
xch_present && (!avctx->request_channels ||
1856 avctx->request_channels > num_core_channels + !!s->
lfe)) {
1865 channels = num_core_channels + !!s->
lfe;
1874 if (channels > !!s->
lfe &&
1900 "channels changing in stream. Skipping frame.\n");
1910 samples_flt = (
float *) s->
frame.
data[0];
1911 samples_s16 = (int16_t *) s->
frame.
data[0];
1930 samples_flt += 256 * channels;
1935 samples_s16 += 256 * channels;
1941 for (i = 0; i < 2 * s->
lfe * 4; i++)
1985 avctx->request_channels == 2) {
1986 avctx->
channels = avctx->request_channels;