---------- Forwarded message ----------
From: Rafael Espíndola <[EMAIL PROTECTED]>
Date: Sun, May 25, 2008 at 9:39 AM
Subject: Re: [Rawstudio-dev] [patch] factor the thumb cache handling
to a common place
To: Lasse Bigum <[EMAIL PROTECTED]>


On Sun, May 25, 2008 at 9:32 AM, Lasse Bigum <[EMAIL PROTECTED]> wrote:
> Hi Rafael,
>
> I think you forgot to attach the patch :)

Yes. Attached now :-)

> /Lasse

Thanks,
Rafael
Index: src/ciff-meta.h
===================================================================
--- src/ciff-meta.h	(revision 1864)
+++ src/ciff-meta.h	(working copy)
@@ -18,4 +18,4 @@
  */
 
 void rs_ciff_load_meta(const gchar *filename, RS_METADATA *meta);
-GdkPixbuf *rs_ciff_load_thumb(const gchar *src);
+GdkPixbuf *rs_ciff_load_thumb(const gchar *src, const gchar *thumbname);
Index: src/x3f-meta.c
===================================================================
--- src/x3f-meta.c	(revision 1864)
+++ src/x3f-meta.c	(working copy)
@@ -25,7 +25,7 @@
 /* http://www.x3f.info/technotes/FileDocs/X3F_Format.pdf */
 
 GdkPixbuf *
-rs_x3f_load_thumb(const gchar *src)
+rs_x3f_load_thumb(const gchar *src, const gchar *thumbname)
 {
 	GdkPixbuf *pixbuf = NULL, *pixbuf2 = NULL;
 	gdouble ratio=1.0;
@@ -33,21 +33,9 @@
 	guint data_offset=0, data_length=0, data_format=0;
 	guint start=0, width=0, height=0, rowstride=0;
 	RAWFILE *rawfile;
-	gchar *thumbname;
 
 	raw_init();
 
-	thumbname = rs_thumb_get_name(src);
-	if (thumbname)
-	{
-		if (g_file_test(thumbname, G_FILE_TEST_EXISTS))
-		{
-			pixbuf = gdk_pixbuf_new_from_file(thumbname, NULL);
-			g_free(thumbname);
-			if (pixbuf) return(pixbuf);
-		}
-	}
-
 	rawfile = raw_open_file(src);
 	if (!rawfile) return(NULL);
 	if (!raw_strcmp(rawfile, 0, "FOVb", 4))
Index: src/x3f-meta.h
===================================================================
--- src/x3f-meta.h	(revision 1864)
+++ src/x3f-meta.h	(working copy)
@@ -17,4 +17,4 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-GdkPixbuf *rs_x3f_load_thumb(const gchar *src);
+GdkPixbuf *rs_x3f_load_thumb(const gchar *src, const gchar *thumbname);
Index: src/rawstudio.c
===================================================================
--- src/rawstudio.c	(revision 1864)
+++ src/rawstudio.c	(working copy)
@@ -53,14 +53,14 @@
 static void photo_settings_changed(RS_PHOTO *photo, gint mask, RS_BLOB *rs);
 static void photo_spatial_changed(RS_PHOTO *photo, RS_BLOB *rs);
 static RS_SETTINGS *rs_settings_new();
-static GdkPixbuf *rs_thumb_gdk(const gchar *src);
+static GdkPixbuf *rs_thumb_gdk(const gchar *src, const gchar *thumbname);
 
 RS_FILETYPE *filetypes;
 
 static void
 rs_add_filetype(gchar *id, gint filetype, const gchar *ext, gchar *description,
 	RS_PHOTO *(*load)(const gchar *, gboolean),
-	GdkPixbuf *(*thumb)(const gchar *),
+	GdkPixbuf *(*thumb)(const gchar *, const gchar *),
 	void (*load_meta)(const gchar *, RS_METADATA *),
 	gboolean (*save)(RS_PHOTO *photo, const gchar *filename, gint filetype, gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot, RS_CMS *cms))
 {
@@ -85,6 +85,25 @@
 	return;
 }
 
+GdkPixbuf *
+rs_load_thumb(RS_FILETYPE *filetype, const gchar *src)
+{
+	GdkPixbuf * pixbuf = NULL;
+	gchar *thumbname = rs_thumb_get_name(src);
+
+	if (thumbname)
+	{
+		pixbuf = gdk_pixbuf_new_from_file(thumbname, NULL);
+
+		if (!pixbuf && filetype->thumb)
+			pixbuf = filetype->thumb(src, thumbname);
+
+		g_free(thumbname);
+	}
+
+	return pixbuf;
+}
+
 static void
 rs_init_filetypes(void)
 {
@@ -700,25 +719,20 @@
 }
 
 static GdkPixbuf *
-rs_thumb_gdk(const gchar *src)
+rs_thumb_gdk(const gchar *src, const gchar *thumbname)
 {
 	GdkPixbuf *pixbuf=NULL;
-	gchar *thumbname;
 
-	thumbname = rs_thumb_get_name(src);
-
 	if (thumbname)
 	{
 		if (g_file_test(thumbname, G_FILE_TEST_EXISTS))
 		{
 			pixbuf = gdk_pixbuf_new_from_file(thumbname, NULL);
-			g_free(thumbname);
 		}
 		else
 		{
 			pixbuf = gdk_pixbuf_new_from_file_at_size(src, 128, 128, NULL);
 			gdk_pixbuf_save(pixbuf, thumbname, "png", NULL, NULL);
-			g_free(thumbname);
 		}
 	}
 	else
Index: src/rawstudio.h
===================================================================
--- src/rawstudio.h	(revision 1864)
+++ src/rawstudio.h	(working copy)
@@ -250,12 +250,13 @@
 	const gchar *ext;
 	gchar *description;
 	RS_PHOTO *(*load)(const gchar *, gboolean);
-	GdkPixbuf *(*thumb)(const gchar *);
+	GdkPixbuf *(*thumb)(const gchar *, const gchar *);
 	void (*load_meta)(const gchar *, RS_METADATA *);
 	gboolean (*save)(RS_PHOTO *photo, const gchar *filename, gint filetype, gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot, RS_CMS *cms);
 	struct _rs_filetype *next;
 } RS_FILETYPE;
 
+GdkPixbuf *rs_load_thumb(RS_FILETYPE *filetype, const gchar *src);
 void rs_local_cachedir(gboolean new_value);
 void rs_load_gdk(gboolean new_value);
 void rs_reset(RS_BLOB *rs);
Index: src/rs-batch.c
===================================================================
--- src/rs-batch.c	(revision 1864)
+++ src/rs-batch.c	(working copy)
@@ -229,8 +229,7 @@
 			missing_thumb = gtk_widget_render_icon(GTK_WIDGET(rawstudio_window),
 				GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_DIALOG, NULL);
 
-			if (filetype->thumb)
-				pixbuf = filetype->thumb(filename);
+			pixbuf = rs_load_thumb(filetype, filename);
 			if (pixbuf)
 			{
 				gint w,h,temp,size = 48;
Index: src/panasonic.c
===================================================================
--- src/panasonic.c	(revision 1864)
+++ src/panasonic.c	(working copy)
@@ -149,30 +149,16 @@
 }
 
 GdkPixbuf *
-rs_panasonic_load_thumb(const gchar *src)
+rs_panasonic_load_thumb(const gchar *src, const gchar *thumbname)
 {
 	RS_PHOTO *photo;
 	RS_IMAGE16 *image;
 	GdkPixbuf *pixbuf = NULL;
-	gchar *thumbname;
 	RS_COLOR_TRANSFORM *rct;
 
-	thumbname = rs_thumb_get_name(src);
-	if (thumbname)
-	{
-		if (g_file_test(thumbname, G_FILE_TEST_EXISTS))
-		{
-			pixbuf = gdk_pixbuf_new_from_file(thumbname, NULL);
-			g_free(thumbname);
-			if (pixbuf) return(pixbuf);
-		}
-	}
-
 	photo = rs_panasonic_load_photo(src);
 	if (!photo)
 	{
-		if (thumbname)
-			g_free(thumbname);
 		return NULL;
 	}
 	rs_panasonic_load_meta(src, photo->metadata);
@@ -206,7 +192,6 @@
 	if (thumbname)
 	{
 		gdk_pixbuf_save(pixbuf, thumbname, "png", NULL, NULL);
-		g_free(thumbname);
 	}
 
 	return(pixbuf);
Index: src/tiff-meta.c
===================================================================
--- src/tiff-meta.c	(revision 1864)
+++ src/tiff-meta.c	(working copy)
@@ -603,29 +603,17 @@
 }
 
 GdkPixbuf *
-rs_tiff_load_thumb(const gchar *src)
+rs_tiff_load_thumb(const gchar *src, const gchar *thumbname)
 {
 	RAWFILE *rawfile;
 	guint next, offset;
 	gushort ifd_num;
 	GdkPixbuf *pixbuf=NULL, *pixbuf2=NULL;
 	RS_METADATA *meta = NULL;
-	gchar *thumbname;
 	guint start=0, length=0;
 
 	raw_init();
 
-	thumbname = rs_thumb_get_name(src);
-	if (thumbname)
-	{
-		if (g_file_test(thumbname, G_FILE_TEST_EXISTS))
-		{
-			pixbuf = gdk_pixbuf_new_from_file(thumbname, NULL);
-			g_free(thumbname);
-			if (pixbuf) return(pixbuf);
-		}
-	}
-
 	if (!(rawfile = raw_open_file(src)))
 		return(NULL);
 	raw_init_file_tiff(rawfile, 0);
Index: src/panasonic.h
===================================================================
--- src/panasonic.h	(revision 1864)
+++ src/panasonic.h	(working copy)
@@ -18,5 +18,5 @@
  */
 
 extern void rs_panasonic_load_meta(const gchar *filename, RS_METADATA *meta);
-extern GdkPixbuf *rs_panasonic_load_thumb(const gchar *src);
+extern GdkPixbuf *rs_panasonic_load_thumb(const gchar *src, const gchar *thumbname);
 RS_PHOTO *rs_panasonic_load_photo(const gchar *filename);
Index: src/tiff-meta.h
===================================================================
--- src/tiff-meta.h	(revision 1864)
+++ src/tiff-meta.h	(working copy)
@@ -19,4 +19,4 @@
 
 gboolean raw_ifd_walker(RAWFILE *rawfile, guint offset, RS_METADATA *meta);
 void rs_tiff_load_meta(const gchar *filename, RS_METADATA *meta);
-GdkPixbuf *rs_tiff_load_thumb(const gchar *src);
+GdkPixbuf *rs_tiff_load_thumb(const gchar *src, const gchar *thumbname);
Index: src/mrw-meta.c
===================================================================
--- src/mrw-meta.c	(revision 1864)
+++ src/mrw-meta.c	(working copy)
@@ -93,27 +93,15 @@
 }
 
 GdkPixbuf *
-rs_mrw_load_thumb(const gchar *src)
+rs_mrw_load_thumb(const gchar *src, const gchar *thumbname)
 {
 	RAWFILE *rawfile;
 	GdkPixbuf *pixbuf=NULL, *pixbuf2=NULL;
 	RS_METADATA meta;
-	gchar *thumbname;
 	guint start=0, length=0;
 
 	raw_init();
 
-	thumbname = rs_thumb_get_name(src);
-	if (thumbname)
-	{
-		if (g_file_test(thumbname, G_FILE_TEST_EXISTS))
-		{
-			pixbuf = gdk_pixbuf_new_from_file(thumbname, NULL);
-			g_free(thumbname);
-			if (pixbuf) return(pixbuf);
-		}
-	}
-
 	meta.thumbnail_start = 0;
 	meta.thumbnail_length = 0;
 	meta.preview_start = 0;
Index: src/mrw-meta.h
===================================================================
--- src/mrw-meta.h	(revision 1864)
+++ src/mrw-meta.h	(working copy)
@@ -21,6 +21,6 @@
 #define MRW_META_H
 
 extern void rs_mrw_load_meta(const gchar *filename, RS_METADATA *meta);
-extern GdkPixbuf *rs_mrw_load_thumb(const gchar *src);
+extern GdkPixbuf *rs_mrw_load_thumb(const gchar *src, const gchar *thumbname);
 
 #endif
Index: src/arch-x86.c
===================================================================
--- src/arch-x86.c	(revision 1864)
+++ src/arch-x86.c	(working copy)
@@ -68,7 +68,7 @@
 	}
 
 	/* Black and shift applier */
-	if (cpuflags & _MMX)
+	if (cpuflags & _MMX && 0)
 	{
 		rs_photo_open_dcraw_apply_black_and_shift = rs_photo_open_dcraw_apply_black_and_shift_mmx;
 	}
Index: src/rs-store.c
===================================================================
--- src/rs-store.c	(revision 1864)
+++ src/rs-store.c	(working copy)
@@ -843,9 +843,7 @@
 		{
 			if (filetype->load)
 			{
-				pixbuf = NULL;
-				if (filetype->thumb)
-					pixbuf = filetype->thumb(fullname);
+				pixbuf = rs_load_thumb(filetype, fullname);
 				if (pixbuf==NULL)
 				{
 					pixbuf = missing_thumb;
Index: src/ciff-meta.c
===================================================================
--- src/ciff-meta.c	(revision 1864)
+++ src/ciff-meta.c	(working copy)
@@ -185,27 +185,15 @@
 }
 
 GdkPixbuf *
-rs_ciff_load_thumb(const gchar *src)
+rs_ciff_load_thumb(const gchar *src, const gchar *thumbname)
 {
 	GdkPixbuf *pixbuf = NULL, *pixbuf2 = NULL;
 	gdouble ratio;
 	guint start=0, length=0, root=0;
 	RS_METADATA *m;
 	RAWFILE *rawfile;
-	gchar *thumbname;
 
 	raw_init();
-	
-	thumbname = rs_thumb_get_name(src);
-	if (thumbname)
-	{
-		if (g_file_test(thumbname, G_FILE_TEST_EXISTS))
-		{
-			pixbuf = gdk_pixbuf_new_from_file(thumbname, NULL);
-			g_free(thumbname);
-			if (pixbuf) return(pixbuf);
-		}
-	}
 
 	rawfile = raw_open_file(src);
 	if (!rawfile) return(NULL);
_______________________________________________
Rawstudio-dev mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-dev

Reply via email to