diff --git a/channels/chan_motif.c b/channels/chan_motif.c index d8e3320497ca0a2dd7b44c6278e3a7dd8d8a6617..0a816a5c808345a25dd6bb84083bc0d80894647d 100644 --- a/channels/chan_motif.c +++ b/channels/chan_motif.c @@ -1119,22 +1119,28 @@ static void jingle_send_transport_info(struct jingle_session *session, const cha 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; + int x = 0, i = 0, res = 0; - ast_format_cap_iter_start(session->jointcap); - while (!(ast_format_cap_iter_next(session->jointcap, &format)) && (i < (session->maxpayloads - 2))) { + 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) { @@ -1195,9 +1201,6 @@ static int jingle_add_payloads_to_description(struct jingle_session *session, st } } -end: - ast_format_cap_iter_end(session->jointcap); - return res; }