Go to the documentation of this file.
33 return (v >> 1) ^ -(v & 1);
45 return (v >> 1) ^ -(v & 1);
78 int i, j, *coeff_ptr =
c->dmix_coeff;
80 for (
i = 0;
i < m;
i++) {
85 if (!
c->primary_chset) {
87 sign = (
code >> 8) - 1;
95 c->dmix_scale[
i] = (
scale ^ sign) - sign;
96 c->dmix_scale_inv[
i] = (scale_inv ^ sign) - sign;
100 for (j = 0; j <
c->nchannels; j++) {
102 sign = (
code >> 8) - 1;
109 if (!
c->primary_chset)
112 *coeff_ptr++ = (
coeff ^ sign) - sign;
142 c->residual_encode =
get_bits(&
s->gb,
c->nchannels);
149 if (
c->storage_bit_res != 16 &&
c->storage_bit_res != 20 &&
c->storage_bit_res != 24) {
154 if (
c->pcm_bit_res >
c->storage_bit_res) {
155 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);
161 if (
c->freq > 192000) {
181 if (
c->primary_chset != (
c == p)) {
190 c->dmix_embedded =
c->dmix_coeffs_present &&
get_bits1(&
s->gb);
193 if (
c->dmix_coeffs_present &&
c->primary_chset) {
203 if (!
c->hier_chset &&
s->nchsets != 1) {
226 for (
i = 0, j = 0;
i <
s->ch_mask_nbits;
i++)
227 if (
c->ch_mask & (1
U <<
i))
228 c->ch_remap[j++] =
i;
231 if (
c->nchannels != 2 ||
s->nchsets != 1 ||
get_bits1(&
s->gb)) {
237 c->primary_chset = 1;
238 c->dmix_coeffs_present = 0;
239 c->dmix_embedded = 0;
246 if (
c->freq > 96000) {
259 c->freq >>=
c->nfreqbands - 1;
270 if (
c->storage_bit_res > 16)
272 else if (
c->storage_bit_res > 8)
278 if ((
s->nchsets > 1 ||
c->nfreqbands > 1) &&
c->nabits < 5)
281 for (band = 0,
b =
c->bands; band < c->nfreqbands; band++,
b++) {
283 if ((
b->decor_enabled =
get_bits1(&
s->gb)) &&
c->nchannels > 1) {
287 for (
i = 0;
i <
c->nchannels;
i++) {
289 if (
b->orig_order[
i] >=
c->nchannels) {
296 for (
i = 0;
i <
c->nchannels / 2;
i++)
299 for (
i = 0;
i <
c->nchannels;
i++)
300 b->orig_order[
i] =
i;
301 for (
i = 0;
i <
c->nchannels / 2;
i++)
302 b->decor_coeff[
i] = 0;
306 b->highest_pred_order = 0;
307 for (
i = 0;
i <
c->nchannels;
i++) {
309 if (
b->adapt_pred_order[
i] >
b->highest_pred_order)
310 b->highest_pred_order =
b->adapt_pred_order[
i];
312 if (
b->highest_pred_order >
s->nsegsamples) {
318 for (
i = 0;
i <
c->nchannels;
i++)
319 b->fixed_pred_order[
i] =
b->adapt_pred_order[
i] ? 0 :
get_bits(&
s->gb, 2);
322 for (
i = 0;
i <
c->nchannels;
i++) {
323 for (j = 0; j <
b->adapt_pred_order[
i]; j++) {
337 b->dmix_embedded =
c->dmix_embedded && (band == 0 ||
get_bits1(&
s->gb));
340 if ((band == 0 &&
s->scalable_lsbs) || (band != 0 &&
get_bits1(&
s->gb))) {
343 if (
b->lsb_section_size < 0 ||
b->lsb_section_size >
s->frame_size) {
349 if (
b->lsb_section_size && (
s->band_crc_present > 2 ||
350 (band == 0 &&
s->band_crc_present > 1)))
351 b->lsb_section_size += 2;
354 for (
i = 0;
i <
c->nchannels;
i++) {
356 if (
b->nscalablelsbs[
i] && !
b->lsb_section_size) {
362 b->lsb_section_size = 0;
363 for (
i = 0;
i <
c->nchannels;
i++)
364 b->nscalablelsbs[
i] = 0;
368 if ((band == 0 &&
s->scalable_lsbs) || (band != 0 &&
get_bits1(&
s->gb))) {
370 for (
i = 0;
i <
c->nchannels;
i++)
373 for (
i = 0;
i <
c->nchannels;
i++)
374 b->bit_width_adjust[
i] = 0;
392 int nchsamples =
s->nframesamples + ndecisamples;
393 int i, j, nsamples = nchsamples *
c->nchannels *
c->nfreqbands;
398 if (!
c->sample_buffer[0])
401 ptr =
c->sample_buffer[0] + ndecisamples;
402 for (
i = 0;
i <
c->nfreqbands;
i++) {
403 for (j = 0; j <
c->nchannels; j++) {
404 c->bands[
i].msb_sample_buffer[j] = ptr;
414 int i, j, nsamples = 0;
418 for (
i = 0;
i <
c->nfreqbands;
i++)
419 if (
c->bands[
i].lsb_section_size)
420 nsamples +=
s->nframesamples *
c->nchannels;
426 if (!
c->sample_buffer[1])
429 ptr =
c->sample_buffer[1];
430 for (
i = 0;
i <
c->nfreqbands;
i++) {
431 if (
c->bands[
i].lsb_section_size) {
432 for (j = 0; j <
c->nchannels; j++) {
433 c->bands[
i].lsb_sample_buffer[j] = ptr;
434 ptr +=
s->nframesamples;
437 for (j = 0; j <
c->nchannels; j++)
438 c->bands[
i].lsb_sample_buffer[j] =
NULL;
458 k =
c->seg_common ? 1 :
c->nchannels;
461 for (
i = 0;
i < k;
i++) {
467 if (!
c->seg_common &&
c->rice_code_flag[
i] &&
get_bits1(&
s->gb))
469 c->bitalloc_hybrid_linear[
i] =
get_bits(&
s->gb,
c->nabits) + 1;
472 c->bitalloc_hybrid_linear[
i] = 0;
476 for (
i = 0;
i < k;
i++) {
482 if (!
c->rice_code_flag[
i] &&
c->bitalloc_part_a[
i])
483 c->bitalloc_part_a[
i]++;
486 c->nsamples_part_a[
i] =
b->adapt_pred_order[
i];
488 c->nsamples_part_a[
i] =
b->highest_pred_order;
490 c->bitalloc_part_a[
i] = 0;
491 c->nsamples_part_a[
i] = 0;
498 if (!
c->rice_code_flag[
i] &&
c->bitalloc_part_b[
i])
499 c->bitalloc_part_b[
i]++;
504 for (
i = 0;
i <
c->nchannels;
i++) {
509 k =
c->seg_common ? 0 :
i;
512 part_a =
b->msb_sample_buffer[
i] + seg *
s->nsegsamples;
513 part_b = part_a +
c->nsamples_part_a[k];
514 nsamples_part_b =
s->nsegsamples -
c->nsamples_part_a[k];
519 if (!
c->rice_code_flag[k]) {
523 c->bitalloc_part_a[k]);
527 c->bitalloc_part_b[k]);
532 c->bitalloc_part_a[k]);
534 if (
c->bitalloc_hybrid_linear[k]) {
537 int nisosamples =
get_bits(&
s->gb,
s->nsegsamples_log2);
540 memset(part_b, 0,
sizeof(*part_b) * nsamples_part_b);
543 for (j = 0; j < nisosamples; j++) {
544 int loc =
get_bits(&
s->gb,
s->nsegsamples_log2);
545 if (loc >= nsamples_part_b) {
553 for (j = 0; j < nsamples_part_b; j++) {
555 part_b[j] =
get_linear(&
s->gb,
c->bitalloc_hybrid_linear[k]);
557 part_b[j] =
get_rice(&
s->gb,
c->bitalloc_part_b[k]);
568 if (seg == 0 && band == 1) {
570 for (
i = 0;
i <
c->nchannels;
i++)
576 if (
b->lsb_section_size) {
584 for (
i = 0;
i <
c->nchannels;
i++) {
585 if (
b->nscalablelsbs[
i]) {
587 b->lsb_sample_buffer[
i] + seg *
s->nsegsamples,
588 s->nsegsamples,
b->nscalablelsbs[
i]);
609 nsamples =
s->nframesamples;
612 nsamples =
s->nsegsamples;
615 for (
i = 0;
i <
c->nchannels;
i++) {
616 memset(
b->msb_sample_buffer[
i] +
offset, 0, nsamples *
sizeof(
int32_t));
617 if (
b->lsb_section_size)
618 memset(
b->lsb_sample_buffer[
i] +
offset, 0, nsamples *
sizeof(
int32_t));
621 if (seg <= 0 && band)
622 memset(
c->deci_history, 0,
sizeof(
c->deci_history));
625 memset(
b->nscalablelsbs, 0,
sizeof(
b->nscalablelsbs));
626 memset(
b->bit_width_adjust, 0,
sizeof(
b->bit_width_adjust));
633 int nsamples =
s->nframesamples;
637 for (
i = 0;
i <
c->nchannels;
i++) {
639 int order =
b->adapt_pred_order[
i];
643 for (j = 0; j < order; j++) {
644 int rc =
b->adapt_refl_coeff[
i][j];
645 for (k = 0; k < (j + 1) / 2; k++) {
646 int tmp1 =
coeff[ k ];
647 int tmp2 =
coeff[j - k - 1];
654 for (j = 0; j < nsamples - order; j++) {
656 for (k = 0; k < order; k++)
662 for (j = 0; j <
b->fixed_pred_order[
i]; j++)
663 for (k = 1; k < nsamples; k++)
664 buf[k] += (
unsigned)buf[k - 1];
669 if (
b->decor_enabled) {
672 for (
i = 0;
i <
c->nchannels / 2;
i++) {
675 s->dcadsp->decor(
b->msb_sample_buffer[
i * 2 + 1],
676 b->msb_sample_buffer[
i * 2 ],
682 for (
i = 0;
i <
c->nchannels;
i++)
683 tmp[
i] =
b->msb_sample_buffer[
i];
685 for (
i = 0;
i <
c->nchannels;
i++)
686 b->msb_sample_buffer[
b->orig_order[
i]] =
tmp[
i];
690 if (
c->nfreqbands == 1)
691 for (
i = 0;
i <
c->nchannels;
i++)
692 s->output_samples[
c->ch_remap[
i]] =
b->msb_sample_buffer[
i];
697 int adj =
c->bands[band].bit_width_adjust[ch];
698 int shift =
c->bands[band].nscalablelsbs[ch];
700 if (
s->fixed_lsb_width)
701 shift =
s->fixed_lsb_width;
702 else if (
shift && adj)
713 int n, ch, nsamples =
s->nframesamples;
715 for (ch = 0; ch <
c->nchannels; ch++) {
718 int32_t *msb =
b->msb_sample_buffer[ch];
719 if (
b->nscalablelsbs[ch]) {
720 int32_t *lsb =
b->lsb_sample_buffer[ch];
721 int adj =
b->bit_width_adjust[ch];
722 for (n = 0; n < nsamples; n++)
723 msb[n] = msb[n] * (
SUINT)(1 <<
shift) + (lsb[n] << adj);
725 for (n = 0; n < nsamples; n++)
734 int ch, nsamples =
s->nframesamples;
741 2 * nsamples *
c->nchannels *
sizeof(
int32_t));
742 if (!
c->sample_buffer[2])
746 ptr =
c->sample_buffer[2];
747 for (ch = 0; ch <
c->nchannels; ch++) {
748 int32_t *band0 =
c->bands[0].msb_sample_buffer[ch];
749 int32_t *band1 =
c->bands[1].msb_sample_buffer[ch];
753 c->deci_history[ch],
sizeof(
c->deci_history[0]));
756 s->dcadsp->assemble_freq_bands(ptr, band0, band1,
761 s->output_samples[
c->ch_remap[ch]] = ptr;
770 int stream_ver, header_size, frame_size_nbits, nframesegs_log2;
780 if (stream_ver > 1) {
795 frame_size_nbits =
get_bits(&
s->gb, 5) + 1;
814 s->nframesegs = 1 << nframesegs_log2;
815 if (
s->nframesegs > 1024) {
824 if (!
s->nsegsamples_log2) {
828 s->nsegsamples = 1 <<
s->nsegsamples_log2;
829 if (
s->nsegsamples > 512) {
835 s->nframesamples_log2 =
s->nsegsamples_log2 + nframesegs_log2;
836 s->nframesamples = 1 <<
s->nframesamples_log2;
837 if (
s->nframesamples > 65536) {
859 if (
s->scalable_lsbs)
862 s->fixed_lsb_width = 0;
877 return !
c->primary_chset &&
c->dmix_embedded &&
c->hier_chset;
883 while (++c < &s->chset[
s->nchsets])
892 int i, j, *coeff_ptr =
c->dmix_coeff;
894 for (
i = 0;
i <
c->hier_ofs;
i++) {
898 c->dmix_scale_inv[
i] =
mul16(
c->dmix_scale_inv[
i], scale_inv);
899 for (j = 0; j <
c->nchannels; j++) {
916 for (
i = 0,
c =
s->chset; i < s->nchsets;
i++,
c++) {
917 c->hier_ofs =
s->nchannels;
920 if (
c->nfreqbands >
s->nfreqbands)
921 s->nfreqbands =
c->nfreqbands;
923 s->nchannels +=
c->nchannels;
924 if (
c->residual_encode != (1 <<
c->nchannels) - 1)
929 for (
i =
s->nchsets - 1,
c = &
s->chset[
i];
i > 0;
i--,
c--) {
940 s->nactivechsets = 1;
944 s->nactivechsets = (
s->chset[0].nchannels < 5 &&
s->nchsets > 1) ? 2 : 1;
947 s->nactivechsets =
s->nchsets;
956 int chs, seg, band, navi_nb, navi_pos, *navi_ptr;
960 navi_nb =
s->nfreqbands *
s->nframesegs *
s->nchsets;
961 if (navi_nb > 1024) {
974 for (band = 0; band <
s->nfreqbands; band++) {
975 for (seg = 0; seg <
s->nframesegs; seg++) {
976 for (chs = 0,
c =
s->chset; chs < s->nchsets; chs++,
c++) {
978 if (
c->nfreqbands > band) {
980 if (size < 0 || size >=
s->frame_size) {
1007 int ret, chs, seg, band, navi_pos, *navi_ptr;
1010 for (chs = 0,
c =
s->chset; chs < s->nactivechsets; chs++,
c++) {
1019 for (band = 0; band <
s->nfreqbands; band++) {
1020 for (seg = 0; seg <
s->nframesegs; seg++) {
1021 for (chs = 0,
c =
s->chset; chs < s->nchsets; chs++,
c++) {
1022 if (
c->nfreqbands > band) {
1023 navi_pos += *navi_ptr * 8;
1024 if (navi_pos >
s->gb.size_in_bits) {
1028 if (chs < s->nactivechsets &&
1060 unsigned int extradata_syncword;
1068 s->x_syncword_present = 1;
1070 s->x_imax_syncword_present = 1;
1096 s->pbr_length =
size;
1097 s->pbr_delay = delay;
1128 if (
s->frame_size >
size)
1132 if (
s->frame_size <
size)
1148 memcpy(
s->pbr_buffer +
s->pbr_length,
data,
size);
1149 s->pbr_length +=
size;
1152 if (
s->pbr_delay > 0 && --
s->pbr_delay)
1158 if (
s->frame_size >
s->pbr_length) {
1163 if (
s->frame_size ==
s->pbr_length) {
1167 s->pbr_length -=
s->frame_size;
1168 memmove(
s->pbr_buffer,
s->pbr_buffer +
s->frame_size,
s->pbr_length);
1199 int i, j, k, nchannels = 0, *coeff_ptr = o->
dmix_coeff;
1202 for (
i = 0,
c =
s->chset; i < s->nactivechsets;
i++,
c++) {
1207 for (j = 0; j <
c->nchannels; j++) {
1209 int coeff = *coeff_ptr++;
1211 s->dcadsp->dmix_sub(
c->bands[band].msb_sample_buffer[j],
1213 coeff,
s->nframesamples);
1215 s->dcadsp->dmix_sub(
c->deci_history[j],
1222 nchannels +=
c->nchannels;
1230 int i, j, nchannels = 0;
1233 for (
i = 0,
c =
s->chset; i < s->nactivechsets;
i++,
c++) {
1238 for (j = 0; j <
c->nchannels; j++) {
1240 if (
scale != (1 << 15)) {
1241 s->dcadsp->dmix_scale(
c->bands[band].msb_sample_buffer[j],
1242 scale,
s->nframesamples);
1244 s->dcadsp->dmix_scale(
c->deci_history[j],
1261 for (band = 0; band <
c->nfreqbands; band++)
1264 for (ch = 0; ch <
c->nchannels; ch++) {
1265 if (!(
c->residual_encode & (1 << ch)))
1269 c->residual_encode &= ~(1 << ch);
1276 int ch, nsamples =
s->nframesamples;
1301 for (ch = 0; ch <
c->nchannels; ch++) {
1305 if (
c->residual_encode & (1 << ch))
1311 av_log(
s->avctx,
AV_LOG_WARNING,
"Residual encoded channel (%d) references unavailable core channel\n",
c->ch_remap[ch]);
1325 dst =
c->bands[0].msb_sample_buffer[ch];
1329 for (n = 0; n < nsamples; n++)
1333 for (n = 0; n < nsamples; n++)
1348 int i, j, k,
ret,
shift, nsamples, request_mask;
1353 for (
i = 0,
c =
s->chset; i < s->nchsets;
i++,
c++) {
1354 if (i < s->nactivechsets)
1357 if (!
c->primary_chset)
1358 c->dmix_embedded = 0;
1361 s->scalable_lsbs = 0;
1362 s->fixed_lsb_width = 0;
1367 for (
i = 0,
c =
s->chset; i < s->nactivechsets;
i++,
c++) {
1370 if (
c->residual_encode != (1 <<
c->nchannels) - 1
1374 if (
s->scalable_lsbs)
1377 if (
c->nfreqbands > 1) {
1382 s->output_mask |=
c->ch_mask;
1386 for (
i = 1,
c = &
s->chset[1]; i < s->nchsets;
i++,
c++) {
1390 if (
i >=
s->nactivechsets) {
1391 for (j = 0; j <
c->nfreqbands; j++)
1392 if (
c->bands[j].dmix_embedded)
1397 for (j = 0; j <
c->nfreqbands; j++)
1398 if (
c->bands[j].dmix_embedded)
1403 if (
s->nfreqbands > 1) {
1404 for (
i = 0;
i <
s->nactivechsets;
i++)
1428 request_mask =
s->output_mask;
1448 if (
s->x_imax_syncword_present) {
1450 }
else if (
s->x_syncword_present) {
1464 if (request_mask !=
s->output_mask) {
1474 for (k = 0; k < nsamples; k++)
1478 for (k = 0; k < nsamples; k++)
1510 c->sample_size[j] = 0;
static DCAXllChSet * find_next_hier_dmix_chset(DCAXllDecoder *s, DCAXllChSet *c)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_EF_EXPLODE
abort decoding on minor error detection
int ff_dca_xll_parse(DCAXllDecoder *s, const uint8_t *data, DCAExssAsset *asset)
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
static int get_bits_left(GetBitContext *gb)
static int parse_dmix_coeffs(DCAXllDecoder *s, DCAXllChSet *c)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
#define DCA_XLL_DECI_HISTORY_MAX
int sample_rate
samples per second
static int32_t norm16(int64_t a)
#define DCA_SPEAKER_LAYOUT_5POINT0
int npcmsamples
Number of PCM samples per channel.
static int32_t mul15(int32_t a, int32_t b)
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static int chs_assemble_freq_bands(DCAXllDecoder *s, DCAXllChSet *c)
static void get_array(GetBitContext *gb, int32_t *array, int size, int n)
static int get_bits_count(const GetBitContext *s)
static void scale_down_mix(DCAXllDecoder *s, DCAXllChSet *o, int band)
This structure describes decoded (raw) audio or video data.
@ AV_SAMPLE_FMT_S32P
signed 32 bits, planar
#define DCA_SPEAKER_LAYOUT_STEREO
static int is_hier_dmix_chset(DCAXllChSet *c)
int request_channel_layout
Converted from avctx.request_channel_layout.
static int ff_dca_seek_bits(GetBitContext *s, int p)
#define AV_LOG_VERBOSE
Detailed information.
int xll_size
Size of XLL data in extension substream.
static void chs_assemble_msbs_lsbs(DCAXllDecoder *s, DCAXllChSet *c, int band)
static int ff_dca_check_crc(AVCodecContext *avctx, GetBitContext *s, int p1, int p2)
int nb_channels
Number of channels in this layout.
static int copy_to_pbr(DCAXllDecoder *s, const uint8_t *data, int size, int delay)
int hier_ofs
Number of preceding channels in a hierarchy (M)
#define FF_DCA_DMIXTABLE_OFFSET
int one_to_one_map_ch_to_spkr
One to one channel to speaker mapping flag.
static int parse_navi_table(DCAXllDecoder *s)
#define DCA_XLL_PBR_BUFFER_MAX
#define DCA_PACKET_RECOVERY
Sync error recovery flag.
static void skip_bits(GetBitContext *s, int n)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static void undo_down_mix(DCAXllDecoder *s, DCAXllChSet *o, int band)
#define AV_PROFILE_DTS_HD_MA_X
int dmix_coeff[DCA_XLL_DMIX_COEFFS_MAX]
Downmixing coefficients.
AVChannelLayout ch_layout
Audio channel layout.
#define DCA_SYNCWORD_XLL_X
static int parse_common_header(DCAXllDecoder *s)
static int chs_alloc_msb_band_data(DCAXllDecoder *s, DCAXllChSet *c)
static int32_t clip23(int32_t a)
int nchannels
Number of channels in the channel set (N)
#define DCA_SYNCWORD_XLL_X_IMAX
DCAExssParser exss
EXSS parser context.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
@ AV_MATRIX_ENCODING_DOLBY
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
int output_rate
Output sample rate (1x or 2x header rate)
void ff_dca_downmix_to_stereo_fixed(DCADSPContext *dcadsp, int32_t **samples, int *coeff_l, int nsamples, int ch_mask)
#define DCA_XLL_ADAPT_PRED_ORDER_MAX
#define DCA_SPEAKER_LAYOUT_5POINT1
static int chs_get_lsb_width(DCAXllDecoder *s, DCAXllChSet *c, int band, int ch)
const uint16_t ff_dca_xll_refl_coeff[128]
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
int storage_bit_res
Storage bit resolution (16 or 24)
static int32_t mul16(int32_t a, int32_t b)
int dmix_type
Primary channel set downmix type.
int dmix_embedded
Downmix already performed by encoder.
static int chs_alloc_lsb_band_data(DCAXllDecoder *s, DCAXllChSet *c)
int ff_dca_set_channel_layout(AVCodecContext *avctx, int *ch_remap, int dca_mask)
@ AV_MATRIX_ENCODING_DOLBYHEADPHONE
static void clear_pbr(DCAXllDecoder *s)
#define DCA_HAS_STEREO(mask)
int32_t * output_samples[DCA_SPEAKER_COUNT]
PCM output for fixed point mode.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
const uint8_t ff_dca_dmix_primary_nch[8]
int64_t bit_rate
the average bitrate
static unsigned int get_bits1(GetBitContext *s)
#define DCA_XLL_SAMPLE_BUFFERS_MAX
static int get_rice(GetBitContext *gb, int k)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
int xll_offset
Offset to XLL data from start of substream.
const uint32_t ff_dca_inv_dmixtable[FF_DCA_INV_DMIXTABLE_SIZE]
static int combine_residual_frame(DCAXllDecoder *s, DCAXllChSet *c)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
const uint16_t ff_dca_dmixtable[FF_DCA_DMIXTABLE_SIZE]
const int32_t ff_dca_xll_band_coeff[20]
static void scale(int *out, const int *in, const int w, const int h, const int shift)
static int shift(int a, int b)
@ AV_MATRIX_ENCODING_NONE
enum AVSampleFormat sample_fmt
audio sample format
static int chs_parse_band_data(DCAXllDecoder *s, DCAXllChSet *c, int band, int seg, int band_data_end)
int xll_delay_nframes
Initial XLL decoding delay in frames.
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
static void chs_filter_band_data(DCAXllDecoder *s, DCAXllChSet *c, int band)
int nb_samples
number of audio samples (per channel) described by this frame
#define i(width, name, range_min, range_max)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
static av_always_inline av_const double round(double x)
#define DCA_XLL_CHANNELS_MAX
static int parse_frame_pbr(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
uint8_t ** extended_data
pointers to the data planes/channels.
int32_t * msb_sample_buffer[DCA_XLL_CHANNELS_MAX]
MSB sample buffer pointers.
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
int pcm_bit_res
PCM bit resolution (variable)
int xll_sync_offset
Number of bytes offset to XLL sync.
DCAExssAsset assets[1]
Audio asset descriptors.
int32_t deci_history[DCA_XLL_CHANNELS_MAX][DCA_XLL_DECI_HISTORY_MAX]
Decimator history for frequency band 1.
int ff_dca_xll_filter_frame(DCAXllDecoder *s, AVFrame *frame)
static int ff_dca_core_map_spkr(DCACoreDecoder *core, int spkr)
int dmix_scale_inv[DCA_XLL_DMIX_SCALES_MAX]
Inverse downmixing scales.
static int array[MAX_W *MAX_W]
int nfreqbands
Number of frequency bands (1 or 2)
DCAXllBand bands[DCA_XLL_BANDS_MAX]
Frequency bands.
#define DCA_XLL_CHSETS_MAX
static int parse_frame_no_pbr(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
#define AV_INPUT_BUFFER_PADDING_SIZE
main external API structure.
#define AV_PROFILE_DTS_HD_MA
int xll_sync_present
XLL sync word present flag.
#define FF_DCA_DMIXTABLE_SIZE
int dmix_scale[DCA_XLL_DMIX_SCALES_MAX]
Downmixing scales.
const uint32_t ff_dca_sampling_freqs[16]
static int get_rice_un(GetBitContext *gb, int k)
#define FF_DCA_INV_DMIXTABLE_SIZE
static void prescale_down_mix(DCAXllChSet *c, DCAXllChSet *o)
static int chs_parse_header(DCAXllDecoder *s, DCAXllChSet *c, DCAExssAsset *asset)
#define AV_PROFILE_DTS_HD_MA_X_IMAX
static void get_linear_array(GetBitContext *gb, int32_t *array, int size, int n)
Filter the word “frame” indicates either a video frame or a group of audio samples
static int parse_sub_headers(DCAXllDecoder *s, DCAExssAsset *asset)
static int parse_frame(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
int freq
Original sampling frequency (max. 96000 Hz)
static void get_rice_array(GetBitContext *gb, int32_t *array, int size, int k)
#define avpriv_request_sample(...)
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
av_cold void ff_dca_xll_flush(DCAXllDecoder *s)
static av_cold void force_lossy_output(DCAXllDecoder *s, DCAXllChSet *c)
DCACoreDecoder core
Core decoder context.
static const double coeff[2][5]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.
static av_cold void chs_clear_band_data(DCAXllDecoder *s, DCAXllChSet *c, int band, int seg)
static int get_linear(GetBitContext *gb, int n)
int representation_type
Representation type.
int hd_stream_id
DTS-HD stream ID.
static int parse_band_data(DCAXllDecoder *s)
av_cold void ff_dca_xll_close(DCAXllDecoder *s)