Commit f3ad901a authored by Rostislav Pehlivanov's avatar Rostislav Pehlivanov

aacenc_tns: disable coefficient compression by default

Too much effort and work has been spent on such a simple function.
It simply refuses to work as the specifications say, the
transformation is NOT lossless and creates some crackling and
distortions.
Therefore disable it by default and add a couple of warnings to
scare people away from touching it or wasting their time the
way I did.
parent 8d18d289
...@@ -31,27 +31,31 @@ ...@@ -31,27 +31,31 @@
#include "aacenc_utils.h" #include "aacenc_utils.h"
#include "aacenc_quantization.h" #include "aacenc_quantization.h"
/* /* Define this to save a bit, be warned decoders can't deal with it
* Shifts the values as well if compression is possible. * 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) 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 low_idx = c_bits ? 4 : 2;
const int shift_val = c_bits ? 8 : 4; const int shift_val = c_bits ? 8 : 4;
const int high_idx = c_bits ? 11 : 5; 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)
return 0;
for (i = 0; i < order; i++) for (i = 0; i < order; i++)
if (coef[i] < low_idx || coef[i] > high_idx) coef[i] -= (coef[i] > high_idx) ? shift_val : 0;
res++; return 1;
if (res == order)
for (i = 0; i < order; i++)
coef[i] -= (coef[i] > high_idx) ? shift_val : 0;
return res == order;
} }
/** /**
* Encode TNS data. * 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) void ff_aac_encode_tns_info(AACEncContext *s, SingleChannelElement *sce)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment