forked from len0rd/rockbox
Sync latest Speex stereo changes.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15617 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
017e148655
commit
8082148200
3 changed files with 8 additions and 30 deletions
|
|
@ -45,7 +45,7 @@ typedef struct RealSpeexStereoState {
|
||||||
spx_word32_t e_ratio; /**< Ratio of energies: E(left+right)/[E(left)+E(right)] */
|
spx_word32_t e_ratio; /**< Ratio of energies: E(left+right)/[E(left)+E(right)] */
|
||||||
spx_word32_t smooth_left; /**< Smoothed left channel gain */
|
spx_word32_t smooth_left; /**< Smoothed left channel gain */
|
||||||
spx_word32_t smooth_right; /**< Smoothed right channel gain */
|
spx_word32_t smooth_right; /**< Smoothed right channel gain */
|
||||||
spx_int32_t reserved1; /**< Reserved for future use */
|
spx_uint32_t reserved1; /**< Reserved for future use */
|
||||||
spx_int32_t reserved2; /**< Reserved for future use */
|
spx_int32_t reserved2; /**< Reserved for future use */
|
||||||
} RealSpeexStereoState;
|
} RealSpeexStereoState;
|
||||||
|
|
||||||
|
|
@ -53,15 +53,17 @@ typedef struct RealSpeexStereoState {
|
||||||
/*float e_ratio_quant[4] = {1, 1.26, 1.587, 2};*/
|
/*float e_ratio_quant[4] = {1, 1.26, 1.587, 2};*/
|
||||||
#ifndef FIXED_POINT
|
#ifndef FIXED_POINT
|
||||||
static const float e_ratio_quant[4] = {.25f, .315f, .397f, .5f};
|
static const float e_ratio_quant[4] = {.25f, .315f, .397f, .5f};
|
||||||
|
static const float e_ratio_quant_bounds[3] = {0.2825f, 0.356f, 0.4485f};
|
||||||
#else
|
#else
|
||||||
static const spx_word16_t e_ratio_quant[4] = {8192, 10332, 13009, 16384};
|
static const spx_word16_t e_ratio_quant[4] = {8192, 10332, 13009, 16384};
|
||||||
|
static const spx_word16_t e_ratio_quant_bounds[3] = {9257, 11665, 14696};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This is an ugly compatibility hack that properly resets the stereo state
|
/* This is an ugly compatibility hack that properly resets the stereo state
|
||||||
In case it it compiled in fixed-point, but initialised with the deprecated
|
In case it it compiled in fixed-point, but initialised with the deprecated
|
||||||
floating point static initialiser */
|
floating point static initialiser */
|
||||||
#ifdef FIXED_POINT
|
#ifdef FIXED_POINT
|
||||||
#define COMPATIBILITY_HACK(s) do {if ((s)->reserved1 != 0xdeadbeef) speex_stereo_state_init(s); } while (0);
|
#define COMPATIBILITY_HACK(s) do {if ((s)->reserved1 != 0xdeadbeef) speex_stereo_state_reset((SpeexStereoState*)s); } while (0);
|
||||||
#else
|
#else
|
||||||
#define COMPATIBILITY_HACK(s)
|
#define COMPATIBILITY_HACK(s)
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -134,8 +136,8 @@ void speex_encode_stereo(float *data, int frame_size, SpeexBits *bits)
|
||||||
|
|
||||||
speex_bits_pack(bits, (int)balance, 5);
|
speex_bits_pack(bits, (int)balance, 5);
|
||||||
|
|
||||||
/* FIXME: Convert properly */
|
/* FIXME: this is a hack */
|
||||||
tmp=vq_index(&e_ratio, e_ratio_quant, 1, 4);
|
tmp=scal_quant(e_ratio*Q15_ONE, e_ratio_quant_bounds, 3);
|
||||||
speex_bits_pack(bits, tmp, 2);
|
speex_bits_pack(bits, tmp, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -171,8 +173,8 @@ void speex_encode_stereo_int(spx_int16_t *data, int frame_size, SpeexBits *bits)
|
||||||
|
|
||||||
speex_bits_pack(bits, (int)balance, 5);
|
speex_bits_pack(bits, (int)balance, 5);
|
||||||
|
|
||||||
/* FIXME: Convert properly */
|
/* FIXME: this is a hack */
|
||||||
tmp=vq_index(&e_ratio, e_ratio_quant, 1, 4);
|
tmp=scal_quant(e_ratio*Q15_ONE, e_ratio_quant_bounds, 3);
|
||||||
speex_bits_pack(bits, tmp, 2);
|
speex_bits_pack(bits, tmp, 2);
|
||||||
}
|
}
|
||||||
#endif /* SPEEX_DISABLE_ENCODER */
|
#endif /* SPEEX_DISABLE_ENCODER */
|
||||||
|
|
|
||||||
|
|
@ -70,29 +70,6 @@ int scal_quant32(spx_word32_t in, const spx_word32_t *boundary, int entries)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Finds the index of the entry in a codebook that best matches the input*/
|
|
||||||
int vq_index(float *in, const float *codebook, int len, int entries)
|
|
||||||
{
|
|
||||||
int i,j;
|
|
||||||
float min_dist=0;
|
|
||||||
int best_index=0;
|
|
||||||
for (i=0;i<entries;i++)
|
|
||||||
{
|
|
||||||
float dist=0;
|
|
||||||
for (j=0;j<len;j++)
|
|
||||||
{
|
|
||||||
float tmp = in[j]-*codebook++;
|
|
||||||
dist += tmp*tmp;
|
|
||||||
}
|
|
||||||
if (i==0 || dist<min_dist)
|
|
||||||
{
|
|
||||||
min_dist=dist;
|
|
||||||
best_index=i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return best_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef OVERRIDE_VQ_NBEST
|
#ifndef OVERRIDE_VQ_NBEST
|
||||||
/*Finds the indices of the n-best entries in a codebook*/
|
/*Finds the indices of the n-best entries in a codebook*/
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,6 @@
|
||||||
int scal_quant(spx_word16_t in, const spx_word16_t *boundary, int entries);
|
int scal_quant(spx_word16_t in, const spx_word16_t *boundary, int entries);
|
||||||
int scal_quant32(spx_word32_t in, const spx_word32_t *boundary, int entries);
|
int scal_quant32(spx_word32_t in, const spx_word32_t *boundary, int entries);
|
||||||
|
|
||||||
int vq_index(float *in, const float *codebook, int len, int entries);
|
|
||||||
#ifdef _USE_SSE
|
#ifdef _USE_SSE
|
||||||
#include <xmmintrin.h>
|
#include <xmmintrin.h>
|
||||||
void vq_nbest(spx_word16_t *in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack);
|
void vq_nbest(spx_word16_t *in, const __m128 *codebook, int len, int entries, __m128 *E, int N, int *nbest, spx_word32_t *best_dist, char *stack);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue