Squashed commit of the following:
[opus.git] / libcelt / modes.h
index 76de37f..8760436 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 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 MODES_H
 #define MODES_H
 
+#include "celt_types.h"
 #include "celt.h"
+#include "arch.h"
+#include "mdct.h"
+#include "entenc.h"
+#include "entdec.h"
+
+#define MAX_CONFIG_SIZES 5
+
+#define CELT_BITSTREAM_VERSION 0x8000000e
+
+#ifdef STATIC_MODES
+#include "static_modes.h"
+#endif
+
+#define MAX_PERIOD 1024
+
+#ifndef CHANNELS
+# ifdef DISABLE_STEREO
+#  define CHANNELS(_C) (1)
+# else
+#  define CHANNELS(_C) (_C)
+# endif
+#endif
+
+#ifndef OVERLAP
+#define OVERLAP(mode) ((mode)->overlap)
+#endif
+
+#ifndef FRAMESIZE
+#define FRAMESIZE(mode) ((mode)->mdctSize)
+#endif
+
+typedef struct {
+   int size;
+   const celt_int16 *index;
+   const unsigned char *bits;
+} PulseCache;
+
+/** Mode definition (opaque)
+ @brief Mode definition 
+ */
+struct CELTMode {
+   celt_int32 Fs;
+   int          overlap;
 
-struct CELTMode_ {
-   int          frameSize;
-   int          mdctSize;
-   int          nbMdctBlocks;
-   
    int          nbEBands;
-   int          nbPBands;
-   int          pitchEnd;
+   int          effEBands;
+   celt_word16    preemph[4];
+   const celt_int16   *eBands;   /**< Definition for each "pseudo-critical band" */
    
-   const int   *eBands;
-   const int   *pBands;
-   const int   *pulses;
+   int          nbAllocVectors; /**< Number of lines in the matrix below */
+   const unsigned char   *allocVectors;   /**< Number of bits in each band for several rates */
+   
+   /* Stuff that could go in the {en,de}coder, but we save space this way */
+   mdct_lookup mdct;
+
+   const celt_word16 *window;
+
+   int         maxLM;
+   int         nbShortMdcts;
+   int         shortMdctSize;
+
+   const celt_int16 *prob;
+   const celt_int16 *logN;
+
+   PulseCache cache;
 };
 
+/* Prototypes for _ec versions of the encoder/decoder calls (not public) */
+int celt_encode_with_ec(CELTEncoder * restrict st, const celt_int16 * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes, ec_enc *enc);
+int celt_encode_with_ec_float(CELTEncoder * restrict st, const float * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes, ec_enc *enc);
+int celt_decode_with_ec(CELTDecoder * restrict st, const unsigned char *data, int len, celt_int16 * restrict pcm, int frame_size, ec_dec *dec);
+int celt_decode_with_ec_float(CELTDecoder * restrict st, const unsigned char *data, int len, float * restrict pcm, int frame_size, ec_dec *dec);
 #endif