Mercurial > libavcodec.hg
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 } |