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++)
 
  657                     err += (int64_t)buf[j + k] * 
coeff[order - k - 1];
 
  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 av_always_inline float scale(float x, float s)
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 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)