diff --git a/doc/CHANGES-staging/res_pjsip_session_codecs.md b/doc/CHANGES-staging/res_pjsip_session_codecs.md new file mode 100644 index 0000000000000000000000000000000000000000..847eb41b3283c2dd06cbebf77a7ca7103ac03392 --- /dev/null +++ b/doc/CHANGES-staging/res_pjsip_session_codecs.md @@ -0,0 +1,8 @@ +Subject: res_pjsip_session + +When placing an outgoing call to a PJSIP endpoint the intent +of any requested formats will now be respected. If only an audio +format is requested (such as ulaw) but the underlying endpoint +does not support the format the resulting SDP will still only +contain an audio stream, and not any additional streams such as +video. diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index ebd05166b9bcbfb3331e1c71e433b1cbddbee5b3..9cc62ce5752b9dc3d5b995f964a85e2ff08abc15 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -2717,16 +2717,6 @@ struct ast_sip_session *ast_sip_session_create_outgoing(struct ast_sip_endpoint } ast_format_cap_get_compatible(req_cap, endpoint->media.codecs, joint_cap); - if (!ast_format_cap_count(joint_cap)) { - ao2_ref(joint_cap, -1); - continue; - } - - clone_stream = ast_stream_clone(req_stream, NULL); - if (!clone_stream) { - ao2_ref(joint_cap, -1); - continue; - } if (ast_stream_get_type(req_stream) == AST_MEDIA_TYPE_AUDIO) { /* @@ -2738,6 +2728,17 @@ struct ast_sip_session *ast_sip_session_create_outgoing(struct ast_sip_endpoint endpoint->media.codecs, AST_MEDIA_TYPE_AUDIO); } + if (!ast_format_cap_count(joint_cap)) { + ao2_ref(joint_cap, -1); + continue; + } + + clone_stream = ast_stream_clone(req_stream, NULL); + if (!clone_stream) { + ao2_ref(joint_cap, -1); + continue; + } + ast_stream_set_formats(clone_stream, joint_cap); ao2_ref(joint_cap, -1);