diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index 45703ab49c..6cf7212bfe 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -359,7 +359,16 @@ switch_mutex_unlock(obj->flag_mutex); #define switch_set_string(_dst, _src) switch_copy_string(_dst, _src, sizeof(_dst)) - static inline char *switch_sanitize_number(char *number) +static inline uint32_t switch_default_ptime(const char *name, uint32_t number) +{ + if (!strcasecmp(name, "G723")) { + return 30; + } + + return 20; +} + +static inline char *switch_sanitize_number(char *number) { char *p = number, *q; char warp[] = "/:"; diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 0d3d9d2b60..b94ed8867f 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -3839,7 +3839,7 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s } if (!ptime) { - ptime = 20; + ptime = switch_default_ptime(rm_encoding, map->rm_pt); } if (!strcasecmp((char *) rm_encoding, "ilbc")) { diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index d23b4226e3..8804902a2f 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -1557,13 +1557,16 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs(const switch_codec_impleme for (hi = switch_hash_first(NULL, loadable_modules.codec_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, NULL, NULL, &val); codec_interface = (switch_codec_interface_t *) val; - /* Look for a 20ms implementation because it's the safest choice */ + + /* Look for the default ptime of the codec because it's the safest choice */ for (imp = codec_interface->implementations; imp; imp = imp->next) { + uint32_t default_ptime = switch_default_ptime(imp->iananame, imp->ianacode); + if (lock && imp->microseconds_per_packet != lock) { continue; } - if (imp->microseconds_per_packet / 1000 == 20) { + if (imp->microseconds_per_packet / 1000 == default_ptime) { array[i++] = imp; goto found; } @@ -1623,15 +1626,16 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs_sorted(const switch_codec_ } if ((codec_interface = switch_loadable_module_get_codec_interface(name)) != 0) { - /* If no specific codec interval is requested opt for 20ms above all else because lots of stuff assumes it */ + /* If no specific codec interval is requested opt for the default above all else because lots of stuff assumes it */ for (imp = codec_interface->implementations; imp; imp = imp->next) { - + uint32_t default_ptime = switch_default_ptime(imp->iananame, imp->ianacode); + if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) { if (lock && imp->microseconds_per_packet != lock) { continue; } - - if ((!interval && (uint32_t) (imp->microseconds_per_packet / 1000) != 20) || + + if ((!interval && (uint32_t) (imp->microseconds_per_packet / 1000) != default_ptime) || (interval && (uint32_t) (imp->microseconds_per_packet / 1000) != interval)) { continue; } @@ -1647,7 +1651,7 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs_sorted(const switch_codec_ } - /* Either looking for a specific interval or there was no interval specified and there wasn't one @20ms available */ + /* Either looking for a specific interval or there was no interval specified and there wasn't one at the default ptime available */ for (imp = codec_interface->implementations; imp; imp = imp->next) { if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) {