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++)
633 "source pcm resolution: %i (%i bits/sample)\n",
653 value = av_clip(value, 0, (1 << log2range) - 1);
654 }
else if (level < 8) {
655 if (level + 1 > log2range) {
702 "Invalid bit allocation index\n");
722 k < s->vq_start_subband[j] && s->
bitalloc[j][k] > 0) {
733 const uint32_t *scale_table;
734 int scale_sum, log_size;
786 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
793 "Joint stereo coding not supported\n");
810 "Invalid channel mode %d\n", am);
847 if (!base_channel && s->
lfe) {
849 int lfe_samples = 2 * s->
lfe * (4 + block_index);
853 for (j = lfe_samples; j < lfe_end_sample; j++) {
865 for (j = lfe_samples; j < lfe_end_sample; j++)
884 "prediction coefs: %f, %f, %f, %f\n",
916 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++)
934 if (!base_channel && s->
lfe) {
935 int lfe_samples = 2 * s->
lfe * (4 + block_index);
939 for (j = lfe_samples; j < lfe_end_sample; j++)
949 float samples_in[32][8],
float *samples_out,
952 const float *prCoeff;
958 scale *= sqrt(1 / 8.0);
966 for (i = sb_act; i < 32; i++)
970 for (subindex = 0; subindex < 8; subindex++) {
972 for (i = 0; i < sb_act; i++) {
973 unsigned sign = (i - 1) & 2;
974 uint32_t
v =
AV_RN32A(&samples_in[i][subindex]) ^ sign << 30;
982 samples_out, s->
raXin, scale);
988 int num_deci_sample,
float *samples_in,
989 float *samples_out,
float scale)
1000 const float *prCoeff;
1004 if (decimation_select == 1) {
1012 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1013 s->
dcadsp.
lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1015 samples_out += 2 * decifactor;
1020 #define MIX_REAR1(samples, si1, rs, coef) \
1021 samples[i] += samples[si1] * coef[rs][0]; \
1022 samples[i+256] += samples[si1] * coef[rs][1];
1024 #define MIX_REAR2(samples, si1, si2, rs, coef) \
1025 samples[i] += samples[si1] * coef[rs][0] + samples[si2] * coef[rs + 1][0]; \
1026 samples[i+256] += samples[si1] * coef[rs][1] + samples[si2] * coef[rs + 1][1];
1028 #define MIX_FRONT3(samples, coef) \
1029 t = samples[i + c]; \
1030 u = samples[i + l]; \
1031 v = samples[i + r]; \
1032 samples[i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1033 samples[i+256] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1035 #define DOWNMIX_TO_STEREO(op1, op2) \
1036 for (i = 0; i < 256; i++) { \
1043 const int8_t *channel_mapping)
1045 int c, l,
r, sl, sr, s;
1066 c = channel_mapping[0] * 256;
1067 l = channel_mapping[1] * 256;
1068 r = channel_mapping[2] * 256;
1072 s = channel_mapping[2] * 256;
1076 c = channel_mapping[0] * 256;
1077 l = channel_mapping[1] * 256;
1078 r = channel_mapping[2] * 256;
1079 s = channel_mapping[3] * 256;
1084 sl = channel_mapping[2] * 256;
1085 sr = channel_mapping[3] * 256;
1089 c = channel_mapping[0] * 256;
1090 l = channel_mapping[1] * 256;
1091 r = channel_mapping[2] * 256;
1092 sl = channel_mapping[3] * 256;
1093 sr = channel_mapping[4] * 256;
1095 MIX_REAR2(samples, i + sl, i + sr, 3, coef));
1101 #ifndef decode_blockcodes
1107 int offset = (levels - 1) >> 1;
1109 for (i = 0; i < 4; i++) {
1110 int div =
FASTDIV(code, levels);
1111 values[i] = code - offset - div * levels;
1128 #ifndef int8x8_fmul_int32
1131 float fscale = scale / 16.0;
1133 for (i = 0; i < 8; i++)
1134 dst[i] = src[i] * fscale;
1143 const float *quant_step_table;
1169 float quant_step_size = quant_step_table[abits];
1182 memset(subband_samples[k][l], 0, 8 *
sizeof(subband_samples[0][0][0]));
1186 float rscale = quant_step_size * s->
scale_factor[k][l][sfi] *
1189 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1192 int block_code1, block_code2,
size, levels, err;
1203 "ERROR: block code look-up failed\n");
1208 for (m = 0; m < 8; m++)
1213 for (m = 0; m < 8; m++)
1215 &dca_smpl_bitalloc[abits], sel);
1227 for (m = 0; m < 8; m++) {
1228 for (n = 1; n <= 4; n++)
1230 subband_samples[k][l][m] +=
1232 subband_samples[k][l][m - n] / 8192);
1234 subband_samples[k][l][m] +=
1251 "Stream with high frequencies VQ coding\n");
1277 &subband_samples[k][l][4],
1278 4 *
sizeof(subband_samples[0][0][0]));
1317 int aux_data_count = 0, i;
1324 if (!base_channel) {
1331 for (i = 0; i < aux_data_count; i++)
1400 const uint16_t *ssrc = (
const uint16_t *) src;
1401 uint16_t *sdst = (uint16_t *) dst;
1404 if ((
unsigned) src_size > (unsigned) max_size) {
1407 src_size = max_size;
1413 memcpy(dst, src, src_size);
1416 for (i = 0; i < (src_size + 1) >> 1; i++)
1422 for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
1439 return av_popcount(mask) +
1458 for (i = 0; i < channels; i++) {
1459 int mix_map_mask =
get_bits(gb, out_ch);
1460 int num_coeffs = av_popcount(mix_map_mask);
1473 int embedded_stereo = 0;
1474 int embedded_6ch = 0;
1475 int drc_code_present;
1476 int extensions_mask;
1508 int spkr_remap_sets;
1509 int spkr_mask_size = 16;
1518 spkr_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1524 for (i = 0; i < spkr_remap_sets; i++) {
1529 for (i = 0; i < spkr_remap_sets; i++) {
1530 int num_dec_ch_remaps =
get_bits(&s->
gb, 5) + 1;
1534 for (j = 0; j < num_spkrs[i]; j++) {
1536 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1547 if (drc_code_present)
1553 if (drc_code_present && embedded_stereo)
1577 if (embedded_stereo)
1583 case 0: extensions_mask =
get_bits(&s->
gb, 12);
break;
1586 case 3: extensions_mask = 0;
break;
1610 "DTS extensions detection mismatch (%d, %d)\n",
1625 int active_ss_mask[8];
1650 if (num_audiop > 1) {
1657 if (num_assets > 1) {
1663 for (i = 0; i < num_audiop; i++)
1664 active_ss_mask[i] =
get_bits(&s->
gb, ss_index + 1);
1666 for (i = 0; i < num_audiop; i++)
1667 for (j = 0; j <= ss_index; j++)
1668 if (active_ss_mask[i] & (1 << j))
1673 int mix_out_mask_size;
1676 mix_out_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1680 int mix_out_mask =
get_bits(&s->
gb, mix_out_mask_size);
1686 for (i = 0; i < num_assets; i++)
1689 for (i = 0; i < num_assets; i++) {
1703 int *got_frame_ptr,
AVPacket *avpkt)
1705 const uint8_t *buf = avpkt->
data;
1706 int buf_size = avpkt->
size;
1709 int num_core_channels = 0;
1712 int16_t *samples_s16;
1772 int ext_amode, xch_fsize;
1789 if ((ext_amode =
get_bits(&s->
gb, 4)) != 1) {
1791 " supported!\n", ext_amode);
1851 if (s->
amode < 16) {
1854 if (s->
xch_present && (!avctx->request_channels ||
1855 avctx->request_channels > num_core_channels + !!s->
lfe)) {
1864 channels = num_core_channels + !!s->
lfe;
1873 if (channels > !!s->
lfe &&
1899 "channels changing in stream. Skipping frame.\n");
1909 samples_flt = (
float *) s->
frame.
data[0];
1910 samples_s16 = (int16_t *) s->
frame.
data[0];
1929 samples_flt += 256 * channels;
1934 samples_s16 += 256 * channels;
1940 for (i = 0; i < 2 * s->
lfe * 4; i++)
1984 avctx->request_channels == 2) {
1985 avctx->
channels = avctx->request_channels;