From 8f82979d8af920415bce2f9e9e3cb84cdc0ca682 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 13 Feb 2014 03:17:53 +0500 Subject: [PATCH] limit size of input buffer in conference --- src/mod/applications/mod_conference/mod_conference.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 9270d4384a..1b7fa463d9 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -3655,7 +3655,7 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v switch_frame_t *read_frame = NULL; uint32_t hangover = 40, hangunder = 5, hangover_hits = 0, hangunder_hits = 0, diff_level = 400; switch_core_session_t *session = member->session; - + uint32_t flush_len; if (switch_core_session_read_lock(session) != SWITCH_STATUS_SUCCESS) { goto end; @@ -3671,6 +3671,8 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v switch_channel_audio_sync(channel); + flush_len = switch_samples_per_packet(member->read_impl.actual_samples_per_second, (member->read_impl.microseconds_per_packet / 1000)) * 6; + /* As long as we have a valid read, feed that data into an input buffer where the conference thread will take it and mux it with any audio from other channels. */ @@ -3944,6 +3946,10 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v /* Write the audio into the input buffer */ switch_mutex_lock(member->audio_in_mutex); + if (switch_buffer_inuse(member->audio_buffer) > flush_len) { + switch_buffer_zero(member->audio_buffer); + switch_channel_audio_sync(channel); + } ok = switch_buffer_write(member->audio_buffer, data, datalen); switch_mutex_unlock(member->audio_in_mutex); if (!ok) {