[maemo-commits] [maemo-commits] r16691 - in projects/haf/trunk/hildon-thumbnail: . daemon daemon/plugins
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Mon Nov 17 12:16:17 EET 2008
- Previous message: [maemo-commits] r16690 - in projects/haf/trunk/hildon-thumbnail: . daemon/plugins
- Next message: [maemo-commits] r16692 - in projects/haf/trunk/hildon-thumbnail: . daemon daemon/plugins thumbs
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: pvanhoof Date: 2008-11-17 12:16:16 +0200 (Mon, 17 Nov 2008) New Revision: 16691 Modified: projects/haf/trunk/hildon-thumbnail/ChangeLog projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.c projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.h projects/haf/trunk/hildon-thumbnail/daemon/plugins/epeg-plugin.c projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-jpeg-out-plugin.c projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-plugin.c projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-png-out-plugin.c projects/haf/trunk/hildon-thumbnail/daemon/plugins/gstreamer-video-plugin.c Log: 2008-11-17 Philip Van Hoof <philip at codeminded.be> * daemon/hildon-thumbnail-plugin.h * daemon/plugins/gdkpixbuf-plugin.c * daemon/plugins/gdkpixbuf-png-out-plugin.c * daemon/plugins/gdkpixbuf-jpeg-out-plugin.c * daemon/plugins/gstreamer-video-plugin.c * daemon/plugins/epeg-plugin.c * daemon/hildon-thumbnail-plugin.c: Don't recreate based on modified time Modified: projects/haf/trunk/hildon-thumbnail/ChangeLog =================================================================== --- projects/haf/trunk/hildon-thumbnail/ChangeLog 2008-11-17 09:42:04 UTC (rev 16690) +++ projects/haf/trunk/hildon-thumbnail/ChangeLog 2008-11-17 10:16:16 UTC (rev 16691) @@ -1,5 +1,15 @@ 2008-11-17 Philip Van Hoof <philip at codeminded.be> + * daemon/hildon-thumbnail-plugin.h + * daemon/plugins/gdkpixbuf-plugin.c + * daemon/plugins/gdkpixbuf-png-out-plugin.c + * daemon/plugins/gdkpixbuf-jpeg-out-plugin.c + * daemon/plugins/gstreamer-video-plugin.c + * daemon/plugins/epeg-plugin.c + * daemon/hildon-thumbnail-plugin.c: Don't recreate based on modified time + +2008-11-17 Philip Van Hoof <philip at codeminded.be> + * daemon/plugins/gstreamer-video-plugin.c: Fixed a criticial warning in the video thumbnailer plugin Modified: projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.c =================================================================== --- projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.c 2008-11-17 09:42:04 UTC (rev 16690) +++ projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.c 2008-11-17 10:16:16 UTC (rev 16691) @@ -77,6 +77,55 @@ return module; } + + +typedef gboolean (*NeedsOutFunc) (const guchar *rgb8_pixmap, + guint width, guint height, + guint rowstride, guint bits_per_sample, + OutType type, + guint64 mtime, + const gchar *uri); + + +gboolean +hildon_thumbnail_outplugins_needs_out (const guchar *rgb8_pixmap, + guint width, guint height, + guint rowstride, guint bits_per_sample, + OutType type, + guint64 mtime, + const gchar *uri) +{ + GList *copy = g_list_copy (outplugs); + GQuark domain; + gboolean retval = FALSE; + + g_static_rec_mutex_lock (&mutex); + copy = g_list_copy (outplugs); + + while (copy && !retval) { + GModule *module = copy->data; + NeedsOutFunc needs_out_func; + + if (g_module_symbol (module, "hildon_thumbnail_outplugin_needs_out", (gpointer *) &needs_out_func)) { + IsActiveFunc isac_func; + if (g_module_symbol (module, "hildon_thumbnail_outplugin_is_active", (gpointer *) &isac_func)) { + if (isac_func ()) { + retval = needs_out_func (rgb8_pixmap, width, height, rowstride, bits_per_sample, type, mtime, uri); + } + } + } + + copy = g_list_next (copy); + } + + g_static_rec_mutex_unlock (&mutex); + + g_list_free (copy); + + return retval; +} + + typedef void (*OutFunc) (const guchar *rgb8_pixmap, guint width, guint height, guint rowstride, guint bits_per_sample, @@ -97,7 +146,6 @@ GList *copy = g_list_copy (outplugs); GString *errors = NULL; GQuark domain; - gboolean dounl = TRUE; g_static_rec_mutex_lock (&mutex); copy = g_list_copy (outplugs); Modified: projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.h =================================================================== --- projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.h 2008-11-17 09:42:04 UTC (rev 16690) +++ projects/haf/trunk/hildon-thumbnail/daemon/hildon-thumbnail-plugin.h 2008-11-17 10:16:16 UTC (rev 16691) @@ -65,6 +65,12 @@ guint64 mtime, const gchar *uri, GError **error); +gboolean hildon_thumbnail_outplugins_needs_out (const guchar *rgb8_pixmap, + guint width, guint height, + guint rowstride, guint bits_per_sample, + OutType type, + guint64 mtime, + const gchar *uri); G_END_DECLS Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/epeg-plugin.c =================================================================== --- projects/haf/trunk/hildon-thumbnail/daemon/plugins/epeg-plugin.c 2008-11-17 09:42:04 UTC (rev 16690) +++ projects/haf/trunk/hildon-thumbnail/daemon/plugins/epeg-plugin.c 2008-11-17 10:16:16 UTC (rev 16691) @@ -160,6 +160,10 @@ GError *nerror = NULL; guint ow, oh; + const guchar *rgb8_pixels; + guint width; guint height; + guint rowstride; + file = g_file_new_for_uri (uri); path = g_file_get_path (file); @@ -216,31 +220,61 @@ destroy_pixbuf, im); } - hildon_thumbnail_outplugins_do_out (gdk_pixbuf_get_pixels (pixbuf_large), - gdk_pixbuf_get_width (pixbuf_large), - gdk_pixbuf_get_height (pixbuf_large), - gdk_pixbuf_get_rowstride (pixbuf_large), - 8, - OUTTYPE_LARGE, - mtime, - uri, - &nerror); + rgb8_pixels = gdk_pixbuf_get_pixels (pixbuf_large); + width = gdk_pixbuf_get_width (pixbuf_large); + height = gdk_pixbuf_get_height (pixbuf_large); + rowstride = gdk_pixbuf_get_rowstride (pixbuf_large); + if (hildon_thumbnail_outplugins_needs_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_LARGE, + mtime, + uri)) { + + hildon_thumbnail_outplugins_do_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_LARGE, + mtime, + uri, + &nerror); + } + if (nerror) goto nerror_handler; pixbuf_cropped = crop_resize (pixbuf_large, 124, 124); - hildon_thumbnail_outplugins_do_out (gdk_pixbuf_get_pixels (pixbuf_cropped), - gdk_pixbuf_get_width (pixbuf_cropped), - gdk_pixbuf_get_height (pixbuf_cropped), - gdk_pixbuf_get_rowstride (pixbuf_cropped), - 8, - OUTTYPE_CROPPED, - mtime, - uri, - &nerror); + rgb8_pixels = gdk_pixbuf_get_pixels (pixbuf_cropped); + width = gdk_pixbuf_get_width (pixbuf_cropped); + height = gdk_pixbuf_get_height (pixbuf_cropped); + rowstride = gdk_pixbuf_get_rowstride (pixbuf_cropped); + if (hildon_thumbnail_outplugins_needs_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_CROPPED, + mtime, + uri)) { + + hildon_thumbnail_outplugins_do_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_CROPPED, + mtime, + uri, + &nerror); + } + g_object_unref (pixbuf_cropped); if (nerror) @@ -250,15 +284,30 @@ 128, 128, GDK_INTERP_HYPER); - hildon_thumbnail_outplugins_do_out (gdk_pixbuf_get_pixels (pixbuf_normal), - gdk_pixbuf_get_width (pixbuf_normal), - gdk_pixbuf_get_height (pixbuf_normal), - gdk_pixbuf_get_rowstride (pixbuf_normal), + rgb8_pixels = gdk_pixbuf_get_pixels (pixbuf_normal); + width = gdk_pixbuf_get_width (pixbuf_normal); + height = gdk_pixbuf_get_height (pixbuf_normal); + rowstride = gdk_pixbuf_get_rowstride (pixbuf_normal); + + if (hildon_thumbnail_outplugins_needs_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_NORMAL, + mtime, + uri)) { + + hildon_thumbnail_outplugins_do_out (rgb8_pixels, + width, + height, + rowstride, 8, OUTTYPE_NORMAL, mtime, uri, &nerror); + } g_object_unref (pixbuf_normal); Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-jpeg-out-plugin.c =================================================================== --- projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-jpeg-out-plugin.c 2008-11-17 09:42:04 UTC (rev 16690) +++ projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-jpeg-out-plugin.c 2008-11-17 10:16:16 UTC (rev 16691) @@ -29,6 +29,9 @@ #include "config.h" #endif +#include <sys/types.h> +#include <utime.h> + #include <string.h> #include <glib.h> #include <gio/gio.h> @@ -43,6 +46,50 @@ static gboolean is_active = TRUE; static GFileMonitor *monitor = NULL; + +gboolean +hildon_thumbnail_outplugin_needs_out (const guchar *rgb8_pixmap, + guint width, guint height, + guint rowstride, guint bits_per_sample, + OutType type, + guint64 mtime, + const gchar *uri) +{ + gboolean retval; + gchar *large, *normal, *cropped, *filen; + + hildon_thumbnail_util_get_thumb_paths (uri, &large, &normal, &cropped, + NULL, NULL, NULL, FALSE); + + switch (type) { + case OUTTYPE_LARGE: + filen = large; + break; + case OUTTYPE_NORMAL: + filen = normal; + break; + case OUTTYPE_CROPPED: + filen = cropped; + break; + } + + retval = FALSE; + + if (g_file_test (filen, G_FILE_TEST_EXISTS)) { + struct stat st; + g_stat (filen, &st); + if (st.st_mtime != mtime) + retval = TRUE; + } else + retval = TRUE; + + g_free (normal); + g_free (large); + g_free (cropped); + + return retval; +} + void hildon_thumbnail_outplugin_out (const guchar *rgb8_pixmap, guint width, guint height, @@ -54,6 +101,7 @@ { GdkPixbuf *pixbuf; gchar *large, *normal, *cropped, *filen; + struct utimbuf buf; hildon_thumbnail_util_get_thumb_paths (uri, &large, &normal, &cropped, NULL, NULL, NULL, FALSE); @@ -80,6 +128,10 @@ g_object_unref (pixbuf); + buf.actime = buf.modtime = mtime; + + utime (filen, &buf); + g_free (normal); g_free (large); g_free (cropped); Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-plugin.c =================================================================== --- projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-plugin.c 2008-11-17 09:42:04 UTC (rev 16690) +++ projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-plugin.c 2008-11-17 10:16:16 UTC (rev 16691) @@ -176,7 +176,11 @@ GdkPixbuf *pixbuf, *pixbuf_cropped; guint64 mtime; + const guchar *rgb8_pixels; + guint width; guint height; + guint rowstride; + file = g_file_new_for_uri (uri); info = g_file_query_info (file, G_FILE_ATTRIBUTE_TIME_MODIFIED, @@ -202,16 +206,31 @@ if (nerror) goto nerror_handler; - hildon_thumbnail_outplugins_do_out (gdk_pixbuf_get_pixels (pixbuf_large), - gdk_pixbuf_get_width (pixbuf_large), - gdk_pixbuf_get_height (pixbuf_large), - gdk_pixbuf_get_rowstride (pixbuf_large), - 8, - OUTTYPE_LARGE, - mtime, - uri, - &nerror); + rgb8_pixels = gdk_pixbuf_get_pixels (pixbuf_large); + width = gdk_pixbuf_get_width (pixbuf_large); + height = gdk_pixbuf_get_height (pixbuf_large); + rowstride = gdk_pixbuf_get_rowstride (pixbuf_large); + if (hildon_thumbnail_outplugins_needs_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_LARGE, + mtime, + uri)) { + + hildon_thumbnail_outplugins_do_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_LARGE, + mtime, + uri, + &nerror); + } + g_object_unref (pixbuf_large); if (nerror) @@ -231,15 +250,30 @@ if (nerror) goto nerror_handler; - hildon_thumbnail_outplugins_do_out (gdk_pixbuf_get_pixels (pixbuf_normal), - gdk_pixbuf_get_width (pixbuf_normal), - gdk_pixbuf_get_height (pixbuf_normal), - gdk_pixbuf_get_rowstride (pixbuf_normal), + rgb8_pixels = gdk_pixbuf_get_pixels (pixbuf_normal); + width = gdk_pixbuf_get_width (pixbuf_normal); + height = gdk_pixbuf_get_height (pixbuf_normal); + rowstride = gdk_pixbuf_get_rowstride (pixbuf_normal); + + if (hildon_thumbnail_outplugins_needs_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_NORMAL, + mtime, + uri)) { + + hildon_thumbnail_outplugins_do_out (rgb8_pixels, + width, + height, + rowstride, 8, OUTTYPE_NORMAL, mtime, uri, &nerror); + } g_object_unref (pixbuf_normal); @@ -262,16 +296,32 @@ g_object_unref (pixbuf); - hildon_thumbnail_outplugins_do_out (gdk_pixbuf_get_pixels (pixbuf_cropped), - gdk_pixbuf_get_width (pixbuf_cropped), - gdk_pixbuf_get_height (pixbuf_cropped), - gdk_pixbuf_get_rowstride (pixbuf_cropped), - 8, - OUTTYPE_CROPPED, - mtime, - uri, - &nerror); + rgb8_pixels = gdk_pixbuf_get_pixels (pixbuf_cropped); + width = gdk_pixbuf_get_width (pixbuf_cropped); + height = gdk_pixbuf_get_height (pixbuf_cropped); + rowstride = gdk_pixbuf_get_rowstride (pixbuf_cropped); + if (hildon_thumbnail_outplugins_needs_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_CROPPED, + mtime, + uri)) { + + hildon_thumbnail_outplugins_do_out (rgb8_pixels, + width, + height, + rowstride, + 8, + OUTTYPE_CROPPED, + mtime, + uri, + &nerror); + } + + g_object_unref (pixbuf_cropped); nerror_handler: Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-png-out-plugin.c =================================================================== --- projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-png-out-plugin.c 2008-11-17 09:42:04 UTC (rev 16690) +++ projects/haf/trunk/hildon-thumbnail/daemon/plugins/gdkpixbuf-png-out-plugin.c 2008-11-17 10:16:16 UTC (rev 16691) @@ -29,6 +29,9 @@ #include "config.h" #endif +#include <sys/types.h> +#include <utime.h> + #include <string.h> #include <glib.h> #include <gio/gio.h> @@ -49,6 +52,50 @@ #define MTIME_OPTION HILDON_THUMBNAIL_OPTION_PREFIX "MTime" #define SOFTWARE_OPTION "tEXt::Software" + +gboolean +hildon_thumbnail_outplugin_needs_out (const guchar *rgb8_pixmap, + guint width, guint height, + guint rowstride, guint bits_per_sample, + OutType type, + guint64 mtime, + const gchar *uri) +{ + gboolean retval; + gchar *large, *normal, *cropped, *filen; + + hildon_thumbnail_util_get_thumb_paths (uri, &large, &normal, &cropped, + NULL, NULL, NULL, TRUE); + + switch (type) { + case OUTTYPE_LARGE: + filen = large; + break; + case OUTTYPE_NORMAL: + filen = normal; + break; + case OUTTYPE_CROPPED: + filen = cropped; + break; + } + + retval = FALSE; + + if (g_file_test (filen, G_FILE_TEST_EXISTS)) { + struct stat st; + g_stat (filen, &st); + if (st.st_mtime != mtime) + retval = TRUE; + } else + retval = TRUE; + + g_free (normal); + g_free (large); + g_free (cropped); + + return retval; +} + void hildon_thumbnail_outplugin_out (const guchar *rgb8_pixmap, guint width, guint height, @@ -61,6 +108,7 @@ GdkPixbuf *pixbuf; gchar *large, *normal, *cropped, *filen; char mtime_str[64]; + struct utimbuf buf; const char *default_keys[] = { URI_OPTION, @@ -99,13 +147,17 @@ g_sprintf (mtime_str, "%lu", mtime); - gdk_pixbuf_savev (pixbuf, filen, "png", + gdk_pixbuf_savev (pixbuf, filen, "png", (char **) default_keys, (char **) default_values, error); g_object_unref (pixbuf); + buf.actime = buf.modtime = mtime; + + utime (filen, &buf); + g_free (normal); g_free (large); g_free (cropped); Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/gstreamer-video-plugin.c =================================================================== --- projects/haf/trunk/hildon-thumbnail/daemon/plugins/gstreamer-video-plugin.c 2008-11-17 09:42:04 UTC (rev 16690) +++ projects/haf/trunk/hildon-thumbnail/daemon/plugins/gstreamer-video-plugin.c 2008-11-17 10:16:16 UTC (rev 16691) @@ -92,20 +92,30 @@ { GError *error = NULL; - hildon_thumbnail_outplugins_do_out (data, - width, - height, - width*3, - bpp/3, - target, - mtime, - uri, - &error); + if (hildon_thumbnail_outplugins_needs_out (data, + width, + height, + width*3, + bpp/3, + target, + mtime, + uri)) { - if (error) { - g_warning("%s\n", error->message); - g_error_free(error); - return FALSE; + hildon_thumbnail_outplugins_do_out (data, + width, + height, + width*3, + bpp/3, + target, + mtime, + uri, + &error); + + if (error) { + g_warning("%s\n", error->message); + g_error_free(error); + return FALSE; + } } return TRUE;
- Previous message: [maemo-commits] r16690 - in projects/haf/trunk/hildon-thumbnail: . daemon/plugins
- Next message: [maemo-commits] r16692 - in projects/haf/trunk/hildon-thumbnail: . daemon daemon/plugins thumbs
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]