[Freeswitch-users] codecs initialization flags in endpoint modules

Lele Forzani lele at windmill.it
Fri Apr 3 06:20:13 PDT 2009


Hello,
I've been experimenting with the use of mod_dahdi_codec and other ways
to perform external transcoding for codecs, and came up with noticing
that transcoding resources seemed to be used up twice what I expected. 
That is and 2x the number of call legs, ending up to two encoder and two
decoder instances per leg.


So, I looked at the code and noticed almost every endpoint module does
something like this (excerpt from mod_sofia, sofia_glue.c:~1800):

if (switch_core_codec_init(&tech_pvt->read_codec,
		   tech_pvt->iananame,
		   tech_pvt->rm_fmtp,
		   tech_pvt->rm_rate,
		   tech_pvt->codec_ms,
		   1,
		   SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | tech_pvt->profile->codec_flags, 
		   NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {
	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
	switch_goto_status(SWITCH_STATUS_FALSE, end);
}

if (switch_core_codec_init(&tech_pvt->write_codec,
		   tech_pvt->iananame,
		   tech_pvt->rm_fmtp,
		   tech_pvt->rm_rate,
		   tech_pvt->codec_ms,
		   1,
		   SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | tech_pvt->profile->codec_flags, 
		   NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {
	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
	switch_goto_status(SWITCH_STATUS_FALSE, end);
}


The flags being SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE
seems to be causing the apparent 'double' allocation of transcoding
resources, and I fail to understand the need for both, in both cases.

Could someone please spend a minute to explain?


thanks
lele








More information about the FreeSWITCH-users mailing list