mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-09 17:26:03 +00:00
FS-11301 #resolve toggle canvas auto clear
This commit is contained in:
parent
c8592be1fe
commit
2484de58fe
@ -43,6 +43,7 @@
|
|||||||
|
|
||||||
|
|
||||||
api_command_t conference_api_sub_commands[] = {
|
api_command_t conference_api_sub_commands[] = {
|
||||||
|
{"canvas-auto-clear", (void_fn_t) & conference_api_sub_canvas_auto_clear, CONF_API_SUB_ARGS_SPLIT, "canvas-auto-clear", "<canvas_id> <true|false>"},
|
||||||
{"count", (void_fn_t) & conference_api_sub_count, CONF_API_SUB_ARGS_SPLIT, "count", ""},
|
{"count", (void_fn_t) & conference_api_sub_count, CONF_API_SUB_ARGS_SPLIT, "count", ""},
|
||||||
{"list", (void_fn_t) & conference_api_sub_list, CONF_API_SUB_ARGS_SPLIT, "list", "[delim <string>]|[count]"},
|
{"list", (void_fn_t) & conference_api_sub_list, CONF_API_SUB_ARGS_SPLIT, "list", "[delim <string>]|[count]"},
|
||||||
{"xml_list", (void_fn_t) & conference_api_sub_xml_list, CONF_API_SUB_ARGS_SPLIT, "xml_list", ""},
|
{"xml_list", (void_fn_t) & conference_api_sub_xml_list, CONF_API_SUB_ARGS_SPLIT, "xml_list", ""},
|
||||||
@ -534,6 +535,48 @@ switch_status_t conference_api_sub_conference_video_vmute_snap(conference_member
|
|||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch_status_t conference_api_sub_canvas_auto_clear(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv)
|
||||||
|
{
|
||||||
|
int canvas_id_start = 0;
|
||||||
|
int canvas_id_end = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
if (argc < 3) {
|
||||||
|
stream->write_function(stream, "+OK");
|
||||||
|
|
||||||
|
for (i = 0; i < conference->canvas_count; i++) {
|
||||||
|
stream->write_function(stream, " canvas %d auto_clear=%s", i + 1, conference->canvases[i]->disable_auto_clear ? "false" : "true");
|
||||||
|
}
|
||||||
|
|
||||||
|
stream->write_function(stream, "\n");
|
||||||
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s\n", argv[1]);
|
||||||
|
|
||||||
|
canvas_id_start = atoi(argv[2]);
|
||||||
|
|
||||||
|
if (canvas_id_start == 0) {
|
||||||
|
canvas_id_end = conference->canvas_count - 1;
|
||||||
|
} else {
|
||||||
|
canvas_id_start--;
|
||||||
|
canvas_id_end = canvas_id_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
stream->write_function(stream, "+OK");
|
||||||
|
switch_mutex_lock(conference->canvas_mutex);
|
||||||
|
|
||||||
|
for (i = canvas_id_start; i<= canvas_id_end; i++) {
|
||||||
|
conference->canvases[i]->disable_auto_clear = !switch_true(argv[3]);
|
||||||
|
stream->write_function(stream, " canvas %d auto_clear=%s", i + 1, argv[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_mutex_unlock(conference->canvas_mutex);
|
||||||
|
stream->write_function(stream, "\n");
|
||||||
|
|
||||||
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
switch_status_t conference_api_sub_vmute(conference_member_t *member, switch_stream_handle_t *stream, void *data)
|
switch_status_t conference_api_sub_vmute(conference_member_t *member, switch_stream_handle_t *stream, void *data)
|
||||||
{
|
{
|
||||||
switch_event_t *event;
|
switch_event_t *event;
|
||||||
|
@ -431,7 +431,10 @@ void conference_video_reset_layer(mcu_layer_t *layer)
|
|||||||
switch_assert(layer->img);
|
switch_assert(layer->img);
|
||||||
}
|
}
|
||||||
|
|
||||||
conference_video_clear_layer(layer);
|
if (layer->canvas && !layer->canvas->disable_auto_clear) {
|
||||||
|
conference_video_clear_layer(layer);
|
||||||
|
}
|
||||||
|
|
||||||
switch_img_free(&layer->cur_img);
|
switch_img_free(&layer->cur_img);
|
||||||
|
|
||||||
switch_img_free(&layer->overlay_img);
|
switch_img_free(&layer->overlay_img);
|
||||||
@ -1084,7 +1087,7 @@ void conference_video_detach_video_layer(conference_member_t *member)
|
|||||||
conference_member_update_status_field(member);
|
conference_member_update_status_field(member);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canvas->bgimg) {
|
if (canvas->bgimg && !canvas->disable_auto_clear) {
|
||||||
conference_video_set_canvas_bgimg(canvas, NULL);
|
conference_video_set_canvas_bgimg(canvas, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1521,7 +1524,10 @@ switch_status_t conference_video_attach_video_layer(conference_member_t *member,
|
|||||||
conference_api_sub_position(member, NULL, layer->geometry.audio_position);
|
conference_api_sub_position(member, NULL, layer->geometry.audio_position);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_img_fill(canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &canvas->letterbox_bgcolor);
|
if (!canvas->disable_auto_clear) {
|
||||||
|
switch_img_fill(canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &canvas->letterbox_bgcolor);
|
||||||
|
}
|
||||||
|
|
||||||
conference_video_reset_video_bitrate_counters(member);
|
conference_video_reset_video_bitrate_counters(member);
|
||||||
conference_video_clear_managed_kps(member);
|
conference_video_clear_managed_kps(member);
|
||||||
|
|
||||||
|
@ -570,6 +570,7 @@ typedef struct mcu_canvas_s {
|
|||||||
int overlay_video_file;
|
int overlay_video_file;
|
||||||
codec_set_t *write_codecs[MAX_MUX_CODECS];
|
codec_set_t *write_codecs[MAX_MUX_CODECS];
|
||||||
int write_codecs_count;
|
int write_codecs_count;
|
||||||
|
switch_bool_t disable_auto_clear;
|
||||||
} mcu_canvas_t;
|
} mcu_canvas_t;
|
||||||
|
|
||||||
/* Record Node */
|
/* Record Node */
|
||||||
@ -1173,6 +1174,7 @@ void conference_event_chat_channel_handler(const char *event_channel, cJSON *jso
|
|||||||
void conference_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, uint8_t non_mod, conference_api_member_cmd_t pfncallback, void *data);
|
void conference_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, uint8_t non_mod, conference_api_member_cmd_t pfncallback, void *data);
|
||||||
int conference_video_flush_queue(switch_queue_t *q, int min);
|
int conference_video_flush_queue(switch_queue_t *q, int min);
|
||||||
|
|
||||||
|
switch_status_t conference_api_sub_canvas_auto_clear(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
|
||||||
switch_status_t conference_api_sub_mute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
|
switch_status_t conference_api_sub_mute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
|
||||||
switch_status_t conference_api_sub_tmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
|
switch_status_t conference_api_sub_tmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
|
||||||
switch_status_t conference_api_sub_unmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
|
switch_status_t conference_api_sub_unmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user