[asterisk-commits] dvossel: branch dvossel/fixtheworld_phase1_step3 r300879 - in /team/dvossel/f...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jan 6 21:52:01 UTC 2011


Author: dvossel
Date: Thu Jan  6 15:51:56 2011
New Revision: 300879

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=300879
Log:
updates format_prefs.c for ast_format conversion

Modified:
    team/dvossel/fixtheworld_phase1_step3/include/asterisk/format_pref.h
    team/dvossel/fixtheworld_phase1_step3/main/format_pref.c

Modified: team/dvossel/fixtheworld_phase1_step3/include/asterisk/format_pref.h
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/include/asterisk/format_pref.h?view=diff&rev=300879&r1=300878&r2=300879
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/include/asterisk/format_pref.h (original)
+++ team/dvossel/fixtheworld_phase1_step3/include/asterisk/format_pref.h Thu Jan  6 15:51:56 2011
@@ -30,8 +30,7 @@
 #define AST_CODEC_PREF_SIZE 64
 struct ast_codec_pref {
 	/*! This array represents the each format in the pref list */
-	/* TODO uncomment me when the switch over to ast_format takes place */
-	// struct ast_format[AST_CODEC_PREF_SIZE];
+	struct ast_format formats[AST_CODEC_PREF_SIZE];
 	/*! This array represents the format id's index in the global format list. */
 	char order[AST_CODEC_PREF_SIZE];
 	/*! This array represents the format's framing size if present. */
@@ -79,8 +78,15 @@
 void ast_codec_pref_prepend(struct ast_codec_pref *pref, struct ast_format *format, int only_if_existing);
 
 /*! \brief Select the best audio format according to preference list from supplied options.
-   If "find_best" is non-zero then if nothing is found, the "Best" format of
-   the format list is selected, otherwise 0 is returned. */
+ * Best audio format is returned in the result format.
+ *
+ * \note If "find_best" is non-zero then if nothing is found, the "Best" format of
+ * the format list is selected and returned in the result structure, otherwise
+ * NULL is returned
+ *
+ * \retval ptr to result struture.
+ * \retval NULL, best codec was not found
+ */
 struct ast_format *ast_codec_choose(struct ast_codec_pref *pref, struct ast_cap *cap, int find_best, struct ast_format *result);
 
 /*! \brief Set packet size for codec

Modified: team/dvossel/fixtheworld_phase1_step3/main/format_pref.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/main/format_pref.c?view=diff&rev=300879&r1=300878&r2=300879
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/main/format_pref.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/main/format_pref.c Thu Jan  6 15:51:56 2011
@@ -59,7 +59,7 @@
 int ast_codec_pref_string(struct ast_codec_pref *pref, char *buf, size_t size)
 {
 	int x;
-	format_t codec;
+	struct ast_format format;
 	size_t total_len, slen;
 	char *formatname;
 
@@ -70,16 +70,16 @@
 	for (x = 0; x < AST_CODEC_PREF_SIZE; x++) {
 		if (total_len <= 0)
 			break;
-		if (!(codec = ast_codec_pref_index(pref,x)))
-			break;
-		if ((formatname = ast_getformatname(codec))) {
+		if (!(ast_codec_pref_index(pref, x, &format)))
+			break;
+		if ((formatname = ast_getformatname(&format))) {
 			slen = strlen(formatname);
 			if (slen > total_len)
 				break;
 			strncat(buf, formatname, total_len - 1); /* safe */
 			total_len -= slen;
 		}
-		if (total_len && x < AST_CODEC_PREF_SIZE - 1 && ast_codec_pref_index(pref, x + 1)) {
+		if (total_len && x < AST_CODEC_PREF_SIZE - 1 && ast_codec_pref_index(pref, x + 1, &format)) {
 			strncat(buf, "|", total_len - 1); /* safe */
 			total_len--;
 		}
@@ -92,26 +92,22 @@
 	return size - total_len;
 }
 
-format_t ast_codec_pref_index(struct ast_codec_pref *pref, int idx)
-{
-	int slot = 0;
-	size_t f_len = 0;
-	const struct ast_format_list *f_list = ast_get_format_list(&f_len);
-
+struct ast_format *ast_codec_pref_index(struct ast_codec_pref *pref, int idx, struct ast_format *result)
+{
 	if ((idx >= 0) && (idx < sizeof(pref->order))) {
-		slot = pref->order[idx];
-	}
-
-	return slot ? f_list[slot - 1].bits : 0;
+		ast_format_copy(&pref->formats[idx], result);
+	} else {
+		return NULL;
+	}
+
+	return result;
 }
 
 /*! \brief Remove codec from pref list */
-void ast_codec_pref_remove(struct ast_codec_pref *pref, format_t format)
+void ast_codec_pref_remove(struct ast_codec_pref *pref, struct ast_format *format)
 {
 	struct ast_codec_pref oldorder;
 	int x, y = 0;
-	int slot;
-	int size;
 	size_t f_len = 0;
 	const struct ast_format_list *f_list = ast_get_format_list(&f_len);
 
@@ -122,19 +118,18 @@
 	memset(pref, 0, sizeof(*pref));
 
 	for (x = 0; x < f_len; x++) {
-		slot = oldorder.order[x];
-		size = oldorder.framing[x];
-		if (! slot)
-			break;
-		if (f_list[slot-1].bits != format) {
-			pref->order[y] = slot;
-			pref->framing[y++] = size;
+		if (!oldorder.order[x])
+			break;
+		if (f_list[oldorder.order[x]-1].id != format->id) {
+			pref->order[y] = oldorder.order[x];
+			ast_format_copy(&oldorder.formats[x], &pref->formats[y]);
+			pref->framing[y++] = oldorder.framing[x];
 		}
 	}
 }
 
 /*! \brief Append codec to list */
-int ast_codec_pref_append(struct ast_codec_pref *pref, format_t format)
+int ast_codec_pref_append(struct ast_codec_pref *pref, struct ast_format *format)
 {
 	int x, newindex = 0;
 	size_t f_len = 0;
@@ -143,7 +138,7 @@
 	ast_codec_pref_remove(pref, format);
 
 	for (x = 0; x < f_len; x++) {
-		if (f_list[x].bits == format) {
+		if (f_list[x].id == format->id) {
 			newindex = x + 1;
 			break;
 		}
@@ -153,6 +148,7 @@
 		for (x = 0; x < f_len; x++) {
 			if (!pref->order[x]) {
 				pref->order[x] = newindex;
+				ast_format_copy(format, &pref->formats[x]);
 				break;
 			}
 		}
@@ -162,7 +158,7 @@
 }
 
 /*! \brief Prepend codec to list */
-void ast_codec_pref_prepend(struct ast_codec_pref *pref, format_t format, int only_if_existing)
+void ast_codec_pref_prepend(struct ast_codec_pref *pref, struct ast_format *format, int only_if_existing)
 {
 	int x, newindex = 0;
 	size_t f_len = 0;
@@ -170,7 +166,7 @@
 
 	/* First step is to get the codecs "index number" */
 	for (x = 0; x < f_len; x++) {
-		if (f_list[x].bits == format) {
+		if (f_list[x].id == format->id) {
 			newindex = x + 1;
 			break;
 		}
@@ -193,22 +189,24 @@
 	for (; x > 0; x--) {
 		pref->order[x] = pref->order[x - 1];
 		pref->framing[x] = pref->framing[x - 1];
+		ast_format_copy(&pref->formats[x - 1], &pref->formats[x]);
 	}
 
 	/* And insert the new entry */
 	pref->order[0] = newindex;
 	pref->framing[0] = 0; /* ? */
+	ast_format_copy(format, &pref->formats[0]);
 }
 
 /*! \brief Set packet size for codec */
-int ast_codec_pref_setsize(struct ast_codec_pref *pref, format_t format, int framems)
+int ast_codec_pref_setsize(struct ast_codec_pref *pref, struct ast_format *format, int framems)
 {
 	int x, idx = -1;
 	size_t f_len = 0;
 	const struct ast_format_list *f_list = ast_get_format_list(&f_len);
 
 	for (x = 0; x < f_len; x++) {
-		if (f_list[x].bits == format) {
+		if (f_list[x].id == format->id) {
 			idx = x;
 			break;
 		}
@@ -241,7 +239,7 @@
 }
 
 /*! \brief Get packet size for codec */
-struct ast_format_list ast_codec_pref_getsize(struct ast_codec_pref *pref, format_t format)
+struct ast_format_list ast_codec_pref_getsize(struct ast_codec_pref *pref, struct ast_format *format)
 {
 	int x, idx = -1, framems = 0;
 	struct ast_format_list fmt = { 0, };
@@ -249,7 +247,7 @@
 	const struct ast_format_list *f_list = ast_get_format_list(&f_len);
 
 	for (x = 0; x < f_len; x++) {
-		if (f_list[x].bits == format) {
+		if (f_list[x].id == format->id) {
 			fmt = f_list[x];
 			idx = x;
 			break;
@@ -282,11 +280,12 @@
 }
 
 /*! \brief Pick a codec */
-format_t ast_codec_choose(struct ast_codec_pref *pref, format_t formats, int find_best)
-{
-	int x, slot;
-	format_t ret = 0;
-	size_t f_len = 0;
+struct ast_format *ast_codec_choose(struct ast_codec_pref *pref, struct ast_cap *cap, int find_best, struct ast_format *result)
+{
+	int x, slot, found;
+	size_t f_len = 0;
+	struct ast_format tmp_fmt;
+
 	const struct ast_format_list *f_list = ast_get_format_list(&f_len);
 
 	for (x = 0; x < f_len; x++) {
@@ -294,17 +293,19 @@
 
 		if (!slot)
 			break;
-		if (formats & f_list[slot-1].bits) {
-			ret = f_list[slot-1].bits;
-			break;
-		}
-	}
-	if (ret & AST_FORMAT_AUDIO_MASK)
-		return ret;
+		if (ast_cap_iscompatible(cap, ast_format_set(&tmp_fmt, f_list[slot-1].id, 0))) {
+			found = 1; /*format is found and stored in tmp_fmt */
+			break;
+		}
+	}
+	if (found && (AST_FORMAT_GET_TYPE(tmp_fmt.id) == AST_FORMAT_TYPE_AUDIO)) {
+		ast_format_copy(&tmp_fmt, result);
+		return result;
+	}
 
 	ast_debug(4, "Could not find preferred codec - %s\n", find_best ? "Going for the best codec" : "Returning zero codec");
 
-	return find_best ? ast_best_codec(formats) : 0;
-}
-
-
+	return find_best ? ast_best_codec(cap, result) : NULL;
+}
+
+




More information about the asterisk-commits mailing list