diff options
| -rw-r--r-- | src/cgg.c | 10 | ||||
| -rw-r--r-- | src/jpeg-utils.cpp | 20 | ||||
| -rw-r--r-- | src/jpeg-utils.h | 6 |
3 files changed, 30 insertions, 6 deletions
@@ -26,8 +26,6 @@ #include <libxml/xmlmemory.h> -#include <wand/magick-wand.h> - #include <config.h> #include "setup.h" @@ -35,6 +33,7 @@ #include "stats.h" #include "atom-writer.h" #include "gallery-utils.h" +#include "jpeg-utils.h" @@ -129,8 +128,8 @@ main (int argc, char* argv[]) g_thread_init (NULL); #endif - /* Initialize ImageMagick at this point, for multithreading safety */ - MagickWandGenesis(); + /* Initialize imaging libraries */ + init_jpeg_utils (); /* Parse commandline */ if (! parse_cmd (argc, argv)) @@ -261,8 +260,7 @@ main (int argc, char* argv[]) printf ("%d errors occured.\n", stats_errors); } - - MagickWandTerminus(); + destroy_jpeg_utils (); /* Cleanup function for the XML library. */ xmlCleanupParser(); diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp index 965d751..2d85d3b 100644 --- a/src/jpeg-utils.cpp +++ b/src/jpeg-utils.cpp @@ -35,6 +35,26 @@ struct ExifDataPrivate { }; +/* + * Thread-safe ImageMagick and exiv2 libraries initialization and cleanup + */ +void +init_jpeg_utils (void) +{ + MagickWandGenesis(); + /* http://dev.exiv2.org/projects/exiv2/wiki/Thread_safety */ + /* https://bugs.kde.org/show_bug.cgi?id=166424 */ + Exiv2::XmpParser::initialize(); +} + +void +destroy_jpeg_utils (void) +{ + Exiv2::XmpParser::terminate(); + MagickWandTerminus(); +} + + static void shift_time (struct tm *tm, int offset_min) { diff --git a/src/jpeg-utils.h b/src/jpeg-utils.h index 9e4c729..bddb096 100644 --- a/src/jpeg-utils.h +++ b/src/jpeg-utils.h @@ -63,6 +63,12 @@ typedef struct { /* + * Thread-safe ImageMagick and exiv2 libraries initialization and cleanup + */ +void init_jpeg_utils (void); +void destroy_jpeg_utils (void); + +/* * EXIF and IPTC info retrieval, keeps the source file open until freed */ ExifData * read_exif (const gchar *filename); |
