From: Russell Bryant Date: Thu, 27 Dec 2007 14:52:07 +0000 (+0000) Subject: Merged revisions 94828-94829 via svnmerge from X-Git-Tag: 1.6.0-beta1~3^2~278 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75e602376b7ae4a838273c81735b7fa64fe06d70;p=thirdparty%2Fasterisk.git Merged revisions 94828-94829 via svnmerge from 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 --- diff --git a/include/asterisk/translate.h b/include/asterisk/translate.h index 2db3019c1e..48b5bf0916 100644 --- a/include/asterisk/translate.h +++ b/include/asterisk/translate.h @@ -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) diff --git a/main/translate.c b/main/translate.c index 9c5da5c805..7f7af4cfd0 100644 --- a/main/translate.c +++ b/main/translate.c @@ -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 */