summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin P. Fleming <kpfleming@digium.com>2006-04-18 21:39:20 +0000
committerKevin P. Fleming <kpfleming@digium.com>2006-04-18 21:39:20 +0000
commitd85073dc1f6c25d09610b8c56871474eaeae55d4 (patch)
tree7e993d7fa7f944497cb89614feef9a7dfd42f14e
parent501ac5189ccdbc4c51d15a33d3a7e84d6a8a0e7b (diff)
correct array index calculation (thanks mtaht3!)
update header file comments to reflect new usage of structure field git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@21207 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--include/asterisk/translate.h6
-rw-r--r--translate.c5
2 files changed, 9 insertions, 2 deletions
diff --git a/include/asterisk/translate.h b/include/asterisk/translate.h
index 21643fe32..6d5ed1526 100644
--- a/include/asterisk/translate.h
+++ b/include/asterisk/translate.h
@@ -65,8 +65,10 @@ struct ast_trans_pvt; /* declared below */
*/
struct ast_translator {
const char name[80]; /*! Name of translator */
- int srcfmt; /*! Source format (note: bit position) */
- int dstfmt; /*! Destination format (note: bit position) */
+ int srcfmt; /*! Source format (note: bit position,
+ converted to index during registration) */
+ int dstfmt; /*! Destination format (note: bit position,
+ converted to index during registration) */
/*! initialize private data associated with the translator */
void *(*newpvt)(struct ast_trans_pvt *);
diff --git a/translate.c b/translate.c
index 0edfa54ca..d71381753 100644
--- a/translate.c
+++ b/translate.c
@@ -400,6 +400,7 @@ static void rebuild_matrix(int samples)
ast_log(LOG_DEBUG, "Resetting translation matrix\n");
bzero(tr_matrix, sizeof(tr_matrix));
+
/* first, compute all direct costs */
AST_LIST_TRAVERSE(&translators, t, list) {
x = t->srcfmt;
@@ -413,6 +414,7 @@ static void rebuild_matrix(int samples)
tr_matrix[x][z].cost = t->cost;
}
}
+
/*
* For each triple x, y, z of distinct formats, check if there is
* a path from x to z through y which is cheaper than what is
@@ -656,6 +658,9 @@ int ast_translator_best_choice(int *dst, int *srcs)
unsigned int ast_translate_path_steps(unsigned int dest, unsigned int src)
{
+ /* convert bitwise format numbers into array indices */
+ src = powerof(src);
+ dest = powerof(dest);
if (!tr_matrix[src][dest].step)
return -1;
else