Hello community,
here is the log from the commit of package kdegraphics3
checked in at Thu Apr 12 18:29:14 CEST 2007.
--------
--- KDE/kdegraphics3/kdegraphics3.changes 2007-04-05 00:14:19.000000000 +0200
+++ /mounts/work_src_done/STABLE/kdegraphics3/kdegraphics3.changes 2007-04-12 17:30:43.000000000 +0200
@@ -1,0 +2,5 @@
+Thu Apr 12 17:29:44 CEST 2007 - dmueller@suse.de
+
+- update better exif patch to use libexiv2 (#257519)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kdegraphics3.spec ++++++
--- /var/tmp/diff_new_pack.Ln9200/_old 2007-04-12 18:27:22.000000000 +0200
+++ /var/tmp/diff_new_pack.Ln9200/_new 2007-04-12 18:27:22.000000000 +0200
@@ -11,12 +11,9 @@
# norootforbuild
Name: kdegraphics3
-BuildRequires: OpenEXR-devel fribidi-devel giflib-devel imlib-config imlib-devel kdebase3 kdelibs3-devel kdelibs3-devel-doc libjasper net-snmp-devel qt3-devel-doc sane te_ams te_kpath te_latex
-%if %suse_version > 1020
-BuildRequires: libexif-devel
-%else
-BuildRequires: libexif
-%endif
+BuildRequires: OpenEXR-devel fribidi-devel giflib-devel imlib-config imlib-devel kdebase3 kdelibs3-devel
+BuildRequires: kdelibs3-devel-doc libjasper net-snmp-devel qt3-devel-doc sane te_ams te_kpath te_latex
+BuildRequires: libexiv2-devel
%if %suse_version > 930
BuildRequires: poppler-devel poppler-qt
%endif
@@ -34,7 +31,7 @@
Requires: kdelibs3 >= %( echo `rpm -q --queryformat '%{VERSION}' kdelibs3` )
Summary: Base Libraries for KDE Graphics Applications
Version: 3.5.6
-Release: 18
+Release: 20
Source0: kdegraphics-%{version}.tar.bz2
Patch0: 3_5_BRANCH.diff
Patch1: prefer-kpdf.diff
@@ -652,6 +649,8 @@
/opt/kde3/include/*.h
%changelog
+* Thu Apr 12 2007 - dmueller@suse.de
+- update better exif patch to use libexiv2 (#257519)
* Thu Apr 05 2007 - dmueller@suse.de
- build with -fno-strict-aliasing
* Mon Mar 12 2007 - stbinner@suse.de
++++++ better-exif.patch ++++++
--- /var/tmp/diff_new_pack.Ln9200/_old 2007-04-12 18:27:22.000000000 +0200
+++ /var/tmp/diff_new_pack.Ln9200/_new 2007-04-12 18:27:22.000000000 +0200
@@ -1,206 +1,28 @@
---- kfile-plugins/jpeg/kfile_jpeg.desktop.sav 2006-10-04 18:04:46.000000000 +0200
-+++ kfile-plugins/jpeg/kfile_jpeg.desktop 2007-01-16 15:42:21.000000000 +0100
-@@ -57,5 +57,5 @@ Name[zu]=Ulwazi lwe-JPEG EXIF
- ServiceTypes=KFilePlugin
- X-KDE-Library=kfile_jpeg
- MimeType=image/jpeg
--PreferredItems=User comment,CreationDate,CreationTime,Dimensions,Exposure time,JPEG quality,Comment
-+PreferredItems=UserComment,DateTime,PixelXDimension,PixelYDimension,ExposureTime,Compression,Flash
- SupportsThumbnail=true
---- kfile-plugins/jpeg/kfile_jpeg.h.sav 2007-01-16 15:20:01.000000000 +0100
-+++ kfile-plugins/jpeg/kfile_jpeg.h 2007-01-16 15:29:48.000000000 +0100
-@@ -37,6 +37,7 @@ public:
- QObject* parent, const char* name) const;
-
- private:
-+ void insertValue( KFileMetaInfoGroup& exifGroup, int index, const QString& value );
- QDateTime parseDateTime( const QString& string );
- };
-
---- kfile-plugins/jpeg/Makefile.am.sav 2007-01-16 15:20:01.000000000 +0100
-+++ kfile-plugins/jpeg/Makefile.am 2007-01-16 15:29:48.000000000 +0100
-@@ -6,12 +6,12 @@ KDE_CXXFLAGS = $(USE_EXCEPTIONS)
- INCLUDES = $(all_includes)
-
- # these are the headers for your project
--noinst_HEADERS = kfile_jpeg.h exif.h
-+noinst_HEADERS = kfile_jpeg.h
+--- kfile-plugins/jpeg/kfile_jpeg.cpp
++++ kfile-plugins/jpeg/kfile_jpeg.cpp
+@@ -19,7 +19,6 @@
+ *
+ */
- kde_module_LTLIBRARIES = kfile_jpeg.la
-
--kfile_jpeg_la_SOURCES = kfile_jpeg.cpp exif.cpp kfile_setcomment.cpp
--kfile_jpeg_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
-+kfile_jpeg_la_SOURCES = kfile_jpeg.cpp
-+kfile_jpeg_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) -lexif
- kfile_jpeg_la_LIBADD = $(LIB_KIO)
+-
+ #include
+ #include "kfile_jpeg.h"
- # let automoc handle all of the meta source files (moc)
---- kfile-plugins/jpeg/kfile_jpeg.cpp.sav 2007-01-16 15:20:01.000000000 +0100
-+++ kfile-plugins/jpeg/kfile_jpeg.cpp 2007-01-16 15:48:31.000000000 +0100
-@@ -36,7 +36,9 @@
+@@ -36,7 +35,9 @@
#include
#include
-#include "exif.h"
-+#include
-+#include
-+
++#include
++#include
++#include
#define EXIFGROUP "Jpeg EXIF Data"
-@@ -44,107 +46,159 @@ typedef KGenericFactory<KJpegPlugin> Jpe
+@@ -64,92 +65,25 @@ KJpegPlugin::KJpegPlugin(QObject *parent
+ KFileMimeTypeInfo::Addable |
+ KFileMimeTypeInfo::MultiLine );
- K_EXPORT_COMPONENT_FACTORY(kfile_jpeg, JpegFactory("kfile_jpeg"))
-
-+namespace
-+{
-+struct Tag
-+ {
-+ ExifTag tag;
-+ QVariant::Type type;
-+ KFileMimeTypeInfo::Hint hint;
-+ KFileMimeTypeInfo::Unit unit;
-+ };
-+};
-+#define NoHint KFileMimeTypeInfo::NoHint
-+#define NoUnit KFileMimeTypeInfo::NoUnit
-+static const Tag tags[] =
-+{ // list extracted from 0.6.14
-+ { EXIF_TAG_INTEROPERABILITY_INDEX, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_INTEROPERABILITY_VERSION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_NEW_SUBFILE_TYPE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_IMAGE_WIDTH, QVariant::Double, KFileMimeTypeInfo::Width, NoUnit },
-+ { EXIF_TAG_IMAGE_LENGTH, QVariant::Double, KFileMimeTypeInfo::Height, NoUnit },
-+ { EXIF_TAG_BITS_PER_SAMPLE, QVariant::Double, NoHint, NoUnit },
-+ { EXIF_TAG_COMPRESSION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_PHOTOMETRIC_INTERPRETATION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FILL_ORDER, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_DOCUMENT_NAME, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_IMAGE_DESCRIPTION, QVariant::String, KFileMimeTypeInfo::Description, NoUnit },
-+ { EXIF_TAG_MAKE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_MODEL, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_STRIP_OFFSETS, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_ORIENTATION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SAMPLES_PER_PIXEL, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_ROWS_PER_STRIP, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_STRIP_BYTE_COUNTS, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_X_RESOLUTION, QVariant::Double, NoHint, NoUnit },
-+ { EXIF_TAG_Y_RESOLUTION, QVariant::Double, NoHint, NoUnit },
-+ { EXIF_TAG_PLANAR_CONFIGURATION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_RESOLUTION_UNIT, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_TRANSFER_FUNCTION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SOFTWARE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_DATE_TIME, QVariant::DateTime, NoHint, NoUnit },
-+ { EXIF_TAG_ARTIST, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_WHITE_POINT, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_PRIMARY_CHROMATICITIES, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_TRANSFER_RANGE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SUB_IFDS, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_JPEG_PROC, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_JPEG_INTERCHANGE_FORMAT, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_YCBCR_COEFFICIENTS, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_YCBCR_SUB_SAMPLING, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_YCBCR_POSITIONING, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_REFERENCE_BLACK_WHITE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_XML_PACKET, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_RELATED_IMAGE_FILE_FORMAT, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_RELATED_IMAGE_WIDTH, QVariant::Double, NoHint, NoUnit },
-+ { EXIF_TAG_RELATED_IMAGE_LENGTH, QVariant::Double, NoHint, NoUnit },
-+ { EXIF_TAG_CFA_REPEAT_PATTERN_DIM, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_CFA_PATTERN, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_BATTERY_LEVEL, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_COPYRIGHT, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_EXPOSURE_TIME, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FNUMBER, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_IPTC_NAA, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_IMAGE_RESOURCES, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_EXIF_IFD_POINTER, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_INTER_COLOR_PROFILE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_EXPOSURE_PROGRAM, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SPECTRAL_SENSITIVITY, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_GPS_INFO_IFD_POINTER, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_ISO_SPEED_RATINGS, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_OECF, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_EXIF_VERSION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_DATE_TIME_ORIGINAL, QVariant::DateTime, NoHint, NoUnit },
-+ { EXIF_TAG_DATE_TIME_DIGITIZED, QVariant::DateTime, NoHint, NoUnit },
-+ { EXIF_TAG_COMPONENTS_CONFIGURATION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_COMPRESSED_BITS_PER_PIXEL, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SHUTTER_SPEED_VALUE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_APERTURE_VALUE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_BRIGHTNESS_VALUE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_EXPOSURE_BIAS_VALUE, QVariant::Double, NoHint, NoUnit },
-+ { EXIF_TAG_MAX_APERTURE_VALUE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SUBJECT_DISTANCE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_METERING_MODE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_LIGHT_SOURCE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FLASH, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FOCAL_LENGTH, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SUBJECT_AREA, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_TIFF_EP_STANDARD_ID, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_MAKER_NOTE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_USER_COMMENT, QVariant::String, KFileMimeTypeInfo::Description, NoUnit },
-+ { EXIF_TAG_SUB_SEC_TIME, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SUB_SEC_TIME_ORIGINAL, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SUB_SEC_TIME_DIGITIZED, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FLASH_PIX_VERSION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_COLOR_SPACE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_PIXEL_X_DIMENSION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_PIXEL_Y_DIMENSION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_RELATED_SOUND_FILE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_INTEROPERABILITY_IFD_POINTER, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FLASH_ENERGY, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SPATIAL_FREQUENCY_RESPONSE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FOCAL_PLANE_X_RESOLUTION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FOCAL_PLANE_Y_RESOLUTION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FOCAL_PLANE_RESOLUTION_UNIT, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SUBJECT_LOCATION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_EXPOSURE_INDEX, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SENSING_METHOD, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_FILE_SOURCE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SCENE_TYPE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_NEW_CFA_PATTERN, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_CUSTOM_RENDERED, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_EXPOSURE_MODE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_WHITE_BALANCE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_DIGITAL_ZOOM_RATIO, QVariant::Double, NoHint, NoUnit },
-+ { EXIF_TAG_FOCAL_LENGTH_IN_35MM_FILM, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SCENE_CAPTURE_TYPE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_GAIN_CONTROL, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_CONTRAST, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SATURATION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SHARPNESS, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_DEVICE_SETTING_DESCRIPTION, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_SUBJECT_DISTANCE_RANGE, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_IMAGE_UNIQUE_ID, QVariant::String, NoHint, NoUnit },
-+ { EXIF_TAG_GAMMA, QVariant::String, NoHint, NoUnit }
-+};
-+static const int NUM_TAGS = sizeof( tags ) / sizeof( tags[ 0 ] );
-+
- KJpegPlugin::KJpegPlugin(QObject *parent, const char *name,
- const QStringList &args )
- : KFilePlugin(parent, name, args)
- {
-- kdDebug(7034) << "jpeg plugin\n";
-+ kdDebug(7034) << "JPEG Plugin" << endl;
-
- //
- // define all possible meta info items
- //
-- KFileMimeTypeInfo *info = addMimeTypeInfo("image/jpeg");
-- KFileMimeTypeInfo::GroupInfo *exifGroup = addGroupInfo( info, EXIFGROUP,
-+ KFileMimeTypeInfo *info = addMimeTypeInfo("image/jpeg");
-+ KFileMimeTypeInfo::GroupInfo *exifGroup = addGroupInfo( info, EXIFGROUP,
- i18n("JPEG Exif") );
-- KFileMimeTypeInfo::ItemInfo* item;
--
-- item = addItemInfo( exifGroup, "Comment", i18n("Comment"), QVariant::String);
-- setAttributes( item,
-- KFileMimeTypeInfo::Modifiable |
-- KFileMimeTypeInfo::Addable |
-- KFileMimeTypeInfo::MultiLine );
--
- item = addItemInfo( exifGroup, "Manufacturer", i18n("Camera Manufacturer"),
- QVariant::String );
-
@@ -216,11 +38,11 @@
- item = addItemInfo( exifGroup, "CreationTime", i18n("Creation Time"),
- QVariant::Time );
-
-- item = addItemInfo( exifGroup, "Dimensions", i18n("Dimensions"),
-- QVariant::Size );
-- setHint( item, KFileMimeTypeInfo::Size );
-- setUnit( item, KFileMimeTypeInfo::Pixels );
--
+ item = addItemInfo( exifGroup, "Dimensions", i18n("Dimensions"),
+ QVariant::Size );
+ setHint( item, KFileMimeTypeInfo::Size );
+ setUnit( item, KFileMimeTypeInfo::Pixels );
+
- item = addItemInfo( exifGroup, "Orientation", i18n("Orientation"),
- QVariant::Int );
-
@@ -265,7 +87,14 @@
-
- item = addItemInfo( exifGroup, "ISO equiv.", i18n("ISO Equiv."),
- QVariant::String );
--
++ for (const Exiv2::TagInfo* taglist = Exiv2::ExifTags::ifdTagList();
++ taglist->tag_ != 0xffff; taglist++)
++ addItemInfo (exifGroup, taglist->title_, taglist->title_, QVariant::String);
++
++ for (const Exiv2::TagInfo* taglist = Exiv2::ExifTags::exifTagList();
++ taglist->tag_ != 0xffff; taglist++)
++ addItemInfo (exifGroup, taglist->title_, taglist->title_, QVariant::String);
+
- item = addItemInfo( exifGroup, "JPEG quality", i18n("JPEG Quality"),
- QVariant::String );
-
@@ -282,39 +111,54 @@
-
-// ###
-// exifGroup.setSupportsVariableKeys(true);
-+ for( int i = 0;
-+ i < NUM_TAGS;
-+ ++i ) {
-+ const char* name = exif_tag_get_name( tags[ i ].tag );
-+ const char* title = exif_tag_get_title( tags[ i ].tag );
-+ if( name != NULL && title != NULL ) {
-+ // tranlations for i18n should come from libexif
-+ KFileMimeTypeInfo::ItemInfo* item = addItemInfo( exifGroup, name,
-+ i18n( title ), tags[ i ].type );
-+ if( tags[ i ].unit != KFileMimeTypeInfo::NoUnit )
-+ setUnit( item, tags[ i ].unit );
-+ if( tags[ i ].hint != KFileMimeTypeInfo::NoHint )
-+ setHint( item, tags[ i ].hint );
-+ }
-+ }
++ //exifGroup->setSupportsVariableKeys(true);
}
QValidator* KJpegPlugin::createValidator(const KFileMetaInfoItem& /*item*/,
-@@ -158,333 +212,91 @@ QValidator* KJpegPlugin::createValidator
- return 0L;
- }
-
--bool KJpegPlugin::writeInfo( const KFileMetaInfo& info ) const
-+bool KJpegPlugin::writeInfo( const KFileMetaInfo& /*info*/ ) const
+- QObject */*parent*/,
+- const char */*name*/ ) const
++ QObject* /*parent*/,
++ const char* /*name*/ ) const
+ {
+ // no need to return a validator that validates everything as OK :)
+ // if (item.isEditable())
+@@ -161,30 +95,45 @@ QValidator* KJpegPlugin::createValidator
+ bool KJpegPlugin::writeInfo( const KFileMetaInfo& info ) const
{
-- QString comment = info[EXIFGROUP].value("Comment").toString();
+ QString comment = info[EXIFGROUP].value("Comment").toString();
- QString path = info.path();
--
-- kdDebug(7034) << "exif writeInfo: " << info.path() << " \"" << comment << "\"\n";
--
+
+ kdDebug(7034) << "exif writeInfo: " << info.path() << " \"" << comment << "\"\n";
+
- /*
- Do a strictly safe insertion of the comment:
--
++ try {
++ Exiv2::Image::AutoPtr image =
++ Exiv2::ImageFactory::open(QFile::encodeName(info.path()).data());
++ image->readMetadata();
++ Exiv2::ExifData &exifData = image->exifData();
++
++ /*
++ Exiv2 uses a CommentValue for Exif user comments. The format of the
++ comment string includes an optional charset specification at the beginning:
++
++ [charset=["]Ascii|Jis|Unicode|Undefined["] ]comment
++
++ Undefined is used as a default if the comment doesn't start with a charset
++ definition.
++
++ Following are a few examples of valid comments. The last one is written to
++ the file.
++ */
++ exifData["Exif.Photo.UserComment"]
++ = "charset=\"Unicode\" An Unicode Exif comment added with Exiv2";
++ exifData["Exif.Photo.UserComment"]
++ = "charset=\"Undefined\" An undefined Exif comment added with Exiv2";
++ exifData["Exif.Photo.UserComment"]
++ = "Another undefined Exif comment added with Exiv2";
++ exifData["Exif.Photo.UserComment"]
++ = "charset=Ascii An ASCII Exif comment added with Exiv2";
+
- Scan original to verify it's a proper jpeg
- Open a unique temporary file in this directory
- Write temporary, replacing all COM blocks with this one.
@@ -332,38 +176,42 @@
- if( safe_copy_and_modify( QFile::encodeName( path ), comment.utf8() ) ) {
- return false;
- }
-- return true;
-+ return false;
++ exifData["Exif.Photo.UserComment"]
++ = std::string("charset=\"Unicode\" ") + std::string(comment.utf8().data());
++
++ image->writeMetadata();
++ }
++ catch (Exiv2::AnyError& e)
++ {
++ return false;
++ }
+ return true;
}
--bool KJpegPlugin::readInfo( KFileMetaInfo& info, uint what )
-+bool KJpegPlugin::readInfo( KFileMetaInfo& info, uint /*what*/ )
- {
- const QString path( info.path() );
+@@ -194,292 +143,49 @@ bool KJpegPlugin::readInfo( KFileMetaInf
if ( path.isEmpty() ) // remote file
return false;
- QString tag;
- ExifData ImageInfo;
--
++ std::string tag;
+
- // parse the jpeg file now
-- try {
+ try {
- if ( !ImageInfo.scan(info.path()) ) {
- kdDebug(7034) << "Not a JPEG file!\n";
-- return false;
++ Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(info.path().utf8().data());
++ if (!image.get())
+ return false;
- }
- }
- catch (FatalError& e) { // malformed exif data?
- kdDebug(7034) << "Exception caught while parsing Exif data of: " << info.path() << endl;
- e.debug_print();
-+ ExifData* d = exif_data_new_from_file( QFile::encodeName( path ));
-+ if( d == NULL ) {
-+ kdDebug(7034) << "EXIF read failed:" << path << endl;
- return false;
- }
-+ exif_data_ref( d );
-
- KFileMetaInfoGroup exifGroup = appendGroup( info, EXIFGROUP );
+- return false;
+- }
+-
+- KFileMetaInfoGroup exifGroup = appendGroup( info, EXIFGROUP );
-
- tag = ImageInfo.getComment();
- if ( tag.length() ) {
@@ -432,41 +280,13 @@
- break;
- default:
- break;
-+ for( int i = 0;
-+ i < EXIF_IFD_COUNT;
-+ ++i ) {
-+ ExifContent* content = d->ifd[ i ];
-+ exif_content_ref( content );
-+ for( unsigned int j = 0;
-+ j < content->count;
-+ ++j ) {
-+ ExifEntry* entry = content->entries[ j ];
-+ exif_entry_ref( entry );
-+ QCString tmp( 1024 );
-+ exif_entry_get_value( entry, tmp.data(), tmp.size() - 1 );
-+ tmp[ 1023 ] = '\0';
-+ QString value = QString::fromLocal8Bit( tmp );
-+ exif_entry_unref( entry );
-+ if( value.isEmpty())
-+ continue;
-+ int index = -1;
-+ for( int k = 0;
-+ k < NUM_TAGS;
-+ ++k )
-+ if( entry->tag == tags[ k ].tag ) {
-+ index = k;
-+ break;
-+ }
-+ if( index == -1 ) {
-+ kdDebug(7934) << "Unknown EXIF tag:" << entry->tag << endl;
-+ continue;
-+ }
-+ insertValue( exifGroup, index, value );
- }
+- }
- appendItem( exifGroup, "Flash used",
- flash );
- }
--
++ image->readMetadata();
++ Exiv2::ExifData& ImageInfo = image->exifData();
+
- if (ImageInfo.getFocalLength()){
- appendItem( exifGroup, "Focal length",
- QString().sprintf("%4.1f", ImageInfo.getFocalLength()) );
@@ -476,7 +296,8 @@
- (int)(ImageInfo.getFocalLength()/ImageInfo.getCCDWidth()*35 + 0.5) );
- }
- }
--
++ KFileMetaInfoGroup exifGroup = appendGroup( info, EXIFGROUP );
+
- if (ImageInfo.getCCDWidth()){
- appendItem( exifGroup, "CCD width",
- QString().sprintf("%4.2f", ImageInfo.getCCDWidth()) );
@@ -490,29 +311,44 @@
- }
- appendItem( exifGroup, "Exposure time", tag );
- }
--
++ tag = image->comment();
++ if ( tag.length() ) {
++ kdDebug(7034) << "exif inserting Comment: " << tag.c_str() << "\n";
++ appendItem( exifGroup, "Comment", QString::fromUtf8(tag.c_str()) );
++ } else {
++ appendItem( exifGroup, "Comment", QString::null); // So user can add new comment
++ }
++
++ for (Exiv2::ExifData::const_iterator i = ImageInfo.begin();
++ i != ImageInfo.end(); ++i)
++ appendItem(exifGroup, QString::fromUtf8(i->tagLabel().c_str()),
++ QString::fromUtf8(i->value().toString().c_str()));
++
++ Exiv2::ExifData::const_iterator iw =
++ ImageInfo.findKey(Exiv2::ExifKey("Exif.Image.ImageWidth"));
++ if (iw == ImageInfo.end())
++ iw = ImageInfo.findKey(Exiv2::ExifKey("Exif.Photo.PixelXDimension"));
++ Exiv2::ExifData::const_iterator ih =
++ ImageInfo.findKey(Exiv2::ExifKey("Exif.Image.ImageLength"));
++ if (ih == ImageInfo.end())
++ ih = ImageInfo.findKey(Exiv2::ExifKey("Exif.Photo.PixelYDimension"));
++
++ if (iw != ImageInfo.end() && ih != ImageInfo.end())
++ appendItem( exifGroup,"Dimensions", QSize( iw->toLong(), ih->toLong()));
+
- if (ImageInfo.getApertureFNumber()){
- appendItem( exifGroup, "Aperture",
- QString().sprintf("f/%3.1f",
- (double)ImageInfo.getApertureFNumber()));
-+ exif_content_unref( content );
- }
-+ exif_data_unref( d );
-+ return true;
-+}
-
+- }
+-
- if (ImageInfo.getDistance()){
- if (ImageInfo.getDistance() < 0){
- tag=i18n("Infinite");
- }else{
- tag=QString().sprintf("%5.2fm",(double)ImageInfo.getDistance());
-+void KJpegPlugin::insertValue( KFileMetaInfoGroup& exifGroup, int index, const QString& value )
-+{
-+ QString name = exif_tag_get_name( tags[ index ].tag );
-+ switch( tags[ index ].type ) {
-+ case QVariant::String: {
-+ appendItem( exifGroup, name, value );
-+ break;
++ if ( what & KFileMetaInfo::Thumbnail ) {
++ // TODO
}
- appendItem( exifGroup, "Focus dist.", tag );
- }
@@ -521,7 +357,7 @@
- appendItem( exifGroup, "Exposure bias",
- QString().sprintf("%4.2f",
- (double)ImageInfo.getExposureBias()) );
-- }
+ }
-
- if (ImageInfo.getWhitebalance() != -1){
- switch(ImageInfo.getWhitebalance()) {
@@ -645,14 +481,7 @@
- switch(ImageInfo.getCompressionLevel()) {
- case 1:
- tag=i18n("Basic");
-+ case QVariant::Double: {
-+ bool ok;
-+ double val = value.toDouble( &ok );
-+ if( ok )
-+ appendItem( exifGroup, name, val );
-+ else
-+ kdDebug(7034) << "EXIF double tag " << tags[ index ].tag << " conversion failed." << endl;
- break;
+- break;
- case 2:
- tag=i18n("Normal");
- break;
@@ -675,26 +504,34 @@
- if (ProcessTable[a].Tag == ImageInfo.getProcess() || ProcessTable[a].Tag == 0){
- appendItem( exifGroup, "JPEG process",
- QString::fromUtf8( ProcessTable[a].Desc) );
-+ }
-+ case QVariant::DateTime: {
-+ QDateTime dt = parseDateTime( value );
-+ if( dt.isValid())
-+ appendItem( exifGroup, name, dt );
-+ else
-+ kdDebug(7034) << "EXIF datetime tag " << tags[ index ].tag << " conversion failed." << endl;
- break;
- }
-+ default:
-+ abort();
- }
+- break;
+- }
+- }
-
- if ( what & KFileMetaInfo::Thumbnail && !ImageInfo.isNullThumbnail() ){
- appendItem( exifGroup, "Thumbnail", ImageInfo.getThumbnail() );
-- }
--
-- return true;
- }
--
- // format of the string is:
- // YYYY:MM:DD HH:MM:SS
- QDateTime KJpegPlugin::parseDateTime( const QString& string )
++ catch (Exiv2::AnyError& e) {
++ kdDebug(7034) << "Caught Exiv2 exception" << endl;
++ return false;
+ }
+
+ return true;
+--- kfile-plugins/jpeg/Makefile.am
++++ kfile-plugins/jpeg/Makefile.am
+@@ -6,13 +6,13 @@ KDE_CXXFLAGS = $(USE_EXCEPTIONS)
+ INCLUDES = $(all_includes)
+
+ # these are the headers for your project
+-noinst_HEADERS = kfile_jpeg.h exif.h
++noinst_HEADERS = kfile_jpeg.h
+
+ kde_module_LTLIBRARIES = kfile_jpeg.la
+
+-kfile_jpeg_la_SOURCES = kfile_jpeg.cpp exif.cpp kfile_setcomment.cpp
++kfile_jpeg_la_SOURCES = kfile_jpeg.cpp kfile_setcomment.cpp
+ kfile_jpeg_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
+-kfile_jpeg_la_LIBADD = $(LIB_KIO)
++kfile_jpeg_la_LIBADD = $(LIB_KIO) -lexiv2
+
+ # let automoc handle all of the meta source files (moc)
+ METASOURCES = AUTO
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org