diff --git a/src/include/switch_core_video.h b/src/include/switch_core_video.h index 64c08ddb0d..17cf44f27e 100644 --- a/src/include/switch_core_video.h +++ b/src/include/switch_core_video.h @@ -71,6 +71,7 @@ typedef enum { SWITCH_FIT_SIZE, SWITCH_FIT_SCALE, SWITCH_FIT_SIZE_AND_SCALE, + SWITCH_FIT_NECESSARY, SWITCH_FIT_NONE } switch_img_fit_t; diff --git a/src/mod/applications/mod_conference/conference_video.c b/src/mod/applications/mod_conference/conference_video.c index 74a938be69..8d8e493503 100644 --- a/src/mod/applications/mod_conference/conference_video.c +++ b/src/mod/applications/mod_conference/conference_video.c @@ -851,7 +851,7 @@ void conference_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg, switch_img_scale(img, &layer->img, img_w, img_h); - + if (layer->logo_img) { int ew = layer->screen_w - (layer->geometry.border * 2), eh = layer->screen_h - (layer->banner_img ? layer->banner_img->d_h : 0) - (layer->geometry.border * 2); int ex = 0, ey = 0; @@ -1143,7 +1143,7 @@ void conference_member_set_logo(conference_member_t *member, const char *path) } img = switch_img_write_text_img(member->video_logo->d_w, member->video_logo->d_h, SWITCH_FALSE, var); - switch_img_fit(&img, member->video_logo->d_w, member->video_logo->d_h, SWITCH_FIT_SIZE); + switch_img_fit(&img, member->video_logo->d_w, member->video_logo->d_h, SWITCH_FIT_NECESSARY); switch_img_attenuate(member->video_logo); switch_img_patch(member->video_logo, img, x, y); switch_img_free(&img); diff --git a/src/switch_core_video.c b/src/switch_core_video.c index e5e60abe35..a395825dce 100644 --- a/src/switch_core_video.c +++ b/src/switch_core_video.c @@ -148,6 +148,7 @@ static struct fit_el IMG_FIT_TABLE[] = { {SWITCH_FIT_SIZE, "fit-size"}, {SWITCH_FIT_SCALE, "fit-scale"}, {SWITCH_FIT_SIZE_AND_SCALE, "fit-size-and-scale"}, + {SWITCH_FIT_NECESSARY, "fit-necessary"}, {SWITCH_FIT_NONE, NULL} }; @@ -1605,6 +1606,8 @@ SWITCH_DECLARE(void) switch_color_set_rgb(switch_rgb_color_t *color, const char color->b = 255; } } + + color->a = 255; } #ifdef SWITCH_HAVE_YUV @@ -1691,6 +1694,7 @@ static void init_gradient_table(switch_img_txt_handle_t *handle) color->r = c1->r + (c2->r - c1->r) * i / MAX_GRADIENT; color->g = c1->g + (c2->g - c1->g) * i / MAX_GRADIENT; color->b = c1->b + (c2->b - c1->b) * i / MAX_GRADIENT; + color->a = 255; } } @@ -2038,10 +2042,6 @@ SWITCH_DECLARE(switch_image_t *) switch_img_write_text_img(int w, int h, switch_ switch_img_txt_handle_create(&txthandle, font_face, fg, bg, font_size, 0, NULL); - if (bg) { - switch_color_set_rgb(&bgcolor, bg); - } - pre_width = switch_img_txt_handle_render(txthandle, NULL, font_size / 2, font_size / 2, @@ -2054,18 +2054,21 @@ SWITCH_DECLARE(switch_image_t *) switch_img_write_text_img(int w, int h, switch_ } else { width = pre_width; } - + //if (bg) { // txtimg = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, width, height, 1); // switch_assert(txtimg); // switch_img_fill(txtimg, 0, 0, txtimg->d_w, txtimg->d_h, &bgcolor); //} else { - txtimg = switch_img_alloc(NULL, SWITCH_IMG_FMT_ARGB, width, height, 1); - switch_assert(txtimg); + txtimg = switch_img_alloc(NULL, SWITCH_IMG_FMT_ARGB, width, height, 1); + switch_assert(txtimg); + //memset(txtimg->planes[SWITCH_PLANE_PACKED], 0, width * height * 4); + if (bg) { + switch_color_set_rgb(&bgcolor, bg); + switch_img_fill(txtimg, 0, 0, txtimg->d_w, txtimg->d_h, &bgcolor); + } else { memset(txtimg->planes[SWITCH_PLANE_PACKED], 0, width * height * 4); - if (bg) { - switch_img_fill(txtimg, 0, 0, txtimg->d_w, txtimg->d_h, &bgcolor); - } + } //} x = font_size / 2; @@ -2812,6 +2815,10 @@ SWITCH_DECLARE(switch_status_t) switch_img_fit(switch_image_t **srcP, int width, return SWITCH_STATUS_SUCCESS; } + if (fit == SWITCH_FIT_NECESSARY && src->d_w <= width && src->d_h < height) { + return SWITCH_STATUS_SUCCESS; + } + if (fit == SWITCH_FIT_SCALE) { switch_img_scale(src, &tmp, width, height); switch_img_free(&src);