[asterisk-commits] file: trunk r369873 - /trunk/channels/chan_motif.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Jul 10 09:00:09 CDT 2012


Author: file
Date: Tue Jul 10 09:00:05 2012
New Revision: 369873

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=369873
Log:
Respect codec preference order when adding codecs to a media description.

This change allows an endpoint in motif.conf to be configured with a preference of G.722 and fallback of ulaw. With Google this allows communication with Google Talk clients to use G.722 while when using Google Voice ulaw will be used.

(closes issue ASTERISK-20114)
Reported by: Malcolm Davenport

Modified:
    trunk/channels/chan_motif.c

Modified: trunk/channels/chan_motif.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/chan_motif.c?view=diff&rev=369873&r1=369872&r2=369873
==============================================================================
--- trunk/channels/chan_motif.c (original)
+++ trunk/channels/chan_motif.c Tue Jul 10 09:00:05 2012
@@ -1119,22 +1119,28 @@
 static int jingle_add_payloads_to_description(struct jingle_session *session, struct ast_rtp_instance *rtp, iks *description, iks **payloads, enum ast_format_type type)
 {
 	struct ast_format format;
-	int i = 0, res = 0;
-
-	ast_format_cap_iter_start(session->jointcap);
-	while (!(ast_format_cap_iter_next(session->jointcap, &format)) && (i < (session->maxpayloads - 2))) {
+	int x = 0, i = 0, res = 0;
+
+	for (x = 0; (x < AST_CODEC_PREF_SIZE) && (i < (session->maxpayloads - 2)); x++) {
 		int rtp_code;
 		iks *payload;
 		char tmp[32];
 
+		if (!ast_codec_pref_index(&session->prefs, x, &format)) {
+			break;
+		}
+
 		if (AST_FORMAT_GET_TYPE(format.id) != type) {
 			continue;
 		}
 
+		if (!ast_format_cap_iscompatible(session->jointcap, &format)) {
+			continue;
+		}
+
 		if (((rtp_code = ast_rtp_codecs_payload_code(ast_rtp_instance_get_codecs(rtp), 1, &format, 0)) == -1) ||
 		    (!(payload = iks_new("payload-type")))) {
-			res = -1;
-			goto end;
+			return -1;
 		}
 
 		if (session->transport == JINGLE_TRANSPORT_GOOGLE_V1) {
@@ -1194,9 +1200,6 @@
 			payloads[i++] = payload;
 		}
 	}
-
-end:
-	ast_format_cap_iter_end(session->jointcap);
 
 	return res;
 }




More information about the asterisk-commits mailing list