56 #define DCA_PRIM_CHANNELS_MAX (7)
57 #define DCA_SUBBANDS (32)
58 #define DCA_ABITS_MAX (32)
59 #define DCA_SUBSUBFRAMES_MAX (4)
60 #define DCA_SUBFRAMES_MAX (16)
61 #define DCA_BLOCKS_MAX (16)
62 #define DCA_LFE_MAX (3)
124 #define DCA_CORE_EXTS (DCA_EXT_XCH | DCA_EXT_XXCH | DCA_EXT_X96)
173 1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
177 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
178 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
179 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
180 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
181 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
182 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
183 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
184 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
185 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
186 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
187 { 3, 4, 0, 1, 5, 6, -1, -1, -1},
188 { 2, 0, 1, 4, 5, 6, -1, -1, -1},
189 { 0, 6, 4, 5, 2, 3, -1, -1, -1},
190 { 4, 2, 5, 0, 1, 6, 7, -1, -1},
191 { 5, 6, 0, 1, 7, 3, 8, 4, -1},
192 { 4, 2, 5, 0, 1, 6, 8, 7, -1},
196 { 0, 2, -1, -1, -1, -1, -1, -1, -1},
197 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
198 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
199 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
200 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
201 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
202 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
203 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
204 { 0, 1, 4, 5, 3, -1, -1, -1, -1},
205 { 2, 0, 1, 5, 6, 4, -1, -1, -1},
206 { 3, 4, 0, 1, 6, 7, 5, -1, -1},
207 { 2, 0, 1, 4, 5, 6, 7, -1, -1},
208 { 0, 6, 4, 5, 2, 3, 7, -1, -1},
209 { 4, 2, 5, 0, 1, 7, 8, 6, -1},
210 { 5, 6, 0, 1, 8, 3, 9, 4, 7},
211 { 4, 2, 5, 0, 1, 6, 9, 8, 7},
215 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
216 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
217 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
218 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
219 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
220 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
221 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
222 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
223 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
224 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
225 { 2, 3, 0, 1, 4, 5, -1, -1, -1},
226 { 2, 0, 1, 3, 4, 5, -1, -1, -1},
227 { 0, 5, 3, 4, 1, 2, -1, -1, -1},
228 { 3, 2, 4, 0, 1, 5, 6, -1, -1},
229 { 4, 5, 0, 1, 6, 2, 7, 3, -1},
230 { 3, 2, 4, 0, 1, 5, 7, 6, -1},
234 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
235 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
236 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
237 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
238 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
239 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
240 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
241 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
242 { 0, 1, 3, 4, 2, -1, -1, -1, -1},
243 { 2, 0, 1, 4, 5, 3, -1, -1, -1},
244 { 2, 3, 0, 1, 5, 6, 4, -1, -1},
245 { 2, 0, 1, 3, 4, 5, 6, -1, -1},
246 { 0, 5, 3, 4, 1, 2, 6, -1, -1},
247 { 3, 2, 4, 0, 1, 6, 7, 5, -1},
248 { 4, 5, 0, 1, 7, 2, 8, 3, 6},
249 { 3, 2, 4, 0, 1, 5, 8, 7, 6},
252 #define DCA_DOLBY 101
254 #define DCA_CHANNEL_BITS 6
255 #define DCA_CHANNEL_MASK 0x3F
259 #define HEADER_SIZE 14
261 #define DCA_MAX_FRAME_SIZE 16384
262 #define DCA_MAX_EXSS_HEADER_SIZE 4096
264 #define DCA_BUFFER_PADDING_SIZE 1024
384 int mix_config_num_ch[4];
397 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364,
398 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508,
399 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564,
400 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240,
401 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
402 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
407 static int vlcs_initialized = 0;
409 static VLC_TYPE dca_table[23622][2];
411 if (vlcs_initialized)
414 dca_bitalloc_index.
offset = 1;
415 dca_bitalloc_index.
wrap = 2;
416 for (i = 0; i < 5; i++) {
423 dca_scalefactor.
offset = -64;
424 dca_scalefactor.
wrap = 2;
425 for (i = 0; i < 5; i++) {
434 for (i = 0; i < 4; i++) {
442 for (i = 0; i < 10; i++)
443 for (j = 0; j < 7; j++) {
447 dca_smpl_bitalloc[i + 1].
wrap = 1 + (j > 4);
449 dca_smpl_bitalloc[i + 1].
vlc[j].
table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c];
457 vlcs_initialized = 1;
469 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
470 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
471 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
498 for (j = 1; j < 11; j++)
503 for (j = 0; j < 11; j++)
507 for (j = 1; j < 11; j++)
537 for (j = 0; j < 11; j++)
541 for (j = 0; j < 11; j++)
637 "source pcm resolution: %i (%i bits/sample)\n",
657 value = av_clip(value, 0, (1 << log2range) - 1);
658 }
else if (level < 8) {
659 if (level + 1 > log2range) {
706 "Invalid bit allocation index\n");
714 av_dlog(s->
avctx,
"bitalloc index [%i][%i] too big (%i)\n",
726 k < s->vq_start_subband[j] && s->
bitalloc[j][k] > 0) {
737 const uint32_t *scale_table;
738 int scale_sum, log_size;
790 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
797 "Joint stereo coding not supported\n");
814 "Invalid channel mode %d\n", am);
850 if (!base_channel && s->
lfe) {
852 int lfe_samples = 2 * s->
lfe * (4 + block_index);
856 for (j = lfe_samples; j < lfe_end_sample; j++) {
868 for (j = lfe_samples; j < lfe_end_sample; j++)
887 "prediction coefs: %f, %f, %f, %f\n",
919 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++)
937 if (!base_channel && s->
lfe) {
938 int lfe_samples = 2 * s->
lfe * (4 + block_index);
942 for (j = lfe_samples; j < lfe_end_sample; j++)
952 float samples_in[32][8],
float *samples_out,
955 const float *prCoeff;
959 scale *= sqrt(1 / 8.0);
971 samples_out, s->
raXin, scale);
975 int num_deci_sample,
float *samples_in,
976 float *samples_out,
float scale)
987 const float *prCoeff;
991 if (decimation_select == 1) {
999 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1000 s->
dcadsp.
lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1002 samples_out += 2 * decifactor;
1007 #define MIX_REAR1(samples, s1, rs, coef) \
1008 samples[0][i] += samples[s1][i] * coef[rs][0]; \
1009 samples[1][i] += samples[s1][i] * coef[rs][1];
1011 #define MIX_REAR2(samples, s1, s2, rs, coef) \
1012 samples[0][i] += samples[s1][i] * coef[rs][0] + samples[s2][i] * coef[rs + 1][0]; \
1013 samples[1][i] += samples[s1][i] * coef[rs][1] + samples[s2][i] * coef[rs + 1][1];
1015 #define MIX_FRONT3(samples, coef) \
1016 t = samples[c][i]; \
1017 u = samples[l][i]; \
1018 v = samples[r][i]; \
1019 samples[0][i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1020 samples[1][i] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1022 #define DOWNMIX_TO_STEREO(op1, op2) \
1023 for (i = 0; i < 256; i++) { \
1030 const int8_t *channel_mapping)
1032 int c, l,
r, sl, sr, s;
1053 c = channel_mapping[0];
1054 l = channel_mapping[1];
1055 r = channel_mapping[2];
1059 s = channel_mapping[2];
1063 c = channel_mapping[0];
1064 l = channel_mapping[1];
1065 r = channel_mapping[2];
1066 s = channel_mapping[3];
1071 sl = channel_mapping[2];
1072 sr = channel_mapping[3];
1076 c = channel_mapping[0];
1077 l = channel_mapping[1];
1078 r = channel_mapping[2];
1079 sl = channel_mapping[3];
1080 sr = channel_mapping[4];
1088 #ifndef decode_blockcodes
1094 int offset = (levels - 1) >> 1;
1096 for (i = 0; i < 4; i++) {
1097 int div =
FASTDIV(code, levels);
1098 values[i] = code - offset - div * levels;
1115 #ifndef int8x8_fmul_int32
1118 float fscale = scale / 16.0;
1120 for (i = 0; i < 8; i++)
1121 dst[i] = src[i] * fscale;
1130 const float *quant_step_table;
1158 float quant_step_size = quant_step_table[abits];
1172 memset(
block + 8 * l, 0, 8 *
sizeof(
block[0]));
1176 rscale[l] = quant_step_size * s->
scale_factor[k][l][sfi] *
1179 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1182 int block_code1, block_code2,
size, levels, err;
1190 levels,
block + 8 * l);
1193 "ERROR: block code look-up failed\n");
1198 for (m = 0; m < 8; m++)
1203 for (m = 0; m < 8; m++)
1205 &dca_smpl_bitalloc[abits], sel);
1221 for (m = 0; m < 8; m++) {
1222 for (n = 1; n <= 4; n++)
1224 subband_samples[k][l][m] +=
1226 subband_samples[k][l][m - n] / 8192);
1228 subband_samples[k][l][m] +=
1245 "Stream with high frequencies VQ coding\n");
1271 &subband_samples[k][l][4],
1272 4 *
sizeof(subband_samples[0][0][0]));
1289 M_SQRT1_2 / 32768.0 );
1302 1.0 / (256.0 * 32768.0));
1312 int aux_data_count = 0, i;
1319 if (!base_channel) {
1326 for (i = 0; i < aux_data_count; i++)
1393 return av_popcount(mask) +
1412 for (i = 0; i < channels; i++) {
1413 int mix_map_mask =
get_bits(gb, out_ch);
1414 int num_coeffs = av_popcount(mix_map_mask);
1427 int embedded_stereo = 0;
1428 int embedded_6ch = 0;
1429 int drc_code_present;
1430 int extensions_mask;
1462 int spkr_remap_sets;
1463 int spkr_mask_size = 16;
1472 spkr_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1478 for (i = 0; i < spkr_remap_sets; i++) {
1483 for (i = 0; i < spkr_remap_sets; i++) {
1484 int num_dec_ch_remaps =
get_bits(&s->
gb, 5) + 1;
1488 for (j = 0; j < num_spkrs[i]; j++) {
1490 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1501 if (drc_code_present)
1507 if (drc_code_present && embedded_stereo)
1531 if (embedded_stereo)
1537 case 0: extensions_mask =
get_bits(&s->
gb, 12);
break;
1540 case 3: extensions_mask = 0;
break;
1564 "DTS extensions detection mismatch (%d, %d)\n",
1579 int active_ss_mask[8];
1604 if (num_audiop > 1) {
1611 if (num_assets > 1) {
1617 for (i = 0; i < num_audiop; i++)
1618 active_ss_mask[i] =
get_bits(&s->
gb, ss_index + 1);
1620 for (i = 0; i < num_audiop; i++)
1621 for (j = 0; j <= ss_index; j++)
1622 if (active_ss_mask[i] & (1 << j))
1627 int mix_out_mask_size;
1630 mix_out_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1634 int mix_out_mask =
get_bits(&s->
gb, mix_out_mask_size);
1640 for (i = 0; i < num_assets; i++)
1643 for (i = 0; i < num_assets; i++) {
1657 int *got_frame_ptr,
AVPacket *avpkt)
1660 int buf_size = avpkt->
size;
1663 int num_core_channels = 0;
1665 float **samples_flt;
1667 int channels, full_channels;
1724 int ext_amode, xch_fsize;
1741 if ((ext_amode =
get_bits(&s->
gb, 4)) != 1) {
1743 " supported!\n", ext_amode);
1803 if (s->
amode < 16) {
1806 if (s->
xch_present && (!avctx->request_channels ||
1807 avctx->request_channels > num_core_channels + !!s->
lfe)) {
1816 channels = num_core_channels + !!s->
lfe;
1825 if (channels > !!s->
lfe &&
1849 if (avctx->
channels < full_channels) {
1863 full_channels - channels,
1873 for (ch = 0; ch < channels; ch++)
1875 for (; ch < full_channels; ch++)
1893 for (i = 0; i < 2 * s->
lfe * 4; i++)
1927 avctx->request_channels == 2) {
1928 avctx->
channels = avctx->request_channels;