• Rostislav Pehlivanov's avatar
    aacenc_tns: rework coefficient quantization and filter application · f3f6c6b9
    Rostislav Pehlivanov authored
    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: 's avatarRostislav Pehlivanov <atomnuker@gmail.com>
    f3f6c6b9
aacenc_tns.h 1.69 KB