]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
channel: Set up calls without audio (text+video), again.
authorAlexander Traud <pabstraud@compuserve.com>
Fri, 22 Jan 2021 08:54:49 +0000 (09:54 +0100)
committerFriendly Automation <jenkins2@gerrit.asterisk.org>
Wed, 27 Jan 2021 16:53:40 +0000 (10:53 -0600)
ASTERISK-29259

Change-Id: Ib6a6550e0e08355745d66da8e60ef49e81f9c6c5

main/channel.c

index d75c615583a369c08692c3793176933b82b2a10d..9730ed08de318c250f28b118931b2d864a58403a 100644 (file)
@@ -6264,8 +6264,13 @@ static struct ast_channel *request_channel(const char *type, struct ast_format_c
 
                /* find the best audio format to use */
                tmp_cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
-               if (tmp_cap) {
-                       ast_format_cap_append_from_cap(tmp_cap, request_cap, AST_MEDIA_TYPE_AUDIO);
+               if (!tmp_cap) {
+                       AST_RWLIST_UNLOCK(&backends);
+                       return NULL;
+               }
+
+               ast_format_cap_append_from_cap(tmp_cap, request_cap, AST_MEDIA_TYPE_AUDIO);
+               if (!ast_format_cap_empty(tmp_cap)) {
                        /* We have audio - is it possible to connect the various calls to each other?
                                (Avoid this check for calls without audio, like text+video calls)
                        */
@@ -6296,7 +6301,9 @@ static struct ast_channel *request_channel(const char *type, struct ast_format_c
                }
                ast_format_cap_append_from_cap(joint_cap, request_cap, AST_MEDIA_TYPE_UNKNOWN);
                ast_format_cap_remove_by_type(joint_cap, AST_MEDIA_TYPE_AUDIO);
-               ast_format_cap_append(joint_cap, best_audio_fmt, 0);
+               if (best_audio_fmt) { /* text+video call? then, this is NULL */
+                       ast_format_cap_append(joint_cap, best_audio_fmt, 0);
+               }
                ao2_cleanup(tmp_converted_cap);
 
                c = chan->tech->requester(type, joint_cap, assignedids, requestor, addr, cause);