mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-31 10:46:27 +00:00
FS-7513: fix math on image resizing
This commit is contained in:
parent
1aa66ef30a
commit
1deca68e37
@ -928,7 +928,7 @@ static void set_bgcolor(bgcolor_yuv_t *bgcolor, char *bgcolor_str)
|
|||||||
bgcolor->v = v;
|
bgcolor->v = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SCALE_FACTOR 360
|
#define SCALE_FACTOR 360.0f
|
||||||
|
|
||||||
static void reset_layer(mcu_canvas_t *canvas, mcu_layer_t *layer)
|
static void reset_layer(mcu_canvas_t *canvas, mcu_layer_t *layer)
|
||||||
{
|
{
|
||||||
@ -938,8 +938,8 @@ static void reset_layer(mcu_canvas_t *canvas, mcu_layer_t *layer)
|
|||||||
|
|
||||||
layer->tagged = 0;
|
layer->tagged = 0;
|
||||||
|
|
||||||
screen_w = canvas->img->d_w * layer->geometry.scale / SCALE_FACTOR;
|
screen_w = ceil(canvas->img->d_w * layer->geometry.scale / SCALE_FACTOR);
|
||||||
screen_h = canvas->img->d_h * layer->geometry.scale / SCALE_FACTOR;
|
screen_h = ceil(canvas->img->d_h * layer->geometry.scale / SCALE_FACTOR);
|
||||||
|
|
||||||
x = canvas->img->d_w * layer->geometry.x / SCALE_FACTOR;
|
x = canvas->img->d_w * layer->geometry.x / SCALE_FACTOR;
|
||||||
y = canvas->img->d_h * layer->geometry.y / SCALE_FACTOR;
|
y = canvas->img->d_h * layer->geometry.y / SCALE_FACTOR;
|
||||||
@ -951,7 +951,7 @@ static void reset_layer(mcu_canvas_t *canvas, mcu_layer_t *layer)
|
|||||||
if (!layer->img) {
|
if (!layer->img) {
|
||||||
layer->img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, screen_w, screen_h, 1);
|
layer->img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, screen_w, screen_h, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_assert(layer->img);
|
switch_assert(layer->img);
|
||||||
|
|
||||||
reset_image(layer->img, &canvas->bgcolor);
|
reset_image(layer->img, &canvas->bgcolor);
|
||||||
@ -971,8 +971,8 @@ static void scale_and_patch(conference_obj_t *conference, mcu_layer_t *layer)
|
|||||||
int screen_w = 0, screen_h = 0, img_w = 0, img_h = 0;
|
int screen_w = 0, screen_h = 0, img_w = 0, img_h = 0;
|
||||||
double screen_aspect = 0, img_aspect = 0;
|
double screen_aspect = 0, img_aspect = 0;
|
||||||
|
|
||||||
img_w = screen_w = IMG->d_w * layer->geometry.scale / SCALE_FACTOR;
|
img_w = screen_w = ceil(IMG->d_w * layer->geometry.scale / SCALE_FACTOR);
|
||||||
img_h = screen_h = IMG->d_h * layer->geometry.scale / SCALE_FACTOR;
|
img_h = screen_h = ceil(IMG->d_h * layer->geometry.scale / SCALE_FACTOR);
|
||||||
|
|
||||||
x = IMG->d_w * layer->geometry.x / SCALE_FACTOR;
|
x = IMG->d_w * layer->geometry.x / SCALE_FACTOR;
|
||||||
y = IMG->d_h * layer->geometry.y / SCALE_FACTOR;
|
y = IMG->d_h * layer->geometry.y / SCALE_FACTOR;
|
||||||
@ -981,10 +981,10 @@ static void scale_and_patch(conference_obj_t *conference, mcu_layer_t *layer)
|
|||||||
img_aspect = (double) img->d_w / img->d_h;
|
img_aspect = (double) img->d_w / img->d_h;
|
||||||
|
|
||||||
if (screen_aspect > img_aspect) {
|
if (screen_aspect > img_aspect) {
|
||||||
img_w = img_aspect * screen_h;
|
img_w = ceil(img_aspect * screen_h);
|
||||||
x += (screen_w - img_w) / 2;
|
x += (screen_w - img_w) / 2;
|
||||||
} else if (screen_aspect < img_aspect) {
|
} else if (screen_aspect < img_aspect) {
|
||||||
img_h = screen_w / img_aspect;
|
img_h = ceil(screen_w / img_aspect);
|
||||||
y += (screen_h - img_h) / 2;
|
y += (screen_h - img_h) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1010,8 +1010,8 @@ static void scale_and_patch(conference_obj_t *conference, mcu_layer_t *layer)
|
|||||||
|
|
||||||
switch_assert(layer->img);
|
switch_assert(layer->img);
|
||||||
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "RESIZE %dx%d to %dx%d to fit in %dx%d and insert at %d,%d\n",
|
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "RESIZE %dx%d to %dx%d to fit in %dx%d and insert at %d,%d\n",
|
||||||
img->d_w, img->d_h, img_w, img_h, screen_w, screen_h, x, y);
|
// img->d_w, img->d_h, img_w, img_h, screen_w, screen_h, x, y);
|
||||||
|
|
||||||
ret = I420Scale(img->planes[0], img->stride[0],
|
ret = I420Scale(img->planes[0], img->stride[0],
|
||||||
img->planes[1], img->stride[1],
|
img->planes[1], img->stride[1],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user