Make collapse-detection bitexact.
[opus.git] / libcelt / bands.h
index 8b09297..bdf9f57 100644 (file)
@@ -1,5 +1,7 @@
-/* (C) 2007 Jean-Marc Valin, CSIRO
-*/
+/* Copyright (c) 2007-2008 CSIRO
+   Copyright (c) 2007-2009 Xiph.Org Foundation
+   Copyright (c) 2008-2009 Gregory Maxwell 
+   Written by Jean-Marc Valin and Gregory Maxwell */
 /*
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
 #ifndef BANDS_H
 #define BANDS_H
 
-/* Number of constant-energy bands */
-#define NBANDS 15
-/* Number of bands only for the pitch prediction */
-#define PBANDS 5
+#include "arch.h"
+#include "modes.h"
+#include "entenc.h"
+#include "entdec.h"
+#include "rate.h"
+
+/** Compute the amplitude (sqrt energy) in each of the bands 
+ * @param m Mode data 
+ * @param X Spectrum
+ * @param bands Square root of the energy for each band (returned)
+ */
+void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bands, int end, int _C, int M);
+
+/*void compute_noise_energies(const CELTMode *m, const celt_sig *X, const celt_word16 *tonality, celt_ener *bank);*/
+
+/** Normalise each band of X such that the energy in each band is 
+    equal to 1
+ * @param m Mode data 
+ * @param X Spectrum (returned normalised)
+ * @param bands Square root of the energy for each band
+ */
+void normalise_bands(const CELTMode *m, const celt_sig * restrict freq, celt_norm * restrict X, const celt_ener *bands, int end, int _C, int M);
+
+/** Denormalise each band of X to restore full amplitude
+ * @param m Mode data 
+ * @param X Spectrum (returned de-normalised)
+ * @param bands Square root of the energy for each band
+ */
+void denormalise_bands(const CELTMode *m, const celt_norm * restrict X, celt_sig * restrict freq, const celt_ener *bands, int end, int _C, int M);
+
+#define SPREAD_NONE       (0)
+#define SPREAD_LIGHT      (1)
+#define SPREAD_NORMAL     (2)
+#define SPREAD_AGGRESSIVE (3)
+
+int spreading_decision(const CELTMode *m, celt_norm *X, int *average,
+      int last_decision, int *hf_average, int *tapset_decision, int update_hf,
+      int end, int _C, int M);
 
-void compute_bands(float *X, int B, float *bands);
+#ifdef MEASURE_NORM_MSE
+void measure_norm_mse(const CELTMode *m, float *X, float *X0, float *bandE, float *bandE0, int M, int N, int C);
+#endif
 
-void normalise_bands(float *X, int B, float *bands);
+void haar1(celt_norm *X, int N0, int stride);
 
-void denormalise_bands(float *X, int B, float *bands);
+/** Quantisation/encoding of the residual spectrum
+ * @param m Mode data 
+ * @param X Residual (normalised)
+ * @param total_bits Total number of bits that can be used for the frame (including the ones already spent)
+ * @param enc Entropy encoder
+ */
+void quant_all_bands(int encode, const CELTMode *m, int start, int end,
+      celt_norm * X, celt_norm * Y, unsigned char *collapse_masks, const celt_ener *bandE, int *pulses,
+      int time_domain, int fold, int dual_stereo, int intensity, int *tf_res, int resynth,
+      int total_bits, void *enc, int M, int codedBands);
 
-void compute_pitch_gain(float *X, int B, float *P, float *gains, float *bank);
 
-void pitch_quant_bands(float *X, int B, float *P, float *gains);
+void stereo_decision(const CELTMode *m, celt_norm * restrict X, int *stereo_mode, int len, int M);
 
-void pitch_renormalise_bands(float *X, int B, float *P);
+void anti_collapse(const CELTMode *m, celt_norm *_X, unsigned char *collapse_masks, int LM, int C, int size,
+      int start, int end, celt_word16 *logE, celt_word16 *prev1logE,
+      celt_word16 *prev2logE, int *pulses, celt_uint32 seed);
 
 #endif /* BANDS_H */