shithub: opus

Download patch

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: