int send_keyframe;
int play_file;
switch_rgb_color_t bgcolor;
+ switch_rgb_color_t letterbox_bgcolor;
switch_mutex_t *mutex;
switch_timer_t timer;
switch_memory_pool_t *pool;
char *video_layout_name;
char *video_layout_group;
char *video_canvas_bgcolor;
- char *video_layout_bgcolor;
+ char *video_letterbox_bgcolor;
char *no_video_avatar;
conf_video_mode_t conf_video_mode;
int members_with_video;
{
switch_img_fill(canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &canvas->bgcolor);
layer->banner_patched = 0;
+ layer->refresh = 1;
}
static void reset_layer(mcu_canvas_t *canvas, mcu_layer_t *layer)
switch_assert(IMG && img);
if (layer->refresh) {
- switch_rgb_color_t color;
- switch_color_set_rgb(&color, conference->video_layout_bgcolor);
- switch_img_fill(conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &color);
+ switch_img_fill(conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &conference->canvas->letterbox_bgcolor);
layer->refresh = 0;
}
}
if (layer->banner_img && !layer->banner_patched) {
+ switch_img_fill(conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &conference->canvas->letterbox_bgcolor);
switch_img_patch(IMG, layer->banner_img, layer->x_pos, layer->y_pos + (layer->screen_h - layer->banner_img->d_h));
+
if (!freeze) {
switch_img_set_rect(layer->img, 0, 0, layer->img->d_w, layer->img->d_h - layer->banner_img->d_h);
}
+
layer->banner_patched = 1;
}
switch_img_fit(&layer->logo_img, ew, eh);
switch_img_find_position(layer->logo_pos, ew, eh, layer->logo_img->d_w, layer->logo_img->d_h, &ex, &ey);
- switch_img_patch(IMG, layer->logo_img, x_pos + ex, y_pos + ey);
+ switch_img_patch(IMG, layer->logo_img, layer->x_pos + ex, layer->y_pos + ey);
if (layer->logo_text_img) {
int tx = 0, ty = 0;
switch_img_find_position(POS_LEFT_BOT,
layer->logo_img->d_w, layer->logo_img->d_h, layer->logo_text_img->d_w, layer->logo_text_img->d_h, &tx, &ty);
- switch_img_patch(IMG, layer->logo_text_img, x_pos + ex + tx, y_pos + ey + ty);
+ switch_img_patch(IMG, layer->logo_text_img, layer->x_pos + ex + tx, layer->y_pos + ey + ty);
}
}
reset_image(canvas->img, &canvas->bgcolor);
}
+static void set_canvas_letterbox_bgcolor(mcu_canvas_t *canvas, char *color)
+{
+ switch_color_set_rgb(&canvas->letterbox_bgcolor, color);
+}
+
static void check_used_layers(conference_obj_t *conference)
{
int i;
}
if (zstr(path) || !strcasecmp(path, "clear")) {
- switch_rgb_color_t color;
-
switch_img_free(&layer->banner_img);
layer->banner_patched = 0;
- switch_color_set_rgb(&color, member->conference->video_layout_bgcolor);
- switch_img_fill(member->conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &color);
+ switch_img_fill(member->conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h,
+ &member->conference->canvas->letterbox_bgcolor);
goto end;
}
}
if (zstr(text) || !strcasecmp(text, "clear")) {
- switch_rgb_color_t color;
-
switch_img_free(&layer->banner_img);
layer->banner_patched = 0;
- switch_color_set_rgb(&color, member->conference->video_layout_bgcolor);
- switch_img_fill(member->conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &color);
+ switch_img_fill(member->conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h,
+ &member->conference->canvas->letterbox_bgcolor);
goto end;
}
switch_channel_t *channel = NULL;
switch_status_t status = SWITCH_STATUS_SUCCESS;
const char *var = NULL;
- switch_rgb_color_t color;
if (!member->session) abort();
}
- switch_color_set_rgb(&color, member->conference->video_layout_bgcolor);
- switch_img_fill(member->conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h, &color);
-
+ switch_img_fill(member->conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h,
+ &member->conference->canvas->letterbox_bgcolor);
end:
layer->geometry.floor = vlayout->images[i].floor;
layer->geometry.overlap = vlayout->images[i].overlap;
layer->idx = i;
-
+ layer->refresh = 1;
layer->screen_w = conference->canvas->img->d_w * layer->geometry.scale / VIDEO_LAYOUT_SCALE;
layer->screen_h = conference->canvas->img->d_h * layer->geometry.scale / VIDEO_LAYOUT_SCALE;
layer->geometry.audio_position = vlayout->images[i].audio_position;
}
+ reset_image(conference->canvas->img, &conference->canvas->bgcolor);
+
for (i = 0; i < MCU_MAX_LAYERS; i++) {
mcu_layer_t *layer = &conference->canvas->layers[i];
layer->member_id = 0;
layer->tagged = 0;
layer->banner_patched = 0;
+ layer->refresh = 1;
reset_layer(conference->canvas, layer);
}
conference->canvas->layers_used = 0;
conference->canvas->total_layers = vlayout->layers;
conference->canvas->send_keyframe = 1;
- reset_image(conference->canvas->img, &conference->canvas->bgcolor);
+
switch_mutex_unlock(conference->canvas->mutex);
}
switch_mutex_lock(conference->canvas->mutex);
set_canvas_bgcolor(conference->canvas, conference->video_canvas_bgcolor);
+ set_canvas_letterbox_bgcolor(conference->canvas, conference->video_letterbox_bgcolor);
init_canvas_layers(conference, vlayout);
switch_mutex_unlock(conference->canvas->mutex);
}
char *video_layout_group = NULL;
char *video_canvas_size = NULL;
char *video_canvas_bgcolor = NULL;
- char *video_layout_bgcolor = NULL;
+ char *video_letterbox_bgcolor = NULL;
char *video_codec_bandwidth = NULL;
char *no_video_avatar = NULL;
conf_video_mode_t conf_video_mode = CONF_VIDEO_MODE_PASSTHROUGH;
video_layout_name = val;
} else if (!strcasecmp(var, "video-canvas-bgcolor") && !zstr(val)) {
video_canvas_bgcolor= val;
- } else if (!strcasecmp(var, "video-layout-bgcolor") && !zstr(val)) {
- video_layout_bgcolor= val;
+ } else if (!strcasecmp(var, "video-letterbox-bgcolor") && !zstr(val)) {
+ video_letterbox_bgcolor= val;
} else if (!strcasecmp(var, "video-canvas-size") && !zstr(val)) {
video_canvas_size = val;
} else if (!strcasecmp(var, "video-fps") && !zstr(val)) {
video_canvas_bgcolor = "#333333";
}
- if (!video_layout_bgcolor) {
- video_layout_bgcolor = "#000000";
+ if (!video_letterbox_bgcolor) {
+ video_letterbox_bgcolor = "#000000";
}
if (no_video_avatar) {
}
conference->video_canvas_bgcolor = switch_core_strdup(conference->pool, video_canvas_bgcolor);
- conference->video_layout_bgcolor = switch_core_strdup(conference->pool, video_layout_bgcolor);
+ conference->video_letterbox_bgcolor = switch_core_strdup(conference->pool, video_letterbox_bgcolor);
if (fps) {
conference_set_fps(conference, fps);