summaryrefslogtreecommitdiffstats
path: root/src/ithumb-writer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ithumb-writer.c')
-rw-r--r--src/ithumb-writer.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/ithumb-writer.c b/src/ithumb-writer.c
index 957aca8..4cf2523 100644
--- a/src/ithumb-writer.c
+++ b/src/ithumb-writer.c
@@ -29,6 +29,7 @@
#ifdef HAVE_GDKPIXBUF
#include "itdb_private.h"
+#include "itdb_endianness.h"
#include <errno.h>
#include <locale.h>
@@ -46,6 +47,7 @@ struct _iThumbWriter {
FILE *f;
gchar *filename;
Itdb_ArtworkFormat *img_info;
+ guint byte_order;
GHashTable *cache;
};
typedef struct _iThumbWriter iThumbWriter;
@@ -56,7 +58,7 @@ typedef struct _iThumbWriter iThumbWriter;
* square
*/
static guint16 *
-pack_RGB_565 (GdkPixbuf *pixbuf, int dst_width, int dst_height)
+pack_RGB_565 (GdkPixbuf *pixbuf, int dst_width, int dst_height, guint byte_order)
{
guchar *pixels;
guint16 *result;
@@ -93,7 +95,8 @@ pack_RGB_565 (GdkPixbuf *pixbuf, int dst_width, int dst_height)
r = (r << RED_SHIFT) & RED_MASK;
g = (g << GREEN_SHIFT) & GREEN_MASK;
b = (b << BLUE_SHIFT) & BLUE_MASK;
- result[h*dst_width + w] = (GINT16_TO_LE (r | g | b));
+ result[h*dst_width + w] = get_gint16 (r | g | b,
+ byte_order);
}
}
return result;
@@ -140,6 +143,7 @@ ipod_image_get_ithmb_filename (const char *mount_point, gint correlation_id, gin
{
filename = g_build_filename (artwork_dir, buf, NULL);
}
+/* printf ("%s %s\n", buf, filename);*/
g_free (buf);
@@ -203,7 +207,8 @@ ithumb_writer_write_thumbnail (iThumbWriter *writer,
thumb->filename = g_strdup_printf (":F%04u_1.ithmb",
writer->img_info->correlation_id);
pixels = pack_RGB_565 (pixbuf, writer->img_info->width,
- writer->img_info->height);
+ writer->img_info->height,
+ writer->byte_order);
g_object_unref (G_OBJECT (pixbuf));
if (pixels == NULL)
@@ -244,7 +249,9 @@ write_thumbnail (gpointer _writer, gpointer _artwork)
}
static iThumbWriter *
-ithumb_writer_new (const char *mount_point, const Itdb_ArtworkFormat *info)
+ithumb_writer_new (const char *mount_point,
+ const Itdb_ArtworkFormat *info,
+ guint byte_order)
{
char *filename;
iThumbWriter *writer;
@@ -256,6 +263,8 @@ ithumb_writer_new (const char *mount_point, const Itdb_ArtworkFormat *info)
writer->cache = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
+ writer->byte_order = byte_order;
+
filename = ipod_image_get_ithmb_filename (mount_point,
info->correlation_id,
1);
@@ -586,9 +595,9 @@ itdb_write_ithumb_files (Itdb_iTunesDB *db)
GList *it;
const gchar *mount_point;
const Itdb_ArtworkFormat *format;
-/* g_print ("%s\n", G_GNUC_FUNCTION);*/
g_return_val_if_fail (db, -1);
+ g_return_val_if_fail (db->device, -1);
mount_point = itdb_get_mountpoint (db);
/* FIXME: support writing to directory rather than writing to
@@ -614,7 +623,8 @@ itdb_write_ithumb_files (Itdb_iTunesDB *db)
case IPOD_COVER_LARGE:
ithmb_rearrange_existing_thumbnails (db,
format);
- writer = ithumb_writer_new (mount_point, format);
+ writer = ithumb_writer_new (mount_point, format,
+ db->device->byte_order);
if (writer != NULL) {
writers = g_list_prepend (writers, writer);
}