commit e3208339cf8c4ae782786c5482b32af1e54bd1b7
Author: Nikias Bassen <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2