diff --git a/Makefile.am b/Makefile.am index e0b78224ba..ed27c31053 100644 --- a/Makefile.am +++ b/Makefile.am @@ -78,6 +78,8 @@ src/switch_config.c\ src/switch_time.c\ libs/stfu/stfu.c\ src/switch_cpp.cpp\ +src/g711.c\ +src/switch_pcm.c\ libs/libteletone/src/libteletone_detect.c\ libs/libteletone/src/libteletone_generate.c diff --git a/build/modules.conf.in b/build/modules.conf.in index 16ae9c3698..e004082883 100644 --- a/build/modules.conf.in +++ b/build/modules.conf.in @@ -15,14 +15,12 @@ applications/mod_fsv #applications/mod_rss #asr_tts/mod_cepstral #asr_tts/mod_openmrcp -#codecs/mod_g711 codecs/mod_g723_1 codecs/mod_amr codecs/mod_g729 codecs/mod_h26x codecs/mod_voipcodecs codecs/mod_ilbc -codecs/mod_l16 codecs/mod_speex #dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml diff --git a/src/mod/codecs/mod_g711/g711.c b/src/g711.c similarity index 99% rename from src/mod/codecs/mod_g711/g711.c rename to src/g711.c index 89ca1613af..8a5c58b835 100644 --- a/src/mod/codecs/mod_g711/g711.c +++ b/src/g711.c @@ -32,7 +32,7 @@ #endif #endif -#include "g7xx/g711.h" +#include "g711.h" /* Copied from the CCITT G.711 specification */ static const uint8_t ulaw_to_alaw_table[256] = diff --git a/src/mod/codecs/mod_g711/g711.h b/src/include/g711.h similarity index 100% rename from src/mod/codecs/mod_g711/g711.h rename to src/include/g711.h diff --git a/src/include/switch_loadable_module.h b/src/include/switch_loadable_module.h index d2c9e24c52..ab736b0273 100644 --- a/src/include/switch_loadable_module.h +++ b/src/include/switch_loadable_module.h @@ -321,7 +321,7 @@ static inline void switch_core_codec_add_implementation(switch_memory_pool_t *po /*! the IANA code number */ switch_payload_t ianacode, /*! the IANA code name */ - char *iananame, + const char *iananame, /*! default fmtp to send (can be overridden by the init function) */ char *fmtp, /*! samples transferred per second */ @@ -357,7 +357,7 @@ static inline void switch_core_codec_add_implementation(switch_memory_pool_t *po switch_codec_implementation_t *impl = (switch_codec_implementation_t *) switch_core_alloc(pool, sizeof(*impl)); impl->codec_type = codec_type; impl->ianacode = ianacode; - impl->iananame = iananame; + impl->iananame = switch_core_strdup(pool, iananame); impl->fmtp = fmtp; impl->samples_per_second = samples_per_second; impl->actual_samples_per_second = actual_samples_per_second; diff --git a/src/mod/codecs/mod_g711/Makefile b/src/mod/codecs/mod_g711/Makefile deleted file mode 100644 index dd97a04f36..0000000000 --- a/src/mod/codecs/mod_g711/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -BASE=../../../.. -LOCAL_CFLAGS=-I. -include $(BASE)/build/modmake.rules - - diff --git a/src/mod/codecs/mod_g711/mod_g711.2008.vcproj b/src/mod/codecs/mod_g711/mod_g711.2008.vcproj deleted file mode 100644 index 699e11d9a7..0000000000 --- a/src/mod/codecs/mod_g711/mod_g711.2008.vcproj +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mod/codecs/mod_g711/mod_g711.c b/src/mod/codecs/mod_g711/mod_g711.c deleted file mode 100644 index 9dc311a11f..0000000000 --- a/src/mod/codecs/mod_g711/mod_g711.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * Copyright (C) 2005/2006, Anthony Minessale II - * - * Version: MPL 1.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * - * The Initial Developer of the Original Code is - * Anthony Minessale II - * Portions created by the Initial Developer are Copyright (C) - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Anthony Minessale II - * - * - * mod_g711.c -- G.711 Ulaw/Alaw Codec Module - * - */ - -#include -#include - -SWITCH_MODULE_LOAD_FUNCTION(mod_g711_load); -SWITCH_MODULE_DEFINITION(mod_g711, mod_g711_load, NULL, NULL); - -static switch_status_t switch_g711u_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings) -{ - int encoding, decoding; - - encoding = (flags & SWITCH_CODEC_FLAG_ENCODE); - decoding = (flags & SWITCH_CODEC_FLAG_DECODE); - - if (!(encoding || decoding)) { - return SWITCH_STATUS_FALSE; - } else { - return SWITCH_STATUS_SUCCESS; - } -} - -static switch_status_t switch_g711u_encode(switch_codec_t *codec, - switch_codec_t *other_codec, - void *decoded_data, - uint32_t decoded_data_len, - uint32_t decoded_rate, void *encoded_data, uint32_t * encoded_data_len, uint32_t * encoded_rate, - unsigned int *flag) -{ - short *dbuf; - unsigned char *ebuf; - uint32_t i; - - dbuf = decoded_data; - ebuf = encoded_data; - - for (i = 0; i < decoded_data_len / sizeof(short); i++) { - ebuf[i] = linear_to_ulaw(dbuf[i]); - } - - *encoded_data_len = i; - - return SWITCH_STATUS_SUCCESS; -} - -static switch_status_t switch_g711u_decode(switch_codec_t *codec, - switch_codec_t *other_codec, - void *encoded_data, - uint32_t encoded_data_len, - uint32_t encoded_rate, void *decoded_data, uint32_t * decoded_data_len, uint32_t * decoded_rate, - unsigned int *flag) -{ - short *dbuf; - unsigned char *ebuf; - uint32_t i; - - dbuf = decoded_data; - ebuf = encoded_data; - - if (*flag & SWITCH_CODEC_FLAG_SILENCE) { - memset(dbuf, 0, codec->implementation->bytes_per_frame); - *decoded_data_len = codec->implementation->bytes_per_frame; - } else { - for (i = 0; i < encoded_data_len; i++) { - dbuf[i] = ulaw_to_linear(ebuf[i]); - } - - *decoded_data_len = i * 2; - } - - return SWITCH_STATUS_SUCCESS; -} - -static switch_status_t switch_g711u_destroy(switch_codec_t *codec) -{ - return SWITCH_STATUS_SUCCESS; -} - - -static switch_status_t switch_g711a_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings) -{ - int encoding, decoding; - - encoding = (flags & SWITCH_CODEC_FLAG_ENCODE); - decoding = (flags & SWITCH_CODEC_FLAG_DECODE); - - if (!(encoding || decoding)) { - return SWITCH_STATUS_FALSE; - } else { - return SWITCH_STATUS_SUCCESS; - } -} - -static switch_status_t switch_g711a_encode(switch_codec_t *codec, - switch_codec_t *other_codec, - void *decoded_data, - uint32_t decoded_data_len, - uint32_t decoded_rate, void *encoded_data, uint32_t * encoded_data_len, uint32_t * encoded_rate, - unsigned int *flag) -{ - short *dbuf; - unsigned char *ebuf; - uint32_t i; - - dbuf = decoded_data; - ebuf = encoded_data; - - for (i = 0; i < decoded_data_len / sizeof(short); i++) { - ebuf[i] = linear_to_alaw(dbuf[i]); - } - - *encoded_data_len = i; - - return SWITCH_STATUS_SUCCESS; -} - -static switch_status_t switch_g711a_decode(switch_codec_t *codec, - switch_codec_t *other_codec, - void *encoded_data, - uint32_t encoded_data_len, - uint32_t encoded_rate, void *decoded_data, uint32_t * decoded_data_len, uint32_t * decoded_rate, - unsigned int *flag) -{ - short *dbuf; - unsigned char *ebuf; - uint32_t i; - - dbuf = decoded_data; - ebuf = encoded_data; - - if (*flag & SWITCH_CODEC_FLAG_SILENCE) { - memset(dbuf, 0, codec->implementation->bytes_per_frame); - *decoded_data_len = codec->implementation->bytes_per_frame; - } else { - for (i = 0; i < encoded_data_len; i++) { - dbuf[i] = alaw_to_linear(ebuf[i]); - } - - *decoded_data_len = i * 2; - } - - return SWITCH_STATUS_SUCCESS; -} - -static switch_status_t switch_g711a_destroy(switch_codec_t *codec) -{ - return SWITCH_STATUS_SUCCESS; -} - -SWITCH_MODULE_LOAD_FUNCTION(mod_g711_load) -{ - switch_codec_interface_t *codec_interface; - int mpf = 10000, spf = 80, bpf = 160, ebpf = 80, count; - - /* connect my internal structure to the blank pointer passed to me */ - *module_interface = switch_loadable_module_create_module_interface(pool, modname); - SWITCH_ADD_CODEC(codec_interface, "G.711 ulaw"); - for (count = 12; count > 0; count--) { - switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 0, "PCMU", NULL, 8000, 8000, 64000, - mpf * count, spf * count, bpf * count, ebpf * count, 1, 1, 12, - switch_g711u_init, switch_g711u_encode, switch_g711u_decode, switch_g711u_destroy); - } - - SWITCH_ADD_CODEC(codec_interface, "G.711 alaw"); - for (count = 12; count > 0; count--) { - switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 8, "PCMA", NULL, 8000, 8000, 64000, - mpf * count, spf * count, bpf * count, ebpf * count, 1, 1, 12, - switch_g711a_init, switch_g711a_encode, switch_g711a_decode, switch_g711a_destroy); - } - - /* indicate that the module should continue to be loaded */ - return SWITCH_STATUS_SUCCESS; -} - -/* For Emacs: - * Local Variables: - * mode:c - * indent-tabs-mode:t - * tab-width:4 - * c-basic-offset:4 - * End: - * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: - */ diff --git a/src/mod/codecs/mod_g711/mod_g711.vcproj b/src/mod/codecs/mod_g711/mod_g711.vcproj deleted file mode 100644 index 6ba1e3ef74..0000000000 --- a/src/mod/codecs/mod_g711/mod_g711.vcproj +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mod/codecs/mod_l16/mod_l16.2008.vcproj b/src/mod/codecs/mod_l16/mod_l16.2008.vcproj deleted file mode 100644 index 25f8423770..0000000000 --- a/src/mod/codecs/mod_l16/mod_l16.2008.vcproj +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mod/codecs/mod_l16/mod_l16.c b/src/mod/codecs/mod_l16/mod_l16.c deleted file mode 100644 index 7fe1387432..0000000000 --- a/src/mod/codecs/mod_l16/mod_l16.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * Copyright (C) 2005/2006, Anthony Minessale II - * - * Version: MPL 1.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * - * The Initial Developer of the Original Code is - * Anthony Minessale II - * Portions created by the Initial Developer are Copyright (C) - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Anthony Minessale II - * - * - * mod_l16.c -- Raw Signed Linear Codec - * - */ - -#include - -SWITCH_MODULE_LOAD_FUNCTION(mod_l16_load); -SWITCH_MODULE_DEFINITION(mod_l16, mod_l16_load, NULL, NULL); - -static switch_status_t switch_raw_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings) -{ - int encoding, decoding; - - encoding = (flags & SWITCH_CODEC_FLAG_ENCODE); - decoding = (flags & SWITCH_CODEC_FLAG_DECODE); - - if (!(encoding || decoding)) { - return SWITCH_STATUS_FALSE; - } else { - return SWITCH_STATUS_SUCCESS; - } -} - -static switch_status_t switch_raw_encode(switch_codec_t *codec, - switch_codec_t *other_codec, - void *decoded_data, - uint32_t decoded_data_len, - uint32_t decoded_rate, void *encoded_data, uint32_t * encoded_data_len, uint32_t * encoded_rate, - unsigned int *flag) -{ - /* NOOP indicates that the audio in is already the same as the audio out, so no conversion was necessary. */ - if (codec && other_codec && codec->implementation && other_codec->implementation && - codec->implementation->actual_samples_per_second != other_codec->implementation->actual_samples_per_second) { - memcpy(encoded_data, decoded_data, decoded_data_len); - *encoded_data_len = decoded_data_len; - return SWITCH_STATUS_RESAMPLE; - } - return SWITCH_STATUS_NOOP; -} - -static switch_status_t switch_raw_decode(switch_codec_t *codec, - switch_codec_t *other_codec, - void *encoded_data, - uint32_t encoded_data_len, - uint32_t encoded_rate, void *decoded_data, uint32_t * decoded_data_len, uint32_t * decoded_rate, - unsigned int *flag) -{ - if (codec && other_codec && codec->implementation && other_codec->implementation && - codec->implementation->actual_samples_per_second != other_codec->implementation->actual_samples_per_second) { - memcpy(decoded_data, encoded_data, encoded_data_len); - *decoded_data_len = encoded_data_len; - return SWITCH_STATUS_RESAMPLE; - } - return SWITCH_STATUS_NOOP; -} - -static switch_status_t switch_raw_destroy(switch_codec_t *codec) -{ - return SWITCH_STATUS_SUCCESS; -} - -SWITCH_MODULE_LOAD_FUNCTION(mod_l16_load) -{ - switch_codec_interface_t *codec_interface; - int mpf = 10000, spf = 80, bpf = 160, ebpf = 160, bps = 128000, rate = 8000, counta, countb; - switch_payload_t ianacode[4] = { 0, 10, 117, 119 }; - - /* connect my internal structure to the blank pointer passed to me */ - *module_interface = switch_loadable_module_create_module_interface(pool, modname); - SWITCH_ADD_CODEC(codec_interface, "RAW Signed Linear (16 bit)"); - for (counta = 1; counta <= 3; counta++) { - for (countb = 12; countb > 0; countb--) { - switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, ianacode[counta], "L16", NULL, rate, rate, bps, - mpf * countb, spf * countb, bpf * countb, ebpf * countb, 1, 1, 12, - switch_raw_init, switch_raw_encode, switch_raw_decode, switch_raw_destroy); - } - rate = rate * 2; - bps = bps * 2; - spf = spf * 2; - bpf = bpf * 2; - ebpf = ebpf * 2; - } - /* these formats below are for file playing. */ - - switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 118, "L16", NULL, 22050, 22050, 352800, - 20000, 441, 882, 882, 1, 1, 1, - switch_raw_init, switch_raw_encode, switch_raw_decode, switch_raw_destroy); - - switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 118, "L16", NULL, 11025, 11025, 176400, - 40000, 441, 882, 882, 1, 1, 1, - switch_raw_init, switch_raw_encode, switch_raw_decode, switch_raw_destroy); - - /* indicate that the module should continue to be loaded */ - return SWITCH_STATUS_SUCCESS; -} - -/* For Emacs: - * Local Variables: - * mode:c - * indent-tabs-mode:t - * tab-width:4 - * c-basic-offset:4 - * End: - * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: - */ diff --git a/src/mod/codecs/mod_l16/mod_l16.vcproj b/src/mod/codecs/mod_l16/mod_l16.vcproj deleted file mode 100644 index 7642448a14..0000000000 --- a/src/mod/codecs/mod_l16/mod_l16.vcproj +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c b/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c index 324b2e07cb..b4ad06528d 100644 --- a/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c +++ b/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c @@ -189,6 +189,7 @@ static switch_status_t switch_gsm_destroy(switch_codec_t *codec) } /* GSM - END */ +#ifdef ENABLE_G711 /* G711 - START */ static switch_status_t switch_g711u_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings) { @@ -332,6 +333,8 @@ static switch_status_t switch_g711a_destroy(switch_codec_t *codec) } /* G711 - END */ +#endif + /* G722 - START */ @@ -656,6 +659,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_voipcodecs_load) switch_g722_init, switch_g722_encode, switch_g722_decode, switch_g722_destroy); } +#ifdef ENABLE_G711 /* G711 */ mpf = 10000, spf = 80, bpf = 160, ebpf = 80; SWITCH_ADD_CODEC(codec_interface, "G.711 ulaw"); @@ -673,6 +677,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_voipcodecs_load) mpf * count, spf * count, bpf * count, ebpf * count, 1, 1, 12, switch_g711a_init, switch_g711a_encode, switch_g711a_decode, switch_g711a_destroy); } +#endif /* GSM */ mpf = 20000, spf = 160, bpf = 320, ebpf = 33; diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index 470d308a91..24a08391c5 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -978,6 +978,7 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init() switch_mutex_init(&loadable_modules.mutex, SWITCH_MUTEX_NESTED, loadable_modules.pool); switch_loadable_module_load_module("", "softtimer", SWITCH_FALSE, &err); + switch_loadable_module_load_module("", "PCM", SWITCH_FALSE, &err); if ((xml = switch_xml_open_cfg(cf, &cfg, NULL))) { switch_xml_t mods, ld;