commit e3208339cf8c4ae782786c5482b32af1e54bd1b7 Author: Nikias Bassen <nik...@gmx.li> Date: Wed Aug 25 04:20:13 2010 +0200
take into account row alignment when writing artwork This fixes (at least) artwork format 3106 on the iPhone 4G (110x110 thumbnails used in the album list) src/itdb_artwork.c | 8 +++++++- src/ithumb-writer.c | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletions(-) --- diff --git a/src/itdb_artwork.c b/src/itdb_artwork.c index dd6c4ca..977d5f5 100644 --- a/src/itdb_artwork.c +++ b/src/itdb_artwork.c @@ -819,6 +819,7 @@ gpointer itdb_thumb_ipod_item_to_pixbuf (Itdb_Device *device, gint pad_y = item->vertical_padding; gint width = item->width; gint height = item->height; + guint rowstride; const Itdb_ArtworkFormat *img_info = item->format; guchar *pixels; @@ -835,12 +836,17 @@ gpointer itdb_thumb_ipod_item_to_pixbuf (Itdb_Device *device, return NULL; } + if ((img_info->row_bytes_alignment > 0) && ((img_info->width % img_info->row_bytes_alignment) != 0)) { + rowstride = (img_info->width + (img_info->row_bytes_alignment - (img_info->width % img_info->row_bytes_alignment)))*3; + } else { + rowstride = img_info->width*3; + } pixbuf_full = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, FALSE, 8, img_info->width, img_info->height, - img_info->width*3, + rowstride, (GdkPixbufDestroyNotify)g_free, NULL); diff --git a/src/ithumb-writer.c b/src/ithumb-writer.c index 46087e8..fc059df 100644 --- a/src/ithumb-writer.c +++ b/src/ithumb-writer.c @@ -117,6 +117,10 @@ pack_RGB_565 (GdkPixbuf *pixbuf, const Itdb_ArtworkFormat *img_info, dest_width = img_info->width; } + if ((img_info->row_bytes_alignment > 0) && ((img_info->width % img_info->row_bytes_alignment) != 0)) { + dest_width = img_info->width + (img_info->row_bytes_alignment - (img_info->width % img_info->row_bytes_alignment)); + } + /* Make sure thumb size calculation won't overflow */ g_return_val_if_fail (dest_width != 0, NULL); g_return_val_if_fail (dest_width < G_MAXUINT/2, NULL); @@ -225,6 +229,10 @@ pack_RGB_555 (GdkPixbuf *pixbuf, const Itdb_ArtworkFormat *img_info, dest_width = img_info->width; } + if ((img_info->row_bytes_alignment > 0) && ((img_info->width % img_info->row_bytes_alignment) != 0)) { + dest_width = img_info->width + (img_info->row_bytes_alignment - (img_info->width % img_info->row_bytes_alignment)); + } + /* Make sure thumb size calculation won't overflow */ g_return_val_if_fail (dest_width != 0, NULL); g_return_val_if_fail (dest_width < G_MAXUINT/2, NULL); @@ -437,6 +445,11 @@ pack_rec_RGB_555 (GdkPixbuf *pixbuf, const Itdb_ArtworkFormat *img_info, } else { row_stride = img_info->width; } + + if ((img_info->row_bytes_alignment > 0) && ((img_info->width % img_info->row_bytes_alignment) != 0)) { + row_stride = img_info->width + (img_info->row_bytes_alignment - (img_info->width % img_info->row_bytes_alignment)); + } + deranged_pixels = derange_pixels (NULL, pixels, img_info->width, img_info->height, row_stride); ------------------------------------------------------------------------------ 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