Merged revisions 94828-94829 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Thu, 27 Dec 2007 14:52:07 +0000 (14:52 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 27 Dec 2007 14:52:07 +0000 (14:52 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r94828 | russell | 2007-12-27 08:33:21 -0600 (Thu, 27 Dec 2007) | 9 lines

Change ast_translator_best_choice() to only pay attention to audio formats.
This fixes a problem where Asterisk claims that a translation path can not be
found for channels involving video.

(closes issue #11638)
Reported by: cwhuang
Tested by: cwhuang
Patch suggested by cwhuang, with some additional changes by me.

........
r94829 | russell | 2007-12-27 08:44:29 -0600 (Thu, 27 Dec 2007) | 2 lines

Use the constant that I really meant to use here ...

........

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

include/asterisk/translate.h
main/translate.c

index 2db3019..48b5bf0 100644 (file)
@@ -24,7 +24,7 @@
 #ifndef _ASTERISK_TRANSLATE_H
 #define _ASTERISK_TRANSLATE_H
 
-//#define MAX_FORMAT 15        /* Do not include video here */
+#define MAX_AUDIO_FORMAT 15 /* Do not include video here */
 #define MAX_FORMAT 32  /* Do include video here */
 
 #if defined(__cplusplus) || defined(c_plusplus)
index 9c5da5c..7f7af4c 100644 (file)
@@ -717,10 +717,10 @@ int ast_translator_best_choice(int *dst, int *srcs)
        int cur, cursrc;
        int besttime = INT_MAX;
        int beststeps = INT_MAX;
-       int common = (*dst) & (*srcs);  /* are there common formats ? */
+       int common = ((*dst) & (*srcs)) & AST_FORMAT_AUDIO_MASK;        /* are there common formats ? */
 
        if (common) { /* yes, pick one and return */
-               for (cur = 1, y = 0; y < MAX_FORMAT; cur <<= 1, y++) {
+               for (cur = 1, y = 0; y <= MAX_AUDIO_FORMAT; cur <<= 1, y++) {
                        if (cur & common)       /* guaranteed to find one */
                                break;
                }
@@ -729,10 +729,10 @@ int ast_translator_best_choice(int *dst, int *srcs)
                return 0;
        } else {        /* No, we will need to translate */
                AST_RWLIST_RDLOCK(&translators);
-               for (cur = 1, y = 0; y < MAX_FORMAT; cur <<= 1, y++) {
+               for (cur = 1, y = 0; y <= MAX_AUDIO_FORMAT; cur <<= 1, y++) {
                        if (! (cur & *dst))
                                continue;
-                       for (cursrc = 1, x = 0; x < MAX_FORMAT; cursrc <<= 1, x++) {
+                       for (cursrc = 1, x = 0; x <= MAX_AUDIO_FORMAT; cursrc <<= 1, x++) {
                                if (!(*srcs & cursrc) || !tr_matrix[x][y].step ||
                                    tr_matrix[x][y].cost >  besttime)
                                        continue;       /* not existing or no better */