Fix Execute on in early media situations
This commit is contained in:
parent
e6ef517354
commit
32b7673cde
|
@ -170,7 +170,7 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj)
|
||||||
switch_core_session_t *session_a, *session_b;
|
switch_core_session_t *session_a, *session_b;
|
||||||
uint32_t read_frame_count = 0;
|
uint32_t read_frame_count = 0;
|
||||||
const char *app_name = NULL, *app_arg = NULL;
|
const char *app_name = NULL, *app_arg = NULL;
|
||||||
int inner_bridge = 0;
|
int inner_bridge = 0, exec_check = 0;
|
||||||
switch_codec_t silence_codec = { 0 };
|
switch_codec_t silence_codec = { 0 };
|
||||||
switch_frame_t silence_frame = { 0 };
|
switch_frame_t silence_frame = { 0 };
|
||||||
int16_t silence_data[SWITCH_RECOMMENDED_BUFFER_SIZE / 2] = { 0 };
|
int16_t silence_data[SWITCH_RECOMMENDED_BUFFER_SIZE / 2] = { 0 };
|
||||||
|
@ -357,12 +357,16 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (read_frame_count == DEFAULT_LEAD_FRAMES && switch_channel_media_ack(chan_a)) {
|
if (read_frame_count >= DEFAULT_LEAD_FRAMES && switch_channel_media_ack(chan_a)) {
|
||||||
|
|
||||||
|
if (!exec_check) {
|
||||||
switch_channel_execute_on(chan_a, SWITCH_CHANNEL_EXECUTE_ON_PRE_BRIDGE_VARIABLE);
|
switch_channel_execute_on(chan_a, SWITCH_CHANNEL_EXECUTE_ON_PRE_BRIDGE_VARIABLE);
|
||||||
|
|
||||||
if (!inner_bridge) {
|
if (!inner_bridge) {
|
||||||
switch_channel_api_on(chan_a, SWITCH_API_BRIDGE_START_VARIABLE);
|
switch_channel_api_on(chan_a, SWITCH_API_BRIDGE_START_VARIABLE);
|
||||||
}
|
}
|
||||||
|
exec_check = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (exec_app) {
|
if (exec_app) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session_a), SWITCH_LOG_DEBUG, "%s Bridge execute app %s(%s)\n",
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session_a), SWITCH_LOG_DEBUG, "%s Bridge execute app %s(%s)\n",
|
||||||
|
@ -371,9 +375,7 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj)
|
||||||
switch_core_session_execute_application_async(session_a, exec_app, exec_data);
|
switch_core_session_execute_application_async(session_a, exec_app, exec_data);
|
||||||
exec_app = exec_data = NULL;
|
exec_app = exec_data = NULL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (read_frame_count >= DEFAULT_LEAD_FRAMES && switch_channel_media_ack(chan_a)) {
|
|
||||||
if ((bypass_media_after_bridge || switch_channel_test_flag(chan_b, CF_BYPASS_MEDIA_AFTER_BRIDGE)) && switch_channel_test_flag(chan_a, CF_ANSWERED)
|
if ((bypass_media_after_bridge || switch_channel_test_flag(chan_b, CF_BYPASS_MEDIA_AFTER_BRIDGE)) && switch_channel_test_flag(chan_a, CF_ANSWERED)
|
||||||
&& switch_channel_test_flag(chan_b, CF_ANSWERED)) {
|
&& switch_channel_test_flag(chan_b, CF_ANSWERED)) {
|
||||||
switch_ivr_nomedia(switch_core_session_get_uuid(session_a), SMF_REBRIDGE);
|
switch_ivr_nomedia(switch_core_session_get_uuid(session_a), SMF_REBRIDGE);
|
||||||
|
|
Loading…
Reference in New Issue