]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Allow PLC to function properly when channels use SLIN for audio.
authorMark Michelson <mmichelson@digium.com>
Thu, 22 Jul 2010 14:55:04 +0000 (14:55 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 22 Jul 2010 14:55:04 +0000 (14:55 +0000)
If a channel involved in a bridge was using SLIN audio, then translation
paths were not guaranteed to be set up properly since in all likelihood
the number of translation steps was only 1.

This patch enforces the transcode_via_slin behavior if transcode_via_slin
or generic_plc is enabled and one of the formats to make compatible is
SLIN.

AST-352

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@278618 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index 5134cefc18c122dcb41c03731724773577922ad3..62b774a66697781418b309dace4612345712840f 100644 (file)
@@ -3768,6 +3768,7 @@ int ast_channel_make_compatible(struct ast_channel *chan, struct ast_channel *pe
 {
        int src;
        int dst;
+       int use_slin;
 
        if (chan->readformat == peer->writeformat && chan->writeformat == peer->readformat) {
                /* Already compatible!  Moving on ... */
@@ -3812,8 +3813,9 @@ int ast_channel_make_compatible(struct ast_channel *chan, struct ast_channel *pe
         * no direct conversion available. If generic PLC is
         * desired, then transcoding via SLINEAR is a requirement
         */
+       use_slin = (src == AST_FORMAT_SLINEAR || dst == AST_FORMAT_SLINEAR);
        if ((src != dst) && (ast_opt_generic_plc || ast_opt_transcode_via_slin) &&
-           (ast_translate_path_steps(dst, src) != 1))
+           (ast_translate_path_steps(dst, src) != 1 || use_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);