mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-21 23:00:13 +00:00
FS-7724: [mod_conference] fix segfault when missing fonts when trying to render banner
This commit is contained in:
parent
d5c6443b23
commit
f727cdb9d1
@ -1350,7 +1350,6 @@ static void layer_set_banner(conference_member_t *member, mcu_layer_t *layer, co
|
|||||||
text = tmp + 1;
|
text = tmp + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (params) {
|
if (params) {
|
||||||
if ((var = switch_event_get_header(params, "fg"))) {
|
if ((var = switch_event_get_header(params, "fg"))) {
|
||||||
fg = var;
|
fg = var;
|
||||||
@ -1379,28 +1378,37 @@ static void layer_set_banner(conference_member_t *member, mcu_layer_t *layer, co
|
|||||||
switch_color_set_rgb(&fgcolor, fg);
|
switch_color_set_rgb(&fgcolor, fg);
|
||||||
switch_color_set_rgb(&bgcolor, bg);
|
switch_color_set_rgb(&bgcolor, bg);
|
||||||
|
|
||||||
switch_img_free(&layer->banner_img);
|
|
||||||
switch_img_free(&layer->logo_img);
|
|
||||||
switch_img_free(&layer->logo_text_img);
|
|
||||||
layer->banner_img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, layer->screen_w, font_size * 2, 1);
|
|
||||||
|
|
||||||
if (layer->txthandle) {
|
if (layer->txthandle) {
|
||||||
switch_img_txt_handle_destroy(&layer->txthandle);
|
switch_img_txt_handle_destroy(&layer->txthandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_img_txt_handle_create(&layer->txthandle, font_face, fg, bg, font_size, 0, NULL);
|
switch_img_txt_handle_create(&layer->txthandle, font_face, fg, bg, font_size, 0, NULL);
|
||||||
|
|
||||||
|
if (!layer->txthandle) {
|
||||||
|
switch_img_free(&layer->banner_img);
|
||||||
|
layer->banner_patched = 0;
|
||||||
|
|
||||||
|
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_img_free(&layer->banner_img);
|
||||||
|
switch_img_free(&layer->logo_img);
|
||||||
|
switch_img_free(&layer->logo_text_img);
|
||||||
|
layer->banner_img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, layer->screen_w, font_size * 2, 1);
|
||||||
|
|
||||||
reset_image(layer->banner_img, &bgcolor);
|
reset_image(layer->banner_img, &bgcolor);
|
||||||
switch_img_txt_handle_render(layer->txthandle, layer->banner_img, font_size / 2, font_size / 2, text, NULL, fg, bg, 0, 0);
|
switch_img_txt_handle_render(layer->txthandle, layer->banner_img, font_size / 2, font_size / 2, text, NULL, fg, bg, 0, 0);
|
||||||
|
|
||||||
|
end:
|
||||||
|
|
||||||
if (params) switch_event_destroy(¶ms);
|
if (params) switch_event_destroy(¶ms);
|
||||||
|
|
||||||
switch_safe_free(dup);
|
switch_safe_free(dup);
|
||||||
|
|
||||||
end:
|
|
||||||
|
|
||||||
switch_mutex_unlock(member->conference->canvas->mutex);
|
switch_mutex_unlock(member->conference->canvas->mutex);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset_video_bitrate_counters(conference_member_t *member)
|
static void reset_video_bitrate_counters(conference_member_t *member)
|
||||||
|
@ -883,6 +883,8 @@ SWITCH_DECLARE(uint32_t) switch_img_txt_handle_render(switch_img_txt_handle_t *h
|
|||||||
|
|
||||||
if (zstr(text)) return 0;
|
if (zstr(text)) return 0;
|
||||||
|
|
||||||
|
if (!handle) return 0;
|
||||||
|
|
||||||
switch_assert(!img || img->fmt == SWITCH_IMG_FMT_I420 || img->fmt == SWITCH_IMG_FMT_ARGB);
|
switch_assert(!img || img->fmt == SWITCH_IMG_FMT_I420 || img->fmt == SWITCH_IMG_FMT_ARGB);
|
||||||
|
|
||||||
if (font_family) {
|
if (font_family) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user