From 3878d913164c0200269b555cfb6524e49ffd9ee4 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 13 Mar 2017 14:50:28 -0500 Subject: [PATCH] FS-10131: [freeswitch-core] Incorrect video decode flags in some places #resolve --- src/mod/applications/mod_av/avformat.c | 4 +++- src/mod/applications/mod_conference/mod_conference.c | 5 ++++- src/mod/applications/mod_cv/mod_cv.cpp | 5 +++-- src/mod/applications/mod_fsv/mod_fsv.c | 5 ++++- src/mod/formats/mod_vlc/mod_vlc.c | 3 ++- src/switch_ivr_async.c | 12 ++++++++---- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/mod/applications/mod_av/avformat.c b/src/mod/applications/mod_av/avformat.c index c97986ac6b..21c6250ebb 100644 --- a/src/mod/applications/mod_av/avformat.c +++ b/src/mod/applications/mod_av/avformat.c @@ -844,7 +844,7 @@ SWITCH_STANDARD_APP(record_av_function) goto done; } - switch_channel_set_flag(channel, CF_VIDEO_DECODED_READ); + switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); switch_core_media_get_vid_params(session, &vid_params); switch_channel_set_flag(channel, CF_VIDEO_ECHO); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "video size: %dx%d\n", vid_params.width, vid_params.height); @@ -1120,6 +1120,8 @@ SWITCH_STANDARD_APP(record_av_function) end: + switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + if (fc) { if (has_video) close_stream(fc, &video_st); if (has_audio) close_stream(fc, &audio_st); diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index b9989e4087..309e2e0a75 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -2208,7 +2208,7 @@ SWITCH_STANDARD_APP(conference_function) switch_core_session_receive_message(session, &msg); if (conference_utils_test_flag(conference, CFLAG_TRANSCODE_VIDEO)) { - switch_channel_set_flag(channel, CF_VIDEO_DECODED_READ); + switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); switch_core_media_gen_key_frame(session); } @@ -2227,6 +2227,9 @@ SWITCH_STANDARD_APP(conference_function) } while (member.loop_loop); } + switch_core_session_video_reset(session); + switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + switch_core_session_set_video_read_callback(session, NULL, NULL); switch_channel_set_private(channel, "_conference_autocall_list_", NULL); diff --git a/src/mod/applications/mod_cv/mod_cv.cpp b/src/mod/applications/mod_cv/mod_cv.cpp index ac643a3ff6..1e134185e6 100644 --- a/src/mod/applications/mod_cv/mod_cv.cpp +++ b/src/mod/applications/mod_cv/mod_cv.cpp @@ -1115,6 +1115,9 @@ SWITCH_STANDARD_APP(cv_start_function) switch_core_session_set_video_read_callback(session, NULL, NULL); + switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + switch_channel_clear_flag_recursive(channel, CF_VIDEO_ECHO); + uninit_context(&context); switch_core_session_reset(session, SWITCH_TRUE, SWITCH_TRUE); @@ -1133,13 +1136,11 @@ static switch_bool_t cv_bug_callback(switch_media_bug_t *bug, void *user_data, s switch (type) { case SWITCH_ABC_TYPE_INIT: { - switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); } break; case SWITCH_ABC_TYPE_CLOSE: { switch_thread_rwlock_unlock(MODULE_INTERFACE->rwlock); - switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); uninit_context(context); } break; diff --git a/src/mod/applications/mod_fsv/mod_fsv.c b/src/mod/applications/mod_fsv/mod_fsv.c index e2c6f5af4d..b6e0856ea4 100644 --- a/src/mod/applications/mod_fsv/mod_fsv.c +++ b/src/mod/applications/mod_fsv/mod_fsv.c @@ -749,7 +749,7 @@ SWITCH_STANDARD_APP(decode_video_function) switch_channel_answer(channel); switch_core_session_request_video_refresh(session); - switch_channel_set_flag(channel, CF_VIDEO_DECODED_READ); + switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); switch_core_media_start_video_function(session, decode_video_thread, &max_pictures); @@ -764,6 +764,9 @@ SWITCH_STANDARD_APP(decode_video_function) switch_core_media_end_video_function(session); switch_core_session_video_reset(session); + switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + + } diff --git a/src/mod/formats/mod_vlc/mod_vlc.c b/src/mod/formats/mod_vlc/mod_vlc.c index 3cd8a2cebb..ade3285d3c 100644 --- a/src/mod/formats/mod_vlc/mod_vlc.c +++ b/src/mod/formats/mod_vlc/mod_vlc.c @@ -1513,7 +1513,7 @@ SWITCH_STANDARD_APP(play_video_function) libvlc_video_set_format_callbacks(context->mp, video_format_setup_callback, video_format_clean_callback); libvlc_video_set_callbacks(context->mp, vlc_video_lock_callback, vlc_video_unlock_callback, vlc_video_display_callback, context); - switch_channel_set_flag(channel, CF_VIDEO_DECODED_READ); + switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); top: @@ -1612,6 +1612,7 @@ end: } switch_core_session_video_reset(session); + switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); if (vlc_handle) libvlc_release(vlc_handle); } diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 1e87cc27eb..bae214a9ee 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -653,12 +653,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_echo(switch_core_session_t *s } arg_recursion_check_start(args); - - if (switch_true(switch_channel_get_variable(channel, "echo_decode_video"))) { - switch_channel_set_flag(channel, CF_VIDEO_DECODED_READ); + + if (switch_channel_var_true(channel, "echo_decode_video")) { + switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); } - if (switch_true(switch_channel_get_variable(channel, "echo_decode_audio"))) { + if (switch_channel_var_true(channel, "echo_decode_audio")) { switch_core_session_raw_read(session); } @@ -715,6 +715,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_echo(switch_core_session_t *s } } + if (switch_channel_var_true(channel, "echo_decode_video")) { + switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + } + switch_core_session_video_reset(session); switch_core_session_reset(session, SWITCH_TRUE, SWITCH_TRUE);