77 Commits (b6c355245860cb15fea991fb6632dfa5cfedea2b)

Author SHA1 Message Date
Robin Mills 3c675f8e53 Build trigger. 9 years ago
Robin Mills 5f9807cbef #1216. Rollback r4448/6/2/1 r4439/38 to restabilize test suite on trunk. r4449 is copy of r4448 to branches/develop 9 years ago
sridharb 8a8ec67136 This is mainly a fix for #1206, but also interprets missing Canon Exif
Tags in exiv2 with the help of Phil Harvey's exiftool (see
http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Canon.html).

Even with these changes (toward #1204 and #1205), exiv2 lags behind
exiftool in some areas of interpretation of Canon tags. Ideally, a
catch-up effort to bring the code in source: canonmn.cpp in line with
lib/Image/ExifTool/Canon.pm. v10.25 of exiftool was used as reference
for this change.

#1206 seeks to address the fact that when Canon does not have data for
certain tags, they use specific default values in those fields. These
default values need to be ignored and not displayed. This change
brings this feature to exiv2, something that already exiftool does.

With regards to implementation, the struct TagInfo in source: tags.hpp
is extended with four new fields.

The first field is a bool that if set to true (default false), denotes
that this field has ignorable default values.

The second field is the default value that needs to be ignored. This
can be of four types (String, Long, Float, Rational). These four types
were chosen as they had conversion functions in the Value class.

The third field is the comparison type (default equal_to). There are
six comparison types possible (equal_to, not_equal_to, less,
less_equal, greater, greater_equal). This is the comparison applied to
the value stored in the tag's field and the default value specified
above. For e.g. if the value in the tag Exif.CanonCs.RecordMode is -1,
then it needs to be ignored.

The fourth field is the data type (default Long). This could have been
guessed from the type of the second field, but that would necessitate
making this structure into a template calling for changes in multitude
of files.

Usage: In source: canonmn.cpp, several exif tags now have ignorable
default properties. I will list a few examples.

1. Exif.CanonCs.FocusMode:        TagInfo(0x0007, "FocusMode", N_("Focus Mode"), N_("Focus mode setting"), canonCsId, makerTags, signedShort, 1, EXV_PRINT_TAG(canonCsFocusMode)),

There are no changes - i.e. this is an example of how the TagInfo
structure was being populated.

2. Exif.CanonCs.RecordMode:        TagInfo(0x0009, "RecordMode", N_("Record Mode"), N_("Record mode setting"), canonCsId, makerTags, signedShort, 1, EXV_PRINT_TAG(canonCsRecordMode), true, s_1_),

Take a look at the two new arguments. The first one (true) specifies
that there is a default value that can be ignored. The second one s_1_
specifies the value (-1, in this case) to be ignored.

	const UShortValue CanonMakerNote::s_1_(65535, unsignedShort); // Till bug is resolved

Note s_1_ is temporarily having the value 65535 till #1203 that causes
signedShorts to be interpreted as unsignedShorts is resolved.


3. Exif.CanonSi.TargetAperture:         TagInfo(0x0004, "TargetAperture", N_("Target Aperture"), N_("Target Aperture"), canonSiId, makerTags, unsignedShort, 1, printSi0x0015, true, us0_, TagInfo::less_equal),

Note the third argument TagInfo::less_equal. This combined with the
second argument us0_ (the number 0) signifies that any values in this
tag that are less than or equal (<=) to 0 should be ignored.

4. 		TagInfo(0x0028, "ImageUniqueID", N_("Image Unique ID"), N_("Image Unique ID"), canonId, makerTags, asciiString, -1, printValue, true, s0x16_, TagInfo::equal_to, TagInfo::String),

The previous examples have all been of Long type. This shows a case
where the default value is a string.

	const AsciiValue CanonMakerNote::s0x16_("0000000000000000");

Once these tag values have been defined, the actual mechanics of
ignoring these default values happens in Image::exifData().

Before the exifData is returned, we loop through the data, ask the
data whether it needs to be ignored (which in turn checks its
underlying tagInfo and compares it with the default value, if
specified) and if so, deletes that element.

A compile-time switch called EXV_DONT_IGNORE_UNDEFINED which when set
to a non-zero value will cause the behavior to revert back to the
original where all values are reported irregardless of the fact that
they need to be ignored.
9 years ago
Robin Mills b3c6de6274 #1210 C++11/regex build-breaker in src/version.cpp. Thank You to Zulan for reporting this and providing a patch. 9 years ago
Robin Mills a04abc98c2 Build Trigger 9 years ago
Robin Mills b8de981617 Build Trigger 9 years ago
Robin Mills dbed6f857c #1034 Added exiv2 config file support for lens recognition. 9 years ago
Robin Mills 4a8e34bc44 Revert build trigger 9 years ago
Robin Mills 27fa76b269 Build Trigger 9 years ago
Robin Mills 2261c18724 Revert build trigger. 9 years ago
Robin Mills d37f692374 Build Trigger 9 years ago
Robin Mills b7607c34db #1047 Rollback r4163 and try again. r4163 broke MSVC build. 10 years ago
Robin Mills d3ff1388c1 #1147 Fixed travis build-breaker. 10 years ago
Robin Mills 1a6419881b #1147. Fixed a typo. 10 years ago
Robin Mills a008623362 #1147. Correction for Cygwin/MinGW build-breaker in r4159. Don't compile the uid/euid/gid code on any windows build. 10 years ago
Robin Mills b1b42d8e15 #1147. Correction to r4159 for linux build breaker (linux doesn't have include uuid/uuid.h) 10 years ago
Robin Mills 87129d61f6 #1147 Report uid, euid and gid in exiv2 --verbose --version 10 years ago
Robin Mills ab9ee2c6df #1024. Support for C++11 #include <regex>. --grep keys may have an optional trailer /i to indicate to ignore case. 10 years ago
Robin Mills cf927ed2c8 #1121 (msvc support for v0.26). exiv2 -vVg ^version reports version=8.00 (2005/x64) or version=8.00 (2005/x86) instead of version=8.00 (2005) 10 years ago
Robin Mills db4be31b6f #1130. Thank You Jakub for reporting this. 10 years ago
Robin Mills 4cca5dea0b #1127 exiv2 --verbose --version --grep libz incorrectly reports have_libz=0 10 years ago
Robin Mills bf0604b834 Minor clean up in version.cpp. Removed 'using namespace std', replaced vector_t typedef with identical twin Exiv2::StringVector. 10 years ago
Robin Mills 416221118a Fix Visual Studio 2015 build. 10 years ago
Robin Mills edb5c16a7f #1109 Support for Visual Studio 2003/5/8/10/12/13/15 10 years ago
Robin Mills ed2751612d #640 Public API to reveal all namespaces known to Exiv2 and XMPsdk is XmpProperties::registeredNamespaces(Exiv2::Dictionary&) 10 years ago
Robin Mills c396a92e01 #960 added API: static void Exiv2::XMPParser::getRegisteredNamespaces(std::map<std::string,std::string>&); 10 years ago
Robin Mills 15cbe35383 Correction to r3892 to fix build breaker on Cygwin. 10 years ago
Robin Mills fdb33b467b Modification to r3891 to respect -g option on exiv2 command-line. 10 years ago
Robin Mills e628f8e057 Correction to r3981. Only build this functionality when EXV_HAVE_XMP_TOOLKIT is enabled. 10 years ago
Robin Mills f87a83978d exiv2 -vV lists registered Namespaces. #640 and topic 2169 http://dev.exiv2.org/boards/3/topics/2169 10 years ago
Robin Mills 871502f051 src/version.cpp: fixing an output formatting issue impacting exiv2 -vVg curl 10 years ago
Andreas Huggel fd80993ab0 Updated copyright notice. 10 years ago
Robin Mills 0cf64e2542 #922. Better platform and endian detection. 10 years ago
Robin Mills 5aec2c4957 #1069. Make video a build option (msvc/autotools/cmake). Default is not to build video or webready. 10 years ago
Robin Mills 60f4c18da7 Move dumpLibraryInfo() to Exiv2 namespace. 10 years ago
Robin Mills 8424bdaa71 Replace REG_BASIC with 0. Some platforms don't define REG_BASIC. 10 years ago
Robin Mills 4c886bab24 #1024 and #1053. Changed option REG_EXTENDED and REG_BASIC to support ^ as a begin marker. 10 years ago
Robin Mills 0e1b77c8b4 #1028 and #1053. Change options to regex to respect ^ and $ in option -g 10 years ago
Robin Mills 3c42a1e47f #1053. Added new option -K key for exact Key match (not grep as -g).
Added long versions of all options (eg --key = -K)
Added Command Summary to exiv2.1
Work in progress: exiv2.1 documents features which are not yet implemented:
- modifier - (stdin/stdout) to insert/extract
- modifier R (roundtrip) to insert
10 years ago
Robin Mills 6e4f04ff23 #1046. Adding support to exiv2 --verbose --version to report have_unicode_path 10 years ago
Robin Mills 33bec3b2cc #1024. Add CMake support for regex. Fixed unused variables in version.cpp 11 years ago
Robin Mills faf51171d0 #1024. Thank you, Thomas for this very useful contribution. 11 years ago
Robin Mills d393b0fa7e trunk: exiv2 v0.25 11 years ago
Robin Mills 078f1f7f58 #1007. Thank You, Nicolas for reporting this and identifying the fix. 11 years ago
Robin Mills f71d15442a Better platform detection in version.cpp for MinGW 11 years ago
Robin Mills 7a530fc49a Fixed MinGW compilation error in jp2image.cpp u_int32_t not defined (in stdint.h/Linux, types.h/Mac)
This is an unexpected new defect as MinGW has previously build OK.
11 years ago
Robin Mills f9d2c349a7 CID:982000 Resource Leak. 11 years ago
Robin Mills b6db775109 add svn=nnnn to exiv2 -v -V 11 years ago
Robin Mills a320ee6d62 Change to r3221 for clang 12 years ago
Robin Mills 8c7ffc80b7 version.cpp: fixed how compiler detect for shared/static linking 12 years ago