comparison aacsbr.c @ 11667:6818ea5a25a2 libavcodec

Rewrite ff_sbr_apply in a manner more friendly to PS. This includes merging ff_sbr_dequant into ff_sbr_apply.
author alexc
date Fri, 30 Apr 2010 21:43:23 +0000
parents 7dd2a45249a9
children db33423d99ac
comparison
equal deleted inserted replaced
11666:1c6d78234e67 11667:6818ea5a25a2
1707 } 1707 }
1708 ch_data->f_indexnoise = indexnoise; 1708 ch_data->f_indexnoise = indexnoise;
1709 ch_data->f_indexsine = indexsine; 1709 ch_data->f_indexsine = indexsine;
1710 } 1710 }
1711 1711
1712 void ff_sbr_dequant(AACContext *ac, SpectralBandReplication *sbr, int id_aac) 1712 void ff_sbr_apply(AACContext *ac, SpectralBandReplication *sbr, int id_aac,
1713 { 1713 float* L, float* R)
1714 {
1715 int downsampled = ac->m4ac.ext_sample_rate < sbr->sample_rate;
1716 int ch;
1717 int nch = (id_aac == TYPE_CPE) ? 2 : 1;
1718
1714 if (sbr->start) { 1719 if (sbr->start) {
1715 sbr_dequant(sbr, id_aac); 1720 sbr_dequant(sbr, id_aac);
1716 } 1721 }
1717 } 1722 for (ch = 0; ch < nch; ch++) {
1718
1719 void ff_sbr_apply(AACContext *ac, SpectralBandReplication *sbr, int ch,
1720 const float* in, float* out)
1721 {
1722 int downsampled = ac->m4ac.ext_sample_rate < sbr->sample_rate;
1723
1724 /* decode channel */ 1723 /* decode channel */
1725 sbr_qmf_analysis(&ac->dsp, &sbr->rdft, in, sbr->data[ch].analysis_filterbank_samples, 1724 sbr_qmf_analysis(&ac->dsp, &sbr->rdft, ch ? R : L, sbr->data[ch].analysis_filterbank_samples,
1726 (float*)sbr->qmf_filter_scratch, 1725 (float*)sbr->qmf_filter_scratch,
1727 sbr->data[ch].W, 1/(-1024 * ac->sf_scale)); 1726 sbr->data[ch].W, 1/(-1024 * ac->sf_scale));
1728 sbr_lf_gen(ac, sbr, sbr->X_low, sbr->data[ch].W); 1727 sbr_lf_gen(ac, sbr, sbr->X_low, sbr->data[ch].W);
1729 if (sbr->start) { 1728 if (sbr->start) {
1730 sbr_hf_inverse_filter(sbr->alpha0, sbr->alpha1, sbr->X_low, sbr->k[0]); 1729 sbr_hf_inverse_filter(sbr->alpha0, sbr->alpha1, sbr->X_low, sbr->k[0]);
1741 sbr->data[ch].e_a); 1740 sbr->data[ch].e_a);
1742 } 1741 }
1743 1742
1744 /* synthesis */ 1743 /* synthesis */
1745 sbr_x_gen(sbr, sbr->X, sbr->X_low, sbr->data[ch].Y, ch); 1744 sbr_x_gen(sbr, sbr->X, sbr->X_low, sbr->data[ch].Y, ch);
1746 sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, out, sbr->X, sbr->qmf_filter_scratch, 1745 }
1747 sbr->data[ch].synthesis_filterbank_samples, 1746 sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, L, sbr->X, sbr->qmf_filter_scratch,
1748 &sbr->data[ch].synthesis_filterbank_samples_offset, 1747 sbr->data[0].synthesis_filterbank_samples,
1748 &sbr->data[0].synthesis_filterbank_samples_offset,
1749 downsampled, 1749 downsampled,
1750 ac->add_bias, -1024 * ac->sf_scale); 1750 ac->add_bias, -1024 * ac->sf_scale);
1751 } 1751 if (nch == 2)
1752 sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, R, sbr->X, sbr->qmf_filter_scratch,
1753 sbr->data[1].synthesis_filterbank_samples,
1754 &sbr->data[1].synthesis_filterbank_samples_offset,
1755 downsampled,
1756 ac->add_bias, -1024 * ac->sf_scale);
1757 }