From f64ddf3db3c1b139d19dc6200f09136acd50108e Mon Sep 17 00:00:00 2001
From: Alexander Traud <pabstraud@compuserve.com>
Date: Fri, 22 Jan 2021 09:54:49 +0100
Subject: [PATCH] channel: Set up calls without audio (text+video), again.

ASTERISK-29259

Change-Id: Ib6a6550e0e08355745d66da8e60ef49e81f9c6c5
---
 main/channel.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/main/channel.c b/main/channel.c
index d75c615583..9730ed08de 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -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);
-- 
GitLab