]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7513: clear screen on unvmute
authorAnthony Minessale <anthm@freeswitch.org>
Mon, 16 Feb 2015 16:07:34 +0000 (10:07 -0600)
committerMichael Jerris <mike@jerris.com>
Thu, 28 May 2015 17:47:02 +0000 (12:47 -0500)
src/mod/applications/mod_conference/mod_conference.c

index 981693217b42ea59a4c0e5135f1051d202b181f3..4172078b9aa716b7e6135e7008e29d2b8482f438 100644 (file)
@@ -921,10 +921,15 @@ static void reset_image(switch_image_t *img, switch_rgb_color_t *color)
 
 #define SCALE_FACTOR 360.0f
 
-static void reset_layer(mcu_canvas_t *canvas, mcu_layer_t *layer)
+/* clear layer and reset_layer called inside lock always */
+
+static void clear_layer(mcu_canvas_t *canvas, mcu_layer_t *layer)
 {
-       /* called inside lock always */
+       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)
+{
        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")) {