Add support for intra-coding of the coarse energy.
[opus.git] / libcelt / bands.h
index 1181a6b..ccaa7ee 100644 (file)
 #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"
 
-void compute_bands(float *X, int B, float *bands);
+/** 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_t *X, celt_ener_t *bands);
 
-void normalise_bands(float *X, int B, float *bands);
+void compute_noise_energies(const CELTMode *m, const celt_sig_t *X, const celt_word16_t *tonality, celt_ener_t *bank);
 
-void denormalise_bands(float *X, int B, float *bands);
+/** 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_t * restrict freq, celt_norm_t * restrict X, const celt_ener_t *bands);
 
-void compute_pitch_gain(float *X, int B, float *P, float *gains, float *bank);
+void renormalise_bands(const CELTMode *m, celt_norm_t * restrict X);
 
-void pitch_quant_bands(float *X, int B, float *P, float *gains);
+/** 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_t * restrict X, celt_sig_t * restrict freq, const celt_ener_t *bands);
 
-void quant_bands(float *X, int B, float *P);
+/** Compute the pitch predictor gain for each pitch band
+ * @param m Mode data 
+ * @param X Spectrum to predict
+ * @param P Pitch vector (normalised)
+ * @param gains Gain computed for each pitch band (returned)
+ * @param bank Square root of the energy for each band
+ */
+int compute_pitch_gain(const CELTMode *m, const celt_norm_t *X, const celt_norm_t *P, celt_pgain_t *gains);
 
-void pitch_renormalise_bands(float *X, int B, float *P);
+/** Quantisation/encoding of the residual spectrum
+ * @param m Mode data 
+ * @param X Residual (normalised)
+ * @param P Pitch vector (normalised)
+ * @param W Perceptual weighting
+ * @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_bands(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, celt_mask_t *W, int pitch_used, celt_pgain_t *pgains, const celt_ener_t *bandE, int *pulses, int time_domain, int fold, int total_bits, ec_enc *enc);
+
+void quant_bands_stereo(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, celt_mask_t *W, int pitch_used, celt_pgain_t *pgains, const celt_ener_t *bandE, int *pulses, int time_domain, int fold, int total_bits, ec_enc *enc);
+
+/** Decoding of the residual spectrum
+ * @param m Mode data 
+ * @param X Residual (normalised)
+ * @param P Pitch vector (normalised)
+ * @param total_bits Total number of bits that can be used for the frame (including the ones already spent)
+ * @param dec Entropy decoder
+*/
+void unquant_bands(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, int pitch_used, celt_pgain_t *pgains, const celt_ener_t *bandE, int *pulses, int time_domain, int fold, int total_bits, ec_dec *dec);
+
+void unquant_bands_stereo(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, int pitch_used, celt_pgain_t *pgains, const celt_ener_t *bandE, int *pulses, int time_domain, int fold, int total_bits, ec_dec *dec);
+
+void stereo_decision(const CELTMode *m, celt_norm_t * restrict X, int *stereo_mode, int len);
 
 #endif /* BANDS_H */