diff --git a/libcelt/Makefile.am b/libcelt/Makefile.am index d8e2bdd5449dcc8d585f2ae5a316a83cb2012c8d..cd198bff252fc88553d574119315ff6f630d84e7 100644 --- a/libcelt/Makefile.am +++ b/libcelt/Makefile.am @@ -9,15 +9,15 @@ lib_LTLIBRARIES = libcelt.la # Sources for compilation in the library -libcelt_la_SOURCES = bands.c celt.c cwrs.c fftwrap.c mdct.c pitch.c smallft.c \ - vq.c +libcelt_la_SOURCES = bands.c celt.c cwrs.c fftwrap.c mdct.c modes.c pitch.c \ + smallft.c vq.c #noinst_HEADERS = libcelt_la_LDFLAGS = -version-info @CELT_LT_CURRENT@:@CELT_LT_REVISION@:@CELT_LT_AGE@ -noinst_HEADERS = arch.h bands.h celt.h cwrs.h fftwrap.h mdct.h os_support.h \ - pitch.h smallft.h vq.h +noinst_HEADERS = arch.h bands.h celt.h cwrs.h fftwrap.h mdct.h modes.h \ + os_support.h pitch.h smallft.h vq.h noinst_PROGRAMS = testcelt testcelt_SOURCES = testcelt.c diff --git a/libcelt/celt.c b/libcelt/celt.c index 35623ee2cbf661d1f10efb0f9688555e41347b5e..7a6643bae6e523863f6481e5684a33621f30f8db 100644 --- a/libcelt/celt.c +++ b/libcelt/celt.c @@ -36,10 +36,12 @@ #include "pitch.h" #include "fftwrap.h" #include "bands.h" +#include "modes.h" #define MAX_PERIOD 1024 struct CELTState_ { + const CELTMode *mode; int frame_size; int block_size; int nb_blocks; @@ -153,14 +155,13 @@ int celt_encode(CELTState *st, short *pcm) B = st->nb_blocks; float in[(B+1)*N]; - float X[B*N]; /**< Interleaved signal MDCTs */ - float P[B*N]; /**< Interleaved pitch MDCTs*/ + float X[B*N]; /**< Interleaved signal MDCTs */ + float P[B*N]; /**< Interleaved pitch MDCTs*/ float bandEp[NBANDS]; float bandE[NBANDS]; float gains[PBANDS]; int pitch_index; - /* FIXME: Add preemphasis */ for (i=0;i<N;i++) in[i] = st->in_mem[i]; for (;i<(B+1)*N;i++) diff --git a/libcelt/modes.c b/libcelt/modes.c new file mode 100644 index 0000000000000000000000000000000000000000..942b91951ed0af1e3bc17b76789e78f797483441 --- /dev/null +++ b/libcelt/modes.c @@ -0,0 +1,57 @@ +/* (C) 2007 Jean-Marc Valin, CSIRO +*/ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Xiph.org Foundation nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "modes.h" + +#define NBANDS128 15 +#define PBANDS128 5 +#define PITCH_END128 36 + +const int qbank1[NBANDS128+2] = {0, 2, 4, 6, 8, 12, 16, 20, 24, 28, 36, 44, 52, 68, 84, 116, 128}; + +const int qpulses1[NBANDS128] = {7, 5, 4, 4, 3, 3, 3, 4, 4, 4, -2, -1, -1, -1, 0}; + +const int pbank1[PBANDS128+2] = {0, 4, 8, 12, 20, PITCH_END128, 128}; + + +const CELTMode mode1 = { + 256, /**< frameSize */ + 128, /**< mdctSize */ + 2, /**< nbMdctBlocks */ + + NBANDS128, /**< nbEBands */ + PBANDS128, /**< nbPBands */ + PITCH_END128,/**< pitchEnd */ + + qbank1, /**< eBands */ + pbank1, /**< pBands*/ + qpulses1 /**< pulses */ +}; diff --git a/libcelt/modes.h b/libcelt/modes.h new file mode 100644 index 0000000000000000000000000000000000000000..44cd563ae66643d33f940f297c551d4aea13e4c3 --- /dev/null +++ b/libcelt/modes.h @@ -0,0 +1,49 @@ +/* (C) 2007 Jean-Marc Valin, CSIRO +*/ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Xiph.org Foundation nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef MODES_H +#define MODES_H + +typedef struct { + int frameSize; + int mdctSize; + int nbMdctBlocks; + + int nbEBands; + int nbPBands; + int pitchEnd; + + const int *eBands; + const int *pBands; + const int *pulses; +} CELTMode; + +#endif