/* This could all be done more efficiently *IF* we chained packets together
by default, but it would also complicate virtually every application. */
-static pthread_mutex_t list_lock = AST_MUTEX_INITIALIZER;
+static ast_mutex_t list_lock = AST_MUTEX_INITIALIZER;
static struct ast_translator *list = NULL;
struct ast_translator_dir {
}
} else {
/* We shouldn't have allocated any memory */
- ast_log(LOG_WARNING, "No translator path from %d to %d\n", source, dest);
+ ast_log(LOG_WARNING, "No translator path from %s to %s\n",
+ ast_getformatname(source), ast_getformatname(dest));
return NULL;
}
}
tr_matrix[x][z].cost = tr_matrix[x][y].cost +
tr_matrix[y][z].cost;
if (option_debug)
- ast_log(LOG_DEBUG, "Discovered %d cost path from %d to %d, via %d\n", tr_matrix[x][z].cost, x, z, y);
+ ast_log(LOG_DEBUG, "Discovered %d cost path from %s to %s, via %d\n", tr_matrix[x][z].cost, ast_getformatname(x), ast_getformatname(z), y);
changed++;
}
static int show_translation(int fd, int argc, char *argv[])
{
-#define SHOW_TRANS 14
+#define SHOW_TRANS 11
int x,y;
char line[80];
if (argc != 2)
return RESULT_SHOWUSAGE;
- ast_cli(fd, " Translation times between formats (in milliseconds)\n");
- ast_cli(fd, " Destination Format\n");
- ast_pthread_mutex_lock(&list_lock);
- for (x=0;x<SHOW_TRANS; x++) {
- if (x == 1)
- strcpy(line, " Src ");
- else if (x == 2)
- strcpy(line, " Fmt ");
- else
- strcpy(line, " ");
- for (y=0;y<SHOW_TRANS;y++) {
- if (tr_matrix[x][y].step)
- snprintf(line + strlen(line), sizeof(line) - strlen(line), " %4d", tr_matrix[x][y].cost);
+ ast_cli(fd, " Translation times between formats (in milliseconds)\n");
+ ast_cli(fd, " Source Format (Rows) Destination Format(Columns)\n\n");
+ ast_mutex_lock(&list_lock);
+ for (x=-1;x<SHOW_TRANS; x++) {
+ strcpy(line, " ");
+ for (y=-1;y<SHOW_TRANS;y++) {
+ if (x >= 0 && y >= 0 && tr_matrix[x][y].step)
+ snprintf(line + strlen(line), sizeof(line) - strlen(line), " %5d", tr_matrix[x][y].cost >= 99999 ? tr_matrix[x][y].cost-99999 : tr_matrix[x][y].cost);
else
- snprintf(line + strlen(line), sizeof(line) - strlen(line), " n/a");
+ if (((x == -1 && y >= 0) || (y == -1 && x >= 0))) {
+ snprintf(line + strlen(line), sizeof(line) - strlen(line),
+ " %5s", ast_getformatname(1<<(x+y+1)) );
+ } else if (x != -1 && y != -1) {
+ snprintf(line + strlen(line), sizeof(line) - strlen(line), " -");
+ } else {
+ snprintf(line + strlen(line), sizeof(line) - strlen(line), " ");
+ }
}
snprintf(line + strlen(line), sizeof(line) - strlen(line), "\n");
ast_cli(fd, line);
}
- ast_pthread_mutex_unlock(&list_lock);
+ ast_mutex_unlock(&list_lock);
return RESULT_SUCCESS;
}
t->srcfmt = powerof(t->srcfmt);
t->dstfmt = powerof(t->dstfmt);
if ((t->srcfmt >= MAX_FORMAT) || (t->dstfmt >= MAX_FORMAT)) {
- ast_log(LOG_WARNING, "Format %d is larger than MAX_FORMAT\n", t->srcfmt);
+ ast_log(LOG_WARNING, "Format %s is larger than MAX_FORMAT\n", ast_getformatname(t->srcfmt));
return -1;
}
calc_cost(t);
if (option_verbose > 1)
- ast_verbose(VERBOSE_PREFIX_2 "Registered translator '%s' from format %d to %d, cost %d\n", term_color(tmp, t->name, COLOR_MAGENTA, COLOR_BLACK, sizeof(tmp)), t->srcfmt, t->dstfmt, t->cost);
- ast_pthread_mutex_lock(&list_lock);
+ ast_verbose(VERBOSE_PREFIX_2 "Registered translator '%s' from format %s to %s, cost %d\n", term_color(tmp, t->name, COLOR_MAGENTA, COLOR_BLACK, sizeof(tmp)), ast_getformatname(1 << t->srcfmt), ast_getformatname(1 << t->dstfmt), t->cost);
+ ast_mutex_lock(&list_lock);
if (!added_cli) {
ast_cli_register(&show_trans);
added_cli++;
t->next = list;
list = t;
rebuild_matrix();
- ast_pthread_mutex_unlock(&list_lock);
+ ast_mutex_unlock(&list_lock);
return 0;
}
int ast_unregister_translator(struct ast_translator *t)
{
struct ast_translator *u, *ul = NULL;
- ast_pthread_mutex_lock(&list_lock);
+ ast_mutex_lock(&list_lock);
u = list;
while(u) {
if (u == t) {
u = u->next;
}
rebuild_matrix();
- ast_pthread_mutex_unlock(&list_lock);
+ ast_mutex_unlock(&list_lock);
return (u ? 0 : -1);
}
int bestdst=0;
int cur = 1;
int besttime=999999999;
- ast_pthread_mutex_lock(&list_lock);
+ 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 */
*dst = bestdst;
best = 0;
}
- ast_pthread_mutex_unlock(&list_lock);
+ ast_mutex_unlock(&list_lock);
return best;
}