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

Reply via email to