From 2ed845fcad548a83ff96848b0d056e36435b5fcc Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Thu, 6 Jan 2005 16:37:30 +0000 Subject: gst/games/gstpuzzle.c: fix edges when image sizes aren't multiples of tile sizes Original commit message from CVS: * gst/games/gstpuzzle.c: (draw_puzzle): fix edges when image sizes aren't multiples of tile sizes --- ChangeLog | 5 +++++ gst/games/gstpuzzle.c | 24 ++++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6391b170..4dc65abc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-01-06 Benjamin Otte + + * gst/games/gstpuzzle.c: (draw_puzzle): + fix edges when image sizes aren't multiples of tile sizes + 2005-01-06 Benjamin Otte * gst/games/gstpuzzle.c: (gst_puzzle_base_init): diff --git a/gst/games/gstpuzzle.c b/gst/games/gstpuzzle.c index c0e3c254..7dd4dcfa 100644 --- a/gst/games/gstpuzzle.c +++ b/gst/games/gstpuzzle.c @@ -463,21 +463,25 @@ draw_puzzle (GstVideofilter * videofilter, void *destp, void *srcp) height = gst_videofilter_get_input_height (videofilter); gst_video_image_setup (&dest, puzzle->format, destp, width, height); gst_video_image_setup (&src, puzzle->format, srcp, width, height); - if (width % puzzle->columns != 0) { - guint w = width % puzzle->columns; + /* use multiples of 4 here to get around drawing problems with YUV colorspaces */ + width = (width / puzzle->columns) & ~3; + height = (height / puzzle->rows) & ~3; + if (width * puzzle->columns != gst_videofilter_get_input_width (videofilter)) { + guint w = + gst_videofilter_get_input_width (videofilter) - width * puzzle->columns; - gst_video_image_copy_area (&dest, width - w, 0, &src, width - w, 0, w, - height); + gst_video_image_copy_area (&dest, width * puzzle->columns, 0, &src, + width * puzzle->columns, 0, w, + gst_videofilter_get_input_height (videofilter)); } - if (height % puzzle->rows != 0) { - guint h = height % puzzle->rows; + if (height * puzzle->rows != gst_videofilter_get_input_height (videofilter)) { + guint h = + gst_videofilter_get_input_width (videofilter) - height * puzzle->rows; - gst_video_image_copy_area (&dest, 0, height - h, &src, 0, height - h, width, + gst_video_image_copy_area (&dest, 0, height * puzzle->rows, &src, 0, + height * puzzle->rows, gst_videofilter_get_input_width (videofilter), h); } - /* use multiples of 4 here to get around drawing problems with YUV colorspaces */ - width = (width / puzzle->columns) & ~3; - height = (height / puzzle->rows) & ~3; for (i = 0; i < puzzle->tiles; i++) { if (!puzzle->solved && i == puzzle->position) { -- cgit v1.2.1