[Asterisk-Dev] Re: [Asterisk-cvs] asterisk channel.c,1.187,1.188

Steve Kann stevek at stevek.com
Mon Apr 18 09:51:15 MST 2005


kpfleming at lists.digium.com wrote:

>Update of /usr/cvsroot/asterisk
>In directory mongoose.digium.com:/tmp/cvs-serv22529
>
>Modified Files:
>	channel.c 
>Log Message:
>don't force transcoding through SLINEAR when transcoding is not needed at all
>clean up formatting and variable names in ast_channel_make_compatible
>  
>

I've been meaning to chat with you about this.   So now, the only time 
that we go through SLINEAR when we wouldn't have before is in the alaw 
<-> ulaw case, since all the other translators have slinear on one end..

But, forcing transcoding is definitely a bad thing, not just for 
performance, but also for quality, as you lose quality every time you 
transcode (and it certainly _is_ noticable).

Of course, this reverts the PLC works for uLaw calls Zap <-> VoIP, but 
that really should be fixed a different way anyhow.

-SteveK


>
>Index: channel.c
>===================================================================
>RCS file: /usr/cvsroot/asterisk/channel.c,v
>retrieving revision 1.187
>retrieving revision 1.188
>diff -u -d -r1.187 -r1.188
>--- channel.c	4 Apr 2005 03:28:38 -0000	1.187
>+++ channel.c	18 Apr 2005 16:26:41 -0000	1.188
>@@ -2242,54 +2242,48 @@
> 
> int ast_channel_make_compatible(struct ast_channel *chan, struct ast_channel *peer)
> {
>-	int peerf;
>-	int chanf;
>-	int res;
>+	int src;
>+	int dst;
> 
> 	/* Set up translation from the chan to the peer */
>-	peerf = peer->nativeformats;
>-	chanf = chan->nativeformats;
>-	res = ast_translator_best_choice(&peerf, &chanf);
>-	if (res < 0) {
>-		ast_log(LOG_WARNING, "No path to translate from %s(%d) to %s(%d)\n", chan->name, chanf, peer->name, peerf);
>+	src = chan->nativeformats;
>+	dst = peer->nativeformats;
>+	if (ast_translator_best_choice(&dst, &src) < 0) {
>+		ast_log(LOG_WARNING, "No path to translate from %s(%d) to %s(%d)\n", chan->name, src, peer->name, dst);
> 		return -1;
> 	}
>-	/* if desired, force all transcode paths to use SLINEAR between channels */
>-	if (option_transcode_slin)
>-		peerf = AST_FORMAT_SLINEAR;
>-	/* Set read format on chan */
>-	res = ast_set_read_format(chan, peerf);
>-	if (res < 0) {
>-		ast_log(LOG_WARNING, "Unable to set read format on channel %s to %d\n", chan->name, chanf);
>+	/* if the best path is not 'pass through', then
>+	   transcoding is needed; if desired, force transcode path
>+	   to use SLINEAR between channels */
>+	if ((src != dst) && option_transcode_slin)
>+		dst = AST_FORMAT_SLINEAR;
>+	if (ast_set_read_format(chan, dst) < 0) {
>+		ast_log(LOG_WARNING, "Unable to set read format on channel %s to %d\n", chan->name, dst);
> 		return -1;
> 	}
>-	/* Set write format on peer */
>-	res = ast_set_write_format(peer, peerf);
>-	if (res < 0) {
>-		ast_log(LOG_WARNING, "Unable to set write format on channel %s to %d\n", peer->name, peerf);
>+	if (ast_set_write_format(peer, dst) < 0) {
>+		ast_log(LOG_WARNING, "Unable to set write format on channel %s to %d\n", peer->name, dst);
> 		return -1;
> 	}
>-	/* Now we go the other way (peer to chan) */
>-	peerf = peer->nativeformats;
>-	chanf = chan->nativeformats;
>-	res = ast_translator_best_choice(&chanf, &peerf);
>-	if (res < 0) {
>-		ast_log(LOG_WARNING, "No path to translate from %s(%d) to %s(%d)\n", peer->name, peerf, chan->name, chanf);
>+
>+	/* Set up translation from the peer to the chan */
>+	src = peer->nativeformats;
>+	dst = chan->nativeformats;
>+	if (ast_translator_best_choice(&dst, &src) < 0) {
>+		ast_log(LOG_WARNING, "No path to translate from %s(%d) to %s(%d)\n", peer->name, src, chan->name, dst);
> 		return -1;
> 	}
>-	/* if desired, force all transcode paths to use SLINEAR between channels */
>-	if (option_transcode_slin)
>-		chanf = AST_FORMAT_SLINEAR;
>-	/* Set read format on peer */
>-	res = ast_set_read_format(peer, chanf);
>-	if (res < 0) {
>-		ast_log(LOG_WARNING, "Unable to set read format on channel %s to %d\n", peer->name, peerf);
>+	/* if the best path is not 'pass through', then
>+	   transcoding is needed; if desired, force transcode path
>+	   to use SLINEAR between channels */
>+	if ((src != dst) && option_transcode_slin)
>+		dst = AST_FORMAT_SLINEAR;
>+	if (ast_set_read_format(peer, dst) < 0) {
>+		ast_log(LOG_WARNING, "Unable to set read format on channel %s to %d\n", peer->name, dst);
> 		return -1;
> 	}
>-	/* Set write format on chan */
>-	res = ast_set_write_format(chan, chanf);
>-	if (res < 0) {
>-		ast_log(LOG_WARNING, "Unable to set write format on channel %s to %d\n", chan->name, chanf);
>+	if (ast_set_write_format(chan, dst) < 0) {
>+		ast_log(LOG_WARNING, "Unable to set write format on channel %s to %d\n", chan->name, dst);
> 		return -1;
> 	}
> 	return 0;
>
>_______________________________________________
>Asterisk-Cvs mailing list
>Asterisk-Cvs at lists.digium.com
>http://lists.digium.com/mailman/listinfo/asterisk-cvs
>
>  
>





More information about the asterisk-dev mailing list