54 #define DCA_PRIM_CHANNELS_MAX (7)
55 #define DCA_SUBBANDS (64)
56 #define DCA_ABITS_MAX (32)
57 #define DCA_SUBSUBFRAMES_MAX (4)
58 #define DCA_SUBFRAMES_MAX (16)
59 #define DCA_BLOCKS_MAX (16)
60 #define DCA_LFE_MAX (3)
61 #define DCA_CHSETS_MAX (4)
62 #define DCA_CHSET_CHANS_MAX (8)
186 #define DCA_CORE_EXTS (DCA_EXT_XCH | DCA_EXT_XXCH | DCA_EXT_X96)
235 1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 1, 3, 2, 3
239 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
240 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
241 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
242 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
243 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
244 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
245 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
246 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
247 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
248 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
249 { 3, 4, 0, 1, 5, 6, -1, -1, -1},
250 { 2, 0, 1, 4, 5, 6, -1, -1, -1},
251 { 0, 6, 4, 5, 2, 3, -1, -1, -1},
252 { 4, 2, 5, 0, 1, 6, 7, -1, -1},
253 { 5, 6, 0, 1, 7, 3, 8, 4, -1},
254 { 4, 2, 5, 0, 1, 6, 8, 7, -1},
258 { 0, 2, -1, -1, -1, -1, -1, -1, -1},
259 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
260 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
261 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
262 { 0, 1, 3, -1, -1, -1, -1, -1, -1},
263 { 2, 0, 1, 4, -1, -1, -1, -1, -1},
264 { 0, 1, 3, 4, -1, -1, -1, -1, -1},
265 { 2, 0, 1, 4, 5, -1, -1, -1, -1},
266 { 0, 1, 4, 5, 3, -1, -1, -1, -1},
267 { 2, 0, 1, 5, 6, 4, -1, -1, -1},
268 { 3, 4, 0, 1, 6, 7, 5, -1, -1},
269 { 2, 0, 1, 4, 5, 6, 7, -1, -1},
270 { 0, 6, 4, 5, 2, 3, 7, -1, -1},
271 { 4, 2, 5, 0, 1, 7, 8, 6, -1},
272 { 5, 6, 0, 1, 8, 3, 9, 4, 7},
273 { 4, 2, 5, 0, 1, 6, 9, 8, 7},
277 { 0, -1, -1, -1, -1, -1, -1, -1, -1},
278 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
279 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
280 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
281 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
282 { 2, 0, 1, -1, -1, -1, -1, -1, -1},
283 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
284 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
285 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
286 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
287 { 2, 3, 0, 1, 4, 5, -1, -1, -1},
288 { 2, 0, 1, 3, 4, 5, -1, -1, -1},
289 { 0, 5, 3, 4, 1, 2, -1, -1, -1},
290 { 3, 2, 4, 0, 1, 5, 6, -1, -1},
291 { 4, 5, 0, 1, 6, 2, 7, 3, -1},
292 { 3, 2, 4, 0, 1, 5, 7, 6, -1},
296 { 0, 1, -1, -1, -1, -1, -1, -1, -1},
297 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
298 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
299 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
300 { 0, 1, 2, -1, -1, -1, -1, -1, -1},
301 { 2, 0, 1, 3, -1, -1, -1, -1, -1},
302 { 0, 1, 2, 3, -1, -1, -1, -1, -1},
303 { 2, 0, 1, 3, 4, -1, -1, -1, -1},
304 { 0, 1, 3, 4, 2, -1, -1, -1, -1},
305 { 2, 0, 1, 4, 5, 3, -1, -1, -1},
306 { 2, 3, 0, 1, 5, 6, 4, -1, -1},
307 { 2, 0, 1, 3, 4, 5, 6, -1, -1},
308 { 0, 5, 3, 4, 1, 2, 6, -1, -1},
309 { 3, 2, 4, 0, 1, 6, 7, 5, -1},
310 { 4, 5, 0, 1, 7, 2, 8, 3, 6},
311 { 3, 2, 4, 0, 1, 5, 8, 7, 6},
314 #define DCA_DOLBY 101
316 #define DCA_CHANNEL_BITS 6
317 #define DCA_CHANNEL_MASK 0x3F
321 #define HEADER_SIZE 14
323 #define DCA_MAX_FRAME_SIZE 16384
324 #define DCA_MAX_EXSS_HEADER_SIZE 4096
326 #define DCA_BUFFER_PADDING_SIZE 1024
445 uint32_t xxch_spk_masks[4];
446 int xxch_chset_nch[4];
452 int8_t xxch_order_tab[32];
459 int mix_config_num_ch[4];
472 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364,
473 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508,
474 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564,
475 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240,
476 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
477 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622,
482 static int vlcs_initialized = 0;
484 static VLC_TYPE dca_table[23622][2];
486 if (vlcs_initialized)
489 dca_bitalloc_index.
offset = 1;
490 dca_bitalloc_index.
wrap = 2;
491 for (i = 0; i < 5; i++) {
498 dca_scalefactor.
offset = -64;
499 dca_scalefactor.
wrap = 2;
500 for (i = 0; i < 5; i++) {
509 for (i = 0; i < 4; i++) {
517 for (i = 0; i < 10; i++)
518 for (j = 0; j < 7; j++) {
522 dca_smpl_bitalloc[i + 1].
wrap = 1 + (j > 4);
532 vlcs_initialized = 1;
547 i <= s->xxch_chset && !(mask & xxch_ch); mask = s->
xxch_spk_masks[++i])
548 base += av_popcount(mask);
550 return base + av_popcount(mask & (xxch_ch - 1));
557 static const float adj_table[4] = { 1.0, 1.1250, 1.2500, 1.4375 };
558 static const int bitlen[11] = { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 };
559 static const int thr[11] = { 0, 1, 3, 3, 3, 3, 7, 7, 7, 7, 7 };
560 int hdr_pos = 0, hdr_size = 0;
561 float sign, mag, scale_factor;
562 int this_chans, acc_mask;
563 int embedded_downmix;
604 if (mask[j] & (1 << i)) {
607 "DCA-XXCH: dmix to LFE1 not supported.\n");
612 sign = (coeff & 64) ? 1.0 : -1.0;
644 for (j = 1; j < 11; j++)
649 for (j = 0; j < 11; j++)
653 for (j = 1; j < 11; j++)
666 if (hdr_pos + 8 * hdr_size > i)
690 for (j = 0; j < 11; j++)
694 for (j = 0; j < 11; j++)
791 "source pcm resolution: %i (%i bits/sample)\n",
811 value = av_clip(value, 0, (1 << log2range) - 1);
812 }
else if (level < 8) {
813 if (level + 1 > log2range) {
860 "Invalid bit allocation index\n");
868 av_dlog(s->
avctx,
"bitalloc index [%i][%i] too big (%i)\n",
880 k < s->vq_start_subband[j] && s->
bitalloc[j][k] > 0) {
891 const uint32_t *scale_table;
892 int scale_sum, log_size;
944 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
951 "Joint stereo coding not supported\n");
968 "Invalid channel mode %d\n", am);
1004 if (!base_channel && s->
lfe) {
1007 int lfe_samples = 2 * s->
lfe * (4 + block_index);
1011 for (j = lfe_samples; j < lfe_end_sample; j++) {
1027 for (j = lfe_samples; j < lfe_end_sample; j++)
1046 "prediction coefs: %f, %f, %f, %f\n",
1078 for (k = s->
subband_activity[j]; k < s->subband_activity[source_channel]; k++)
1096 if (!base_channel && s->
lfe) {
1097 int lfe_samples = 2 * s->
lfe * (4 + block_index);
1101 for (j = lfe_samples; j < lfe_end_sample; j++)
1111 float samples_in[32][8],
float *samples_out,
1114 const float *prCoeff;
1118 scale *= sqrt(1 / 8.0);
1130 samples_out, s->
raXin, scale);
1134 int num_deci_sample,
float *samples_in,
1135 float *samples_out,
float scale)
1146 const float *prCoeff;
1150 if (decimation_select == 1) {
1158 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1159 s->
dcadsp.
lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1161 samples_out += 2 * decifactor;
1166 #define MIX_REAR1(samples, s1, rs, coef) \
1167 samples[0][i] += samples[s1][i] * coef[rs][0]; \
1168 samples[1][i] += samples[s1][i] * coef[rs][1];
1170 #define MIX_REAR2(samples, s1, s2, rs, coef) \
1171 samples[0][i] += samples[s1][i] * coef[rs][0] + samples[s2][i] * coef[rs + 1][0]; \
1172 samples[1][i] += samples[s1][i] * coef[rs][1] + samples[s2][i] * coef[rs + 1][1];
1174 #define MIX_FRONT3(samples, coef) \
1175 t = samples[c][i]; \
1176 u = samples[l][i]; \
1177 v = samples[r][i]; \
1178 samples[0][i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1179 samples[1][i] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1181 #define DOWNMIX_TO_STEREO(op1, op2) \
1182 for (i = 0; i < 256; i++) { \
1189 const int8_t *channel_mapping)
1191 int c, l,
r, sl, sr,
s;
1212 c = channel_mapping[0];
1213 l = channel_mapping[1];
1214 r = channel_mapping[2];
1218 s = channel_mapping[2];
1222 c = channel_mapping[0];
1223 l = channel_mapping[1];
1224 r = channel_mapping[2];
1225 s = channel_mapping[3];
1230 sl = channel_mapping[2];
1231 sr = channel_mapping[3];
1235 c = channel_mapping[0];
1236 l = channel_mapping[1];
1237 r = channel_mapping[2];
1238 sl = channel_mapping[3];
1239 sr = channel_mapping[4];
1247 #ifndef decode_blockcodes
1253 int offset = (levels - 1) >> 1;
1255 for (i = 0; i < 4; i++) {
1256 int div =
FASTDIV(code, levels);
1257 values[i] = code - offset - div * levels;
1274 #ifndef int8x8_fmul_int32
1277 float fscale = scale / 16.0;
1279 for (i = 0; i < 8; i++)
1280 dst[i] = src[i] * fscale;
1289 const float *quant_step_table;
1317 float quant_step_size = quant_step_table[abits];
1331 memset(
block + 8 * l, 0, 8 *
sizeof(
block[0]));
1335 rscale[l] = quant_step_size * s->
scale_factor[k][l][sfi] *
1338 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].
table) {
1341 int block_code1, block_code2,
size, levels, err;
1349 levels,
block + 8 * l);
1352 "ERROR: block code look-up failed\n");
1357 for (m = 0; m < 8; m++)
1362 for (m = 0; m < 8; m++)
1364 &dca_smpl_bitalloc[abits], sel);
1380 for (m = 0; m < 8; m++) {
1381 for (n = 1; n <= 4; n++)
1383 subband_samples[k][l][
m] +=
1385 subband_samples[k][l][m -
n] / 8192);
1387 subband_samples[k][l][
m] +=
1404 "Stream with high frequencies VQ coding\n");
1430 &subband_samples[k][l][4],
1431 4 *
sizeof(subband_samples[0][0][0]));
1461 1.0 / (256.0 * 32768.0));
1471 int aux_data_count = 0, i;
1478 if (!base_channel) {
1485 for (i = 0; i < aux_data_count; i++)
1552 return av_popcount(mask) +
1571 for (i = 0; i < channels; i++) {
1572 int mix_map_mask =
get_bits(gb, out_ch);
1573 int num_coeffs = av_popcount(mix_map_mask);
1586 int embedded_stereo = 0;
1587 int embedded_6ch = 0;
1588 int drc_code_present;
1621 int spkr_remap_sets;
1622 int spkr_mask_size = 16;
1631 spkr_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1637 for (i = 0; i < spkr_remap_sets; i++) {
1642 for (i = 0; i < spkr_remap_sets; i++) {
1643 int num_dec_ch_remaps =
get_bits(&s->
gb, 5) + 1;
1647 for (j = 0; j < num_spkrs[i]; j++) {
1649 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1660 if (drc_code_present)
1666 if (drc_code_present && embedded_stereo)
1690 if (embedded_stereo)
1696 case 0: extensions_mask =
get_bits(&s->
gb, 12);
break;
1699 case 3: extensions_mask = 0;
break;
1723 "DTS extensions detection mismatch (%d, %d)\n",
1737 int hdr_size, num_chsets, xbr_tmode, hdr_pos;
1738 int i, j, k, l, chset, chan_base;
1748 for(i = 0; i < num_chsets; i++)
1753 for(i = 0; i < num_chsets; i++) {
1756 for(j = 0; j < n_xbr_ch[i]; j++)
1757 active_bands[i][j] =
get_bits(&s->
gb, k) + 1;
1762 if(hdr_pos + hdr_size * 8 > i)
1767 for(chset = 0, chan_base = 0;
1768 chset < num_chsets && chan_base + n_xbr_ch[chset] <= s->
prim_channels;
1769 chan_base += n_xbr_ch[chset++]) {
1771 int subsubframe = 0;
1777 if(subsubframe == 0) {
1779 for(i = 0; i < n_xbr_ch[chset]; i++) {
1783 for(i = 0; i < n_xbr_ch[chset]; i++) {
1784 get_array(&s->
gb, abits_high[i], active_bands[chset][i], anctemp[i]);
1787 for(i = 0; i < n_xbr_ch[chset]; i++) {
1789 if(anctemp[i] < 1) {
1796 for(i = 0; i < n_xbr_ch[chset]; i++) {
1797 const uint32_t *scale_table;
1808 for(j = 0; j < active_bands[chset][i]; j++) {
1809 if(abits_high[i][j] > 0) {
1810 scale_table_high[i][j][0] =
1814 scale_table_high[i][j][1] =
1823 for(i = 0; i < n_xbr_ch[chset]; i++) {
1824 for(j = 0; j < active_bands[chset][i]; j++) {
1825 const int xbr_abits = abits_high[i][j];
1828 const float rscale = quant_step_size * scale_table_high[i][j][sfi];
1838 int block_code1, block_code2,
size, levels, err;
1849 "ERROR: DTS-XBR: block code look-up failed\n");
1855 for(l = 0; l < 8; l++)
1856 subband_samples[l] += (
float)block[l] * rscale;
1877 if(start_posn + chset_fsize[chset] * 8 != i) {
1878 j = start_posn + chset_fsize[chset] * 8 - i;
1881 " skipping further than expected (%d bits)\n", j);
1892 int hdr_size, spkmsk_bits, num_chsets, core_spk, hdr_pos;
1893 int i, chset, base_channel, chstart, fsize[8];
1902 for (i = 0; i < num_chsets; i++)
1912 if (hdr_pos + hdr_size * 8 > i)
1915 for (chset = 0; chset < num_chsets; chset++) {
1928 "Error decoding DTS-XXCH extension\n");
1935 if (chstart + fsize[chset] * 8 > i)
1953 int active_ss_mask[8];
1968 hdrsize =
get_bits(&s->
gb, 8 + 4 * blownup) + 1;
1983 if (num_audiop > 1) {
1985 "Multiple DTS-HD audio presentations");
1991 if (num_assets > 1) {
1997 for (i = 0; i < num_audiop; i++)
1998 active_ss_mask[i] =
get_bits(&s->
gb, ss_index + 1);
2000 for (i = 0; i < num_audiop; i++)
2001 for (j = 0; j <= ss_index; j++)
2002 if (active_ss_mask[i] & (1 << j))
2007 int mix_out_mask_size;
2010 mix_out_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
2014 int mix_out_mask =
get_bits(&s->
gb, mix_out_mask_size);
2020 for (i = 0; i < num_assets; i++)
2023 for (i = 0; i < num_assets; i++) {
2031 if (num_assets > 0) {
2033 if (start_posn + hdrsize * 8 > j)
2036 for (i = 0; i < num_assets; i++) {
2041 if (mkr == 0x655e315e) {
2043 }
else if (mkr == 0x47004a03) {
2048 "DTS-ExSS: unknown marker = 0x%08x\n", mkr);
2053 if (start_posn + asset_size[i] * 8 > j)
2064 int *got_frame_ptr,
AVPacket *avpkt)
2068 int buf_size = avpkt->
size;
2072 int num_core_channels = 0;
2074 float **samples_flt;
2079 int channels, full_channels;
2142 int ext_amode, xch_fsize;
2159 if ((ext_amode =
get_bits(&s->
gb, 4)) != 1) {
2161 " supported!\n", ext_amode);
2231 && avctx->request_channels
2234 if (s->
amode < 16) {
2237 if (s->
xch_present && (!avctx->request_channels ||
2238 avctx->request_channels
2239 > num_core_channels + !!s->
lfe)) {
2250 channels = num_core_channels + !!s->
lfe;
2259 if (channels > !!s->
lfe &&
2274 static const int8_t dca_channel_order_native[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
2280 "Non standard configuration %d !\n", s->
amode);
2289 if (avctx->request_channels > 0
2291 channels = num_core_channels + !!s->
lfe;
2293 <= avctx->request_channels; i++) {
2307 if (channel_mask & (1 << i)) {
2314 if (av_popcount(channel_mask) != av_popcount(channel_layout)) {
2316 "DTS-XXCH: Inconsistant avcodec/dts channel layouts\n");
2324 for (chset = -1, j = 0; chset < s->
xxch_chset; ++chset) {
2330 posn = av_popcount(channel_layout & (lavc - 1));
2338 for (i = 0; i < channels; i++)
2374 full_channels - channels,
2384 for (ch = 0; ch < channels; ch++)
2386 for (; ch < full_channels; ch++)
2404 ch = num_core_channels;
2405 for (chset = 0; chset < s->
xxch_chset; chset++) {
2410 for (j = ch; j < endch; j++) {
2411 if (mask & (1 << j)) {
2413 for (k = 0; k < endch; k++) {
2426 if ((mask & (1 << ch)) && s->
xxch_dmix_sf[chset] != 1.0f) {
2429 for (j = 0; j < ch; j++) {
2431 for (k = 0; k < 256; k++)
2432 src_chan[k] *= scale;
2438 for (k = 0; k < 256; k++)
2439 src_chan[k] *= scale;
2451 for (i = 0; i < 2 * s->
lfe * 4; i++)
2484 avctx->request_channels == 2) {
2485 avctx->
channels = avctx->request_channels;