#ifndef AVCODEC_AACENC_TNS_H
#define AVCODEC_AACENC_TNS_H
-#include "aac.h"
+#include "aacenc.h"
-/** Frequency in Hz for lower limit of TNS **/
-#define TNS_LOW_LIMIT 2150
+/* Could be set to 3 to save an additional bit at the cost of little quality */
+#define TNS_Q_BITS 4
-/** LPC settings */
-#define TNS_MIN_PRED_ORDER 0
-#define MAX_LPC_PRECISION 4 /* 4 bits ltp coeff precision */
-#define TNS_LPC_PASSES 2
-#define MAX_LPC_SHIFT 4
+/* TNS will only be used if the LPC gain is within these margins */
+#define TNS_GAIN_THRESHOLD_LOW 1.395f
+#define TNS_GAIN_THRESHOLD_HIGH 11.19f
-void encode_tns_info(AACEncContext *s, SingleChannelElement *sce);
-void search_for_tns(AACEncContext *s, SingleChannelElement *sce);
+/* If the energy ratio between the low SFBs vs the high SFBs is not between
+ * those two values, use 2 filters instead */
+#define TNS_E_RATIO_LOW 0.77
+#define TNS_E_RATIO_HIGH 1.23
+
+/* Do not use TNS if the psy band spread is below this value */
+#define TNS_SPREAD_THRESHOLD 37.081512f
+
+void ff_aac_encode_tns_info(AACEncContext *s, SingleChannelElement *sce);
+void ff_aac_apply_tns(AACEncContext *s, SingleChannelElement *sce);
+void ff_aac_search_for_tns(AACEncContext *s, SingleChannelElement *sce);
#endif /* AVCODEC_AACENC_TNS_H */