#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)
+ return 0;
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;
+ 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)
{