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;
961 scale *= sqrt(1 / 8.0);
969 for (i = sb_act; i < 32; i++)
973 for (subindex = 0; subindex < 8; subindex++) {
975 for (i = 0; i < sb_act; i++) {
976 unsigned sign = (i - 1) & 2;
977 uint32_t v =
AV_RN32A(&samples_in[i][subindex]) ^ sign << 30;
985 samples_out, s->
raXin, scale);
991 int num_deci_sample,
float *samples_in,
992 float *samples_out,
float scale)
1003 const float *prCoeff;
1007 if (decimation_select == 1) {
1015 for (deciindex = 0; deciindex < num_deci_sample; deciindex++) {
1016 s->
dcadsp.
lfe_fir(samples_out, samples_in, prCoeff, decifactor, scale);
1018 samples_out += 2 * decifactor;
1023 #define MIX_REAR1(samples, s1, rs, coef) \
1024 samples[0][i] += samples[s1][i] * coef[rs][0]; \
1025 samples[1][i] += samples[s1][i] * coef[rs][1];
1027 #define MIX_REAR2(samples, s1, s2, rs, coef) \
1028 samples[0][i] += samples[s1][i] * coef[rs][0] + samples[s2][i] * coef[rs + 1][0]; \
1029 samples[1][i] += samples[s1][i] * coef[rs][1] + samples[s2][i] * coef[rs + 1][1];
1031 #define MIX_FRONT3(samples, coef) \
1032 t = samples[c][i]; \
1033 u = samples[l][i]; \
1034 v = samples[r][i]; \
1035 samples[0][i] = t * coef[0][0] + u * coef[1][0] + v * coef[2][0]; \
1036 samples[1][i] = t * coef[0][1] + u * coef[1][1] + v * coef[2][1];
1038 #define DOWNMIX_TO_STEREO(op1, op2) \
1039 for (i = 0; i < 256; i++) { \
1046 const int8_t *channel_mapping)
1048 int c, l,
r, sl, sr, s;
1069 c = channel_mapping[0];
1070 l = channel_mapping[1];
1071 r = channel_mapping[2];
1075 s = channel_mapping[2];
1079 c = channel_mapping[0];
1080 l = channel_mapping[1];
1081 r = channel_mapping[2];
1082 s = channel_mapping[3];
1087 sl = channel_mapping[2];
1088 sr = channel_mapping[3];
1092 c = channel_mapping[0];
1093 l = channel_mapping[1];
1094 r = channel_mapping[2];
1095 sl = channel_mapping[3];
1096 sr = channel_mapping[4];
1104 #ifndef decode_blockcodes
1110 int offset = (levels - 1) >> 1;
1112 for (i = 0; i < 4; i++) {
1113 int div =
FASTDIV(code, levels);
1114 values[i] = code - offset - div * levels;
1131 #ifndef int8x8_fmul_int32
1134 float fscale = scale / 16.0;
1136 for (i = 0; i < 8; i++)
1137 dst[i] = src[i] * fscale;
1146 const float *quant_step_table;
1172 float quant_step_size = quant_step_table[abits];
1185 memset(subband_samples[k][l], 0, 8 *
sizeof(subband_samples[0][0][0]));
1189 float rscale = quant_step_size * s->
scale_factor[k][l][sfi] *
1192 if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) {
1195 int block_code1, block_code2,
size, levels, err;
1206 "ERROR: block code look-up failed\n");
1211 for (m = 0; m < 8; m++)
1216 for (m = 0; m < 8; m++)
1218 &dca_smpl_bitalloc[abits], sel);
1230 for (m = 0; m < 8; m++) {
1231 for (n = 1; n <= 4; n++)
1233 subband_samples[k][l][m] +=
1235 subband_samples[k][l][m - n] / 8192);
1237 subband_samples[k][l][m] +=
1254 "Stream with high frequencies VQ coding\n");
1280 &subband_samples[k][l][4],
1281 4 *
sizeof(subband_samples[0][0][0]));
1298 M_SQRT1_2 / 32768.0 );
1311 1.0 / (256.0 * 32768.0));
1321 int aux_data_count = 0, i;
1328 if (!base_channel) {
1335 for (i = 0; i < aux_data_count; i++)
1402 return av_popcount(mask) +
1421 for (i = 0; i < channels; i++) {
1422 int mix_map_mask =
get_bits(gb, out_ch);
1423 int num_coeffs = av_popcount(mix_map_mask);
1436 int embedded_stereo = 0;
1437 int embedded_6ch = 0;
1438 int drc_code_present;
1439 int extensions_mask;
1471 int spkr_remap_sets;
1472 int spkr_mask_size = 16;
1481 spkr_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1487 for (i = 0; i < spkr_remap_sets; i++) {
1492 for (i = 0; i < spkr_remap_sets; i++) {
1493 int num_dec_ch_remaps =
get_bits(&s->
gb, 5) + 1;
1497 for (j = 0; j < num_spkrs[i]; j++) {
1499 int num_dec_ch = av_popcount(remap_dec_ch_mask);
1510 if (drc_code_present)
1516 if (drc_code_present && embedded_stereo)
1540 if (embedded_stereo)
1546 case 0: extensions_mask =
get_bits(&s->
gb, 12);
break;
1549 case 3: extensions_mask = 0;
break;
1573 "DTS extensions detection mismatch (%d, %d)\n",
1588 int active_ss_mask[8];
1613 if (num_audiop > 1) {
1620 if (num_assets > 1) {
1626 for (i = 0; i < num_audiop; i++)
1627 active_ss_mask[i] =
get_bits(&s->
gb, ss_index + 1);
1629 for (i = 0; i < num_audiop; i++)
1630 for (j = 0; j <= ss_index; j++)
1631 if (active_ss_mask[i] & (1 << j))
1636 int mix_out_mask_size;
1639 mix_out_mask_size = (
get_bits(&s->
gb, 2) + 1) << 2;
1643 int mix_out_mask =
get_bits(&s->
gb, mix_out_mask_size);
1649 for (i = 0; i < num_assets; i++)
1652 for (i = 0; i < num_assets; i++) {
1666 int *got_frame_ptr,
AVPacket *avpkt)
1669 int buf_size = avpkt->
size;
1672 int num_core_channels = 0;
1674 float **samples_flt;
1676 int channels, full_channels;
1733 int ext_amode, xch_fsize;
1750 if ((ext_amode =
get_bits(&s->
gb, 4)) != 1) {
1752 " supported!\n", ext_amode);
1812 if (s->
amode < 16) {
1815 if (s->
xch_present && (!avctx->request_channels ||
1816 avctx->request_channels > num_core_channels + !!s->
lfe)) {
1825 channels = num_core_channels + !!s->
lfe;
1834 if (channels > !!s->
lfe &&
1872 full_channels - channels,
1882 for (ch = 0; ch < channels; ch++)
1884 for (; ch < full_channels; ch++)
1902 for (i = 0; i < 2 * s->
lfe * 4; i++)
1936 avctx->request_channels == 2) {
1937 avctx->
channels = avctx->request_channels;
int wrap
wrap for get_vlc2()
int ext_descr
extension audio descriptor flag
static const int8_t bitalloc_offsets[10]
int downmix
embedded downmix enabled
int quant_index_huffman[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]
quantization index codebook select
#define CODEC_FLAG_BITEXACT
int bitalloc_huffman[DCA_PRIM_CHANNELS_MAX]
bit allocation quantizer select
int crc_present
crc is present in the bitstream
This structure describes decoded (raw) audio or video data.
low bitrate component in ExSS
int timestamp
embedded time stamp flag
int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Get the required buffer size for the given audio parameters.
int amode
audio channels arrangement
static const AVProfile profiles[]
static const uint16_t tmode_codes[TMODE_COUNT][4]
int downmix_coef[DCA_PRIM_CHANNELS_MAX][2]
stereo downmix coefficients
int transient_huffman[DCA_PRIM_CHANNELS_MAX]
transient mode code book
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
int ff_dca_convert_bitstream(const uint8_t *src, int src_size, uint8_t *dst, int max_size)
Convert bitstream to one representation based on sync marker.
static const uint32_t scale_factor_quant6[64]
int mix_config_num_ch[4]
number of channels in each mix out configuration
static void skip_bits_long(GetBitContext *s, int n)
AVFrame * coded_frame
the picture in the bitstream
FmtConvertContext fmt_conv
static int dca_parse_frame_header(DCAContext *s)
static int dca_exss_parse_asset_header(DCAContext *s)
Parse extension substream asset header (HD)
static void dca_exss_skip_mix_coeffs(GetBitContext *gb, int channels, int out_ch)
Skip mixing coefficients of a single mix out configuration (HD)
int vq_start_subband[DCA_PRIM_CHANNELS_MAX]
high frequency vq start subband
XXCh channels extension in core substream.
void ff_dcadsp_init(DCADSPContext *s)
float subband_fir_noidea[DCA_PRIM_CHANNELS_MAX][32]
int hist_index[DCA_PRIM_CHANNELS_MAX]
int samples_deficit
deficit sample count
static const float lossless_quant_d[32]
int dynrange
embedded dynamic range flag
int joint_scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]
joint subband scale factors
int version
encoder software revision
static const int8_t dca_channel_reorder_lfe_xch[][9]
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
#define AV_CH_LAYOUT_STEREO
void(* lfe_fir)(float *out, const float *in, const float *coefs, int decifactor, float scale)
static BitAlloc dca_scalefactor
scalefactor VLCs
#define DCA_BUFFER_PADDING_SIZE
static int get_sbits(GetBitContext *s, int n)
float subband_fir_hist[DCA_PRIM_CHANNELS_MAX][512]
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
float * extra_channels[DCA_PRIM_CHANNELS_MAX+1]
#define DCA_HD_MARKER
DCA-HD specific block starts with this marker.
void(* vector_fmac_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float and add to destination vector.
static int dca_subframe_footer(DCAContext *s, int base_channel)
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
static BitAlloc dca_tmode
transition mode VLCs
int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, const uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Fill channel data pointers and linesize for samples with sample format sample_fmt.
#define MIX_FRONT3(samples, coef)
static int dca_exss_mask2count(int mask)
Return the number of channels in an ExSS speaker mask (HD)
static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
int scalefactor_huffman[DCA_PRIM_CHANNELS_MAX]
scale factor code book
static int dca_decode_block(DCAContext *s, int base_channel, int block_index)
Decode a dca frame block.
void(* int32_to_float_fmul_scalar)(float *dst, const int *src, float mul, int len)
Convert an array of int32_t to float and multiply by a float value.
static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
enum AVSampleFormat sample_fmt
audio sample format
static const uint16_t dca_vlc_offs[]
int xch_base_channel
index of first (only) channel containing XCH data
float subband_samples_hist[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][4]
int dca_buffer_size
how much data is in the dca_buffer
static const uint32_t scale_factor_quant7[128]
#define MIX_REAR2(samples, s1, s2, rs, coef)
static void get_array(GetBitContext *gb, int *dst, int len, int bits)
static av_cold int dca_decode_end(AVCodecContext *avctx)
#define AV_CH_LOW_FREQUENCY
int header_crc
header crc check bytes
int transition_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]
transition mode (transients)
static int get_bits_count(const GetBitContext *s)
int sample_rate
audio sampling rate
bitstream reader API header.
XCh channel extension in core substream.
static BitAlloc dca_bitalloc_index
indexes for samples VLC select
int lfe
low frequency effects flag
static const float fir_32bands_nonperfect[]
#define LOCAL_ALIGNED_16(t, v,...)
static BitAlloc dca_smpl_bitalloc[11]
samples VLCs
XXCh channels extension in ExSS.
static const uint8_t bitalloc_sizes[10]
static int init(AVCodecParserContext *s)
int predictor_history
predictor history flag
int dynrange_coef
dynamic range coefficient
int joint_huff[DCA_PRIM_CHANNELS_MAX]
joint subband scale factors codebook
static int get_bits_left(GetBitContext *gb)
int scale_factor[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][2]
scale factors (2 if transient)
#define FF_PROFILE_DTS_HD_HRA
float subband_samples[DCA_BLOCKS_MAX][DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS][8]
void av_log_ask_for_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message asking for a sample.
static const uint16_t mask[17]
#define MIX_REAR1(samples, s1, rs, coef)
#define DCA_PRIM_CHANNELS_MAX
static const uint16_t bitalloc_12_codes[BITALLOC_12_COUNT][12]
int hdcd
source material is mastered in HDCD
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int mix_metadata
mixing metadata present
void av_log(void *avcl, int level, const char *fmt,...)
static const uint8_t bitalloc_12_bits[BITALLOC_12_COUNT][12]
const char * name
Name of the codec implementation.
int bitalloc[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]
bit allocation index
static int dca_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Main frame decoding function FIXME add arguments.
int debug_flag
used for suppressing repeated error messages output
uint64_t channel_layout
Audio channel layout.
static const int8_t dca_lfe_index[]
const int8_t * channel_order_tab
channel reordering table, lfe and non lfe
float lfe_data[2 *DCA_LFE_MAX *(DCA_BLOCKS_MAX+4)]
Low frequency effect data.
static const uint8_t tmode_bits[TMODE_COUNT][4]
static void qmf_32_subbands(DCAContext *s, int chans, float samples_in[32][8], float *samples_out, float scale)
int front_sum
front sum/difference flag
static const float dca_downmix_coeffs[65]
int source_pcm_res
source pcm resolution
int bit_rate
the average bitrate
audio channel layout utility functions
static const int8_t dca_channel_reorder_lfe[][9]
static const int8_t dca_channel_reorder_nolfe[][9]
int surround_sum
surround sum/difference flag
static av_cold void dca_init_vlcs(void)
av_cold void ff_synth_filter_init(SynthFilterContext *c)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame)
Get a buffer for a frame.
uint8_t dca_buffer[DCA_MAX_FRAME_SIZE+DCA_MAX_EXSS_HEADER_SIZE+DCA_BUFFER_PADDING_SIZE]
static const uint8_t scales_bits[SCALES_COUNT][129]
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
int joint_intensity[DCA_PRIM_CHANNELS_MAX]
joint intensity coding index
static const int16_t adpcm_vb[4096][4]
static const uint16_t *const bitalloc_codes[10][8]
int multirate_inter
multirate interpolator switch
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static const uint8_t dca_channels[16]
#define AV_CH_FRONT_LEFT_OF_CENTER
lossless extension in ExSS
#define AV_CH_FRONT_CENTER
const uint32_t avpriv_dca_sample_rates[16]
int bit_rate
transmission bit rate
static const uint8_t *const bitalloc_bits[10][8]
#define INIT_VLC_USE_NEW_STATIC
int offset
code values offset
static const uint8_t abits_levels[7]
#define AV_CH_FRONT_RIGHT_OF_CENTER
static const float lfe_fir_64[]
int xch_present
XCh extension present and valid.
int high_freq_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]
VQ encoded high frequency subbands.
int core_ext_mask
present extensions in the core substream
#define FF_PROFILE_DTS_96_24
#define DCA_MAX_FRAME_SIZE
int aux_data
auxiliary data flag
int sample_rate
samples per second
int ext_coding
extended coding flag
int subband_activity[DCA_PRIM_CHANNELS_MAX]
subband activity count
main external API structure.
static void close(AVCodecParserContext *s)
float scalefactor_adj[DCA_PRIM_CHANNELS_MAX][DCA_ABITS_MAX]
scale factor adjustment
int copy_history
copy history
static void dca_exss_parse_header(DCAContext *s)
Parse extension substream header (HD)
static void int8x8_fmul_int32(float *dst, const int8_t *src, int scale)
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
static unsigned int get_bits1(GetBitContext *s)
core in ExSS (extension substream)
void avcodec_get_frame_defaults(AVFrame *frame)
Set the fields of the given AVFrame to default values.
static void skip_bits(GetBitContext *s, int n)
#define FF_ARRAY_ELEMS(a)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static const uint64_t dca_core_channel_layout[]
static void dca_downmix(float **samples, int srcfmt, int downmix_coef[DCA_PRIM_CHANNELS_MAX][2], const int8_t *channel_mapping)
static int decode_blockcodes(int code1, int code2, int levels, int *values)
static const float lossy_quant_d[32]
extended bitrate extension in ExSS
#define FF_PROFILE_DTS_HD_MA
static int decode_blockcode(int code, int levels, int *values)
int sample_blocks
number of PCM sample blocks
static const uint8_t abits_sizes[7]
static const int8_t dca_channel_reorder_nolfe_xch[][9]
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static const uint16_t scale[4]
#define AV_CH_BACK_CENTER
#define DECLARE_ALIGNED(n, t, v)
int prediction_mode[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]
prediction mode (ADPCM used or not)
static av_cold int dca_decode_init(AVCodecContext *avctx)
DCA initialization.
static const float fir_32bands_perfect[]
int num_mix_configs
number of mix out configurations
void(* synth_filter_float)(FFTContext *imdct, float *synth_buf_ptr, int *synth_buf_offset, float synth_buf2[32], const float window[512], float out[32], const float in[32], float scale)
static const uint8_t dca_default_coeffs[10][5][2]
96/24 extension in core substream
common internal api header.
common internal and external API header
static void lfe_interpolation_fir(DCAContext *s, int decimation_select, int num_deci_sample, float *samples_in, float *samples_out, float scale)
uint8_t * extra_channels_buffer
int total_channels
number of channels including extensions
#define AVERROR_INVALIDDATA
static const uint16_t scales_codes[SCALES_COUNT][129]
static int dca_filter_channels(DCAContext *s, int block_index)
int prediction_vq[DCA_PRIM_CHANNELS_MAX][DCA_SUBBANDS]
prediction VQ coefs
int dialog_norm
dialog normalisation parameter
AVSampleFormat
Audio Sample Formats.
#define FF_PROFILE_DTS_ES
#define AVERROR_PATCHWELCOME
int bit_rate_index
transmission bit rate index
static const uint8_t bitalloc_maxbits[10][7]
av_cold void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx)
#define CODEC_CAP_CHANNEL_CONF
int channels
number of audio channels
static const uint32_t dca_bit_rates[32]
VLC_TYPE(* table)[2]
code, bits
float * samples_chanptr[DCA_PRIM_CHANNELS_MAX+1]
static const int8_t high_freq_vq[1024][32]
int subsubframes[DCA_SUBFRAMES_MAX]
number of subsubframes
#define DCA_MAX_EXSS_HEADER_SIZE
static const float lfe_fir_128[]
static const int dca_ext_audio_descr_mask[]
#define DOWNMIX_TO_STEREO(op1, op2)
int frame_size
primary frame byte size
#define DCA_SUBFRAMES_MAX
int aspf
audio sync word insertion flag
int prim_channels
number of primary audio channels
void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
Initialize a float DSP context.
static const uint8_t bitalloc_12_vlc_bits[BITALLOC_12_COUNT]
static int get_scale(GetBitContext *gb, int level, int value, int log2range)
uint8_t ** extended_data
pointers to the data planes/channels.
int partial_samples[DCA_SUBFRAMES_MAX]
partial subsubframe samples count
This structure stores compressed data.
int subframes
number of subframes
static int dca_parse_audio_coding_header(DCAContext *s, int base_channel)
int nb_samples
number of audio samples (per channel) described by this frame
unsigned int extra_channels_buffer_size
static const uint8_t tmode_vlc_bits[TMODE_COUNT]
static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba, int idx)
int static_fields
static fields present
int frame_type
type of the current frame
static const uint8_t dca_bits_per_sample[7]
#define FF_PROFILE_UNKNOWN
if(!(ptr_align%ac->ptr_align)&&samples_align >=aligned_len)