summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2017-06-04 17:45:06 -0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2017-06-04 17:45:06 -0400
commit1d7dea17d56be2a4a79725dd3ab7c906e2793c2b (patch)
tree503c0c2394941a54308c4e055def42071769bb5f
parent55507f19668afe68fbb5d9f4bbbae1fde36df9ce (diff)
downloadopus-1d7dea17d56be2a4a79725dd3ab7c906e2793c2b.tar.gz
Initialize speech/music prob based on application
-rw-r--r--src/analysis.c15
-rw-r--r--src/analysis.h1
-rw-r--r--src/opus_encoder.c4
3 files changed, 16 insertions, 4 deletions
diff --git a/src/analysis.c b/src/analysis.c
index 8f13d93b..75289102 100644
--- a/src/analysis.c
+++ b/src/analysis.c
@@ -360,8 +360,12 @@ static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt
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 @@ static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt
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. */
diff --git a/src/analysis.h b/src/analysis.h
index 826773e5..b94a0c91 100644
--- 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];
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index 0bd65a02..474e6c24 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -264,6 +264,7 @@ int opus_encoder_init(OpusEncoder* st, opus_int32 Fs, int channels, int applicat
#ifndef DISABLE_FLOAT_API
tonality_analysis_init(&st->analysis, st->Fs);
+ st->analysis.application = st->application;
#endif
return OPUS_OK;
@@ -2263,6 +2264,9 @@ int opus_encoder_ctl(OpusEncoder *st, int request, ...)
break;
}
st->application = value;
+#ifndef DISABLE_FLOAT_API
+ st->analysis.application = value;
+#endif
}
break;
case OPUS_GET_APPLICATION_REQUEST: