ref: 1d7dea17d56be2a4a79725dd3ab7c906e2793c2b
parent: 55507f19668afe68fbb5d9f4bbbae1fde36df9ce
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Sun Jun 4 13:45:06 EDT 2017
Initialize speech/music prob based on application
--- a/src/analysis.c
+++ b/src/analysis.c
@@ -360,8 +360,12 @@
offset = 3*offset/2;
}
- if (tonal->count<4)
- tonal->music_prob = .5;
+ if (tonal->count<4) {
+ if (tonal->application == OPUS_APPLICATION_VOIP)
+ tonal->music_prob = .1;
+ else
+ tonal->music_prob = .625;
+ }
kfft = celt_mode->mdct.kfft[0];
if (tonal->count==0)
tonal->mem_fill = 240;
@@ -820,8 +824,11 @@
music0 = (float)pow(frame_probs[0], beta);
if (tonal->count==1)
{
- tonal->pspeech[0]=.5;
- tonal->pmusic [0]=.5;
+ if (tonal->application == OPUS_APPLICATION_VOIP)
+ tonal->pmusic[0] = .1;
+ else
+ tonal->pmusic[0] = .625;
+ tonal->pspeech[0] = 1-tonal->pmusic[0];
}
/* Updated probability of having only speech (s0) or only music (m0),
before considering the new observation. */
--- a/src/analysis.h
+++ b/src/analysis.h
@@ -45,6 +45,7 @@
typedef struct {
int arch;
+ int application;
opus_int32 Fs;
#define TONALITY_ANALYSIS_RESET_START angle
float angle[240];
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -264,6 +264,7 @@
#ifndef DISABLE_FLOAT_API
tonality_analysis_init(&st->analysis, st->Fs);
+ st->analysis.application = st->application;
#endif
return OPUS_OK;
@@ -2263,6 +2264,9 @@
break;
}
st->application = value;
+#ifndef DISABLE_FLOAT_API
+ st->analysis.application = value;
+#endif
}
break;
case OPUS_GET_APPLICATION_REQUEST: