]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 278620 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Thu, 22 Jul 2010 15:00:11 +0000 (15:00 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 22 Jul 2010 15:00:11 +0000 (15:00 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r278620 | mmichelson | 2010-07-22 09:58:01 -0500 (Thu, 22 Jul 2010) | 19 lines

  Merged revisions 278618 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r278618 | mmichelson | 2010-07-22 09:55:04 -0500 (Thu, 22 Jul 2010) | 13 lines

    Allow PLC to function properly when channels use SLIN for audio.

    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.6.2@278621 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index 2e69827f0b30b352aad0c6bbea77159c7efb07a9..fdb88a8d18fb3a90eb53be5a75639fb31f562510 100644 (file)
@@ -4356,6 +4356,7 @@ static int ast_channel_make_compatible_helper(struct ast_channel *from, struct a
 {
        int src;
        int dst;
+       int use_slin;
 
        if (from->readformat == to->writeformat && from->writeformat == to->readformat) {
                /* Already compatible!  Moving on ... */
@@ -4381,8 +4382,9 @@ static int ast_channel_make_compatible_helper(struct ast_channel *from, struct a
         * 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(from, dst) < 0) {
                ast_log(LOG_WARNING, "Unable to set read format on channel %s to %d\n", from->name, dst);