# HG changeset patch # User nadvornik # Date 1222541312 0 # Node ID 95c418661be85a23c94e96e7778c7aa29bfb9c3c # Parent 81ec7d977d5f3990afb58c772e431dab42121ea7 updated preview loader to work with current svn version of libexiv2 diff -r 81ec7d977d5f -r 95c418661be8 src/exiv2.cc --- a/src/exiv2.cc Wed Sep 10 20:37:30 2008 +0000 +++ b/src/exiv2.cc Sat Sep 27 18:48:32 2008 +0000 @@ -609,19 +609,28 @@ guchar *exif_get_preview(ExifData *exif, guint *data_len) { if (!exif) return NULL; + + const char* path = exif->image->io().path().c_str(); + /* given image pathname, first do simple (and fast) file extension test */ + if (!filter_file_class(path, FORMAT_CLASS_RAWIMAGE)) return NULL; + try { - Exiv2::PreviewImageList list(*exif->image); - list.read(); + Exiv2::PreviewImageLoader loader(*exif->image); + + Exiv2::PreviewPropertiesList list = loader.getPreviewPropertiesList(); - Exiv2::PreviewImageList::iterator pos = list.begin(); - if (pos != list.end()) + if (!list.empty()) { - Exiv2::DataBuf buf = pos->copy(); + Exiv2::PreviewPropertiesList::iterator pos = --list.end(); + + Exiv2::PreviewImage image = loader.getPreviewImage(*pos); + + Exiv2::DataBuf &buf = image.data(); std::pair p = buf.release(); *data_len = p.second; - return p.first; + return p.first; } return NULL; } @@ -680,7 +689,7 @@ const char* path = exif->image->io().path().c_str(); /* given image pathname, first do simple (and fast) file extension test */ - if (!filter_file_class(path, FORMAT_CLASS_RAWIMAGE)) return 0; + if (!filter_file_class(path, FORMAT_CLASS_RAWIMAGE)) return NULL; try { struct stat st; @@ -696,20 +705,20 @@ fd = open(path, O_RDONLY); if (fd == -1) { - return 0; + return NULL; } if (fstat(fd, &st) == -1) { close(fd); - return 0; + return NULL; } map_len = st.st_size; map_data = (guchar *) mmap(0, map_len, PROT_READ, MAP_PRIVATE, fd, 0); close(fd); if (map_data == MAP_FAILED) { - return 0; + return NULL; } *data_len = map_len - offset; ud = g_new(UnmapData, 1);