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.
This commit is contained in:
parent
8d18d28918
commit
f3ad901a32
@ -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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user