Add support for intra-coding of the coarse energy.
[opus.git] / libcelt / bands.h
index 99d8ce7..ccaa7ee 100644 (file)
 #include "entdec.h"
 #include "rate.h"
 
 #include "entdec.h"
 #include "rate.h"
 
-/** Applies a series of rotations so that pulses are spread like a two-sided
-exponential. The effect of this is to reduce the tonal noise created by the
-sparse spectrum resulting from the pulse codebook */
-void exp_rotation(celt_norm_t *X, int len, celt_word16_t theta, int dir, int stride, int iter);
-
 /** Compute the amplitude (sqrt energy) in each of the bands 
  * @param m Mode data 
  * @param X Spectrum
 /** Compute the amplitude (sqrt energy) in each of the bands 
  * @param m Mode data 
  * @param X Spectrum
@@ -50,22 +45,24 @@ void exp_rotation(celt_norm_t *X, int len, celt_word16_t theta, int dir, int str
  */
 void compute_band_energies(const CELTMode *m, const celt_sig_t *X, celt_ener_t *bands);
 
  */
 void compute_band_energies(const CELTMode *m, const celt_sig_t *X, celt_ener_t *bands);
 
+void compute_noise_energies(const CELTMode *m, const celt_sig_t *X, const celt_word16_t *tonality, celt_ener_t *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
  */
 /** 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 *freq, celt_norm_t *X, const celt_ener_t *bands);
+void normalise_bands(const CELTMode *m, const celt_sig_t * restrict freq, celt_norm_t * restrict X, const celt_ener_t *bands);
 
 
-void renormalise_bands(const CELTMode *m, celt_norm_t *X);
+void renormalise_bands(const CELTMode *m, celt_norm_t * restrict X);
 
 /** 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
  */
 
 /** 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 *X, celt_sig_t *freq, const celt_ener_t *bands);
+void denormalise_bands(const CELTMode *m, const celt_norm_t * restrict X, celt_sig_t * restrict freq, const celt_ener_t *bands);
 
 /** Compute the pitch predictor gain for each pitch band
  * @param m Mode data 
 
 /** Compute the pitch predictor gain for each pitch band
  * @param m Mode data 
@@ -74,9 +71,7 @@ void denormalise_bands(const CELTMode *m, const celt_norm_t *X, celt_sig_t *freq
  * @param gains Gain computed for each pitch band (returned)
  * @param bank Square root of the energy for each band
  */
  * @param gains Gain computed for each pitch band (returned)
  * @param bank Square root of the energy for each band
  */
-void compute_pitch_gain(const CELTMode *m, const celt_norm_t *X, const celt_norm_t *P, celt_pgain_t *gains);
-
-void pitch_quant_bands(const CELTMode *m, celt_norm_t *P, const celt_pgain_t *gains);
+int compute_pitch_gain(const CELTMode *m, const celt_norm_t *X, const celt_norm_t *P, celt_pgain_t *gains);
 
 /** Quantisation/encoding of the residual spectrum
  * @param m Mode data 
 
 /** Quantisation/encoding of the residual spectrum
  * @param m Mode data 
@@ -86,7 +81,9 @@ void pitch_quant_bands(const CELTMode *m, celt_norm_t *P, const celt_pgain_t *ga
  * @param total_bits Total number of bits that can be used for the frame (including the ones already spent)
  * @param enc Entropy encoder
  */
  * @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 *X, celt_norm_t *P, celt_mask_t *W, int total_bits, ec_enc *enc);
+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 
 
 /** Decoding of the residual spectrum
  * @param m Mode data 
@@ -95,8 +92,10 @@ void quant_bands(const CELTMode *m, celt_norm_t *X, celt_norm_t *P, celt_mask_t
  * @param total_bits Total number of bits that can be used for the frame (including the ones already spent)
  * @param dec Entropy decoder
 */
  * @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 *X, celt_norm_t *P, int total_bits, ec_dec *dec);
+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_mix(const CELTMode *m, celt_norm_t *X, const celt_ener_t *bank, int dir);
+void stereo_decision(const CELTMode *m, celt_norm_t * restrict X, int *stereo_mode, int len);
 
 #endif /* BANDS_H */
 
 #endif /* BANDS_H */