[Asterisk-cvs] asterisk translate.c,1.29,1.30
markster at lists.digium.com
markster at lists.digium.com
Mon Dec 6 16:56:07 CST 2004
Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv23176
Modified Files:
translate.c
Log Message:
Minor translation performance improvement (bug #2987, not that patch though)
Index: translate.c
===================================================================
RCS file: /usr/cvsroot/asterisk/translate.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- translate.c 1 Aug 2004 14:19:04 -0000 1.29
+++ translate.c 6 Dec 2004 21:53:57 -0000 1.30
@@ -3,9 +3,9 @@
*
* Translate via the use of pseudo channels
*
- * Copyright (C) 1999, Mark Spencer
+ * Copyright (C) 1999-2004, Digium, Inc.
*
- * Mark Spencer <markster at linux-support.net>
+ * Mark Spencer <markster at digium.com>
*
* This program is free software, distributed under the terms of
* the GNU General Public License
@@ -442,33 +442,40 @@
int bestdst=0;
int cur = 1;
int besttime=999999999;
- ast_mutex_lock(&list_lock);
- for (y=0;y<MAX_FORMAT;y++) {
- if ((cur & *dst) && (cur & *srcs)) {
- /* This is a common format to both. Pick it if we don't have one already */
- besttime=0;
- bestdst = cur;
- best = cur;
- break;
- }
- if (cur & *dst)
- for (x=0;x<MAX_FORMAT;x++) {
- if (tr_matrix[x][y].step && /* There's a step */
- (tr_matrix[x][y].cost < besttime) && /* We're better than what exists now */
- (*srcs & (1 << x))) /* x is a valid source format */
- {
- best = 1 << x;
- bestdst = cur;
- besttime = tr_matrix[x][y].cost;
- }
+ if ((*dst) & (*srcs)) {
+ /* We have a format in common */
+ for (y=0;y<MAX_FORMAT;y++) {
+ if ((cur & *dst) && (cur & *srcs)) {
+ /* This is a common format to both. Pick it if we don't have one already */
+ besttime=0;
+ bestdst = cur;
+ best = cur;
}
- cur = cur << 1;
+ cur = cur << 1;
+ }
+ } else {
+ /* We will need to translate */
+ ast_mutex_lock(&list_lock);
+ for (y=0;y<MAX_FORMAT;y++) {
+ if (cur & *dst)
+ for (x=0;x<MAX_FORMAT;x++) {
+ if (tr_matrix[x][y].step && /* There's a step */
+ (tr_matrix[x][y].cost < besttime) && /* We're better than what exists now */
+ (*srcs & (1 << x))) /* x is a valid source format */
+ {
+ best = 1 << x;
+ bestdst = cur;
+ besttime = tr_matrix[x][y].cost;
+ }
+ }
+ cur = cur << 1;
+ }
+ ast_mutex_unlock(&list_lock);
}
if (best > -1) {
*srcs = best;
*dst = bestdst;
best = 0;
}
- ast_mutex_unlock(&list_lock);
return best;
}
More information about the svn-commits
mailing list