diff --git a/libavcodec/aacenc_tns.c b/libavcodec/aacenc_tns.c index 3d5bfd7e1c..62cf7a06a1 100644 --- a/libavcodec/aacenc_tns.c +++ b/libavcodec/aacenc_tns.c @@ -31,27 +31,31 @@ #include "aacenc_utils.h" #include "aacenc_quantization.h" -/* - * Shifts the values as well if compression is possible. - */ +/* Define this to save a bit, be warned decoders can't deal with it + * so it is not lossless despite what the specifications say */ +// #define TNS_ENABLE_COEF_COMPRESSION + static inline int compress_coeffs(int *coef, int order, int c_bits) { - int i, res = 0; + int i; const int low_idx = c_bits ? 4 : 2; const int shift_val = c_bits ? 8 : 4; const int high_idx = c_bits ? 11 : 5; +#ifndef TNS_ENABLE_COEF_COMPRESSION + return 0; +#endif /* TNS_ENABLE_COEF_COMPRESSION */ for (i = 0; i < order; i++) - if (coef[i] < low_idx || coef[i] > high_idx) - res++; - if (res == order) - for (i = 0; i < order; i++) - coef[i] -= (coef[i] > high_idx) ? shift_val : 0; - return res == order; + if (coef[i] >= low_idx && coef[i] <= high_idx) + return 0; + for (i = 0; i < order; i++) + coef[i] -= (coef[i] > high_idx) ? shift_val : 0; + return 1; } /** * Encode TNS data. - * Coefficient compression saves a single bit per coefficient. + * Coefficient compression is simply not lossless as it should be + * on any decoder tested and as such is not active. */ void ff_aac_encode_tns_info(AACEncContext *s, SingleChannelElement *sce) {