[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