]> git.sesse.net Git - ffmpeg/commit
aacenc_tns: rework coefficient quantization and filter application
authorRostislav Pehlivanov <atomnuker@gmail.com>
Tue, 1 Sep 2015 05:44:07 +0000 (06:44 +0100)
committerRostislav Pehlivanov <atomnuker@gmail.com>
Tue, 1 Sep 2015 05:44:07 +0000 (06:44 +0100)
commitf3f6c6b92822ea27efa3002e9490c4d6c6743de3
tree824a831db1ae9be5ab9ce6c453f95d110e00dccf
parentd09f9c45c7554e6d9b20be5b640f67fcf053250b
aacenc_tns: rework coefficient quantization and filter application

This commit reworks the TNS implementation to a hybrid between what
the specifications say, what the decoder does and what's the best
thing to do.

The filter application function was copied from the decoder and
modified such that it applies the inverse AR filter to the
coefficients. The LPC coefficients themselves are fed into the
same quantization expression that the specifications say should
be used however further processing is not done, instead they're
converted to the form that the decoder expects them to be in
and are sent off to the compute_lpc_coeffs function exactly the
way the decoder does. This function does all conversions and will
return the exact coefficients that the decoder will generate, which
are then applied to the coefficients.
Having the exact same coefficients on both the encoder and decoder
is a must since otherwise the entire sfb's over which the filter
is applied will be attenuated.

Despite this major rework, TNS might not work fine on some audio
types at very low bitrates (e.g. sub 90kbps) as it can attenuate
some coefficients too much. Users are advised to experiment with
TNS at higher bitrates if they wish to use this tool or simply
wait for the implementation to be improved.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
libavcodec/aacenc.c
libavcodec/aacenc.h
libavcodec/aacenc_tns.c
libavcodec/aacenc_tns.h