diff options
author | Rostislav Pehlivanov <atomnuker@gmail.com> | 2015-10-17 10:50:41 +0100 |
---|---|---|
committer | Rostislav Pehlivanov <atomnuker@gmail.com> | 2015-10-17 11:10:26 +0100 |
commit | 8d18d28918dffd9dd0da11699e16330375065176 (patch) | |
tree | c32a8db830e687b027b8adbe09bf9e38999f4553 /libavcodec/aacenc_tns.c | |
parent | 801eca1372dd7e4bdc25271877cda06c0674f76e (diff) | |
download | ffmpeg-8d18d28918dffd9dd0da11699e16330375065176.tar.gz |
aacenc_tns: add moving average filter for LTP
The decoder does this so I guess we better do that as well.
There's barely any difference between the autoregressive and
the moving average filters looking at spectrals though.
Diffstat (limited to 'libavcodec/aacenc_tns.c')
-rw-r--r-- | libavcodec/aacenc_tns.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/libavcodec/aacenc_tns.c b/libavcodec/aacenc_tns.c index 815b4e3ab9..3d5bfd7e1c 100644 --- a/libavcodec/aacenc_tns.c +++ b/libavcodec/aacenc_tns.c @@ -91,7 +91,7 @@ void ff_aac_apply_tns(AACEncContext *s, SingleChannelElement *sce) IndividualChannelStream *ics = &sce->ics; int w, filt, m, i, top, order, bottom, start, end, size, inc; const int mmm = FFMIN(ics->tns_max_bands, ics->max_sfb); - float lpc[TNS_MAX_ORDER]; + float lpc[TNS_MAX_ORDER], tmp[TNS_MAX_ORDER+1]; for (w = 0; w < ics->num_windows; w++) { bottom = ics->num_swb; @@ -117,10 +117,21 @@ void ff_aac_apply_tns(AACEncContext *s, SingleChannelElement *sce) } start += w * 128; - // ar filter - for (m = 0; m < size; m++, start += inc) - for (i = 1; i <= FFMIN(m, order); i++) - sce->coeffs[start] += lpc[i-1]*sce->pcoeffs[start - i*inc]; + if (!s->options.ltp) { // ar filter + for (m = 0; m < size; m++, start += inc) { + for (i = 1; i <= FFMIN(m, order); i++) { + sce->coeffs[start] += lpc[i-1]*sce->pcoeffs[start - i*inc]; + } + } + } else { // ma filter + for (m = 0; m < size; m++, start += inc) { + tmp[0] = sce->pcoeffs[start]; + for (i = 1; i <= FFMIN(m, order); i++) + sce->coeffs[start] += lpc[i-1]*tmp[i]; + for (i = order; i > 0; i--) + tmp[i] = tmp[i - 1]; + } + } } } } |