]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-8034: mod_opus: send correct (configured) fmtp ptime,minptime,maxptime when origin...
authorDragos Oancea <droancea@yahoo.com>
Wed, 9 Sep 2015 19:17:20 +0000 (15:17 -0400)
committerDragos Oancea <droancea@yahoo.com>
Wed, 9 Sep 2015 19:17:20 +0000 (15:17 -0400)
src/mod/codecs/mod_opus/mod_opus.c

index c38a92c4704f5a5fa2f7ce04fe80066317dd579a..98ae352cea27111f6f639d19c3d21a3cb1745c31 100644 (file)
@@ -63,8 +63,23 @@ static opus_codec_settings_t default_codec_settings = {
        /*.cbr*/ 0,
        /*.sprop_maxcapturerate*/ 0,
        /*.sprop_stereo*/ 0,
-       /*.maxptime*/ 0,
-       /*.minptime*/ 0,
+       /*.maxptime*/ 40,
+       /*.minptime*/ 10,
+       /*.ptime*/ 0,
+       /*.samplerate*/ 0
+};
+
+static opus_codec_settings_t default_codec_settings_8k = {
+       /*.useinbandfec */ 1,
+       /*.usedtx */ 1,
+       /*.maxaveragebitrate */ 14000,
+       /*.maxplaybackrate */ 8000,
+       /*.stereo*/ 0,
+       /*.cbr*/ 0,
+       /*.sprop_maxcapturerate*/ 8000,
+       /*.sprop_stereo*/ 0,
+       /*.maxptime*/ 120,
+       /*.minptime*/ 10,
        /*.ptime*/ 0,
        /*.samplerate*/ 0
 };
@@ -907,8 +922,6 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_opus_load)
        for (x = 0; x < 3; x++) {
 
                settings.ptime = mss / 1000;
-               settings.maxptime = settings.ptime;
-               settings.minptime = settings.ptime;
                settings.samplerate = rate;
                settings.stereo = 0;
                dft_fmtp = gen_fmtp(&settings, pool);
@@ -966,11 +979,21 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_opus_load)
        mss = 10000;
        rate = 8000;
 
+       settings = default_codec_settings_8k;
+
+       if (opus_prefs.maxaveragebitrate) {
+               settings.maxaveragebitrate = opus_prefs.maxaveragebitrate;
+       }
+       if (opus_prefs.maxplaybackrate) {
+               settings.maxplaybackrate = opus_prefs.maxplaybackrate;
+       }
+       if (opus_prefs.sprop_maxcapturerate) {
+               settings.sprop_maxcapturerate = opus_prefs.sprop_maxcapturerate;
+       }
+
        for (x = 0; x < 3; x++) {
                settings.stereo = 0;
                settings.ptime = mss / 1000;
-               settings.maxptime = settings.ptime;
-               settings.minptime = settings.ptime;
                settings.samplerate = rate;
                dft_fmtp = gen_fmtp(&settings, pool);
 
@@ -1015,6 +1038,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_opus_load)
                if (x == 1) { /*20 ms * 3  = 60 ms */
                        int nb_frames;
                        settings.stereo = 0;
+                       settings.ptime = mss * 3 / 1000;
                        dft_fmtp = gen_fmtp(&settings, pool);
                        switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO,    /* enumeration defining the type of the codec */
                                                                                                 116,   /* the IANA code number */
@@ -1038,6 +1062,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_opus_load)
                        for (nb_frames = 4; nb_frames <= 6; nb_frames++) {
                                /*20 ms * nb_frames  = 80 ms , 100 ms , 120 ms */
                                settings.stereo = 0;
+                               settings.ptime = mss * nb_frames / 1000;
                                dft_fmtp = gen_fmtp(&settings, pool);
                                switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO,    /* enumeration defining the type of the codec */
                                                                                                         116,   /* the IANA code number */