提交 2b0ad30f authored 作者: Anthony Minessale's avatar Anthony Minessale

FS-7513: fix math on image resizing

上级 e33ddac0
......@@ -928,7 +928,7 @@ static void set_bgcolor(bgcolor_yuv_t *bgcolor, char *bgcolor_str)
bgcolor->v = v;
}
#define SCALE_FACTOR 360
#define SCALE_FACTOR 360.0f
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;
screen_w = canvas->img->d_w * layer->geometry.scale / SCALE_FACTOR;
screen_h = canvas->img->d_h * layer->geometry.scale / SCALE_FACTOR;
screen_w = ceil(canvas->img->d_w * 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;
y = canvas->img->d_h * layer->geometry.y / SCALE_FACTOR;
......@@ -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;
double screen_aspect = 0, img_aspect = 0;
img_w = screen_w = IMG->d_w * layer->geometry.scale / SCALE_FACTOR;
img_h = screen_h = IMG->d_h * layer->geometry.scale / SCALE_FACTOR;
img_w = screen_w = ceil(IMG->d_w * 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;
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;
if (screen_aspect > img_aspect) {
img_w = img_aspect * screen_h;
img_w = ceil(img_aspect * screen_h);
x += (screen_w - img_w) / 2;
} 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;
}
......@@ -1010,8 +1010,8 @@ static void scale_and_patch(conference_obj_t *conference, mcu_layer_t *layer)
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",
img->d_w, img->d_h, img_w, img_h, screen_w, screen_h, x, y);
//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);
ret = I420Scale(img->planes[0], img->stride[0],
img->planes[1], img->stride[1],
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论