34 return (v >> 1) ^ -(v & 1);
46 return (v >> 1) ^ -(v & 1);
83 int i, j, *coeff_ptr =
c->dmix_coeff;
85 for (
i = 0;
i < m;
i++) {
90 if (!
c->primary_chset) {
92 sign = (
code >> 8) - 1;
100 c->dmix_scale[
i] = (
scale ^ sign) - sign;
101 c->dmix_scale_inv[
i] = (scale_inv ^ sign) - sign;
105 for (j = 0; j <
c->nchannels; j++) {
107 sign = (
code >> 8) - 1;
114 if (!
c->primary_chset)
117 *coeff_ptr++ = (
coeff ^ sign) - sign;
147 c->residual_encode =
get_bits(&
s->gb,
c->nchannels);
154 if (
c->storage_bit_res != 16 &&
c->storage_bit_res != 20 &&
c->storage_bit_res != 24) {
159 if (
c->pcm_bit_res >
c->storage_bit_res) {
160 av_log(
s->avctx,
AV_LOG_ERROR,
"Invalid PCM bit resolution for XLL channel set (%d > %d)\n",
c->pcm_bit_res,
c->storage_bit_res);
166 if (
c->freq > 192000) {
186 if (
c->primary_chset != (
c == p)) {
195 c->dmix_embedded =
c->dmix_coeffs_present &&
get_bits1(&
s->gb);
198 if (
c->dmix_coeffs_present &&
c->primary_chset) {
208 if (!
c->hier_chset &&
s->nchsets != 1) {
231 for (
i = 0, j = 0;
i <
s->ch_mask_nbits;
i++)
232 if (
c->ch_mask & (1U <<
i))
233 c->ch_remap[j++] =
i;
236 if (
c->nchannels != 2 ||
s->nchsets != 1 ||
get_bits1(&
s->gb)) {
242 c->primary_chset = 1;
243 c->dmix_coeffs_present = 0;
244 c->dmix_embedded = 0;
251 if (
c->freq > 96000) {
264 c->freq >>=
c->nfreqbands - 1;
267 if (
c != p && (
c->nfreqbands != p->nfreqbands ||
c->freq != p->freq
268 ||
c->pcm_bit_res != p->pcm_bit_res
269 ||
c->storage_bit_res != p->storage_bit_res)) {
275 if (
c->storage_bit_res > 16)
277 else if (
c->storage_bit_res > 8)
283 if ((
s->nchsets > 1 ||
c->nfreqbands > 1) &&
c->nabits < 5)
286 for (band = 0,
b =
c->bands; band < c->nfreqbands; band++,
b++) {
288 if ((
b->decor_enabled =
get_bits1(&
s->gb)) &&
c->nchannels > 1) {
292 for (
i = 0;
i <
c->nchannels;
i++) {
294 if (
b->orig_order[
i] >=
c->nchannels) {
301 for (
i = 0;
i <
c->nchannels / 2;
i++)
304 for (
i = 0;
i <
c->nchannels;
i++)
305 b->orig_order[
i] =
i;
306 for (
i = 0;
i <
c->nchannels / 2;
i++)
307 b->decor_coeff[
i] = 0;
311 b->highest_pred_order = 0;
312 for (
i = 0;
i <
c->nchannels;
i++) {
314 if (
b->adapt_pred_order[
i] >
b->highest_pred_order)
315 b->highest_pred_order =
b->adapt_pred_order[
i];
317 if (
b->highest_pred_order >
s->nsegsamples) {
323 for (
i = 0;
i <
c->nchannels;
i++)
324 b->fixed_pred_order[
i] =
b->adapt_pred_order[
i] ? 0 :
get_bits(&
s->gb, 2);
327 for (
i = 0;
i <
c->nchannels;
i++) {
328 for (j = 0; j <
b->adapt_pred_order[
i]; j++) {
342 b->dmix_embedded =
c->dmix_embedded && (band == 0 ||
get_bits1(&
s->gb));
345 if ((band == 0 &&
s->scalable_lsbs) || (band != 0 &&
get_bits1(&
s->gb))) {
348 if (
b->lsb_section_size < 0 ||
b->lsb_section_size >
s->frame_size) {
354 if (
b->lsb_section_size && (
s->band_crc_present > 2 ||
355 (band == 0 &&
s->band_crc_present > 1)))
356 b->lsb_section_size += 2;
359 for (
i = 0;
i <
c->nchannels;
i++) {
361 if (
b->nscalablelsbs[
i] && !
b->lsb_section_size) {
367 b->lsb_section_size = 0;
368 for (
i = 0;
i <
c->nchannels;
i++)
369 b->nscalablelsbs[
i] = 0;
373 if ((band == 0 &&
s->scalable_lsbs) || (band != 0 &&
get_bits1(&
s->gb))) {
375 for (
i = 0;
i <
c->nchannels;
i++)
378 for (
i = 0;
i <
c->nchannels;
i++)
379 b->bit_width_adjust[
i] = 0;
397 int nchsamples =
s->nframesamples + ndecisamples;
398 int i, j, nsamples = nchsamples *
c->nchannels *
c->nfreqbands;
403 if (!
c->sample_buffer[0])
406 ptr =
c->sample_buffer[0] + ndecisamples;
407 for (
i = 0;
i <
c->nfreqbands;
i++) {
408 for (j = 0; j <
c->nchannels; j++) {
409 c->bands[
i].msb_sample_buffer[j] = ptr;
419 int i, j, nsamples = 0;
423 for (
i = 0;
i <
c->nfreqbands;
i++)
424 if (
c->bands[
i].lsb_section_size)
425 nsamples +=
s->nframesamples *
c->nchannels;
431 if (!
c->sample_buffer[1])
434 ptr =
c->sample_buffer[1];
435 for (
i = 0;
i <
c->nfreqbands;
i++) {
436 if (
c->bands[
i].lsb_section_size) {
437 for (j = 0; j <
c->nchannels; j++) {
438 c->bands[
i].lsb_sample_buffer[j] = ptr;
439 ptr +=
s->nframesamples;
442 for (j = 0; j <
c->nchannels; j++)
443 c->bands[
i].lsb_sample_buffer[j] =
NULL;
463 k =
c->seg_common ? 1 :
c->nchannels;
466 for (
i = 0;
i < k;
i++) {
472 if (!
c->seg_common &&
c->rice_code_flag[
i] &&
get_bits1(&
s->gb))
474 c->bitalloc_hybrid_linear[
i] =
get_bits(&
s->gb,
c->nabits) + 1;
477 c->bitalloc_hybrid_linear[
i] = 0;
481 for (
i = 0;
i < k;
i++) {
487 if (!
c->rice_code_flag[
i] &&
c->bitalloc_part_a[
i])
488 c->bitalloc_part_a[
i]++;
491 c->nsamples_part_a[
i] =
b->adapt_pred_order[
i];
493 c->nsamples_part_a[
i] =
b->highest_pred_order;
495 c->bitalloc_part_a[
i] = 0;
496 c->nsamples_part_a[
i] = 0;
503 if (!
c->rice_code_flag[
i] &&
c->bitalloc_part_b[
i])
504 c->bitalloc_part_b[
i]++;
509 for (
i = 0;
i <
c->nchannels;
i++) {
514 k =
c->seg_common ? 0 :
i;
517 part_a =
b->msb_sample_buffer[
i] + seg *
s->nsegsamples;
518 part_b = part_a +
c->nsamples_part_a[k];
519 nsamples_part_b =
s->nsegsamples -
c->nsamples_part_a[k];
524 if (!
c->rice_code_flag[k]) {
528 c->bitalloc_part_a[k]);
532 c->bitalloc_part_b[k]);
537 c->bitalloc_part_a[k]);
541 if (
c->bitalloc_hybrid_linear[k]) {
544 int nisosamples =
get_bits(&
s->gb,
s->nsegsamples_log2);
547 memset(part_b, 0,
sizeof(*part_b) * nsamples_part_b);
550 for (j = 0; j < nisosamples; j++) {
551 int loc =
get_bits(&
s->gb,
s->nsegsamples_log2);
552 if (loc >= nsamples_part_b) {
560 for (j = 0; j < nsamples_part_b; j++) {
562 part_b[j] =
get_linear(&
s->gb,
c->bitalloc_hybrid_linear[k]);
564 part_b[j] =
get_rice(&
s->gb,
c->bitalloc_part_b[k]);
569 ret =
get_rice_array(&
s->gb, part_b, nsamples_part_b,
c->bitalloc_part_b[k]);
577 if (seg == 0 && band == 1) {
579 for (
i = 0;
i <
c->nchannels;
i++)
585 if (
b->lsb_section_size) {
593 for (
i = 0;
i <
c->nchannels;
i++) {
594 if (
b->nscalablelsbs[
i]) {
596 b->lsb_sample_buffer[
i] + seg *
s->nsegsamples,
597 s->nsegsamples,
b->nscalablelsbs[
i]);
618 nsamples =
s->nframesamples;
621 nsamples =
s->nsegsamples;
624 for (
i = 0;
i <
c->nchannels;
i++) {
625 memset(
b->msb_sample_buffer[
i] +
offset, 0, nsamples *
sizeof(
int32_t));
626 if (
b->lsb_section_size)
627 memset(
b->lsb_sample_buffer[
i] +
offset, 0, nsamples *
sizeof(
int32_t));
630 if (seg <= 0 && band)
631 memset(
c->deci_history, 0,
sizeof(
c->deci_history));
634 memset(
b->nscalablelsbs, 0,
sizeof(
b->nscalablelsbs));
635 memset(
b->bit_width_adjust, 0,
sizeof(
b->bit_width_adjust));
642 int nsamples =
s->nframesamples;
646 for (
i = 0;
i <
c->nchannels;
i++) {
648 int order =
b->adapt_pred_order[
i];
652 for (j = 0; j < order; j++) {
653 int rc =
b->adapt_refl_coeff[
i][j];
654 for (k = 0; k < (j + 1) / 2; k++) {
655 int tmp1 =
coeff[ k ];
656 int tmp2 =
coeff[j - k - 1];
663 for (j = 0; j < nsamples - order; j++) {
665 for (k = 0; k < order; k++)
671 for (j = 0; j <
b->fixed_pred_order[
i]; j++)
672 for (k = 1; k < nsamples; k++)
673 buf[k] += (
unsigned)buf[k - 1];
678 if (
b->decor_enabled) {
681 for (
i = 0;
i <
c->nchannels / 2;
i++) {
684 s->dcadsp->decor(
b->msb_sample_buffer[
i * 2 + 1],
685 b->msb_sample_buffer[
i * 2 ],
691 for (
i = 0;
i <
c->nchannels;
i++)
692 tmp[
i] =
b->msb_sample_buffer[
i];
694 for (
i = 0;
i <
c->nchannels;
i++)
695 b->msb_sample_buffer[
b->orig_order[
i]] =
tmp[
i];
699 if (
c->nfreqbands == 1)
700 for (
i = 0;
i <
c->nchannels;
i++)
701 s->output_samples[
c->ch_remap[
i]] =
b->msb_sample_buffer[
i];
706 int adj =
c->bands[band].bit_width_adjust[ch];
707 int shift =
c->bands[band].nscalablelsbs[ch];
709 if (
s->fixed_lsb_width)
710 shift =
s->fixed_lsb_width;
711 else if (
shift && adj)
722 int n, ch, nsamples =
s->nframesamples;
724 for (ch = 0; ch <
c->nchannels; ch++) {
727 int32_t *msb =
b->msb_sample_buffer[ch];
728 if (
b->nscalablelsbs[ch]) {
729 int32_t *lsb =
b->lsb_sample_buffer[ch];
730 int adj =
b->bit_width_adjust[ch];
731 for (n = 0; n < nsamples; n++)
732 msb[n] = msb[n] * (
SUINT)(1 <<
shift) + (lsb[n] << adj);
734 for (n = 0; n < nsamples; n++)
743 int ch, nsamples =
s->nframesamples;
750 2 * nsamples *
c->nchannels *
sizeof(
int32_t));
751 if (!
c->sample_buffer[2])
755 ptr =
c->sample_buffer[2];
756 for (ch = 0; ch <
c->nchannels; ch++) {
757 int32_t *band0 =
c->bands[0].msb_sample_buffer[ch];
758 int32_t *band1 =
c->bands[1].msb_sample_buffer[ch];
762 c->deci_history[ch],
sizeof(
c->deci_history[0]));
765 s->dcadsp->assemble_freq_bands(ptr, band0, band1,
770 s->output_samples[
c->ch_remap[ch]] = ptr;
779 int stream_ver, header_size, frame_size_nbits, nframesegs_log2;
789 if (stream_ver > 1) {
804 frame_size_nbits =
get_bits(&
s->gb, 5) + 1;
823 s->nframesegs = 1 << nframesegs_log2;
824 if (
s->nframesegs > 1024) {
833 if (!
s->nsegsamples_log2) {
837 s->nsegsamples = 1 <<
s->nsegsamples_log2;
838 if (
s->nsegsamples > 512) {
844 s->nframesamples_log2 =
s->nsegsamples_log2 + nframesegs_log2;
845 s->nframesamples = 1 <<
s->nframesamples_log2;
846 if (
s->nframesamples > 65536) {
868 if (
s->scalable_lsbs)
871 s->fixed_lsb_width = 0;
886 return !
c->primary_chset &&
c->dmix_embedded &&
c->hier_chset;
901 int i, j, *coeff_ptr =
c->dmix_coeff;
903 for (
i = 0;
i <
c->hier_ofs;
i++) {
907 c->dmix_scale_inv[
i] =
mul16(
c->dmix_scale_inv[
i], scale_inv);
908 for (j = 0; j <
c->nchannels; j++) {
926 c->hier_ofs =
s->nchannels;
929 if (
c->nfreqbands >
s->nfreqbands)
930 s->nfreqbands =
c->nfreqbands;
932 s->nchannels +=
c->nchannels;
933 if (
c->residual_encode != (1 <<
c->nchannels) - 1)
938 for (
i =
s->nchsets - 1,
c = &
s->chset[
i];
i > 0;
i--,
c--) {
949 s->nactivechsets = 1;
953 s->nactivechsets = (
s->chset[0].nchannels < 5 &&
s->nchsets > 1) ? 2 : 1;
956 s->nactivechsets =
s->nchsets;
965 int chs, seg, band, navi_nb, navi_pos, *navi_ptr;
969 navi_nb =
s->nfreqbands *
s->nframesegs *
s->nchsets;
970 if (navi_nb > 1024) {
983 for (band = 0; band <
s->nfreqbands; band++) {
984 for (seg = 0; seg <
s->nframesegs; seg++) {
985 for (chs = 0,
c =
s->chset; chs < s->nchsets; chs++,
c++) {
987 if (
c->nfreqbands > band) {
1016 int ret, chs, seg, band, navi_pos, *navi_ptr;
1019 for (chs = 0,
c =
s->chset; chs < s->nactivechsets; chs++,
c++) {
1028 for (band = 0; band <
s->nfreqbands; band++) {
1029 for (seg = 0; seg <
s->nframesegs; seg++) {
1030 for (chs = 0,
c =
s->chset; chs < s->nchsets; chs++,
c++) {
1031 if (
c->nfreqbands > band) {
1032 navi_pos += *navi_ptr * 8;
1033 if (navi_pos >
s->gb.size_in_bits) {
1037 if (chs < s->nactivechsets &&
1069 unsigned int extradata_syncword;
1077 s->x_syncword_present = 1;
1079 s->x_imax_syncword_present = 1;
1106 s->pbr_length =
size;
1107 s->pbr_delay = delay;
1138 if (
s->frame_size >
size)
1142 if (
s->frame_size <
size)
1158 memcpy(
s->pbr_buffer +
s->pbr_length,
data,
size);
1159 s->pbr_length +=
size;
1163 if (
s->pbr_delay > 0 && --
s->pbr_delay)
1166 if ((ret =
parse_frame(
s,
s->pbr_buffer,
s->pbr_length, asset)) < 0)
1169 if (
s->frame_size >
s->pbr_length) {
1174 if (
s->frame_size ==
s->pbr_length) {
1178 s->pbr_length -=
s->frame_size;
1179 memmove(
s->pbr_buffer,
s->pbr_buffer +
s->frame_size,
s->pbr_length);
1210 int i, j, k, nchannels = 0, *coeff_ptr = o->
dmix_coeff;
1213 for (
i = 0,
c =
s->chset;
i < s->nactivechsets;
i++,
c++) {
1218 for (j = 0; j <
c->nchannels; j++) {
1220 int coeff = *coeff_ptr++;
1222 s->dcadsp->dmix_sub(
c->bands[band].msb_sample_buffer[j],
1224 coeff,
s->nframesamples);
1226 s->dcadsp->dmix_sub(
c->deci_history[j],
1233 nchannels +=
c->nchannels;
1241 int i, j, nchannels = 0;
1244 for (
i = 0,
c =
s->chset;
i < s->nactivechsets;
i++,
c++) {
1249 for (j = 0; j <
c->nchannels; j++) {
1251 if (
scale != (1 << 15)) {
1252 s->dcadsp->dmix_scale(
c->bands[band].msb_sample_buffer[j],
1253 scale,
s->nframesamples);
1255 s->dcadsp->dmix_scale(
c->deci_history[j],
1272 for (band = 0; band <
c->nfreqbands; band++)
1275 for (ch = 0; ch <
c->nchannels; ch++) {
1276 if (!(
c->residual_encode & (1 << ch)))
1280 c->residual_encode &= ~(1 << ch);
1287 int ch, nsamples =
s->nframesamples;
1312 for (ch = 0; ch <
c->nchannels; ch++) {
1316 if (
c->residual_encode & (1 << ch))
1322 av_log(
s->avctx,
AV_LOG_WARNING,
"Residual encoded channel (%d) references unavailable core channel\n",
c->ch_remap[ch]);
1336 dst =
c->bands[0].msb_sample_buffer[ch];
1340 for (n = 0; n < nsamples; n++)
1344 for (n = 0; n < nsamples; n++)
1359 int i, j, k, ret,
shift, nsamples, request_mask;
1368 if (!
c->primary_chset)
1369 c->dmix_embedded = 0;
1372 s->scalable_lsbs = 0;
1373 s->fixed_lsb_width = 0;
1378 for (
i = 0,
c =
s->chset;
i < s->nactivechsets;
i++,
c++) {
1381 if (
c->residual_encode != (1 <<
c->nchannels) - 1
1385 if (
s->scalable_lsbs)
1388 if (
c->nfreqbands > 1) {
1393 s->output_mask |=
c->ch_mask;
1397 for (
i = 1,
c = &
s->chset[1];
i < s->nchsets;
i++,
c++) {
1401 if (
i >=
s->nactivechsets) {
1402 for (j = 0; j <
c->nfreqbands; j++)
1403 if (
c->bands[j].dmix_embedded)
1408 for (j = 0; j <
c->nfreqbands; j++)
1409 if (
c->bands[j].dmix_embedded)
1414 if (
s->nfreqbands > 1) {
1415 for (
i = 0;
i <
s->nactivechsets;
i++)
1439 request_mask =
s->output_mask;
1445 switch (p->storage_bit_res) {
1448 shift = 16 - p->pcm_bit_res;
1453 shift = 24 - p->pcm_bit_res;
1459 if (
s->x_imax_syncword_present) {
1461 }
else if (
s->x_syncword_present) {
1470 frame->nb_samples = nsamples =
s->nframesamples << (
s->nfreqbands - 1);
1475 if (request_mask !=
s->output_mask) {
1477 p->dmix_coeff, nsamples,
1482 int32_t *samples =
s->output_samples[ch_remap[
i]];
1484 int16_t *plane = (int16_t *)
frame->extended_data[
i];
1485 for (k = 0; k < nsamples; k++)
1489 for (k = 0; k < nsamples; k++)
1532 c->sample_size[j] = 0;
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Libavcodec external API header.
#define i(width, name, range_min, range_max)
Public libavutil channel layout APIs header.
const uint32_t ff_dca_sampling_freqs[16]
#define DCA_SPEAKER_LAYOUT_5POINT0
#define DCA_SPEAKER_LAYOUT_STEREO
#define DCA_HAS_STEREO(mask)
#define DCA_SPEAKER_LAYOUT_5POINT1
static int ff_dca_core_map_spkr(DCACoreDecoder *core, int spkr)
#define DCA_SYNCWORD_XLL_X_IMAX
#define DCA_SYNCWORD_XLL_X
static int combine_residual_frame(DCAXllDecoder *s, DCAXllChSet *c)
static int get_rice(GetBitContext *gb, int k)
static int parse_navi_table(DCAXllDecoder *s)
int ff_dca_xll_filter_frame(DCAXllDecoder *s, AVFrame *frame)
static int parse_sub_headers(DCAXllDecoder *s, DCAExssAsset *asset)
static void prescale_down_mix(DCAXllChSet *c, DCAXllChSet *o)
static int get_rice_array(GetBitContext *gb, int32_t *array, int size, int k)
int ff_dca_xll_parse(DCAXllDecoder *s, const uint8_t *data, DCAExssAsset *asset)
static void chs_filter_band_data(DCAXllDecoder *s, DCAXllChSet *c, int band)
static int chs_assemble_freq_bands(DCAXllDecoder *s, DCAXllChSet *c)
static DCAXllChSet * find_next_hier_dmix_chset(DCAXllDecoder *s, DCAXllChSet *c)
static int parse_frame_no_pbr(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
static int parse_frame_pbr(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
static int parse_dmix_coeffs(DCAXllDecoder *s, DCAXllChSet *c)
static int chs_parse_header(DCAXllDecoder *s, DCAXllChSet *c, DCAExssAsset *asset)
static void clear_pbr(DCAXllDecoder *s)
static int chs_alloc_msb_band_data(DCAXllDecoder *s, DCAXllChSet *c)
static int get_linear(GetBitContext *gb, int n)
static int get_rice_un(GetBitContext *gb, int k)
av_cold void ff_dca_xll_flush(DCAXllDecoder *s)
static int copy_to_pbr(DCAXllDecoder *s, const uint8_t *data, int size, int delay)
static void get_linear_array(GetBitContext *gb, int32_t *array, int size, int n)
static av_cold void chs_clear_band_data(DCAXllDecoder *s, DCAXllChSet *c, int band, int seg)
static int chs_get_lsb_width(DCAXllDecoder *s, DCAXllChSet *c, int band, int ch)
static void scale_down_mix(DCAXllDecoder *s, DCAXllChSet *o, int band)
static void get_array(GetBitContext *gb, int32_t *array, int size, int n)
static void undo_down_mix(DCAXllDecoder *s, DCAXllChSet *o, int band)
static int parse_common_header(DCAXllDecoder *s)
static av_cold void force_lossy_output(DCAXllDecoder *s, DCAXllChSet *c)
static void chs_assemble_msbs_lsbs(DCAXllDecoder *s, DCAXllChSet *c, int band)
static int parse_frame(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
static int is_hier_dmix_chset(DCAXllChSet *c)
static int chs_alloc_lsb_band_data(DCAXllDecoder *s, DCAXllChSet *c)
static int parse_band_data(DCAXllDecoder *s)
av_cold void ff_dca_xll_close(DCAXllDecoder *s)
static int chs_parse_band_data(DCAXllDecoder *s, DCAXllChSet *c, int band, int seg, int band_data_end)
#define DCA_XLL_CHANNELS_MAX
#define DCA_XLL_DECI_HISTORY_MAX
#define DCA_XLL_CHSETS_MAX
#define DCA_XLL_SAMPLE_BUFFERS_MAX
#define DCA_XLL_PBR_BUFFER_MAX
#define DCA_XLL_ADAPT_PRED_ORDER_MAX
const uint16_t ff_dca_dmixtable[FF_DCA_DMIXTABLE_SIZE]
const uint16_t ff_dca_xll_refl_coeff[128]
const int32_t ff_dca_xll_band_coeff[20]
const uint8_t ff_dca_dmix_primary_nch[8]
const uint32_t ff_dca_inv_dmixtable[FF_DCA_INV_DMIXTABLE_SIZE]
#define FF_DCA_INV_DMIXTABLE_SIZE
#define FF_DCA_DMIXTABLE_SIZE
#define FF_DCA_DMIXTABLE_OFFSET
int ff_dca_export_downmix_matrix(AVCodecContext *avctx, AVFrame *frame, enum DCADownMixType downmix_type, int output_mask, const int *coeff_l)
int ff_dca_set_channel_layout(AVCodecContext *avctx, int *ch_remap, int dca_mask)
void ff_dca_downmix_to_stereo_fixed(DCADSPContext *dcadsp, int32_t **samples, int *coeff_l, int nsamples, int ch_mask)
#define DCA_PACKET_RECOVERY
Sync error recovery flag.
static int ff_dca_check_crc(AVCodecContext *avctx, GetBitContext *s, int p1, int p2)
static int ff_dca_seek_bits(GetBitContext *s, int p)
static int32_t mul16(int32_t a, int32_t b)
static int32_t norm16(int64_t a)
static int32_t clip23(int32_t a)
static int32_t mul15(int32_t a, int32_t b)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
#define AV_PROFILE_DTS_HD_MA
#define AV_EF_EXPLODE
abort decoding on minor error detection
#define AV_PROFILE_DTS_HD_MA_X
#define AV_PROFILE_DTS_HD_MA_X_IMAX
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static int get_bits_left(GetBitContext *gb)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static int get_bits_count(const GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
@ AV_MATRIX_ENCODING_NONE
@ AV_MATRIX_ENCODING_DOLBY
@ AV_MATRIX_ENCODING_DOLBYHEADPHONE
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
@ AV_SAMPLE_FMT_S32P
signed 32 bits, planar
static void scale(int *out, const int *in, const int w, const int h, const int shift)
static int shift(int a, int b)
static av_always_inline av_const double round(double x)
Memory handling functions.
int nb_channels
Number of channels in this layout.
main external API structure.
AVChannelLayout ch_layout
Audio channel layout.
enum AVSampleFormat sample_fmt
audio sample format
int64_t bit_rate
the average bitrate
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
int sample_rate
samples per second
This structure describes decoded (raw) audio or video data.
DCACoreDecoder core
Core decoder context.
DCAExssParser exss
EXSS parser context.
int request_channel_layout
Converted from avctx.request_channel_layout.
int npcmsamples
Number of PCM samples per channel.
int output_rate
Output sample rate (1x or 2x header rate)
int32_t * output_samples[DCA_SPEAKER_COUNT]
PCM output for fixed point mode.
int xll_offset
Offset to XLL data from start of substream.
int hd_stream_id
DTS-HD stream ID.
int xll_sync_present
XLL sync word present flag.
int xll_size
Size of XLL data in extension substream.
int xll_delay_nframes
Initial XLL decoding delay in frames.
int representation_type
Representation type.
int xll_sync_offset
Number of bytes offset to XLL sync.
int one_to_one_map_ch_to_spkr
One to one channel to speaker mapping flag.
DCAExssAsset assets[1]
Audio asset descriptors.
int32_t * msb_sample_buffer[DCA_XLL_CHANNELS_MAX]
MSB sample buffer pointers.
int32_t deci_history[DCA_XLL_CHANNELS_MAX][DCA_XLL_DECI_HISTORY_MAX]
Decimator history for frequency band 1.
int nchannels
Number of channels in the channel set (N)
DCAXllBand bands[DCA_XLL_BANDS_MAX]
Frequency bands.
int dmix_scale[DCA_XLL_DMIX_SCALES_MAX]
Downmixing scales.
int dmix_coeff[DCA_XLL_DMIX_COEFFS_MAX]
Downmixing coefficients.
int dmix_scale_inv[DCA_XLL_DMIX_SCALES_MAX]
Inverse downmixing scales.
int hier_ofs
Number of preceding channels in a hierarchy (M)
#define avpriv_request_sample(...)
static int array[MAX_W *MAX_W]
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
static const double coeff[2][5]