[Freeswitch-svn] [commit] r1666 - in freeswitch/trunk/src: . include mod/applications/mod_rss mod/codecs/mod_g711 mod/codecs/mod_g729 mod/codecs/mod_gsm mod/codecs/mod_ilbc mod/codecs/mod_l16 mod/codecs/mod_speex mod/endpoints/mod_dingaling mod/endpoints/mod_exosip mod/endpoints/mod_iax
Author: anthm Date: Fri Jun 23 16:14:29 2006 New Revision: 1666 Modified: freeswitch/trunk/src/include/switch_module_interfaces.h freeswitch/trunk/src/mod/applications/mod_rss/mod_rss.c freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c freeswitch/trunk/src/mod/codecs/mod_g729/mod_g729.c freeswitch/trunk/src/mod/codecs/mod_gsm/mod_gsm.c freeswitch/trunk/src/mod/codecs/mod_ilbc/mod_ilbc.c freeswitch/trunk/src/mod/codecs/mod_l16/mod_l16.c freeswitch/trunk/src/mod/codecs/mod_speex/mod_speex.c freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c freeswitch/trunk/src/mod/endpoints/mod_exosip/mod_exosip.c freeswitch/trunk/src/mod/endpoints/mod_iax/mod_iax.c freeswitch/trunk/src/switch_loadable_module.c freeswitch/trunk/src/switch_rtp.c Log: move iana codes to the implementations. Modified: freeswitch/trunk/src/include/switch_module_interfaces.h ============================================================================== --- freeswitch/trunk/src/include/switch_module_interfaces.h (original) +++ freeswitch/trunk/src/include/switch_module_interfaces.h Fri Jun 23 16:14:29 2006 @@ -444,6 +444,10 @@ /*! \brief A table of settings and callbacks that define a paticular implementation of a codec */ struct switch_codec_implementation { + /*! the IANA code number */ + switch_payload_t ianacode; + /*! the IANA code name */ + char *iananame; /*! samples transferred per second */ uint32_t samples_per_second; /*! bits transferred per second */ @@ -495,10 +499,6 @@ const char *interface_name; /*! enumeration defining the type of the codec */ const switch_codec_type_t codec_type; - /*! the IANA code number */ - switch_payload_t ianacode; - /*! the IANA code name */ - char *iananame; /*! a list of codec implementations related to the codec */ const switch_codec_implementation_t *implementations; const struct switch_codec_interface *next; Modified: freeswitch/trunk/src/mod/applications/mod_rss/mod_rss.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_rss/mod_rss.c (original) +++ freeswitch/trunk/src/mod/applications/mod_rss/mod_rss.c Fri Jun 23 16:14:29 2006 @@ -69,11 +69,10 @@ char tstr[80] = ""; uint32_t matches = 0, x = 0; uint32_t len = (uint32_t)strlen(str); - printf("%s\n", str); + for (x = 0; x < max ; x++) { snprintf(tstr, sizeof(tstr), "%u", x); if (!strncasecmp(str, tstr, len)) { - printf("match %s=%s\n", str, tstr); matches++; } } @@ -293,6 +292,7 @@ if (jumpto > -1) { snprintf(cmd, sizeof(cmd), "%d", jumpto); + jumpto = -1; } else { switch_core_speech_flush_tts(&sh); #ifdef MATCH_COUNT 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 Fri Jun 23 16:14:29 2006 @@ -190,6 +190,8 @@ #if 0 static const switch_codec_implementation_t g711u_8k_60ms_implementation = { + /*.ianacode */ 0, + /*.iananame */ "PCMU", /*.samples_per_second */ 8000, /*.bits_per_second */ 19200, /*.microseconds_per_frame */ 60000, @@ -207,6 +209,8 @@ static const switch_codec_implementation_t g711u_8k_30ms_implementation = { + /*.ianacode */ 0, + /*.iananame */ "PCMU", /*.samples_per_second */ 8000, /*.bits_per_second */ 96000, /*.microseconds_per_frame */ 30000, @@ -225,6 +229,8 @@ #endif static const switch_codec_implementation_t g711u_16k_implementation = { + /*.ianacode */ 0, + /*.iananame */ "PCMU", /*.samples_per_second */ 16000, /*.bits_per_second */ 128000, /*.microseconds_per_frame */ 20000, @@ -241,6 +247,8 @@ }; static const switch_codec_implementation_t g711u_8k_implementation = { + /*.ianacode */ 0, + /*.iananame */ "PCMU", /*.samples_per_second */ 8000, /*.bits_per_second */ 64000, /*.microseconds_per_frame */ 20000, @@ -259,6 +267,8 @@ static const switch_codec_implementation_t g711a_8k_implementation = { + /*.ianacode */ 8, + /*.iananame */ "PCMA", /*.samples_per_second */ 8000, /*.bits_per_second */ 64000, /*.microseconds_per_frame */ 20000, @@ -278,16 +288,12 @@ static const switch_codec_interface_t g711a_codec_interface = { /*.interface_name */ "g711 alaw", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 8, - /*.iananame */ "PCMA", /*.implementations */ &g711a_8k_implementation }; static const switch_codec_interface_t g711u_codec_interface = { /*.interface_name */ "g711 ulaw", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 0, - /*.iananame */ "PCMU", /*.implementations */ &g711u_8k_implementation, /*.next */ &g711a_codec_interface }; Modified: freeswitch/trunk/src/mod/codecs/mod_g729/mod_g729.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_g729/mod_g729.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_g729/mod_g729.c Fri Jun 23 16:14:29 2006 @@ -219,6 +219,8 @@ /* Registration */ static const switch_codec_implementation_t g729_10ms_8k_implementation = { + /*.ianacode */ 18, + /*.iananame */ "G729", /*.samples_per_second */ 8000, /*.bits_per_second */ 32000, /*.microseconds_per_frame */ 10000, @@ -235,6 +237,8 @@ }; static const switch_codec_implementation_t g729_8k_implementation = { + /*.ianacode */ 18, + /*.iananame */ "G729", /*.samples_per_second */ 8000, /*.bits_per_second */ 64000, /*.microseconds_per_frame */ 20000, @@ -255,8 +259,6 @@ static const switch_codec_interface_t g729_codec_interface = { /*.interface_name */ "g729", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 18, - /*.iananame */ "G729", /*.implementations */ &g729_8k_implementation, }; Modified: freeswitch/trunk/src/mod/codecs/mod_gsm/mod_gsm.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_gsm/mod_gsm.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_gsm/mod_gsm.c Fri Jun 23 16:14:29 2006 @@ -133,6 +133,8 @@ /* Registration */ static const switch_codec_implementation_t gsm_8k_implementation = { + /*.ianacode */ 3, + /*.iananame */ "gsm", /*.samples_per_second */ 8000, /*.bits_per_second */ 13200, /*.microseconds_per_frame */ 20000, @@ -150,8 +152,6 @@ static const switch_codec_interface_t gsm_codec_interface = { /*.interface_name */ "gsm", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 3, - /*.iananame */ "gsm", /*.implementations */ &gsm_8k_implementation, }; static switch_loadable_module_interface_t gsm_module_interface = { Modified: freeswitch/trunk/src/mod/codecs/mod_ilbc/mod_ilbc.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_ilbc/mod_ilbc.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_ilbc/mod_ilbc.c Fri Jun 23 16:14:29 2006 @@ -186,6 +186,8 @@ /* Registration */ static const switch_codec_implementation_t ilbc_8k_30ms_implementation = { + /*.ianacode */ 97, + /*.iananame */ "iLBC", /*.samples_per_second */ 8000, /*.bits_per_second */ NO_OF_BYTES_30MS*8*8000/BLOCKL_30MS, /*.microseconds_per_frame */ 30000, @@ -202,6 +204,8 @@ }; static const switch_codec_implementation_t ilbc_8k_20ms_implementation = { + /*.ianacode */ 97, + /*.iananame */ "iLBC", /*.samples_per_second */ 8000, /*.bits_per_second */ NO_OF_BYTES_20MS*8*8000/BLOCKL_20MS, /*.microseconds_per_frame */ 20000, @@ -219,7 +223,48 @@ }; + +static const switch_codec_implementation_t ilbc_102_8k_30ms_implementation = { + /*.ianacode */ 97, + /*.iananame */ "iLBC", + /*.samples_per_second */ 8000, + /*.bits_per_second */ NO_OF_BYTES_30MS*8*8000/BLOCKL_30MS, + /*.microseconds_per_frame */ 30000, + /*.samples_per_frame */ 240, + /*.bytes_per_frame */ 480, + /*.encoded_bytes_per_frame */ NO_OF_BYTES_30MS, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_ilbc_init, + /*.encode */ switch_ilbc_encode, + /*.decode */ switch_ilbc_decode, + /*.destroy */ switch_ilbc_destroy +}; + +static const switch_codec_implementation_t ilbc_102_8k_20ms_implementation = { + /*.ianacode */ 102, + /*.iananame */ "iLBC102", + /*.samples_per_second */ 8000, + /*.bits_per_second */ NO_OF_BYTES_20MS*8*8000/BLOCKL_20MS, + /*.microseconds_per_frame */ 20000, + /*.samples_per_frame */ 160, + /*.bytes_per_frame */ 320, + /*.encoded_bytes_per_frame */ NO_OF_BYTES_20MS, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_ilbc_init, + /*.encode */ switch_ilbc_encode, + /*.decode */ switch_ilbc_decode, + /*.destroy */ switch_ilbc_destroy, + /*.next */ &ilbc_102_8k_30ms_implementation +}; + + static const switch_codec_implementation_t ilbc_8k_20ms_nonext_implementation = { + /*.ianacode */ 97, + /*.iananame */ "iLBC20ms", /*.samples_per_second */ 8000, /*.bits_per_second */ NO_OF_BYTES_20MS*8*8000/BLOCKL_20MS, /*.microseconds_per_frame */ 20000, @@ -239,25 +284,19 @@ static const switch_codec_interface_t ilbc_20ms_codec_interface = { /*.interface_name */ "ilbc", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 97, - /*.iananame */ "iLBC20ms", /*.implementations */ &ilbc_8k_20ms_nonext_implementation }; static const switch_codec_interface_t ilbc_102_codec_interface = { /*.interface_name */ "ilbc", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 102, - /*.iananame */ "iLBC102", - /*.implementations */ &ilbc_8k_20ms_implementation, + /*.implementations */ &ilbc_102_8k_20ms_implementation, /*.next*/ &ilbc_20ms_codec_interface }; static const switch_codec_interface_t ilbc_codec_interface = { /*.interface_name */ "ilbc", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 97, - /*.iananame */ "iLBC", /*.implementations */ &ilbc_8k_20ms_implementation, /*.next*/ &ilbc_102_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 Fri Jun 23 16:14:29 2006 @@ -91,6 +91,8 @@ } static const switch_codec_implementation_t raw_32k_implementation = { + /*.ianacode */ 10, + /*.iananame */ "L16", /*.samples_per_second = */ 32000, /*.bits_per_second = */ 512000, /*.microseconds_per_frame = */ 20000, @@ -107,6 +109,8 @@ }; static const switch_codec_implementation_t raw_22k_implementation = { + /*.ianacode */ 10, + /*.iananame */ "L16", /*.samples_per_second = */ 22050, /*.bits_per_second = */ 352800, /*.microseconds_per_frame = */ 20000, @@ -124,6 +128,8 @@ }; static const switch_codec_implementation_t raw_16k_implementation = { + /*.ianacode */ 10, + /*.iananame */ "L16", /*.samples_per_second = */ 16000, /*.bits_per_second = */ 256000, /*.microseconds_per_frame = */ 20000, @@ -141,6 +147,8 @@ }; static const switch_codec_implementation_t raw_8k_implementation = { + /*.ianacode */ 10, + /*.iananame */ "L16", /*.samples_per_second = */ 8000, /*.bits_per_second = */ 128000, /*.microseconds_per_frame = */ 20000, @@ -159,6 +167,8 @@ static const switch_codec_implementation_t raw_8k_30ms_implementation = { + /*.ianacode */ 10, + /*.iananame */ "L16", /*.samples_per_second */ 8000, /*.bits_per_second */ 128000, /*.microseconds_per_frame */ 30000, @@ -179,8 +189,6 @@ static const switch_codec_interface_t raw_codec_interface = { /*.interface_name */ "raw signed linear (16 bit)", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 10, - /*.iananame */ "L16", /*.implementations */ &raw_8k_30ms_implementation }; Modified: freeswitch/trunk/src/mod/codecs/mod_speex/mod_speex.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_speex/mod_speex.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_speex/mod_speex.c Fri Jun 23 16:14:29 2006 @@ -268,6 +268,8 @@ /* Registration */ static const switch_codec_implementation_t speex_32k_implementation = { + /*.ianacode */ 98, + /*.iananame */ "speex", /*.samples_per_second */ 32000, /*.bits_per_second */ 512000, /*.nanoseconds_per_frame */ 20000, @@ -284,6 +286,8 @@ }; static const switch_codec_implementation_t speex_16k_implementation = { + /*.ianacode */ 98, + /*.iananame */ "speex", /*.samples_per_second */ 16000, /*.bits_per_second */ 256000, /*.nanoseconds_per_frame */ 20000, @@ -301,6 +305,8 @@ }; static const switch_codec_implementation_t speex_8k_implementation = { + /*.ianacode */ 98, + /*.iananame */ "speex", /*.samples_per_second */ 8000, /*.bits_per_second */ 128000, /*.nanoseconds_per_frame */ 20000, @@ -320,8 +326,6 @@ static const switch_codec_interface_t speex_codec_interface = { /*.interface_name */ "speex", /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 98, - /*.iananame */ "speex", /*.implementations */ &speex_8k_implementation }; Modified: freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c Fri Jun 23 16:14:29 2006 @@ -440,16 +440,16 @@ if (force || !switch_test_flag(tech_pvt, TFLAG_CODEC_READY)) { if (tech_pvt->codec_index < 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Don't have my codec yet here's one\n"); - tech_pvt->codec_name = lame(tech_pvt->codecs[0]->iananame); - tech_pvt->codec_num = tech_pvt->codecs[0]->ianacode; + tech_pvt->codec_name = lame(tech_pvt->codecs[0]->implementations->iananame); + tech_pvt->codec_num = tech_pvt->codecs[0]->implementations->ianacode; tech_pvt->codec_index = 0; - payloads[0].name = lame(tech_pvt->codecs[0]->iananame); - payloads[0].id = tech_pvt->codecs[0]->ianacode; + payloads[0].name = lame(tech_pvt->codecs[0]->implementations->iananame); + payloads[0].id = tech_pvt->codecs[0]->implementations->ianacode; } else { - payloads[0].name = lame(tech_pvt->codecs[tech_pvt->codec_index]->iananame); - payloads[0].id = tech_pvt->codecs[tech_pvt->codec_index]->ianacode; + payloads[0].name = lame(tech_pvt->codecs[tech_pvt->codec_index]->implementations->iananame); + payloads[0].id = tech_pvt->codecs[tech_pvt->codec_index]->implementations->ianacode; } @@ -1546,22 +1546,22 @@ for(x = 0; x < len; x++) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Available Payload %s %u\n", payloads[x].name, payloads[x].id); for(y = 0; y < tech_pvt->num_codecs; y++) { - char *name = tech_pvt->codecs[y]->iananame; + char *name = tech_pvt->codecs[y]->implementations->iananame; if (!strncasecmp(name, "ilbc", 4)) { name = "ilbc"; } - if (tech_pvt->codecs[y]->ianacode > 96) { + if (tech_pvt->codecs[y]->implementations->ianacode > 96) { match = strcasecmp(name, payloads[x].name) ? 0 : 1; } else { - match = (payloads[x].id == tech_pvt->codecs[y]->ianacode) ? 1 : 0; + match = (payloads[x].id == tech_pvt->codecs[y]->implementations->ianacode) ? 1 : 0; } if (match) { tech_pvt->codec_index = y; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Choosing Payload index %u %s %u\n", y, payloads[x].name, payloads[x].id); - tech_pvt->codec_name = tech_pvt->codecs[y]->iananame; - tech_pvt->codec_num = tech_pvt->codecs[y]->ianacode; + tech_pvt->codec_name = tech_pvt->codecs[y]->implementations->iananame; + tech_pvt->codec_num = tech_pvt->codecs[y]->implementations->ianacode; if (!switch_test_flag(tech_pvt, TFLAG_OUTBOUND)) { do_describe(tech_pvt, 0); } Modified: freeswitch/trunk/src/mod/endpoints/mod_exosip/mod_exosip.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_exosip/mod_exosip.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_exosip/mod_exosip.c Fri Jun 23 16:14:29 2006 @@ -351,24 +351,27 @@ if (tech_pvt->num_codecs > 0) { - int i; + int i, lastcode = -1; static const switch_codec_implementation_t *imp; for (i = 0; i < tech_pvt->num_codecs; i++) { - - - snprintf(tmp, sizeof(tmp), "%u", tech_pvt->codecs[i]->ianacode); - sdp_message_m_payload_add(tech_pvt->local_sdp, 0, osip_strdup(tmp)); imp = tech_pvt->codecs[i]->implementations; while(NULL != imp) { uint32_t sps = imp->samples_per_second; + + if (lastcode != imp->ianacode) { + snprintf(tmp, sizeof(tmp), "%u", imp->ianacode); + sdp_message_m_payload_add(tech_pvt->local_sdp, 0, osip_strdup(tmp)); + lastcode = imp->ianacode; + } + /* Add to SDP config */ - sdp_add_codec(tech_pvt->sdp_config, tech_pvt->codecs[i]->codec_type, tech_pvt->codecs[i]->ianacode, tech_pvt->codecs[i]->iananame, sps, 0); + sdp_add_codec(tech_pvt->sdp_config, tech_pvt->codecs[i]->codec_type, imp->ianacode, imp->iananame, sps, 0); /* Add to SDP message */ - snprintf(tmp, sizeof(tmp), "%u %s/%d", tech_pvt->codecs[i]->ianacode, tech_pvt->codecs[i]->iananame, sps); + snprintf(tmp, sizeof(tmp), "%u %s/%d", imp->ianacode, imp->iananame, sps); sdp_message_a_attribute_add(tech_pvt->local_sdp, 0, "rtpmap", osip_strdup(tmp)); memset(tmp, 0, sizeof(tmp)); if (imp) { @@ -521,10 +524,10 @@ } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Activating RTP %s:%d->%s:%d codec: %u ms: %d\n", - tech_pvt->local_sdp_audio_ip, - tech_pvt->local_sdp_audio_port, - tech_pvt->remote_sdp_audio_ip, - tech_pvt->remote_sdp_audio_port, tech_pvt->read_codec.codec_interface->ianacode, ms); + tech_pvt->local_sdp_audio_ip, + tech_pvt->local_sdp_audio_port, + tech_pvt->remote_sdp_audio_ip, + tech_pvt->remote_sdp_audio_port, tech_pvt->read_codec.implementation->ianacode, ms); if (tech_pvt->realm) { @@ -548,15 +551,15 @@ } tech_pvt->rtp_session = switch_rtp_new(tech_pvt->local_sdp_audio_ip, - tech_pvt->local_sdp_audio_port, - tech_pvt->remote_sdp_audio_ip, - tech_pvt->remote_sdp_audio_port, - tech_pvt->read_codec.codec_interface->ianacode, - tech_pvt->read_codec.implementation->encoded_bytes_per_frame, - ms, - flags, - key, - &err, switch_core_session_get_pool(tech_pvt->session)); + tech_pvt->local_sdp_audio_port, + tech_pvt->remote_sdp_audio_ip, + tech_pvt->remote_sdp_audio_port, + tech_pvt->read_codec.implementation->ianacode, + tech_pvt->read_codec.implementation->encoded_bytes_per_frame, + ms, + flags, + key, + &err, switch_core_session_get_pool(tech_pvt->session)); if (tech_pvt->rtp_session) { uint8_t vad_in = switch_test_flag(tech_pvt, TFLAG_VAD_IN) ? 1 : 0; @@ -1311,7 +1314,7 @@ for (i = 0; i < tech_pvt->num_codecs; i++) { for (imp = tech_pvt->codecs[i]->implementations; imp; imp = imp->next) { - sdp_add_codec(tech_pvt->sdp_config, tech_pvt->codecs[i]->codec_type, tech_pvt->codecs[i]->ianacode, tech_pvt->codecs[i]->iananame, + sdp_add_codec(tech_pvt->sdp_config, tech_pvt->codecs[i]->codec_type, imp->ianacode, imp->iananame, imp->samples_per_second, 0); } @@ -1520,22 +1523,20 @@ for(i = 0; !match && i < tech_pvt->num_codecs; i++) { const switch_codec_implementation_t *imp; - if (pt < 97) { - match = (pt == tech_pvt->codecs[i]->ianacode) ? 1 : 0; - } else { - match = strcasecmp(name, tech_pvt->codecs[i]->iananame) ? 0 : 1; - } - if (match) { - match = 0; + for (imp = tech_pvt->codecs[i]->implementations; imp; imp = imp->next) { + + if (pt < 97) { + match = (pt == imp->ianacode) ? 1 : 0; + } else { + match = strcasecmp(name, imp->iananame) ? 0 : 1; + } - for (imp = tech_pvt->codecs[i]->implementations; imp; imp = imp->next) { - if ((r == imp->samples_per_second)) { - match = 1; - break; - } + if (match && (r == imp->samples_per_second)) { + break; } } + } if (match) { Modified: freeswitch/trunk/src/mod/endpoints/mod_iax/mod_iax.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_iax/mod_iax.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_iax/mod_iax.c Fri Jun 23 16:14:29 2006 @@ -234,11 +234,15 @@ } for (x = 0; x < num_codecs; x++) { - unsigned int codec = iana2ast(codecs[x]->ianacode); - if (io == IAX_QUERY) { - iax_pref_codec_add(iax_session, codec); + static const switch_codec_implementation_t *imp; + for (imp = codecs[x]->implementations; imp; imp = imp->next) { + unsigned int codec = iana2ast(imp->ianacode); + + if (io == IAX_QUERY) { + iax_pref_codec_add(iax_session, codec); + } + local_cap |= codec; } - local_cap |= codec; } if (io == IAX_SET) { @@ -247,7 +251,7 @@ mixed_cap = local_cap; } - leading = iana2ast(codecs[0]->ianacode); + leading = iana2ast(codecs[0]->implementations->ianacode); if (io == IAX_QUERY) { chosen = leading; *format = chosen; @@ -259,7 +263,7 @@ return SWITCH_STATUS_SUCCESS; } else if (switch_test_flag(&globals, GFLAG_MY_CODEC_PREFS) && (leading & mixed_cap)) { chosen = leading; - dname = codecs[0]->iananame; + dname = codecs[0]->implementations->iananame; } else { unsigned int prefs[32]; int len = 0; @@ -283,8 +287,12 @@ int z; chosen = prefs[x]; for (z = 0; z < num_codecs; z++) { - if (prefs[x] == iana2ast(codecs[z]->ianacode)) { - dname = codecs[z]->iananame; + static const switch_codec_implementation_t *imp; + for (imp = codecs[z]->implementations; imp; imp = imp->next) { + if (prefs[x] == iana2ast(imp->ianacode)) { + dname = imp->iananame; + break; + } } } break; @@ -294,17 +302,25 @@ if (*format & mixed_cap) { /* is the one we asked for here? */ chosen = *format; for (x = 0; x < num_codecs; x++) { - unsigned int cap = iana2ast(codecs[x]->ianacode); - if (cap == chosen) { - dname = codecs[x]->iananame; + static const switch_codec_implementation_t *imp; + for (imp = codecs[x]->implementations; imp; imp = imp->next) { + unsigned int cap = iana2ast(imp->ianacode); + if (cap == chosen) { + dname = imp->iananame; + break; + } } } } else { /* c'mon there has to be SOMETHING... */ for (x = 0; x < num_codecs; x++) { - unsigned int cap = iana2ast(codecs[x]->ianacode); - if (cap & mixed_cap) { - chosen = cap; - dname = codecs[x]->iananame; + static const switch_codec_implementation_t *imp; + for (imp = codecs[x]->implementations; imp; imp = imp->next) { + unsigned int cap = iana2ast(imp->ianacode); + if (cap & mixed_cap) { + chosen = cap; + dname = imp->iananame; + break; + } } } } Modified: freeswitch/trunk/src/switch_loadable_module.c ============================================================================== --- freeswitch/trunk/src/switch_loadable_module.c (original) +++ freeswitch/trunk/src/switch_loadable_module.c Fri Jun 23 16:14:29 2006 @@ -109,16 +109,19 @@ for (impl = ptr->implementations; impl; impl = impl->next) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Codec '%s' (%s) %dkhz %dms\n", - ptr->iananame, + impl->iananame, ptr->interface_name, impl->samples_per_second, impl->microseconds_per_frame / 1000); + if (!switch_core_hash_find(loadable_modules.codec_hash, (char *) impl->iananame)) { + switch_core_hash_insert(loadable_modules.codec_hash, (char *) impl->iananame, (void *) ptr); + } } if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) { switch_event_add_header(event, SWITCH_STACK_BOTTOM, "type", "codec"); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "name", "%s", ptr->interface_name); switch_event_fire(&event); } - switch_core_hash_insert(loadable_modules.codec_hash, (char *) ptr->iananame, (void *) ptr); + } } Modified: freeswitch/trunk/src/switch_rtp.c ============================================================================== --- freeswitch/trunk/src/switch_rtp.c (original) +++ freeswitch/trunk/src/switch_rtp.c Fri Jun 23 16:14:29 2006 @@ -1082,7 +1082,7 @@ } if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VAD) && - rtp_session->recv_msg.header.pt == rtp_session->vad_data.read_codec->codec_interface->ianacode && + rtp_session->recv_msg.header.pt == rtp_session->vad_data.read_codec->implementation->ianacode && datalen == rtp_session->vad_data.read_codec->implementation->encoded_bytes_per_frame) { int16_t decoded[SWITCH_RECCOMMENDED_BUFFER_SIZE/sizeof(int16_t)]; uint32_t rate; @@ -1241,7 +1241,7 @@ memset(&rtp_session->vad_data, 0, sizeof(rtp_session->vad_data)); if (switch_core_codec_init(&rtp_session->vad_data.vad_codec, - codec->codec_interface->iananame, + codec->implementation->iananame, codec->implementation->samples_per_second, codec->implementation->microseconds_per_frame / 1000, codec->implementation->number_of_channels,
participants (1)
-
anthmï¼ freeswitch.org