[commit] r4077 - in freeswitch/trunk/src: . include mod/codecs/mod_g711 mod/codecs/mod_l16
Author: anthm Date: Mon Jan 29 10:43:41 2007 New Revision: 4077 Modified: freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c freeswitch/trunk/src/mod/codecs/mod_l16/mod_l16.c freeswitch/trunk/src/switch_core.c freeswitch/trunk/src/switch_loadable_module.c Log: codec tweaks (do a make sure) Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Mon Jan 29 10:43:41 2007 @@ -176,7 +176,7 @@ SWITCH_DECLARE_DATA extern switch_directories SWITCH_GLOBAL_dirs; #define SWITCH_THREAD_STACKSIZE 240 * 1024 -#define SWITCH_RECCOMMENDED_BUFFER_SIZE 2048 +#define SWITCH_RECCOMMENDED_BUFFER_SIZE 3968 #define SWITCH_MAX_CODECS 30 #define SWITCH_MAX_STATE_HANDLERS 30 #define SWITCH_TRUE 1 Modified: freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c Mon Jan 29 10:43:41 2007 @@ -188,7 +188,6 @@ /* Registration */ - static const switch_codec_implementation_t g711u_8k_60ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 0, @@ -209,7 +208,6 @@ /*.destroy */ switch_g711u_destroy }; -#if 0 static const switch_codec_implementation_t g711u_8k_30ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 0, @@ -228,20 +226,20 @@ /*.encode */ switch_g711u_encode, /*.decode */ switch_g711u_decode, /*.destroy */ switch_g711u_destroy, - /*.next */ NULL + /*.next*/ &g711u_8k_60ms_implementation }; -static const switch_codec_implementation_t g711u_16k_implementation = { +static const switch_codec_implementation_t g711u_8k_20ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 0, /*.iananame */ "PCMU", /*.fmtp */ NULL, - /*.samples_per_second */ 16000, - /*.bits_per_second */ 128000, + /*.samples_per_second */ 8000, + /*.bits_per_second */ 64000, /*.microseconds_per_frame */ 20000, - /*.samples_per_frame */ 320, - /*.bytes_per_frame */ 640, - /*.encoded_bytes_per_frame */ 320, + /*.samples_per_frame */ 160, + /*.bytes_per_frame */ 320, + /*.encoded_bytes_per_frame */ 160, /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, /*.max_frames_per_packet */ 1, @@ -249,21 +247,20 @@ /*.encode */ switch_g711u_encode, /*.decode */ switch_g711u_decode, /*.destroy */ switch_g711u_destroy, - /*.next */ &g711u_8k_30ms_implementation + /*.next*/ &g711u_8k_30ms_implementation }; -#endif -static const switch_codec_implementation_t g711u_8k_implementation = { +static const switch_codec_implementation_t g711u_8k_10ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 0, /*.iananame */ "PCMU", /*.fmtp */ NULL, /*.samples_per_second */ 8000, /*.bits_per_second */ 64000, - /*.microseconds_per_frame */ 20000, - /*.samples_per_frame */ 160, - /*.bytes_per_frame */ 320, - /*.encoded_bytes_per_frame */ 160, + /*.microseconds_per_frame */ 10000, + /*.samples_per_frame */ 80, + /*.bytes_per_frame */ 160, + /*.encoded_bytes_per_frame */ 80, /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, /*.max_frames_per_packet */ 1, @@ -271,12 +268,54 @@ /*.encode */ switch_g711u_encode, /*.decode */ switch_g711u_decode, /*.destroy */ switch_g711u_destroy, - ///*.next */ &g711u_16k_implementation - &g711u_8k_60ms_implementation + /*.next*/ &g711u_8k_20ms_implementation }; -static const switch_codec_implementation_t g711a_8k_implementation = { + + +static const switch_codec_implementation_t g711a_8k_60ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 8, + /*.iananame */ "PCMA", + /*.fmtp */ NULL, + /*.samples_per_second */ 8000, + /*.bits_per_second */ 19200, + /*.microseconds_per_frame */ 60000, + /*.samples_per_frame */ 480, + /*.bytes_per_frame */ 960, + /*.encoded_bytes_per_frame */ 480, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_g711u_init, + /*.encode */ switch_g711u_encode, + /*.decode */ switch_g711u_decode, + /*.destroy */ switch_g711u_destroy, +}; + +static const switch_codec_implementation_t g711a_8k_30ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 8, + /*.iananame */ "PCMA", + /*.fmtp */ NULL, + /*.samples_per_second */ 8000, + /*.bits_per_second */ 96000, + /*.microseconds_per_frame */ 30000, + /*.samples_per_frame */ 240, + /*.bytes_per_frame */ 480, + /*.encoded_bytes_per_frame */ 240, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_g711u_init, + /*.encode */ switch_g711u_encode, + /*.decode */ switch_g711u_decode, + /*.destroy */ switch_g711u_destroy, + /*.next*/ &g711a_8k_60ms_implementation +}; + +static const switch_codec_implementation_t g711a_8k_20ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 8, /*.iananame */ "PCMA", @@ -293,18 +332,41 @@ /*.init */ switch_g711a_init, /*.encode */ switch_g711a_encode, /*.decode */ switch_g711a_decode, - /*.destroy */ switch_g711a_destroy + /*.destroy */ switch_g711a_destroy, + /*.next*/ &g711a_8k_30ms_implementation }; +static const switch_codec_implementation_t g711a_8k_10ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 8, + /*.iananame */ "PCMA", + /*.fmtp */ NULL, + /*.samples_per_second */ 8000, + /*.bits_per_second */ 64000, + /*.microseconds_per_frame */ 10000, + /*.samples_per_frame */ 80, + /*.bytes_per_frame */ 160, + /*.encoded_bytes_per_frame */ 80, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_g711u_init, + /*.encode */ switch_g711u_encode, + /*.decode */ switch_g711u_decode, + /*.destroy */ switch_g711u_destroy, + /*.next*/ &g711a_8k_20ms_implementation +}; + + static const switch_codec_interface_t g711a_codec_interface = { /*.interface_name */ "g711 alaw", - /*.implementations */ &g711a_8k_implementation + /*.implementations */ &g711a_8k_10ms_implementation }; static const switch_codec_interface_t g711u_codec_interface = { /*.interface_name */ "g711 ulaw", - /*.implementations */ &g711u_8k_implementation, + /*.implementations */ &g711u_8k_10ms_implementation, /*.next */ &g711a_codec_interface }; Modified: freeswitch/trunk/src/mod/codecs/mod_l16/mod_l16.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_l16/mod_l16.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_l16/mod_l16.c Mon Jan 29 10:43:41 2007 @@ -89,7 +89,49 @@ return SWITCH_STATUS_SUCCESS; } -static const switch_codec_implementation_t raw_32k_implementation = { +static const switch_codec_implementation_t raw_32k_60ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 10, + /*.iananame */ "L16", + /*.fmtp */ NULL, + /*.samples_per_second = */ 32000, + /*.bits_per_second = */ 512000, + /*.microseconds_per_frame = */ 60000, + /*.samples_per_frame = */ 1920, + /*.bytes_per_frame = */ 3840, + /*.encoded_bytes_per_frame = */ 3840, + /*.number_of_channels = */ 1, + /*.pref_frames_per_packet = */ 1, + /*.max_frames_per_packet = */ 1, + /*.init = */ switch_raw_init, + /*.encode = */ switch_raw_encode, + /*.decode = */ switch_raw_decode, + /*.destroy = */ switch_raw_destroy + /*.next = */ +}; + +static const switch_codec_implementation_t raw_32k_30ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 10, + /*.iananame */ "L16", + /*.fmtp */ NULL, + /*.samples_per_second = */ 32000, + /*.bits_per_second = */ 512000, + /*.microseconds_per_frame = */ 30000, + /*.samples_per_frame = */ 960, + /*.bytes_per_frame = */ 1920, + /*.encoded_bytes_per_frame = */ 1920, + /*.number_of_channels = */ 1, + /*.pref_frames_per_packet = */ 1, + /*.max_frames_per_packet = */ 1, + /*.init = */ switch_raw_init, + /*.encode = */ switch_raw_encode, + /*.decode = */ switch_raw_decode, + /*.destroy = */ switch_raw_destroy, + /*.next = */ &raw_32k_60ms_implementation +}; + +static const switch_codec_implementation_t raw_32k_20ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 10, /*.iananame */ "L16", @@ -106,10 +148,32 @@ /*.init = */ switch_raw_init, /*.encode = */ switch_raw_encode, /*.decode = */ switch_raw_decode, - /*.destroy = */ switch_raw_destroy + /*.destroy = */ switch_raw_destroy, + /*.next = */ &raw_32k_30ms_implementation }; -static const switch_codec_implementation_t raw_22k_implementation = { +static const switch_codec_implementation_t raw_32k_10ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 10, + /*.iananame */ "L16", + /*.fmtp */ NULL, + /*.samples_per_second = */ 32000, + /*.bits_per_second = */ 512000, + /*.microseconds_per_frame = */ 10000, + /*.samples_per_frame = */ 320, + /*.bytes_per_frame = */ 960, + /*.encoded_bytes_per_frame = */ 960, + /*.number_of_channels = */ 1, + /*.pref_frames_per_packet = */ 1, + /*.max_frames_per_packet = */ 1, + /*.init = */ switch_raw_init, + /*.encode = */ switch_raw_encode, + /*.decode = */ switch_raw_decode, + /*.destroy = */ switch_raw_destroy, + /*.next = */ &raw_32k_20ms_implementation +}; + +static const switch_codec_implementation_t raw_22k_20ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 10, /*.iananame */ "L16", @@ -127,10 +191,73 @@ /*.encode = */ switch_raw_encode, /*.decode = */ switch_raw_decode, /*.destroy = */ switch_raw_destroy, - /*.next = */ &raw_32k_implementation + /*.next = */ &raw_32k_10ms_implementation +}; + +static const switch_codec_implementation_t raw_16k_120ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 10, + /*.iananame */ "L16", + /*.fmtp */ NULL, + /*.samples_per_second */ 8000, + /*.bits_per_second */ 256000, + /*.microseconds_per_frame */ 120000, + /*.samples_per_frame */ 1920, + /*.bytes_per_frame */ 3840, + /*.encoded_bytes_per_frame */ 3840, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_raw_init, + /*.encode */ switch_raw_encode, + /*.decode */ switch_raw_decode, + /*.destroy */ switch_raw_destroy, + /*.next */ &raw_22k_20ms_implementation +}; + +static const switch_codec_implementation_t raw_16k_60ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 10, + /*.iananame */ "L16", + /*.fmtp */ NULL, + /*.samples_per_second */ 16000, + /*.bits_per_second */ 256000, + /*.microseconds_per_frame */ 60000, + /*.samples_per_frame */ 960, + /*.bytes_per_frame */ 1920, + /*.encoded_bytes_per_frame */ 1920, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_raw_init, + /*.encode */ switch_raw_encode, + /*.decode */ switch_raw_decode, + /*.destroy */ switch_raw_destroy, + /*.next */ &raw_16k_120ms_implementation +}; + +static const switch_codec_implementation_t raw_16k_30ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 10, + /*.iananame */ "L16", + /*.fmtp */ NULL, + /*.samples_per_second */ 16000, + /*.bits_per_second */ 256000, + /*.microseconds_per_frame */ 30000, + /*.samples_per_frame */ 480, + /*.bytes_per_frame */ 960, + /*.encoded_bytes_per_frame */ 960, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_raw_init, + /*.encode */ switch_raw_encode, + /*.decode */ switch_raw_decode, + /*.destroy */ switch_raw_destroy, + /*.next */ &raw_16k_60ms_implementation }; -static const switch_codec_implementation_t raw_16k_implementation = { +static const switch_codec_implementation_t raw_16k_20ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 10, /*.iananame */ "L16", @@ -148,17 +275,17 @@ /*.encode = */ switch_raw_encode, /*.decode = */ switch_raw_decode, /*.destroy = */ switch_raw_destroy, - /*.next = */ &raw_22k_implementation + /*.next = */ &raw_16k_30ms_implementation }; -static const switch_codec_implementation_t raw_8k_implementation = { +static const switch_codec_implementation_t raw_16k_10ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 10, /*.iananame */ "L16", /*.fmtp */ NULL, - /*.samples_per_second = */ 8000, - /*.bits_per_second = */ 128000, - /*.microseconds_per_frame = */ 20000, + /*.samples_per_second = */ 16000, + /*.bits_per_second = */ 256000, + /*.microseconds_per_frame = */ 10000, /*.samples_per_frame = */ 160, /*.bytes_per_frame = */ 320, /*.encoded_bytes_per_frame = */ 320, @@ -169,21 +296,22 @@ /*.encode = */ switch_raw_encode, /*.decode = */ switch_raw_decode, /*.destroy = */ switch_raw_destroy, - /*.next = */ &raw_16k_implementation + /*.next = */ &raw_16k_20ms_implementation }; +/////////////////////////////// -static const switch_codec_implementation_t raw_8k_30ms_implementation = { +static const switch_codec_implementation_t raw_8k_120ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 10, /*.iananame */ "L16", /*.fmtp */ NULL, /*.samples_per_second */ 8000, - /*.bits_per_second */ 128000, - /*.microseconds_per_frame */ 30000, - /*.samples_per_frame */ 240, - /*.bytes_per_frame */ 480, - /*.encoded_bytes_per_frame */ 480, + /*.bits_per_second */ 512000, + /*.microseconds_per_frame */ 120000, + /*.samples_per_frame */ 960, + /*.bytes_per_frame */ 1920, + /*.encoded_bytes_per_frame */ 1920, /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, /*.max_frames_per_packet */ 1, @@ -191,7 +319,7 @@ /*.encode */ switch_raw_encode, /*.decode */ switch_raw_decode, /*.destroy */ switch_raw_destroy, - /*.next */ &raw_8k_implementation + /*.next */ &raw_16k_10ms_implementation }; @@ -213,20 +341,20 @@ /*.encode */ switch_raw_encode, /*.decode */ switch_raw_decode, /*.destroy */ switch_raw_destroy, - /*.next */ &raw_8k_30ms_implementation + /*.next */ &raw_8k_120ms_implementation }; -static const switch_codec_implementation_t raw_8k_120ms_implementation = { +static const switch_codec_implementation_t raw_8k_30ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 10, /*.iananame */ "L16", /*.fmtp */ NULL, /*.samples_per_second */ 8000, - /*.bits_per_second */ 512000, - /*.microseconds_per_frame */ 120000, - /*.samples_per_frame */ 960, - /*.bytes_per_frame */ 1920, - /*.encoded_bytes_per_frame */ 1920, + /*.bits_per_second */ 128000, + /*.microseconds_per_frame */ 30000, + /*.samples_per_frame */ 240, + /*.bytes_per_frame */ 480, + /*.encoded_bytes_per_frame */ 480, /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, /*.max_frames_per_packet */ 1, @@ -236,11 +364,54 @@ /*.destroy */ switch_raw_destroy, /*.next */ &raw_8k_60ms_implementation }; +static const switch_codec_implementation_t raw_8k_20ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 10, + /*.iananame */ "L16", + /*.fmtp */ NULL, + /*.samples_per_second = */ 8000, + /*.bits_per_second = */ 128000, + /*.microseconds_per_frame = */ 20000, + /*.samples_per_frame = */ 160, + /*.bytes_per_frame = */ 320, + /*.encoded_bytes_per_frame = */ 320, + /*.number_of_channels = */ 1, + /*.pref_frames_per_packet = */ 1, + /*.max_frames_per_packet = */ 1, + /*.init = */ switch_raw_init, + /*.encode = */ switch_raw_encode, + /*.decode = */ switch_raw_decode, + /*.destroy = */ switch_raw_destroy, + /*.next */ &raw_8k_30ms_implementation +}; + + + +static const switch_codec_implementation_t raw_8k_10ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 10, + /*.iananame */ "L16", + /*.fmtp */ NULL, + /*.samples_per_second = */ 8000, + /*.bits_per_second = */ 128000, + /*.microseconds_per_frame = */ 10000, + /*.samples_per_frame = */ 80, + /*.bytes_per_frame = */ 160, + /*.encoded_bytes_per_frame = */ 160, + /*.number_of_channels = */ 1, + /*.pref_frames_per_packet = */ 1, + /*.max_frames_per_packet = */ 1, + /*.init = */ switch_raw_init, + /*.encode = */ switch_raw_encode, + /*.decode = */ switch_raw_decode, + /*.destroy = */ switch_raw_destroy, + /*.next */ &raw_8k_20ms_implementation +}; static const switch_codec_interface_t raw_codec_interface = { /*.interface_name */ "raw signed linear (16 bit)", - /*.implementations */ &raw_8k_120ms_implementation + /*.implementations */ &raw_8k_10ms_implementation }; static switch_loadable_module_interface_t raw_module_interface = { Modified: freeswitch/trunk/src/switch_core.c ============================================================================== --- freeswitch/trunk/src/switch_core.c (original) +++ freeswitch/trunk/src/switch_core.c Mon Jan 29 10:43:41 2007 @@ -782,6 +782,19 @@ return SWITCH_STATUS_GENERR; } + /* If no specific codec interval is requested opt for 20ms above all else because lots of stuff assumes it */ + if (!ms) { + for (iptr = codec_interface->implementations; iptr; iptr = iptr->next) { + if ((!rate || rate == iptr->samples_per_second) && + (20 == (iptr->microseconds_per_frame / 1000)) && + (!channels || channels == iptr->number_of_channels)) { + implementation = iptr; + goto found; + } + } + } + + /* Either looking for a specific interval or there was no interval specified and there wasn't one @20ms available*/ for (iptr = codec_interface->implementations; iptr; iptr = iptr->next) { if ((!rate || rate == iptr->samples_per_second) && (!ms || ms == (iptr->microseconds_per_frame / 1000)) && @@ -791,6 +804,8 @@ } } + found: + if (implementation) { switch_status_t status; codec->codec_interface = codec_interface; Modified: freeswitch/trunk/src/switch_loadable_module.c ============================================================================== --- freeswitch/trunk/src/switch_loadable_module.c (original) +++ freeswitch/trunk/src/switch_loadable_module.c Mon Jan 29 10:43:41 2007 @@ -758,6 +758,27 @@ } 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 (!interval) { + for (imp = codec_interface->implementations; imp; imp = imp->next) { + uint8_t match = 1; + + if ((uint32_t)(imp->microseconds_per_frame / 1000) != 20) { + match = 0; + } + + if (match && rate && (uint32_t)imp->samples_per_second != rate) { + match = 0; + } + + if (match) { + array[i++] = imp; + goto found; + } + } + } + + /* Either looking for a specific interval or there was no interval specified and there wasn't one @20ms available*/ for (imp = codec_interface->implementations; imp; imp = imp->next) { uint8_t match = 1; @@ -771,8 +792,12 @@ if (match) { array[i++] = imp; + goto found; } } + + found: + if (i > arraylen) { break; }
participants (1)
-
Freeswitch SVN