From 7307005c56162cd44b740be94526a32a36d81c73 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 16 Feb 2015 10:07:34 -0600 Subject: [PATCH] FS-7513: clear screen on unvmute --- .../mod_conference/mod_conference.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 981693217b..4172078b9a 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -921,10 +921,15 @@ static void reset_image(switch_image_t *img, switch_rgb_color_t *color) #define SCALE_FACTOR 360.0f +/* clear layer and reset_layer called inside lock always */ + +static void clear_layer(mcu_canvas_t *canvas, mcu_layer_t *layer) +{ + switch_img_fill(canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &canvas->bgcolor); +} + static void reset_layer(mcu_canvas_t *canvas, mcu_layer_t *layer) { - /* called inside lock always */ - layer->tagged = 0; switch_img_free(&layer->banner_img); @@ -936,7 +941,7 @@ static void reset_layer(mcu_canvas_t *canvas, mcu_layer_t *layer) layer->img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, layer->screen_w, layer->screen_h, 1); switch_assert(layer->img); - switch_img_fill(canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &canvas->bgcolor); + clear_layer(canvas, layer); switch_img_free(&layer->cur_img); } @@ -7674,10 +7679,18 @@ static switch_status_t conf_api_sub_tvmute(conference_member_t *member, switch_s static switch_status_t conf_api_sub_unvmute(conference_member_t *member, switch_stream_handle_t *stream, void *data) { switch_event_t *event; + mcu_layer_t *layer = NULL; if (member == NULL) return SWITCH_STATUS_GENERR; + if (member->conference->canvas) { + switch_mutex_lock(member->conference->canvas->mutex); + layer = &member->conference->canvas->layers[member->video_layer_id]; + clear_layer(member->conference->canvas, layer); + switch_mutex_unlock(member->conference->canvas->mutex); + } + switch_set_flag_locked(member, MFLAG_CAN_BE_SEEN); if (!(data) || !strstr((char *) data, "quiet")) {