From 811a99e5b1a289160757d36e009dc41885e792e4 Mon Sep 17 00:00:00 2001 From: Lynne Date: Wed, 13 Mar 2024 21:59:35 +0100 Subject: [PATCH 15/38] aacdec: template mid/side stereo application separately --- libavcodec/aac/aacdec_dsp_template.c | 35 +++++++++++++++++++++++++++ libavcodec/aacdec_template.c | 36 +--------------------------- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/libavcodec/aac/aacdec_dsp_template.c b/libavcodec/aac/aacdec_dsp_template.c index 9a43cb71e0..3a43e1b04e 100644 --- a/libavcodec/aac/aacdec_dsp_template.c +++ b/libavcodec/aac/aacdec_dsp_template.c @@ -88,6 +88,41 @@ static void AAC_RENAME(dequant_scalefactors)(SingleChannelElement *sce) } } +/** + * Mid/Side stereo decoding; reference: 4.6.8.1.3. + */ +static void AAC_RENAME(apply_mid_side_stereo)(AACDecContext *ac, ChannelElement *cpe) +{ + const IndividualChannelStream *ics = &cpe->ch[0].ics; + INTFLOAT *ch0 = cpe->ch[0].AAC_RENAME(coeffs); + INTFLOAT *ch1 = cpe->ch[1].AAC_RENAME(coeffs); + int g, i, group, idx = 0; + const uint16_t *offsets = ics->swb_offset; + for (g = 0; g < ics->num_window_groups; g++) { + for (i = 0; i < ics->max_sfb; i++, idx++) { + if (cpe->ms_mask[idx] && + cpe->ch[0].band_type[idx] < NOISE_BT && + cpe->ch[1].band_type[idx] < NOISE_BT) { +#if USE_FIXED + for (group = 0; group < ics->group_len[g]; group++) { + ac->fdsp->butterflies_fixed(ch0 + group * 128 + offsets[i], + ch1 + group * 128 + offsets[i], + offsets[i+1] - offsets[i]); +#else + for (group = 0; group < ics->group_len[g]; group++) { + ac->fdsp->butterflies_float(ch0 + group * 128 + offsets[i], + ch1 + group * 128 + offsets[i], + offsets[i+1] - offsets[i]); +#endif /* USE_FIXED */ + } + } + } + ch0 += ics->group_len[g] * 128; + ch1 += ics->group_len[g] * 128; + } +} + const AACDecDSP AAC_RENAME(aac_dsp) = { .dequant_scalefactors = &AAC_RENAME(dequant_scalefactors), + .apply_mid_side_stereo = &AAC_RENAME(apply_mid_side_stereo), }; diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index d4d564cc14..e0208743d8 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -2061,40 +2061,6 @@ fail: return ret; } -/** - * Mid/Side stereo decoding; reference: 4.6.8.1.3. - */ -static void apply_mid_side_stereo(AACDecContext *ac, ChannelElement *cpe) -{ - const IndividualChannelStream *ics = &cpe->ch[0].ics; - INTFLOAT *ch0 = cpe->ch[0].AAC_RENAME(coeffs); - INTFLOAT *ch1 = cpe->ch[1].AAC_RENAME(coeffs); - int g, i, group, idx = 0; - const uint16_t *offsets = ics->swb_offset; - for (g = 0; g < ics->num_window_groups; g++) { - for (i = 0; i < ics->max_sfb; i++, idx++) { - if (cpe->ms_mask[idx] && - cpe->ch[0].band_type[idx] < NOISE_BT && - cpe->ch[1].band_type[idx] < NOISE_BT) { -#if USE_FIXED - for (group = 0; group < ics->group_len[g]; group++) { - ac->fdsp->butterflies_fixed(ch0 + group * 128 + offsets[i], - ch1 + group * 128 + offsets[i], - offsets[i+1] - offsets[i]); -#else - for (group = 0; group < ics->group_len[g]; group++) { - ac->fdsp->butterflies_float(ch0 + group * 128 + offsets[i], - ch1 + group * 128 + offsets[i], - offsets[i+1] - offsets[i]); -#endif /* USE_FIXED */ - } - } - } - ch0 += ics->group_len[g] * 128; - ch1 += ics->group_len[g] * 128; - } -} - /** * intensity stereo decoding; reference: 4.6.8.2.3 * @@ -2182,7 +2148,7 @@ static int decode_cpe(AACDecContext *ac, GetBitContext *gb, ChannelElement *cpe) if (common_window) { if (ms_present) - apply_mid_side_stereo(ac, cpe); + ac->dsp.apply_mid_side_stereo(ac, cpe); if (ac->oc[1].m4ac.object_type == AOT_AAC_MAIN) { apply_prediction(ac, &cpe->ch[0]); apply_prediction(ac, &cpe->ch[1]); -- 2.43.0.381.gb435a96ce8