commit b063e5a78e244811597595a434dc2e76035370d3 Author: Christophe Fergeau <cferg...@mandriva.com> Date: Wed Aug 25 22:31:19 2010 +0200
fix alignment handling when writing thumbnails The code was mixing values expressed in pixels (width) and values expressed in bytes (alignment). src/ithumb-writer.c | 19 +++++++++++++------ 1 files changed, 13 insertions(+), 6 deletions(-) --- diff --git a/src/ithumb-writer.c b/src/ithumb-writer.c index f40b6c7..62bcc54 100644 --- a/src/ithumb-writer.c +++ b/src/ithumb-writer.c @@ -87,13 +87,20 @@ static guint16 get_RGB_565_pixel (const guchar *pixel, gint byte_order) return get_gint16 (r | g | b, byte_order); } -static guint get_aligned_width (const Itdb_ArtworkFormat *img_info) +static guint get_aligned_width (const Itdb_ArtworkFormat *img_info, + gsize pixel_size) { guint width; + guint alignment = img_info->row_bytes_alignment/pixel_size; + + if (alignment * pixel_size != img_info->row_bytes_alignment) { + g_warning ("RowBytesAlignment (%d) not a multiple of pixel size (%"G_GSIZE_FORMAT")", + img_info->row_bytes_alignment, pixel_size); + } width = img_info->width; - if ((img_info->row_bytes_alignment > 0) && ((img_info->width % img_info->row_bytes_alignment) != 0)) { - width += img_info->row_bytes_alignment - (img_info->width % img_info->row_bytes_alignment); + if ((alignment != 0) && ((img_info->width % alignment) != 0)) { + width += alignment - (img_info->width % alignment); } return width; } @@ -121,7 +128,7 @@ pack_RGB_565 (GdkPixbuf *pixbuf, const Itdb_ArtworkFormat *img_info, g_return_val_if_fail (((height + vertical_padding) <= img_info->height), NULL); - dest_width = get_aligned_width (img_info); + dest_width = get_aligned_width (img_info, sizeof(guint16)); /* Make sure thumb size calculation won't overflow */ g_return_val_if_fail (dest_width != 0, NULL); @@ -223,7 +230,7 @@ pack_RGB_555 (GdkPixbuf *pixbuf, const Itdb_ArtworkFormat *img_info, g_return_val_if_fail (((width + horizontal_padding) <= img_info->width), NULL); g_return_val_if_fail (((height + vertical_padding) <= img_info->height), NULL); - dest_width = get_aligned_width (img_info); + dest_width = get_aligned_width (img_info, sizeof(guint16)); /* Make sure thumb size calculation won't overflow */ g_return_val_if_fail (dest_width != 0, NULL); @@ -433,7 +440,7 @@ pack_rec_RGB_555 (GdkPixbuf *pixbuf, const Itdb_ArtworkFormat *img_info, { gint row_stride; - row_stride = get_aligned_width (img_info); + row_stride = get_aligned_width (img_info, sizeof(guint16)); deranged_pixels = derange_pixels (NULL, pixels, img_info->width, img_info->height, ------------------------------------------------------------------------------ This SF.net Dev2Dev email is sponsored by: Show off your parallel programming skills. Enter the Intel(R) Threading Challenge 2010. http://p.sf.net/sfu/intel-thread-sfd _______________________________________________ gtkpod-cvs2 mailing list gtkpod-cvs2@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2