From c460588dfe801a7e7ba16dc757c9e5b321e82e25 Mon Sep 17 00:00:00 2001 From: Andrey Volk Date: Tue, 8 Mar 2022 01:40:16 +0300 Subject: [PATCH] [mod_conference] Fix memory consumption and Media flow direction issue. --- src/mod/applications/mod_conference/mod_conference.c | 6 +++++- src/mod/applications/mod_conference/mod_conference.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index ec1cd5c8f7..f512379cab 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -2479,9 +2479,13 @@ SWITCH_STANDARD_APP(conference_function) do { switch_media_flow_t audio_flow = switch_core_session_media_flow(session, SWITCH_MEDIA_TYPE_AUDIO); - if (switch_channel_test_flag(channel, CF_AUDIO) && (audio_flow == SWITCH_MEDIA_FLOW_SENDRECV || audio_flow == SWITCH_MEDIA_FLOW_RECVONLY)) { + if (switch_channel_test_flag(channel, CF_AUDIO) && (audio_flow == SWITCH_MEDIA_FLOW_SENDRECV || audio_flow == SWITCH_MEDIA_FLOW_SENDONLY)) { conference_loop_output(&member); } else { + if (!member.input_thread) { + conference_loop_launch_input(&member, switch_core_session_get_pool(member.session)); + } + if (conference_utils_member_test_flag((&member), MFLAG_RUNNING) && switch_channel_ready(channel)) { switch_yield(100000); member.loop_loop = 1; diff --git a/src/mod/applications/mod_conference/mod_conference.h b/src/mod/applications/mod_conference/mod_conference.h index f6f932fc07..3c28634264 100644 --- a/src/mod/applications/mod_conference/mod_conference.h +++ b/src/mod/applications/mod_conference/mod_conference.h @@ -1110,6 +1110,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thread, void *obj); void *SWITCH_THREAD_FUNC conference_video_super_muxing_thread_run(switch_thread_t *thread, void *obj); void conference_loop_output(conference_member_t *member); +void conference_loop_launch_input(conference_member_t *member, switch_memory_pool_t *pool); uint32_t conference_file_stop(conference_obj_t *conference, file_stop_t stop); switch_status_t conference_file_play(conference_obj_t *conference, char *file, uint32_t leadin, switch_channel_t *channel, uint8_t async); void conference_member_send_all_dtmf(conference_member_t *member, conference_obj_t *conference, const char *dtmf);