From 216850c1a04ea725da177d78bc0d202a8c66cdb0 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 27 Mar 2015 15:59:51 -0500 Subject: [PATCH] FS-7502: set video flag on record session --- src/switch_core_session.c | 2 +- src/switch_ivr_async.c | 16 ++++++++++++++++ src/switch_ivr_bridge.c | 3 ++- src/switch_ivr_play_say.c | 10 +++++----- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/switch_core_session.c b/src/switch_core_session.c index a3cfacd82e..73cae256b2 100644 --- a/src/switch_core_session.c +++ b/src/switch_core_session.c @@ -2680,7 +2680,7 @@ SWITCH_DECLARE(void) switch_core_session_video_reset(switch_core_session_t *sess { switch_channel_clear_flag(session->channel, CF_VIDEO_ECHO); switch_channel_clear_flag(session->channel, CF_VIDEO_PASSIVE); - switch_channel_clear_flag(session->channel, CF_VIDEO_DECODED_READ); + //switch_channel_clear_flag(session->channel, CF_VIDEO_DECODED_READ); switch_channel_clear_flag(session->channel, CF_VIDEO_DEBUG_READ); switch_channel_clear_flag(session->channel, CF_VIDEO_DEBUG_WRITE); switch_core_session_request_video_refresh(session); diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 76a9be6dd8..ccc3c506d0 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -1332,8 +1332,15 @@ static switch_bool_t record_callback(switch_media_bug_t *bug, void *user_data, s } } + + if (switch_core_file_has_video(rh->fh)) { + switch_core_media_set_video_file(session, NULL, SWITCH_RW_READ); + } switch_core_file_close(rh->fh); + + + if (rh->fh->samples_out < rh->fh->samplerate * rh->min_sec) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Discarding short file %s\n", rh->file); switch_channel_set_variable(channel, "RECORD_DISCARDED", "true"); @@ -2269,6 +2276,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t if ((ext = strrchr(file, '.'))) { ext++; + if (switch_channel_test_flag(channel, CF_VIDEO)) { + file_flags |= SWITCH_FILE_FLAG_VIDEO; + } + if (switch_core_file_open(fh, file, channels, read_impl.actual_samples_per_second, file_flags, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Error opening %s\n", file); if (hangup_on_error) { @@ -2277,6 +2288,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t } return SWITCH_STATUS_GENERR; } + + if (switch_core_file_has_video(fh)) { + switch_core_media_set_video_file(session, fh, SWITCH_RW_READ); + } + } else { int tflags = 0; diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index 68b1efd300..a39de8d31e 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -67,7 +67,8 @@ static void video_bridge_thread(switch_core_session_t *session, void *obj) switch_codec_t *a_codec = switch_core_session_get_video_read_codec(vh->session_a); switch_codec_t *b_codec = switch_core_session_get_video_write_codec(vh->session_b); - if (!b_codec || !a_codec || a_codec->implementation->impl_id == b_codec->implementation->impl_id) { + if ((!b_codec || !a_codec || a_codec->implementation->impl_id == b_codec->implementation->impl_id) && + !switch_channel_test_flag(b_channel, CF_VIDEO_DECODED_READ)) { switch_channel_clear_flag(channel, CF_VIDEO_DECODED_READ); } else { switch_channel_set_flag(channel, CF_VIDEO_DECODED_READ); diff --git a/src/switch_ivr_play_say.c b/src/switch_ivr_play_say.c index a691583a00..d056399c3f 100644 --- a/src/switch_ivr_play_say.c +++ b/src/switch_ivr_play_say.c @@ -1262,7 +1262,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess if (switch_channel_test_flag(channel, CF_VIDEO)) { flags |= SWITCH_FILE_FLAG_VIDEO; - switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); + //switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); } if (switch_core_file_open(fh, @@ -1357,7 +1357,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess switch_core_session_io_rwunlock(session); if (switch_core_file_has_video(fh)) { - switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + //switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); switch_core_media_set_video_file(session, NULL, SWITCH_RW_WRITE); } @@ -1383,7 +1383,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess switch_core_session_io_rwunlock(session); if (switch_core_file_has_video(fh)) { - switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + //switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); switch_core_media_set_video_file(session, NULL, SWITCH_RW_WRITE); } switch_core_file_close(fh); @@ -1412,7 +1412,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess switch_channel_set_private(channel, "__fh", NULL); switch_core_session_io_rwunlock(session); if (switch_core_file_has_video(fh)) { - switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + //switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); switch_core_media_set_video_file(session, NULL, SWITCH_RW_WRITE); } switch_core_file_close(fh); @@ -1823,7 +1823,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess switch_core_session_io_rwunlock(session); if (switch_core_file_has_video(fh)) { - switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); + //switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); switch_core_media_set_video_file(session, NULL, SWITCH_RW_WRITE); } switch_core_file_close(fh);