[svn-commits] dvossel: branch dvossel/fixtheworld_phase1_step2 r299396 - /team/dvossel/fixt...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Dec 21 19:06:46 UTC 2010


Author: dvossel
Date: Tue Dec 21 13:06:41 2010
New Revision: 299396

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=299396
Log:
add index to format conversion functions

Modified:
    team/dvossel/fixtheworld_phase1_step2/main/translate.c

Modified: team/dvossel/fixtheworld_phase1_step2/main/translate.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step2/main/translate.c?view=diff&rev=299396&r1=299395&r2=299396
==============================================================================
--- team/dvossel/fixtheworld_phase1_step2/main/translate.c (original)
+++ team/dvossel/fixtheworld_phase1_step2/main/translate.c Tue Dec 21 13:06:41 2010
@@ -69,8 +69,11 @@
  * the existing converter to play with it.
  */
 
-/*! \brief returns the index of the lowest bit set */
-static force_inline int powerof(format_t d)
+/*!
+ * \internal
+ * \brief converts format id to index value.
+ */
+static force_inline int format2index(format_t d)
 {
 	int x = ffsll(d);
 
@@ -80,6 +83,14 @@
 	ast_log(LOG_WARNING, "No bits set? %llu\n", (unsigned long long) d);
 
 	return -1;
+}
+/*! 
+ * \internal
+ * \brief converts index value back to format id
+ */
+static force_inline format_t index2format(int index)
+{
+	return 1LL << index;
 }
 
 /*
@@ -196,7 +207,7 @@
 	}
 
 	f->frametype = AST_FRAME_VOICE;
-	f->subclass.codec = 1LL << (pvt->t->dstfmt);
+	f->subclass.codec = index2format(pvt->t->dstfmt);
 	f->mallocd = 0;
 	f->offset = AST_FRIENDLY_OFFSET;
 	f->src = pvt->t->name;
@@ -226,8 +237,8 @@
 {
 	struct ast_trans_pvt *head = NULL, *tail = NULL;
 	
-	source = powerof(source);
-	dest = powerof(dest);
+	source = format2index(source);
+	dest = format2index(dest);
 
 	if (source == -1 || dest == -1) {
 		ast_log(LOG_WARNING, "No translator path: (%s codec is not valid)\n", source == -1 ? "starting" : "ending");
@@ -547,7 +558,7 @@
 						tr_matrix[x][z].multistep = 1;
 						changed++;
 						ast_debug(3, "Discovered %d cost path from %s to %s, via %s\n", tr_matrix[x][z].table_cost,
-						  ast_getformatname(1LL << x), ast_getformatname(1LL << z), ast_getformatname(1LL << y));
+						  ast_getformatname(index2format(x)), ast_getformatname(index2format(z)), ast_getformatname(index2format(y)));
 					}
 
 				}
@@ -567,11 +578,11 @@
 		return "";
 	}
 
-	ast_str_set(str, 0, "%s", ast_getformatname(1LL << p->t->srcfmt));
+	ast_str_set(str, 0, "%s", ast_getformatname(index2format(p->t->srcfmt)));
 
 	while ( (p = pn) ) {
 		pn = p->next;
-		ast_str_append(str, 0, "->%s", ast_getformatname(1LL << p->t->dstfmt));
+		ast_str_append(str, 0, "->%s", ast_getformatname(index2format(p->t->dstfmt)));
 	}
 
 	return ast_str_buffer(*str);
@@ -661,18 +672,18 @@
 			if (!(format_list[i].bits & AST_FORMAT_AUDIO_MASK) || (format_list[i].bits == input_src)) {
 				continue;
 			}
-			dst = powerof(format_list[i].bits);
-			src = powerof(input_src);
+			dst = format2index(format_list[i].bits);
+			src = format2index(input_src);
 			ast_str_reset(str);
 			if (tr_matrix[src][dst].step) {
-				ast_str_append(&str, 0, "%s", ast_getformatname(1LL << tr_matrix[src][dst].step->srcfmt));
+				ast_str_append(&str, 0, "%s", ast_getformatname(index2format(tr_matrix[src][dst].step->srcfmt)));
 				while (src != dst) {
 					step = tr_matrix[src][dst].step;
 					if (!step) {
 						ast_str_reset(str);
 						break;
 					}
-					ast_str_append(&str, 0, "->%s", ast_getformatname(1LL << step->dstfmt));
+					ast_str_append(&str, 0, "->%s", ast_getformatname(index2format(step->dstfmt)));
 					src = step->dstfmt;
 				}
 			}
@@ -712,9 +723,9 @@
 	/* Get the length of the longest (usable?) codec name, so we know how wide the left side should be */
 	for (x = 0; x < SHOW_TRANS; x++) {
 		/* translation only applies to audio right now. */
-		if (!(AST_FORMAT_AUDIO_MASK & (1LL << (x))))
-			continue;
-		curlen = strlen(ast_getformatname(1LL << (x)));
+		if (!(AST_FORMAT_AUDIO_MASK & (index2format(x))))
+			continue;
+		curlen = strlen(ast_getformatname(index2format(x)));
 		if (curlen > longest) {
 			longest = curlen;
 		}
@@ -722,21 +733,21 @@
 	for (x = -1; x < SHOW_TRANS; x++) {
 		struct ast_str *out = ast_str_alloca(256);
 		/* translation only applies to audio right now. */
-		if (x >= 0 && !(AST_FORMAT_AUDIO_MASK & (1LL << (x))))
+		if (x >= 0 && !(AST_FORMAT_AUDIO_MASK & (index2format(x))))
 			continue;
 		/*Go ahead and move to next iteration if dealing with an unknown codec*/
-		if(x >= 0 && !strcmp(ast_getformatname(1LL << (x)), "unknown"))
+		if(x >= 0 && !strcmp(ast_getformatname(index2format(x)), "unknown"))
 			continue;
 		ast_str_set(&out, -1, " ");
 		for (y = -1; y < SHOW_TRANS; y++) {
 			/* translation only applies to audio right now. */
-			if (y >= 0 && !(AST_FORMAT_AUDIO_MASK & (1LL << (y))))
+			if (y >= 0 && !(AST_FORMAT_AUDIO_MASK & (index2format(y))))
 				continue;
 			/*Go ahead and move to next iteration if dealing with an unknown codec*/
-			if (y >= 0 && !strcmp(ast_getformatname(1LL << (y)), "unknown"))
+			if (y >= 0 && !strcmp(ast_getformatname(index2format(y)), "unknown"))
 				continue;
 			if (y >= 0)
-				curlen = strlen(ast_getformatname(1LL << (y)));
+				curlen = strlen(ast_getformatname(index2format(y)));
 			if (curlen < 5)
 				curlen = 5;
 
@@ -745,10 +756,10 @@
 				ast_str_append(&out, -1, "%*d", curlen + 1, (tr_matrix[x][y].table_cost/100));
 			} else if (x == -1 && y >= 0) {
 				/* Top row - use a dynamic size */
-				ast_str_append(&out, -1, "%*s", curlen + 1, ast_getformatname(1LL << (y)) );
+				ast_str_append(&out, -1, "%*s", curlen + 1, ast_getformatname(index2format(y)) );
 			} else if (y == -1 && x >= 0) {
 				/* Left column - use a static size. */
-				ast_str_append(&out, -1, "%*s", longest, ast_getformatname(1LL << (x)) );
+				ast_str_append(&out, -1, "%*s", longest, ast_getformatname(index2format(x)) );
 			} else if (x >= 0 && y >= 0) {
 				/* Codec not supported */
 				ast_str_append(&out, -1, "%*s", curlen + 1, "-");
@@ -791,8 +802,8 @@
 	}
 
 	t->module = mod;
-	t->srcfmt = powerof(t->srcfmt);
-	t->dstfmt = powerof(t->dstfmt);
+	t->srcfmt = format2index(t->srcfmt);
+	t->dstfmt = format2index(t->dstfmt);
 	t->active = 1;
 
 	if (t->srcfmt == -1 || t->dstfmt == -1) {
@@ -827,7 +838,7 @@
 
 	ast_verb(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(1LL << t->srcfmt), ast_getformatname(1LL << t->dstfmt), t->comp_cost);
+			    ast_getformatname(index2format(t->srcfmt)), ast_getformatname(index2format(t->dstfmt)), t->comp_cost);
 
 	if (!added_cli) {
 		ast_cli_register_multiple(cli_translate, ARRAY_LEN(cli_translate));
@@ -872,7 +883,7 @@
 	AST_RWLIST_TRAVERSE_SAFE_BEGIN(&translators, u, list) {
 		if (u == t) {
 			AST_RWLIST_REMOVE_CURRENT(list);
-			ast_verb(2, "Unregistered translator '%s' from format %s to %s\n", term_color(tmp, t->name, COLOR_MAGENTA, COLOR_BLACK, sizeof(tmp)), ast_getformatname(1LL << t->srcfmt), ast_getformatname(1LL << t->dstfmt));
+			ast_verb(2, "Unregistered translator '%s' from format %s to %s\n", term_color(tmp, t->name, COLOR_MAGENTA, COLOR_BLACK, sizeof(tmp)), ast_getformatname(index2format(t->srcfmt)), ast_getformatname(index2format(t->dstfmt)));
 			found = 1;
 			break;
 		}
@@ -968,8 +979,8 @@
 	unsigned int res = -1;
 
 	/* convert bitwise format numbers into array indices */
-	src = powerof(src);
-	dest = powerof(dest);
+	src = format2index(src);
+	dest = format2index(dest);
 
 	if (src == -1 || dest == -1) {
 		ast_log(LOG_WARNING, "No translator path: (%s codec is not valid)\n", src == -1 ? "starting" : "ending");
@@ -999,11 +1010,11 @@
 
 	/* If we have a source audio format, get its format index */
 	if (src_audio)
-		src_audio = powerof(src_audio);
+		src_audio = format2index(src_audio);
 
 	/* If we have a source video format, get its format index */
 	if (src_video)
-		src_video = powerof(src_video);
+		src_video = format2index(src_video);
 
 	AST_RWLIST_RDLOCK(&translators);
 
@@ -1027,13 +1038,13 @@
 
 		/* if we don't have a translation path from the src
 		   to this format, remove it from the result */
-		if (!tr_matrix[src_audio][powerof(x)].step) {
+		if (!tr_matrix[src_audio][format2index(x)].step) {
 			res &= ~x;
 			continue;
 		}
 
 		/* now check the opposite direction */
-		if (!tr_matrix[powerof(x)][src_audio].step)
+		if (!tr_matrix[format2index(x)][src_audio].step)
 			res &= ~x;
 	}
 
@@ -1057,13 +1068,13 @@
 
 		/* if we don't have a translation path from the src
 		   to this format, remove it from the result */
-		if (!tr_matrix[src_video][powerof(x)].step) {
+		if (!tr_matrix[src_video][format2index(x)].step) {
 			res &= ~x;
 			continue;
 		}
 
 		/* now check the opposite direction */
-		if (!tr_matrix[powerof(x)][src_video].step)
+		if (!tr_matrix[format2index(x)][src_video].step)
 			res &= ~x;
 	}
 




More information about the svn-commits mailing list