mirror of
https://github.com/xiph/opus.git
synced 2025-05-17 00:48:29 +00:00
removed // comments and added stack_alloc.h (not used everywhere yet)
to make the code more C89-friendly.
This commit is contained in:
parent
2991af5b8e
commit
a85657bd29
15 changed files with 224 additions and 107 deletions
|
@ -23,11 +23,10 @@ libcelt_la_SOURCES = bands.c bitrdec.c bitree.c bitrenc.c celt.c cwrs.c \
|
||||||
|
|
||||||
libcelt_la_LDFLAGS = -version-info @CELT_LT_CURRENT@:@CELT_LT_REVISION@:@CELT_LT_AGE@
|
libcelt_la_LDFLAGS = -version-info @CELT_LT_CURRENT@:@CELT_LT_REVISION@:@CELT_LT_AGE@
|
||||||
|
|
||||||
noinst_HEADERS = arch.h bands.h bitrdec.h bitree.h bitrenc.h cwrs.h \
|
noinst_HEADERS = _kiss_fft_guts.h arch.h bands.h bitrdec.h bitree.h bitrenc.h \
|
||||||
ecintrin.h entcode.h entdec.h entenc.h kiss_fft.h \
|
cwrs.h ecintrin.h entcode.h entdec.h entenc.h kiss_fft.h kiss_fftr.h laplace.h \
|
||||||
kiss_fftr.h _kiss_fft_guts.h laplace.h mdct.h \
|
mdct.h mfrngcod.h modes.h os_support.h pgain_table.h pitch.h psy.h \
|
||||||
mfrngcod.h modes.h os_support.h pgain_table.h pitch.h psy.h \
|
quant_bands.h quant_pitch.h rate.h stack_alloc.h vq.h
|
||||||
quant_bands.h quant_pitch.h rate.h vq.h
|
|
||||||
|
|
||||||
noinst_PROGRAMS = testcelt
|
noinst_PROGRAMS = testcelt
|
||||||
testcelt_SOURCES = testcelt.c
|
testcelt_SOURCES = testcelt.c
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#define ARCH_H
|
#define ARCH_H
|
||||||
|
|
||||||
#include "celt_types.h"
|
#include "celt_types.h"
|
||||||
|
#include "stack_alloc.h"
|
||||||
|
|
||||||
#define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */
|
#define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */
|
||||||
#define ABS16(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 16-bit value. */
|
#define ABS16(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 16-bit value. */
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "bands.h"
|
#include "bands.h"
|
||||||
#include "modes.h"
|
#include "modes.h"
|
||||||
|
@ -81,10 +85,10 @@ void compute_band_energies(const CELTMode *m, float *X, float *bank)
|
||||||
for (j=B*eBands[i];j<B*eBands[i+1];j++)
|
for (j=B*eBands[i];j<B*eBands[i+1];j++)
|
||||||
sum += X[j*C+c]*X[j*C+c];
|
sum += X[j*C+c]*X[j*C+c];
|
||||||
bank[i*C+c] = sqrt(C*sum);
|
bank[i*C+c] = sqrt(C*sum);
|
||||||
//printf ("%f ", bank[i*C+c]);
|
/*printf ("%f ", bank[i*C+c]);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//printf ("\n");
|
/*printf ("\n");*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Normalise each band such that the energy is one. */
|
/* Normalise each band such that the energy is one. */
|
||||||
|
@ -110,7 +114,8 @@ void normalise_bands(const CELTMode *m, float *X, float *bank)
|
||||||
|
|
||||||
void renormalise_bands(const CELTMode *m, float *X)
|
void renormalise_bands(const CELTMode *m, float *X)
|
||||||
{
|
{
|
||||||
float tmpE[m->nbEBands*m->nbChannels];
|
VARDECL(float *tmpE);
|
||||||
|
ALLOC(tmpE, m->nbEBands*m->nbChannels, float);
|
||||||
compute_band_energies(m, X, tmpE);
|
compute_band_energies(m, X, tmpE);
|
||||||
normalise_bands(m, X, tmpE);
|
normalise_bands(m, X, tmpE);
|
||||||
}
|
}
|
||||||
|
@ -143,8 +148,9 @@ void compute_pitch_gain(const CELTMode *m, float *X, float *P, float *gains, flo
|
||||||
int i, B;
|
int i, B;
|
||||||
const int *eBands = m->eBands;
|
const int *eBands = m->eBands;
|
||||||
const int *pBands = m->pBands;
|
const int *pBands = m->pBands;
|
||||||
|
VARDECL(float *w);
|
||||||
B = m->nbMdctBlocks*m->nbChannels;
|
B = m->nbMdctBlocks*m->nbChannels;
|
||||||
float w[B*eBands[m->nbEBands]];
|
ALLOC(w, B*eBands[m->nbEBands], float);
|
||||||
for (i=0;i<m->nbEBands;i++)
|
for (i=0;i<m->nbEBands;i++)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
|
@ -165,9 +171,6 @@ void compute_pitch_gain(const CELTMode *m, float *X, float *P, float *gains, flo
|
||||||
Sxx += X[j]*X[j]*w[j];
|
Sxx += X[j]*X[j]*w[j];
|
||||||
}
|
}
|
||||||
gain = Sxy/(1e-10+Sxx);
|
gain = Sxy/(1e-10+Sxx);
|
||||||
//gain = Sxy/(2*(pbank[i+1]-pbank[i]));
|
|
||||||
//if (i<3)
|
|
||||||
//gain *= 1+.02*gain;
|
|
||||||
if (gain > 1.f)
|
if (gain > 1.f)
|
||||||
gain = 1.f;
|
gain = 1.f;
|
||||||
if (gain < 0.0f)
|
if (gain < 0.0f)
|
||||||
|
@ -175,7 +178,7 @@ void compute_pitch_gain(const CELTMode *m, float *X, float *P, float *gains, flo
|
||||||
/* We need to be a bit conservative, otherwise residual doesn't quantise well */
|
/* We need to be a bit conservative, otherwise residual doesn't quantise well */
|
||||||
gain *= .9f;
|
gain *= .9f;
|
||||||
gains[i] = gain;
|
gains[i] = gain;
|
||||||
//printf ("%f ", 1-sqrt(1-gain*gain));
|
/*printf ("%f ", 1-sqrt(1-gain*gain));*/
|
||||||
}
|
}
|
||||||
/*if(rand()%10==0)
|
/*if(rand()%10==0)
|
||||||
{
|
{
|
||||||
|
@ -198,7 +201,7 @@ void pitch_quant_bands(const CELTMode *m, float *X, float *P, float *gains)
|
||||||
int j;
|
int j;
|
||||||
for (j=B*pBands[i];j<B*pBands[i+1];j++)
|
for (j=B*pBands[i];j<B*pBands[i+1];j++)
|
||||||
P[j] *= gains[i];
|
P[j] *= gains[i];
|
||||||
//printf ("%f ", gain);
|
/*printf ("%f ", gain);*/
|
||||||
}
|
}
|
||||||
for (i=B*pBands[m->nbPBands];i<B*pBands[m->nbPBands+1];i++)
|
for (i=B*pBands[m->nbPBands];i<B*pBands[m->nbPBands+1];i++)
|
||||||
P[i] = 0;
|
P[i] = 0;
|
||||||
|
@ -210,11 +213,16 @@ void quant_bands(const CELTMode *m, float *X, float *P, float *W, int total_bits
|
||||||
{
|
{
|
||||||
int i, j, B, bits;
|
int i, j, B, bits;
|
||||||
const int *eBands = m->eBands;
|
const int *eBands = m->eBands;
|
||||||
B = m->nbMdctBlocks*m->nbChannels;
|
|
||||||
float norm[B*eBands[m->nbEBands+1]];
|
|
||||||
int pulses[m->nbEBands];
|
|
||||||
int offsets[m->nbEBands];
|
|
||||||
float alpha = .7;
|
float alpha = .7;
|
||||||
|
VARDECL(float *norm);
|
||||||
|
VARDECL(int *pulses);
|
||||||
|
VARDECL(int *offsets);
|
||||||
|
|
||||||
|
B = m->nbMdctBlocks*m->nbChannels;
|
||||||
|
|
||||||
|
ALLOC(norm, B*eBands[m->nbEBands+1], float);
|
||||||
|
ALLOC(pulses, m->nbEBands, int);
|
||||||
|
ALLOC(offsets, m->nbEBands, int);
|
||||||
|
|
||||||
for (i=0;i<m->nbEBands;i++)
|
for (i=0;i<m->nbEBands;i++)
|
||||||
offsets[i] = 0;
|
offsets[i] = 0;
|
||||||
|
@ -232,7 +240,6 @@ void quant_bands(const CELTMode *m, float *X, float *P, float *W, int total_bits
|
||||||
int q;
|
int q;
|
||||||
float theta, n;
|
float theta, n;
|
||||||
q = pulses[i];
|
q = pulses[i];
|
||||||
//q = m->nbPulses[i];
|
|
||||||
n = sqrt(B*(eBands[i+1]-eBands[i]));
|
n = sqrt(B*(eBands[i+1]-eBands[i]));
|
||||||
theta = .007*(B*(eBands[i+1]-eBands[i]))/(.1f+q);
|
theta = .007*(B*(eBands[i+1]-eBands[i]))/(.1f+q);
|
||||||
|
|
||||||
|
@ -258,10 +265,7 @@ void quant_bands(const CELTMode *m, float *X, float *P, float *W, int total_bits
|
||||||
}
|
}
|
||||||
for (j=B*eBands[i];j<B*eBands[i+1];j++)
|
for (j=B*eBands[i];j<B*eBands[i+1];j++)
|
||||||
norm[j] = X[j] * n;
|
norm[j] = X[j] * n;
|
||||||
//printf ("%f ", log2(ncwrs64(B*(eBands[i+1]-eBands[i]), q))/(B*(eBands[i+1]-eBands[i])));
|
|
||||||
//printf ("%f ", log2(ncwrs64(B*(eBands[i+1]-eBands[i]), q)));
|
|
||||||
}
|
}
|
||||||
//printf ("\n");
|
|
||||||
for (i=B*eBands[m->nbEBands];i<B*eBands[m->nbEBands+1];i++)
|
for (i=B*eBands[m->nbEBands];i<B*eBands[m->nbEBands+1];i++)
|
||||||
X[i] = 0;
|
X[i] = 0;
|
||||||
}
|
}
|
||||||
|
@ -271,11 +275,16 @@ void unquant_bands(const CELTMode *m, float *X, float *P, int total_bits, ec_dec
|
||||||
{
|
{
|
||||||
int i, j, B, bits;
|
int i, j, B, bits;
|
||||||
const int *eBands = m->eBands;
|
const int *eBands = m->eBands;
|
||||||
B = m->nbMdctBlocks*m->nbChannels;
|
|
||||||
float norm[B*eBands[m->nbEBands+1]];
|
|
||||||
int pulses[m->nbEBands];
|
|
||||||
int offsets[m->nbEBands];
|
|
||||||
float alpha = .7;
|
float alpha = .7;
|
||||||
|
VARDECL(float *norm);
|
||||||
|
VARDECL(int *pulses);
|
||||||
|
VARDECL(int *offsets);
|
||||||
|
|
||||||
|
B = m->nbMdctBlocks*m->nbChannels;
|
||||||
|
|
||||||
|
ALLOC(norm, B*eBands[m->nbEBands+1], float);
|
||||||
|
ALLOC(pulses, m->nbEBands, int);
|
||||||
|
ALLOC(offsets, m->nbEBands, int);
|
||||||
|
|
||||||
for (i=0;i<m->nbEBands;i++)
|
for (i=0;i<m->nbEBands;i++)
|
||||||
offsets[i] = 0;
|
offsets[i] = 0;
|
||||||
|
@ -288,7 +297,6 @@ void unquant_bands(const CELTMode *m, float *X, float *P, int total_bits, ec_dec
|
||||||
int q;
|
int q;
|
||||||
float theta, n;
|
float theta, n;
|
||||||
q = pulses[i];
|
q = pulses[i];
|
||||||
//q = m->nbPulses[i];
|
|
||||||
n = sqrt(B*(eBands[i+1]-eBands[i]));
|
n = sqrt(B*(eBands[i+1]-eBands[i]));
|
||||||
theta = .007*(B*(eBands[i+1]-eBands[i]))/(.1f+q);
|
theta = .007*(B*(eBands[i+1]-eBands[i]))/(.1f+q);
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,9 @@
|
||||||
|
|
||||||
#define MAX_PERIOD 1024
|
#define MAX_PERIOD 1024
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159263
|
||||||
|
#endif
|
||||||
|
|
||||||
struct CELTEncoder {
|
struct CELTEncoder {
|
||||||
const CELTMode *mode;
|
const CELTMode *mode;
|
||||||
|
@ -234,7 +237,7 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
|
||||||
for (i=0;i<st->overlap;i++)
|
for (i=0;i<st->overlap;i++)
|
||||||
st->in_mem[C*i+c] = in[C*(N*(B+1)-N4-st->overlap+i)+c];
|
st->in_mem[C*i+c] = in[C*(N*(B+1)-N4-st->overlap+i)+c];
|
||||||
}
|
}
|
||||||
//for (i=0;i<(B+1)*C*N;i++) printf ("%f(%d) ", in[i], i); printf ("\n");
|
/*for (i=0;i<(B+1)*C*N;i++) printf ("%f(%d) ", in[i], i); printf ("\n");*/
|
||||||
/* Compute MDCTs */
|
/* Compute MDCTs */
|
||||||
curr_power = compute_mdcts(&st->mdct_lookup, st->window, in, X, N, B, C);
|
curr_power = compute_mdcts(&st->mdct_lookup, st->window, in, X, N, B, C);
|
||||||
|
|
||||||
|
@ -264,7 +267,7 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
|
||||||
/* Compute MDCTs of the pitch part */
|
/* Compute MDCTs of the pitch part */
|
||||||
pitch_power = compute_mdcts(&st->mdct_lookup, st->window, st->out_mem+pitch_index*C, P, N, B, C);
|
pitch_power = compute_mdcts(&st->mdct_lookup, st->window, st->out_mem+pitch_index*C, P, N, B, C);
|
||||||
|
|
||||||
//printf ("%f %f\n", curr_power, pitch_power);
|
/*printf ("%f %f\n", curr_power, pitch_power);*/
|
||||||
/*int j;
|
/*int j;
|
||||||
for (j=0;j<B*N;j++)
|
for (j=0;j<B*N;j++)
|
||||||
printf ("%f ", X[j]);
|
printf ("%f ", X[j]);
|
||||||
|
@ -275,8 +278,8 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
|
||||||
/* Band normalisation */
|
/* Band normalisation */
|
||||||
compute_band_energies(st->mode, X, bandE);
|
compute_band_energies(st->mode, X, bandE);
|
||||||
normalise_bands(st->mode, X, bandE);
|
normalise_bands(st->mode, X, bandE);
|
||||||
//for (i=0;i<st->mode->nbEBands;i++)printf("%f ", bandE[i]);printf("\n");
|
/*for (i=0;i<st->mode->nbEBands;i++)printf("%f ", bandE[i]);printf("\n");*/
|
||||||
//for (i=0;i<N*B*C;i++)printf("%f ", X[i]);printf("\n");
|
/*for (i=0;i<N*B*C;i++)printf("%f ", X[i]);printf("\n");*/
|
||||||
|
|
||||||
quant_energy(st->mode, bandE, st->oldBandE, nbCompressedBytes*8/3, &st->enc);
|
quant_energy(st->mode, bandE, st->oldBandE, nbCompressedBytes*8/3, &st->enc);
|
||||||
|
|
||||||
|
@ -296,8 +299,8 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
|
||||||
if (C==2)
|
if (C==2)
|
||||||
stereo_mix(st->mode, P, bandE, 1);
|
stereo_mix(st->mode, P, bandE, 1);
|
||||||
/* Simulates intensity stereo */
|
/* Simulates intensity stereo */
|
||||||
//for (i=30;i<N*B;i++)
|
/*for (i=30;i<N*B;i++)
|
||||||
// X[i*C+1] = P[i*C+1] = 0;
|
X[i*C+1] = P[i*C+1] = 0;*/
|
||||||
|
|
||||||
/* Pitch prediction */
|
/* Pitch prediction */
|
||||||
compute_pitch_gain(st->mode, X, P, gains, bandE);
|
compute_pitch_gain(st->mode, X, P, gains, bandE);
|
||||||
|
@ -316,7 +319,7 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
|
||||||
|
|
||||||
pitch_quant_bands(st->mode, X, P, gains);
|
pitch_quant_bands(st->mode, X, P, gains);
|
||||||
|
|
||||||
//for (i=0;i<B*N;i++) printf("%f ",P[i]);printf("\n");
|
/*for (i=0;i<B*N;i++) printf("%f ",P[i]);printf("\n");*/
|
||||||
/* Compute residual that we're going to encode */
|
/* Compute residual that we're going to encode */
|
||||||
for (i=0;i<B*C*N;i++)
|
for (i=0;i<B*C*N;i++)
|
||||||
X[i] -= P[i];
|
X[i] -= P[i];
|
||||||
|
@ -358,7 +361,7 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
|
||||||
|
|
||||||
if (ec_enc_tell(&st->enc, 0) < nbCompressedBytes*8 - 7)
|
if (ec_enc_tell(&st->enc, 0) < nbCompressedBytes*8 - 7)
|
||||||
celt_warning_int ("many unused bits: ", nbCompressedBytes*8-ec_enc_tell(&st->enc, 0));
|
celt_warning_int ("many unused bits: ", nbCompressedBytes*8-ec_enc_tell(&st->enc, 0));
|
||||||
//printf ("%d\n", ec_enc_tell(&st->enc, 0)-8*nbCompressedBytes);
|
/*printf ("%d\n", ec_enc_tell(&st->enc, 0)-8*nbCompressedBytes);*/
|
||||||
/* Finishing the stream with a 0101... pattern so that the decoder can check is everything's right */
|
/* Finishing the stream with a 0101... pattern so that the decoder can check is everything's right */
|
||||||
{
|
{
|
||||||
int val = 0;
|
int val = 0;
|
||||||
|
@ -377,7 +380,7 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
|
||||||
celt_warning_int ("got too many bytes:", nbBytes);
|
celt_warning_int ("got too many bytes:", nbBytes);
|
||||||
return CELT_INTERNAL_ERROR;
|
return CELT_INTERNAL_ERROR;
|
||||||
}
|
}
|
||||||
//printf ("%d\n", *nbBytes);
|
/*printf ("%d\n", *nbBytes);*/
|
||||||
data = ec_byte_get_buffer(&st->buf);
|
data = ec_byte_get_buffer(&st->buf);
|
||||||
for (i=0;i<nbBytes;i++)
|
for (i=0;i<nbBytes;i++)
|
||||||
compressed[i] = data[i];
|
compressed[i] = data[i];
|
||||||
|
@ -621,6 +624,6 @@ int celt_decode(CELTDecoder *st, unsigned char *data, int len, celt_int16_t *pcm
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
//printf ("\n");
|
/*printf ("\n");*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ void ec_laplace_encode(ec_enc *enc, int value, int decay)
|
||||||
fl = 0;
|
fl = 0;
|
||||||
if (s)
|
if (s)
|
||||||
fl += fs;
|
fl += fs;
|
||||||
//printf ("enc: %d %d %d\n", fl, fs, ft);
|
/*printf ("enc: %d %d %d\n", fl, fs, ft);*/
|
||||||
ec_encode(enc, fl, fl+fs, ft);
|
ec_encode(enc, fl, fl+fs, ft);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ int ec_laplace_decode(ec_dec *dec, int decay)
|
||||||
ft = ec_laplace_get_total(decay);
|
ft = ec_laplace_get_total(decay);
|
||||||
|
|
||||||
fm = ec_decode(dec, ft);
|
fm = ec_decode(dec, ft);
|
||||||
//printf ("fm: %d/%d\n", fm, ft);
|
/*printf ("fm: %d/%d\n", fm, ft);*/
|
||||||
fl = 0;
|
fl = 0;
|
||||||
fs = 1<<15;
|
fs = 1<<15;
|
||||||
fh = fs;
|
fh = fs;
|
||||||
|
|
|
@ -47,6 +47,10 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "os_support.h"
|
#include "os_support.h"
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159263
|
||||||
|
#endif
|
||||||
|
|
||||||
void mdct_init(mdct_lookup *l,int N)
|
void mdct_init(mdct_lookup *l,int N)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -91,14 +91,14 @@ static int *compute_ebands(int Fs, int frame_size, int *nbEBands)
|
||||||
int i, res, min_width, lin, low, high;
|
int i, res, min_width, lin, low, high;
|
||||||
res = (Fs+frame_size)/(2*frame_size);
|
res = (Fs+frame_size)/(2*frame_size);
|
||||||
min_width = MIN_BINS*res;
|
min_width = MIN_BINS*res;
|
||||||
//printf ("min_width = %d\n", min_width);
|
/*printf ("min_width = %d\n", min_width);*/
|
||||||
|
|
||||||
/* Find where the linear part ends (i.e. where the spacing is more than min_width */
|
/* Find where the linear part ends (i.e. where the spacing is more than min_width */
|
||||||
for (lin=0;lin<BARK_BANDS;lin++)
|
for (lin=0;lin<BARK_BANDS;lin++)
|
||||||
if (bark_freq[lin+1]-bark_freq[lin] >= min_width)
|
if (bark_freq[lin+1]-bark_freq[lin] >= min_width)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//printf ("lin = %d (%d Hz)\n", lin, bark_freq[lin]);
|
/*printf ("lin = %d (%d Hz)\n", lin, bark_freq[lin]);*/
|
||||||
low = ((bark_freq[lin]/res)+(MIN_BINS-1))/MIN_BINS;
|
low = ((bark_freq[lin]/res)+(MIN_BINS-1))/MIN_BINS;
|
||||||
high = BARK_BANDS-lin;
|
high = BARK_BANDS-lin;
|
||||||
*nbEBands = low+high;
|
*nbEBands = low+high;
|
||||||
|
@ -145,7 +145,7 @@ static void compute_pbands(CELTMode *mode, int res)
|
||||||
for (j=0;j<mode->nbEBands;j++)
|
for (j=0;j<mode->nbEBands;j++)
|
||||||
if (mode->eBands[j] <= pBands[i] && mode->eBands[j+1] > pBands[i])
|
if (mode->eBands[j] <= pBands[i] && mode->eBands[j+1] > pBands[i])
|
||||||
break;
|
break;
|
||||||
//printf ("%d %d\n", i, j);
|
/*printf ("%d %d\n", i, j);*/
|
||||||
if (mode->eBands[j] != pBands[i])
|
if (mode->eBands[j] != pBands[i])
|
||||||
{
|
{
|
||||||
if (pBands[i]-mode->eBands[j] < mode->eBands[j+1]-pBands[i] &&
|
if (pBands[i]-mode->eBands[j] < mode->eBands[j+1]-pBands[i] &&
|
||||||
|
@ -181,7 +181,6 @@ static void compute_allocation_table(CELTMode *mode, int res)
|
||||||
int num, den;
|
int num, den;
|
||||||
num = band_allocation[i*BARK_BANDS+j] * (edge-bark_freq[j]);
|
num = band_allocation[i*BARK_BANDS+j] * (edge-bark_freq[j]);
|
||||||
den = bark_freq[j+1]-bark_freq[j];
|
den = bark_freq[j+1]-bark_freq[j];
|
||||||
//low = band_allocation[i*BARK_BANDS+j] * (edge-bark_freq[j])/(bark_freq[j+1]-bark_freq[j]);
|
|
||||||
low = (num+den/2)/den;
|
low = (num+den/2)/den;
|
||||||
allocVectors[i*mode->nbEBands+eband] += low;
|
allocVectors[i*mode->nbEBands+eband] += low;
|
||||||
eband++;
|
eband++;
|
||||||
|
@ -250,7 +249,7 @@ CELTMode *celt_mode_create(int Fs, int channels, int frame_size, int lookahead,
|
||||||
|
|
||||||
compute_allocation_table(mode, res);
|
compute_allocation_table(mode, res);
|
||||||
compute_alloc_cache(mode);
|
compute_alloc_cache(mode);
|
||||||
//printf ("%d bands\n", mode->nbEBands);
|
/*printf ("%d bands\n", mode->nbEBands);*/
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,10 +56,10 @@ void find_spectral_pitch(kiss_fftr_cfg fft, struct PsyDecay *decay, float *x, fl
|
||||||
for (i=1;i<C*n2;i++)
|
for (i=1;i<C*n2;i++)
|
||||||
{
|
{
|
||||||
float n;
|
float n;
|
||||||
//n = 1.f/(1e1+sqrt(sqrt((X[2*i-1]*X[2*i-1] + X[2*i ]*X[2*i ])*(Y[2*i-1]*Y[2*i-1] + Y[2*i ]*Y[2*i ]))));
|
/*n = 1.f/(1e1+sqrt(sqrt((X[2*i-1]*X[2*i-1] + X[2*i ]*X[2*i ])*(Y[2*i-1]*Y[2*i-1] + Y[2*i ]*Y[2*i ]))));*/
|
||||||
//n = 1;
|
/*n = 1;*/
|
||||||
n = 1.f/sqrt(1+curve[i]);
|
n = 1.f/sqrt(1+curve[i]);
|
||||||
//n = 1.f/(1+curve[i]);
|
/*n = 1.f/(1+curve[i]);*/
|
||||||
float tmp = X[2*i];
|
float tmp = X[2*i];
|
||||||
X[2*i] = (X[2*i ]*Y[2*i ] + X[2*i+1]*Y[2*i+1])*n;
|
X[2*i] = (X[2*i ]*Y[2*i ] + X[2*i+1]*Y[2*i+1])*n;
|
||||||
X[2*i+1] = (- X[2*i+1]*Y[2*i ] + tmp*Y[2*i+1])*n;
|
X[2*i+1] = (- X[2*i+1]*Y[2*i ] + tmp*Y[2*i+1])*n;
|
||||||
|
@ -68,18 +68,17 @@ void find_spectral_pitch(kiss_fftr_cfg fft, struct PsyDecay *decay, float *x, fl
|
||||||
kiss_fftri(fft, X, xx);
|
kiss_fftri(fft, X, xx);
|
||||||
|
|
||||||
float max_corr=-1e10;
|
float max_corr=-1e10;
|
||||||
//int pitch;
|
|
||||||
*pitch = 0;
|
*pitch = 0;
|
||||||
for (i=0;i<lag-len;i++)
|
for (i=0;i<lag-len;i++)
|
||||||
{
|
{
|
||||||
//printf ("%f ", xx[i]);
|
/*printf ("%f ", xx[i]);*/
|
||||||
if (xx[i] > max_corr)
|
if (xx[i] > max_corr)
|
||||||
{
|
{
|
||||||
*pitch = i;
|
*pitch = i;
|
||||||
max_corr = xx[i];
|
max_corr = xx[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//printf ("\n");
|
/*printf ("\n");
|
||||||
//printf ("%d %f\n", *pitch, max_corr);
|
printf ("%d %f\n", *pitch, max_corr);
|
||||||
//printf ("%d\n", *pitch);
|
printf ("%d\n", *pitch);*/
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ void psydecay_init(struct PsyDecay *decay, int len, int Fs)
|
||||||
decay->decayR[i] = pow(.1f, deriv);
|
decay->decayR[i] = pow(.1f, deriv);
|
||||||
/* decay corresponding to -25dB/Bark */
|
/* decay corresponding to -25dB/Bark */
|
||||||
decay->decayL[i] = pow(0.0031623f, deriv);
|
decay->decayL[i] = pow(0.0031623f, deriv);
|
||||||
//printf ("%f %f\n", decayL[i], decayR[i]);
|
/*printf ("%f %f\n", decayL[i], decayR[i]);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ static void spreading_func(struct PsyDecay *d, float *psd, float *mask, int len,
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
float mem;
|
float mem;
|
||||||
//for (i=0;i<len;i++) printf ("%f ", psd[i]);
|
/*for (i=0;i<len;i++) printf ("%f ", psd[i]);*/
|
||||||
/* Compute right slope (-10 dB/Bark) */
|
/* Compute right slope (-10 dB/Bark) */
|
||||||
mem=psd[0];
|
mem=psd[0];
|
||||||
for (i=0;i<len;i++)
|
for (i=0;i<len;i++)
|
||||||
|
@ -90,7 +90,7 @@ static void spreading_func(struct PsyDecay *d, float *psd, float *mask, int len,
|
||||||
mask[i] = (1-d->decayR[i])*mask[i] + d->decayL[i]*mem;
|
mask[i] = (1-d->decayR[i])*mask[i] + d->decayL[i]*mem;
|
||||||
mem = mask[i];
|
mem = mask[i];
|
||||||
}
|
}
|
||||||
//for (i=0;i<len;i++) printf ("%f ", mask[i]); printf ("\n");
|
/*for (i=0;i<len;i++) printf ("%f ", mask[i]); printf ("\n");*/
|
||||||
#if 0 /* Prints signal and mask energy per critical band */
|
#if 0 /* Prints signal and mask energy per critical band */
|
||||||
for (i=0;i<25;i++)
|
for (i=0;i<25;i++)
|
||||||
{
|
{
|
||||||
|
@ -139,7 +139,7 @@ void compute_mdct_masking(struct PsyDecay *decay, float *X, float *mask, int len
|
||||||
mask[i] = X[i]*X[i];
|
mask[i] = X[i]*X[i];
|
||||||
for (i=1;i<len-1;i++)
|
for (i=1;i<len-1;i++)
|
||||||
psd[i] = .5*mask[i] + .25*(mask[i-1]+mask[i+1]);
|
psd[i] = .5*mask[i] + .25*(mask[i-1]+mask[i+1]);
|
||||||
//psd[0] = .5*mask[0]+.25*(mask[1]+mask[2]);
|
/*psd[0] = .5*mask[0]+.25*(mask[1]+mask[2]);*/
|
||||||
psd[0] = .5*mask[0]+.5*mask[1];
|
psd[0] = .5*mask[0]+.5*mask[1];
|
||||||
psd[len-1] = .5*(mask[len-1]+mask[len-2]);
|
psd[len-1] = .5*(mask[len-1]+mask[len-2]);
|
||||||
/* TODO: Do tone masking */
|
/* TODO: Do tone masking */
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
const float eMeans[24] = {45.f, -8.f, -12.f, -2.5f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
|
const float eMeans[24] = {45.f, -8.f, -12.f, -2.5f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
|
||||||
|
|
||||||
//const int frac[24] = {4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2};
|
/*const int frac[24] = {4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2};*/
|
||||||
const int frac[24] = {8, 6, 5, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2};
|
const int frac[24] = {8, 6, 5, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2};
|
||||||
|
|
||||||
static void quant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands, int budget, ec_enc *enc)
|
static void quant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands, int budget, ec_enc *enc)
|
||||||
|
@ -60,13 +60,10 @@ static void quant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands
|
||||||
float mean = (1-coef)*eMeans[i];
|
float mean = (1-coef)*eMeans[i];
|
||||||
x = 20*log10(.3+eBands[i]);
|
x = 20*log10(.3+eBands[i]);
|
||||||
res = 6.;
|
res = 6.;
|
||||||
//res = 1;
|
|
||||||
f = (x-mean-coef*oldEBands[i]-prev)/res;
|
f = (x-mean-coef*oldEBands[i]-prev)/res;
|
||||||
qi = (int)floor(.5+f);
|
qi = (int)floor(.5+f);
|
||||||
//if (i> 4 && qi<-2)
|
/*ec_laplace_encode(enc, qi, i==0?11192:6192);*/
|
||||||
// qi = -2;
|
/*ec_laplace_encode(enc, qi, 8500-i*200);*/
|
||||||
//ec_laplace_encode(enc, qi, i==0?11192:6192);
|
|
||||||
//ec_laplace_encode(enc, qi, 8500-i*200);
|
|
||||||
/* If we don't have enough bits to encode all the energy, just assume something safe. */
|
/* If we don't have enough bits to encode all the energy, just assume something safe. */
|
||||||
if (ec_enc_tell(enc, 0) - bits > budget)
|
if (ec_enc_tell(enc, 0) - bits > budget)
|
||||||
qi = -1;
|
qi = -1;
|
||||||
|
@ -75,16 +72,16 @@ static void quant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands
|
||||||
q = qi*res;
|
q = qi*res;
|
||||||
error[i] = f - qi;
|
error[i] = f - qi;
|
||||||
|
|
||||||
//printf("%d ", qi);
|
/*printf("%d ", qi);*/
|
||||||
//printf("%f %f ", pred+prev+q, x);
|
/*printf("%f %f ", pred+prev+q, x);*/
|
||||||
//printf("%f ", x-pred);
|
/*printf("%f ", x-pred);*/
|
||||||
|
|
||||||
oldEBands[i] = mean+coef*oldEBands[i]+prev+q;
|
oldEBands[i] = mean+coef*oldEBands[i]+prev+q;
|
||||||
|
|
||||||
prev = mean+prev+(1-beta)*q;
|
prev = mean+prev+(1-beta)*q;
|
||||||
}
|
}
|
||||||
//bits = ec_enc_tell(enc, 0) - bits;
|
/*bits = ec_enc_tell(enc, 0) - bits;*/
|
||||||
//printf ("%d\n", bits);
|
/*printf ("%d\n", bits);*/
|
||||||
for (i=0;i<m->nbEBands;i++)
|
for (i=0;i<m->nbEBands;i++)
|
||||||
{
|
{
|
||||||
int q2;
|
int q2;
|
||||||
|
@ -98,7 +95,7 @@ static void quant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands
|
||||||
ec_enc_uint(enc, q2, frac[i]);
|
ec_enc_uint(enc, q2, frac[i]);
|
||||||
offset = ((q2+.5)/frac[i])-.5;
|
offset = ((q2+.5)/frac[i])-.5;
|
||||||
oldEBands[i] += 6.*offset;
|
oldEBands[i] += 6.*offset;
|
||||||
//printf ("%f ", error[i] - offset);
|
/*printf ("%f ", error[i] - offset);*/
|
||||||
}
|
}
|
||||||
for (i=0;i<m->nbEBands;i++)
|
for (i=0;i<m->nbEBands;i++)
|
||||||
{
|
{
|
||||||
|
@ -106,9 +103,9 @@ static void quant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands
|
||||||
if (eBands[i] < 0)
|
if (eBands[i] < 0)
|
||||||
eBands[i] = 0;
|
eBands[i] = 0;
|
||||||
}
|
}
|
||||||
//printf ("%d\n", ec_enc_tell(enc, 0)-9);
|
/*printf ("%d\n", ec_enc_tell(enc, 0)-9);*/
|
||||||
|
|
||||||
//printf ("\n");
|
/*printf ("\n");*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unquant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands, int budget, ec_dec *dec)
|
static void unquant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands, int budget, ec_dec *dec)
|
||||||
|
@ -150,12 +147,12 @@ static void unquant_energy_mono(const CELTMode *m, float *eBands, float *oldEBan
|
||||||
}
|
}
|
||||||
for (i=0;i<m->nbEBands;i++)
|
for (i=0;i<m->nbEBands;i++)
|
||||||
{
|
{
|
||||||
//printf ("%f ", error[i] - offset);
|
/*printf ("%f ", error[i] - offset);*/
|
||||||
eBands[i] = pow(10, .05*oldEBands[i])-.3;
|
eBands[i] = pow(10, .05*oldEBands[i])-.3;
|
||||||
if (eBands[i] < 0)
|
if (eBands[i] < 0)
|
||||||
eBands[i] = 0;
|
eBands[i] = 0;
|
||||||
}
|
}
|
||||||
//printf ("\n");
|
/*printf ("\n");*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -61,12 +61,12 @@ int quant_pitch(float *gains, int len, ec_enc *enc)
|
||||||
{
|
{
|
||||||
int i, id;
|
int i, id;
|
||||||
float g2[len];
|
float g2[len];
|
||||||
//for (i=0;i<len;i++) printf ("%f ", gains[i]);printf ("\n");
|
/*for (i=0;i<len;i++) printf ("%f ", gains[i]);printf ("\n");*/
|
||||||
for (i=0;i<len;i++)
|
for (i=0;i<len;i++)
|
||||||
g2[i] = 1-sqrt(1-gains[i]*gains[i]);
|
g2[i] = 1-sqrt(1-gains[i]*gains[i]);
|
||||||
id = vq_index(g2, pgain_table, len, 128);
|
id = vq_index(g2, pgain_table, len, 128);
|
||||||
ec_enc_uint(enc, id, 128);
|
ec_enc_uint(enc, id, 128);
|
||||||
//for (i=0;i<len;i++) printf ("%f ", pgain_table[id*len+i]);printf ("\n");
|
/*for (i=0;i<len;i++) printf ("%f ", pgain_table[id*len+i]);printf ("\n");*/
|
||||||
for (i=0;i<len;i++)
|
for (i=0;i<len;i++)
|
||||||
gains[i] = (sqrt(1-(1-pgain_table[id*len+i])*(1-pgain_table[id*len+i])));
|
gains[i] = (sqrt(1-(1-pgain_table[id*len+i])*(1-pgain_table[id*len+i])));
|
||||||
return id!=0;
|
return id!=0;
|
||||||
|
|
|
@ -49,17 +49,17 @@ static int log2_frac(ec_uint32 val, int frac)
|
||||||
int i;
|
int i;
|
||||||
/* EC_ILOG() actually returns log2()+1, go figure */
|
/* EC_ILOG() actually returns log2()+1, go figure */
|
||||||
int L = EC_ILOG(val)-1;
|
int L = EC_ILOG(val)-1;
|
||||||
//printf ("in: %d %d ", val, L);
|
/*printf ("in: %d %d ", val, L);*/
|
||||||
if (L>14)
|
if (L>14)
|
||||||
val >>= L-14;
|
val >>= L-14;
|
||||||
else if (L<14)
|
else if (L<14)
|
||||||
val <<= 14-L;
|
val <<= 14-L;
|
||||||
L <<= frac;
|
L <<= frac;
|
||||||
//printf ("%d\n", val);
|
/*printf ("%d\n", val);*/
|
||||||
for (i=0;i<frac;i++)
|
for (i=0;i<frac;i++)
|
||||||
{
|
{
|
||||||
val = (val*val) >> 15;
|
val = (val*val) >> 15;
|
||||||
//printf ("%d\n", val);
|
/*printf ("%d\n", val);*/
|
||||||
if (val > 16384)
|
if (val > 16384)
|
||||||
L |= (1<<(frac-i-1));
|
L |= (1<<(frac-i-1));
|
||||||
else
|
else
|
||||||
|
@ -73,17 +73,17 @@ static int log2_frac64(ec_uint64 val, int frac)
|
||||||
int i;
|
int i;
|
||||||
/* EC_ILOG64() actually returns log2()+1, go figure */
|
/* EC_ILOG64() actually returns log2()+1, go figure */
|
||||||
int L = EC_ILOG64(val)-1;
|
int L = EC_ILOG64(val)-1;
|
||||||
//printf ("in: %d %d ", val, L);
|
/*printf ("in: %d %d ", val, L);*/
|
||||||
if (L>14)
|
if (L>14)
|
||||||
val >>= L-14;
|
val >>= L-14;
|
||||||
else if (L<14)
|
else if (L<14)
|
||||||
val <<= 14-L;
|
val <<= 14-L;
|
||||||
L <<= frac;
|
L <<= frac;
|
||||||
//printf ("%d\n", val);
|
/*printf ("%d\n", val);*/
|
||||||
for (i=0;i<frac;i++)
|
for (i=0;i<frac;i++)
|
||||||
{
|
{
|
||||||
val = (val*val) >> 15;
|
val = (val*val) >> 15;
|
||||||
//printf ("%d\n", val);
|
/*printf ("%d\n", val);*/
|
||||||
if (val > 16384)
|
if (val > 16384)
|
||||||
L |= (1<<(frac-i-1));
|
L |= (1<<(frac-i-1));
|
||||||
else
|
else
|
||||||
|
@ -179,7 +179,7 @@ int vec_bits2pulses(const CELTMode *m, const int *bands, int *bits, int *pulses,
|
||||||
pulses[i] = bits2pulses(m, i, bits[i]);
|
pulses[i] = bits2pulses(m, i, bits[i]);
|
||||||
sum += m->bits[i][pulses[i]];
|
sum += m->bits[i][pulses[i]];
|
||||||
}
|
}
|
||||||
//printf ("sum = %d\n", sum);
|
/*printf ("sum = %d\n", sum);*/
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ int interp_bits2pulses(const CELTMode *m, int *bits1, int *bits2, int total, int
|
||||||
else
|
else
|
||||||
lo = mid;
|
lo = mid;
|
||||||
}
|
}
|
||||||
//printf ("interp bisection gave %d\n", lo);
|
/*printf ("interp bisection gave %d\n", lo);*/
|
||||||
for (j=0;j<len;j++)
|
for (j=0;j<len;j++)
|
||||||
bits[j] = ((1<<BITRES)-lo)*bits1[j] + lo*bits2[j];
|
bits[j] = ((1<<BITRES)-lo)*bits1[j] + lo*bits2[j];
|
||||||
out = vec_bits2pulses(m, bands, bits, pulses, len);
|
out = vec_bits2pulses(m, bands, bits, pulses, len);
|
||||||
|
@ -220,7 +220,6 @@ int interp_bits2pulses(const CELTMode *m, int *bits1, int *bits2, int total, int
|
||||||
out = out+m->bits[j][pulses[j]+1]-m->bits[j][pulses[j]];
|
out = out+m->bits[j][pulses[j]+1]-m->bits[j][pulses[j]];
|
||||||
pulses[j] += 1;
|
pulses[j] += 1;
|
||||||
incremented = 1;
|
incremented = 1;
|
||||||
//printf ("INCREMENT %d\n", j);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,14 +252,14 @@ int compute_allocation(const CELTMode *m, int *offsets, int total, int *pulses)
|
||||||
bits[j] = (m->allocVectors[mid*len+j] + offsets[j])<<BITRES;
|
bits[j] = (m->allocVectors[mid*len+j] + offsets[j])<<BITRES;
|
||||||
if (bits[j] < 0)
|
if (bits[j] < 0)
|
||||||
bits[j] = 0;
|
bits[j] = 0;
|
||||||
//printf ("%d ", bits[j]);
|
/*printf ("%d ", bits[j]);*/
|
||||||
}
|
}
|
||||||
//printf ("\n");
|
/*printf ("\n");*/
|
||||||
if (vec_bits2pulses(m, m->eBands, bits, pulses, len) > total<<BITRES)
|
if (vec_bits2pulses(m, m->eBands, bits, pulses, len) > total<<BITRES)
|
||||||
hi = mid;
|
hi = mid;
|
||||||
else
|
else
|
||||||
lo = mid;
|
lo = mid;
|
||||||
//printf ("lo = %d, hi = %d\n", lo, hi);
|
/*printf ("lo = %d, hi = %d\n", lo, hi);*/
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
int bits1[len];
|
int bits1[len];
|
||||||
|
|
115
libcelt/stack_alloc.h
Normal file
115
libcelt/stack_alloc.h
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
/* Copyright (C) 2002 Jean-Marc Valin */
|
||||||
|
/**
|
||||||
|
@file stack_alloc.h
|
||||||
|
@brief Temporary memory allocation on stack
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
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 STACK_ALLOC_H
|
||||||
|
#define STACK_ALLOC_H
|
||||||
|
|
||||||
|
#ifdef USE_ALLOCA
|
||||||
|
# ifdef WIN32
|
||||||
|
# include <malloc.h>
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_ALLOCA_H
|
||||||
|
# include <alloca.h>
|
||||||
|
# else
|
||||||
|
# include <stdlib.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def ALIGN(stack, size)
|
||||||
|
*
|
||||||
|
* Aligns the stack to a 'size' boundary
|
||||||
|
*
|
||||||
|
* @param stack Stack
|
||||||
|
* @param size New size boundary
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def PUSH(stack, size, type)
|
||||||
|
*
|
||||||
|
* Allocates 'size' elements of type 'type' on the stack
|
||||||
|
*
|
||||||
|
* @param stack Stack
|
||||||
|
* @param size Number of elements
|
||||||
|
* @param type Type of element
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def VARDECL(var)
|
||||||
|
*
|
||||||
|
* Declare variable on stack
|
||||||
|
*
|
||||||
|
* @param var Variable to declare
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def ALLOC(var, size, type)
|
||||||
|
*
|
||||||
|
* Allocate 'size' elements of 'type' on stack
|
||||||
|
*
|
||||||
|
* @param var Name of variable to allocate
|
||||||
|
* @param size Number of elements
|
||||||
|
* @param type Type of element
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef ENABLE_VALGRIND
|
||||||
|
|
||||||
|
#include <valgrind/memcheck.h>
|
||||||
|
|
||||||
|
#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1))
|
||||||
|
|
||||||
|
#define PUSH(stack, size, type) (VALGRIND_MAKE_NOACCESS(stack, 1000),ALIGN((stack),sizeof(type)),VALGRIND_MAKE_WRITABLE(stack, ((size)*sizeof(type))),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type))))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1))
|
||||||
|
|
||||||
|
#define PUSH(stack, size, type) (ALIGN((stack),sizeof(type)),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type))))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(VAR_ARRAYS)
|
||||||
|
#define VARDECL(var)
|
||||||
|
#define ALLOC(var, size, type) type var[size]
|
||||||
|
#elif defined(USE_ALLOCA)
|
||||||
|
#define VARDECL(var) var
|
||||||
|
#define ALLOC(var, size, type) var = alloca(sizeof(type)*(size))
|
||||||
|
#else
|
||||||
|
#define VARDECL(var) var
|
||||||
|
#define ALLOC(var, size, type) var = PUSH(stack, size, type)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -92,7 +92,6 @@ int main(int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//mode = celt_mode_create(44100, 1, 192, 64);
|
|
||||||
/* Use mode4 for stereo and don't forget to change the value of CHANNEL above */
|
/* Use mode4 for stereo and don't forget to change the value of CHANNEL above */
|
||||||
enc = celt_encoder_new(mode);
|
enc = celt_encoder_new(mode);
|
||||||
dec = celt_decoder_new(mode);
|
dec = celt_decoder_new(mode);
|
||||||
|
@ -112,8 +111,6 @@ int main(int argc, char *argv[])
|
||||||
fprintf (stderr, "celt_encode() returned %d\n", len);
|
fprintf (stderr, "celt_encode() returned %d\n", len);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
//printf ("\n");
|
|
||||||
//printf ("%d\n", len);
|
|
||||||
/* This is to simulate packet loss */
|
/* This is to simulate packet loss */
|
||||||
#if 1
|
#if 1
|
||||||
if (rand()%100==-1)
|
if (rand()%100==-1)
|
||||||
|
@ -124,7 +121,6 @@ int main(int argc, char *argv[])
|
||||||
for (i=0;i<frame_size*channels;i++)
|
for (i=0;i<frame_size*channels;i++)
|
||||||
out[i] = in[i];
|
out[i] = in[i];
|
||||||
#endif
|
#endif
|
||||||
//printf ("\n");
|
|
||||||
for (i=0;i<frame_size*channels;i++)
|
for (i=0;i<frame_size*channels;i++)
|
||||||
rmsd += (in[i]-out[i])*1.0*(in[i]-out[i]);
|
rmsd += (in[i]-out[i])*1.0*(in[i]-out[i]);
|
||||||
count++;
|
count++;
|
||||||
|
|
30
libcelt/vq.c
30
libcelt/vq.c
|
@ -70,10 +70,8 @@ struct NBest {
|
||||||
void alg_quant(float *x, float *W, int N, int K, float *p, float alpha, ec_enc *enc)
|
void alg_quant(float *x, float *W, int N, int K, float *p, float alpha, ec_enc *enc)
|
||||||
{
|
{
|
||||||
int L = 3;
|
int L = 3;
|
||||||
//float tata[200];
|
|
||||||
float _y[L][N];
|
float _y[L][N];
|
||||||
int _iy[L][N];
|
int _iy[L][N];
|
||||||
//float tata2[200];
|
|
||||||
float _ny[L][N];
|
float _ny[L][N];
|
||||||
int _iny[L][N];
|
int _iny[L][N];
|
||||||
float *(ny[L]), *(y[L]);
|
float *(ny[L]), *(y[L]);
|
||||||
|
@ -125,7 +123,7 @@ void alg_quant(float *x, float *W, int N, int K, float *p, float alpha, ec_enc *
|
||||||
pulsesAtOnce = 1;
|
pulsesAtOnce = 1;
|
||||||
if (pulsesLeft-pulsesAtOnce > 3 || N > 30)
|
if (pulsesLeft-pulsesAtOnce > 3 || N > 30)
|
||||||
Lupdate = 1;
|
Lupdate = 1;
|
||||||
//printf ("%d %d %d/%d %d\n", Lupdate, pulsesAtOnce, pulsesLeft, K, N);
|
/*printf ("%d %d %d/%d %d\n", Lupdate, pulsesAtOnce, pulsesLeft, K, N);*/
|
||||||
L2 = Lupdate;
|
L2 = Lupdate;
|
||||||
if (L2>maxL)
|
if (L2>maxL)
|
||||||
{
|
{
|
||||||
|
@ -147,7 +145,7 @@ void alg_quant(float *x, float *W, int N, int K, float *p, float alpha, ec_enc *
|
||||||
/* All pulses at one location must have the same sign. */
|
/* All pulses at one location must have the same sign. */
|
||||||
if (iy[m][j]*sign < 0)
|
if (iy[m][j]*sign < 0)
|
||||||
continue;
|
continue;
|
||||||
//fprintf (stderr, "%d/%d %d/%d %d/%d\n", i, K, m, L2, j, N);
|
/*fprintf (stderr, "%d/%d %d/%d %d/%d\n", i, K, m, L2, j, N);*/
|
||||||
float tmp_xy, tmp_yy, tmp_yp;
|
float tmp_xy, tmp_yy, tmp_yp;
|
||||||
float score;
|
float score;
|
||||||
float g;
|
float g;
|
||||||
|
@ -232,8 +230,8 @@ void alg_quant(float *x, float *W, int N, int K, float *p, float alpha, ec_enc *
|
||||||
float err=0;
|
float err=0;
|
||||||
for (i=0;i<N;i++)
|
for (i=0;i<N;i++)
|
||||||
err += (x[i]-nbest[0]->gain*y[0][i])*(x[i]-nbest[0]->gain*y[0][i]);
|
err += (x[i]-nbest[0]->gain*y[0][i])*(x[i]-nbest[0]->gain*y[0][i]);
|
||||||
//if (N<=10)
|
/*if (N<=10)
|
||||||
//printf ("%f %d %d\n", err, K, N);
|
printf ("%f %d %d\n", err, K, N);*/
|
||||||
}
|
}
|
||||||
for (i=0;i<N;i++)
|
for (i=0;i<N;i++)
|
||||||
x[i] = p[i]+nbest[0]->gain*y[0][i];
|
x[i] = p[i]+nbest[0]->gain*y[0][i];
|
||||||
|
@ -243,11 +241,11 @@ void alg_quant(float *x, float *W, int N, int K, float *p, float alpha, ec_enc *
|
||||||
int ABS = 0;
|
int ABS = 0;
|
||||||
for (i=0;i<N;i++)
|
for (i=0;i<N;i++)
|
||||||
ABS += abs(iy[0][i]);
|
ABS += abs(iy[0][i]);
|
||||||
//if (K != ABS)
|
/*if (K != ABS)
|
||||||
// printf ("%d %d\n", K, ABS);
|
printf ("%d %d\n", K, ABS);*/
|
||||||
for (i=0;i<N;i++)
|
for (i=0;i<N;i++)
|
||||||
E += x[i]*x[i];
|
E += x[i]*x[i];
|
||||||
//printf ("%f\n", E);
|
/*printf ("%f\n", E);*/
|
||||||
E = 1/sqrt(E);
|
E = 1/sqrt(E);
|
||||||
for (i=0;i<N;i++)
|
for (i=0;i<N;i++)
|
||||||
x[i] *= E;
|
x[i] *= E;
|
||||||
|
@ -295,8 +293,8 @@ void alg_unquant(float *x, int N, int K, float *p, float alpha, ec_dec *dec)
|
||||||
|
|
||||||
decode_pulses(iy, N, K, dec);
|
decode_pulses(iy, N, K, dec);
|
||||||
|
|
||||||
//for (i=0;i<N;i++)
|
/*for (i=0;i<N;i++)
|
||||||
// printf ("%d ", iy[i]);
|
printf ("%d ", iy[i]);*/
|
||||||
for (i=0;i<N;i++)
|
for (i=0;i<N;i++)
|
||||||
Rpp += p[i]*p[i];
|
Rpp += p[i]*p[i];
|
||||||
|
|
||||||
|
@ -360,10 +358,10 @@ void intra_prediction(float *x, float *W, int N, int K, float *Y, float *P, int
|
||||||
sign = 1;
|
sign = 1;
|
||||||
else
|
else
|
||||||
sign = 0;
|
sign = 0;
|
||||||
//printf ("%d %d ", sign, best);
|
/*printf ("%d %d ", sign, best);*/
|
||||||
ec_enc_uint(enc,sign,2);
|
ec_enc_uint(enc,sign,2);
|
||||||
ec_enc_uint(enc,best/B,max_pos);
|
ec_enc_uint(enc,best/B,max_pos);
|
||||||
//printf ("%d %f\n", best, best_score);
|
/*printf ("%d %f\n", best, best_score);*/
|
||||||
|
|
||||||
float pred_gain;
|
float pred_gain;
|
||||||
if (K>10)
|
if (K>10)
|
||||||
|
@ -387,8 +385,8 @@ void intra_prediction(float *x, float *W, int N, int K, float *Y, float *P, int
|
||||||
for (j=0;j<N;j++)
|
for (j=0;j<N;j++)
|
||||||
x[j] = P[j];
|
x[j] = P[j];
|
||||||
}
|
}
|
||||||
//printf ("quant ");
|
/*printf ("quant ");*/
|
||||||
//for (j=0;j<N;j++) printf ("%f ", P[j]);
|
/*for (j=0;j<N;j++) printf ("%f ", P[j]);*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -410,7 +408,7 @@ void intra_unquant(float *x, int N, int K, float *Y, float *P, int B, int N0, ec
|
||||||
s = -1;
|
s = -1;
|
||||||
|
|
||||||
best = B*ec_dec_uint(dec, max_pos);
|
best = B*ec_dec_uint(dec, max_pos);
|
||||||
//printf ("%d %d ", sign, best);
|
/*printf ("%d %d ", sign, best);*/
|
||||||
|
|
||||||
float pred_gain;
|
float pred_gain;
|
||||||
if (K>10)
|
if (K>10)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue