Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/speexdsp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>2007-05-17 18:14:59 +0400
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>2007-05-17 18:14:59 +0400
commit0f6335ea9ef4d43e9d0c99bc01307698a7a76195 (patch)
treec8a1d38f5cb9adc99c53ec966bf391d4d16c2dd9 /libspeex/nb_celp.c
parentfcdbf450fe0d3f69c7e2e677978e7c3d40bdec30 (diff)
Implemented SPEEX_GET_ACTIVITY
git-svn-id: http://svn.xiph.org/trunk/speex@12957 0101bb08-14d6-0310-b084-bc0e0c8e3800
Diffstat (limited to 'libspeex/nb_celp.c')
-rw-r--r--libspeex/nb_celp.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/libspeex/nb_celp.c b/libspeex/nb_celp.c
index 1828aed..6ac12a0 100644
--- a/libspeex/nb_celp.c
+++ b/libspeex/nb_celp.c
@@ -1720,6 +1720,14 @@ int nb_decode(void *state, SpeexBits *bits, void *vout)
/*for (i=0;i<st->frameSize;i++)
printf ("%d\n", (int)st->frame[i]);*/
+ /* Tracking output level */
+ st->level = 1+PSHR32(ol_gain,SIG_SHIFT);
+ st->max_level = MAX16(MULT16_16_Q15(QCONST16(.99f,15), st->max_level), st->level);
+ st->min_level = MIN16(ADD16(1,MULT16_16_Q14(QCONST16(1.01f,14), st->min_level)), st->level);
+ if (st->max_level < st->min_level+1)
+ st->max_level = st->min_level+1;
+ /*printf ("%f %f %f %d\n", og, st->min_level, st->max_level, update);*/
+
/* Store the LSPs for interpolation in the next frame */
for (i=0;i<st->lpcSize;i++)
st->old_qlsp[i] = qlsp[i];
@@ -2013,7 +2021,19 @@ int nb_decoder_ctl(void *state, int request, void *ptr)
case SPEEX_GET_HIGHPASS:
(*(spx_int32_t*)ptr) = st->highpass_enabled;
break;
-
+ case SPEEX_GET_ACTIVITY:
+ {
+ float ret;
+ ret = log(st->level/st->min_level)/log(st->max_level/st->min_level);
+ if (ret>1)
+ ret = 1;
+ /* Done in a strange way to catch NaNs as well */
+ if (!(ret > 0))
+ ret = 0;
+ /*printf ("%f %f %f %f\n", st->level, st->min_level, st->max_level, ret);*/
+ (*(spx_int32_t*)ptr) = (int)(100*ret);
+ }
+ break;
case SPEEX_GET_PI_GAIN:
{
int i;