[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