diff --git a/src/mod/codecs/mod_opus/mod_opus.c b/src/mod/codecs/mod_opus/mod_opus.c index c38a92c470..98ae352cea 100644 --- a/src/mod/codecs/mod_opus/mod_opus.c +++ b/src/mod/codecs/mod_opus/mod_opus.c @@ -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 */