More simplifications from denorm pitch
[opus.git] / libcelt / modes.h
index 7720791..b7ff763 100644 (file)
@@ -1,4 +1,4 @@
-/* (C) 2007 Jean-Marc Valin, CSIRO
+/* (C) 2007-2008 Jean-Marc Valin, CSIRO
 */
 /*
    Redistribution and use in source and binary forms, with or without
 #ifndef MODES_H
 #define MODES_H
 
+#include "celt_types.h"
 #include "celt.h"
+#include "arch.h"
+#include "mdct.h"
+#include "psy.h"
+#include "pitch.h"
 
+#define CELT_BITSTREAM_VERSION 0x80000009
+
+#ifdef STATIC_MODES
+#include "static_modes.h"
+#endif
+
+#define MAX_PERIOD 1024
+
+#ifndef CHANNELS
+# ifdef DISABLE_STEREO
+#  define CHANNELS(mode) (1)
+# else
+#  define CHANNELS(mode) ((mode)->nbChannels)
+# endif
+#endif
+
+#define MDCT(mode) (&(mode)->mdct)
+
+#ifndef OVERLAP
+#define OVERLAP(mode) ((mode)->overlap)
+#endif
+
+#ifndef FRAMESIZE
+#define FRAMESIZE(mode) ((mode)->mdctSize)
+#endif
+
+/** Mode definition (opaque)
+ @brief Mode definition 
+ */
 struct CELTMode {
+   celt_uint32_t marker_start;
+   celt_int32_t Fs;
    int          overlap;
    int          mdctSize;
-   int          nbMdctBlocks;
    int          nbChannels;
    
    int          nbEBands;
-   int          nbPBands;
    int          pitchEnd;
    
-   const int   *eBands;
-   const int   *pBands;
-   const int   *nbPulses;
+   const celt_int16_t   *eBands;   /**< Definition for each "pseudo-critical band" */
+   
+   celt_word16_t ePredCoef;/**< Prediction coefficient for the energy encoding */
    
-   float        ePredCoef;
-   const float *eMeans;
-   const int   *eDecay;
+   int          nbAllocVectors; /**< Number of lines in the matrix below */
+   const celt_int16_t   *allocVectors;   /**< Number of bits in each band for several rates */
    
-   int          nbAllocVectors;
-   const int   *allocVectors;
+   const celt_int16_t * const *bits; /**< Cache for pulses->bits mapping in each band */
+
+   /* Stuff that could go in the {en,de}coder, but we save space this way */
+   mdct_lookup mdct;
+   kiss_fftr_cfg fft;
+
+   const celt_word16_t *window;
+
+   int         nbShortMdcts;
+   int         shortMdctSize;
+   mdct_lookup shortMdct;
+   const celt_word16_t *shortWindow;
+
+   struct PsyDecay psy;
+
+   int *prob;
+   celt_uint32_t marker_end;
 };
 
+int check_mode(const CELTMode *mode);
+
 #endif