FS-10447: [freeswitch-core] Manual video refresh mode #resolve

This commit is contained in:
Anthony Minessale committed 2017-06-29 16:57:18 -05:00
1 parent d3dbc74059
commit db47792558
6 files changed
+58 -14

No files matched your search

@@ -4203,7 +4203,7 @@ SWITCH_STANDARD_API(uuid_xfer_zombie)
return SWITCH_STATUS_SUCCESS;
}
#define VIDEO_REFRESH_SYNTAX "<uuid>"
#define VIDEO_REFRESH_SYNTAX "<uuid> [auto|manual]"
SWITCH_STANDARD_API(uuid_video_refresh_function)
{
switch_status_t status = SWITCH_STATUS_FALSE;
@@ -4220,11 +4220,28 @@ SWITCH_STANDARD_API(uuid_video_refresh_function)
switch_core_session_t *lsession = NULL;
if ((lsession = switch_core_session_locate(argv[0]))) {
switch_channel_set_flag(switch_core_session_get_channel(lsession), CF_XFER_ZOMBIE);
switch_core_session_request_video_refresh(lsession);
switch_core_media_gen_key_frame(lsession);
char *cmd = (char *)argv[1];
if (!zstr(cmd)) {
switch_channel_t *channel = switch_core_session_get_channel(lsession);
if (!strcasecmp(cmd, "manual")) {
switch_channel_set_flag(channel, CF_MANUAL_VID_REFRESH);
} else if (!strcasecmp(cmd, "auto")) {
switch_channel_clear_flag(channel, CF_MANUAL_VID_REFRESH);
}
stream->write_function(stream, "%s video refresh now in %s mode.\n", switch_channel_get_name(channel),
switch_channel_test_flag(channel, CF_MANUAL_VID_REFRESH) ? "manual" : "auto");
} else {
switch_core_session_force_request_video_refresh(lsession);
switch_core_media_gen_key_frame(lsession);
}
status = SWITCH_STATUS_SUCCESS;
switch_core_session_rwunlock(lsession);
}
}
+19 -1
View File
@@ -1431,9 +1431,27 @@ SWITCH_STANDARD_APP(video_set_decode_function)
SWITCH_STANDARD_APP(video_refresh_function)
{
switch_core_session_message_t msg = { 0 };
char *cmd = (char *)data;
if (!zstr(cmd)) {
switch_channel_t *channel = switch_core_session_get_channel(session);
if (!strcasecmp(cmd, "manual")) {
switch_channel_set_flag(channel, CF_MANUAL_VID_REFRESH);
} else if (!strcasecmp(cmd, "auto")) {
switch_channel_clear_flag(channel, CF_MANUAL_VID_REFRESH);
}
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
"%s video refresh now in %s mode.\n", switch_channel_get_name(channel),
switch_channel_test_flag(channel, CF_MANUAL_VID_REFRESH) ? "manual" : "auto");
return;
}
/* Tell the channel to refresh video */
msg.from = __FILE__;
msg.numeric_arg = 1;
msg.string_arg = data;
msg.message_id = SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ;
switch_core_session_receive_message(session, &msg);
@@ -6321,7 +6339,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load)
SWITCH_ADD_APP(app_interface, "ivr", "Run an ivr menu", "Run an ivr menu.", ivr_application_function, "<menu_name>", SAF_NONE);
SWITCH_ADD_APP(app_interface, "redirect", "Send session redirect", "Send a redirect message to a session.", redirect_function, "<redirect_data>",
SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "video_refresh", "Send video refresh.", "Send video refresh.", video_refresh_function, "",
SWITCH_ADD_APP(app_interface, "video_refresh", "Send video refresh.", "Send video refresh.", video_refresh_function, "[manual|auto]",
SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "video_decode", "Set video decode.", "Set video decode.", video_set_decode_function, "[[on|wait]|off]",
SAF_NONE);
+1 -1
View File
@@ -1528,7 +1528,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
break;
case SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ:
if (switch_channel_media_up(channel) && !switch_channel_test_flag(channel, CF_AVPF) &&
if (switch_channel_media_up(channel) && !switch_channel_test_flag(channel, CF_AVPF) && !switch_channel_test_flag(channel, CF_MANUAL_VID_REFRESH) &&
switch_channel_var_true(channel, "sofia_send_info_vid_refresh")) {
const char *pl = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<media_control><vc_primitive><to_encoder><picture_fast_update /></to_encoder></vc_primitive></media_control>\n";
switch_time_t now = switch_micro_time_now();