diff options
author | Benjamin Otte <otte@gnome.org> | 2005-01-06 16:37:30 +0000 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2005-01-06 16:37:30 +0000 |
commit | 2ed845fcad548a83ff96848b0d056e36435b5fcc (patch) | |
tree | 3423e97ba70d23bb551fd46f155726d45f838388 /gst/games/gstpuzzle.c | |
parent | 6a0908113ed4e5d681ffc1bc4b66b8ba15b57ce9 (diff) | |
download | gst-plugins-bad-2ed845fcad548a83ff96848b0d056e36435b5fcc.tar.gz gst-plugins-bad-2ed845fcad548a83ff96848b0d056e36435b5fcc.tar.bz2 gst-plugins-bad-2ed845fcad548a83ff96848b0d056e36435b5fcc.zip |
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
Diffstat (limited to 'gst/games/gstpuzzle.c')
-rw-r--r-- | gst/games/gstpuzzle.c | 24 |
1 files changed, 14 insertions, 10 deletions
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) { |