#620: Added support for Nikon Vibration Reduction and Picture Control Tags.
This commit is contained in:
@@ -99,7 +99,10 @@ namespace Exiv2 {
|
||||
const uint16_t nikoncb2b = 307; //!< Nikon Color Balance 2 Tags
|
||||
const uint16_t nikoncb3 = 308; //!< Nikon Color Balance 3 Tags
|
||||
const uint16_t nikoncb4 = 309; //!< Nikon Color Balance 4 Tags
|
||||
const uint16_t canonfi = 310; //!< Canon File Info
|
||||
const uint16_t nikonvr = 310; //!< Nikon Vibration Reduction Tags
|
||||
const uint16_t nikonpc = 311; //!< Nikon Picture Control Tags
|
||||
|
||||
const uint16_t canonfi = 320; //!< Canon File Info
|
||||
}
|
||||
|
||||
// *****************************************************************************
|
||||
|
||||
@@ -621,6 +621,81 @@ namespace Exiv2 {
|
||||
{ 2, N_("D/M/Y") }
|
||||
};
|
||||
|
||||
//! OnOff
|
||||
extern const TagDetails nikonOnOff[] = {
|
||||
{ 1, N_("On") },
|
||||
{ 2, N_("Off") }
|
||||
};
|
||||
|
||||
// Nikon3 Vibration Reduction Tag Info
|
||||
const TagInfo Nikon3MakerNote::tagInfoVr_[] = {
|
||||
TagInfo(0, "Version", N_("Version"), N_("Version"), nikonVrIfdId, makerTags, undefined, printExifVersion),
|
||||
TagInfo(4, "VibrationReduction", N_("Vibration Reduction"), N_("Vibration reduction"), nikonVrIfdId, makerTags, unsignedByte, EXV_PRINT_TAG(nikonOnOff)),
|
||||
// End of list marker
|
||||
TagInfo(0xffff, "(UnknownNikonVrTag)", "(UnknownNikonVrTag)", N_("Unknown Nikon Vibration Reduction Tag"), nikonVrIfdId, makerTags, invalidTypeId, printValue)
|
||||
};
|
||||
|
||||
const TagInfo* Nikon3MakerNote::tagListVr()
|
||||
{
|
||||
return tagInfoVr_;
|
||||
}
|
||||
|
||||
//! Adjust
|
||||
extern const TagDetails nikonAdjust[] = {
|
||||
{ 0, N_("Default Settings") },
|
||||
{ 1, N_("Quick Adjust") },
|
||||
{ 2, N_("Full Control") }
|
||||
};
|
||||
|
||||
//! FilterEffect
|
||||
extern const TagDetails nikonFilterEffect[] = {
|
||||
{ 0x80, N_("Off") },
|
||||
{ 0x81, N_("Yellow") },
|
||||
{ 0x82, N_("Orange") },
|
||||
{ 0x83, N_("Red") },
|
||||
{ 0x84, N_("Green") },
|
||||
{ 0xff, N_("n/a") }
|
||||
};
|
||||
|
||||
//! ToningEffect
|
||||
extern const TagDetails nikonToningEffect[] = {
|
||||
{ 0x80, N_("B&W") },
|
||||
{ 0x81, N_("Sepia") },
|
||||
{ 0x82, N_("Cyanotype") },
|
||||
{ 0x83, N_("Red") },
|
||||
{ 0x84, N_("Yellow") },
|
||||
{ 0x85, N_("Green") },
|
||||
{ 0x86, N_("Blue-green") },
|
||||
{ 0x87, N_("Blue") },
|
||||
{ 0x88, N_("Purple-blue") },
|
||||
{ 0x89, N_("Red-purple") },
|
||||
{ 0xff, N_("n/a") }
|
||||
};
|
||||
|
||||
// Nikon3 Picture Control Tag Info
|
||||
const TagInfo Nikon3MakerNote::tagInfoPc_[] = {
|
||||
TagInfo( 0, "Version", N_("Version"), N_("Version"), nikonPcIfdId, makerTags, undefined, printExifVersion),
|
||||
TagInfo( 4, "Name", N_("Name"), N_("Name"), nikonPcIfdId, makerTags, asciiString, printValue),
|
||||
TagInfo(24, "Base", N_("Base"), N_("Base"), nikonPcIfdId, makerTags, asciiString, printValue),
|
||||
TagInfo(48, "Adjust", N_("Adjust"), N_("Adjust"), nikonPcIfdId, makerTags, unsignedByte, EXV_PRINT_TAG(nikonAdjust)),
|
||||
TagInfo(49, "QuickAdjust", N_("Quick Adjust"), N_("Quick adjust"), nikonPcIfdId, makerTags, unsignedByte, printValue),
|
||||
TagInfo(50, "Sharpness", N_("Sharpness"), N_("Sharpness"), nikonPcIfdId, makerTags, unsignedByte, printValue),
|
||||
TagInfo(51, "Contrast", N_("Contrast"), N_("Contrast"), nikonPcIfdId, makerTags, unsignedByte, printValue),
|
||||
TagInfo(52, "Brightness", N_("Brightness"), N_("Brightness"), nikonPcIfdId, makerTags, unsignedByte, printValue),
|
||||
TagInfo(53, "Saturation", N_("Saturation"), N_("Saturation"), nikonPcIfdId, makerTags, unsignedByte, printValue),
|
||||
TagInfo(54, "HueAdjustment", N_("Hue Adjustment"), N_("Hue adjustment"), nikonPcIfdId, makerTags, unsignedByte, printValue),
|
||||
TagInfo(55, "FilterEffect", N_("Filter Effect"), N_("Filter effect"), nikonPcIfdId, makerTags, unsignedByte, EXV_PRINT_TAG(nikonFilterEffect)),
|
||||
TagInfo(56, "ToningEffect", N_("Toning Effect"), N_("Toning effect"), nikonPcIfdId, makerTags, unsignedByte, EXV_PRINT_TAG(nikonToningEffect)),
|
||||
TagInfo(57, "ToningSaturation", N_("Toning Saturation"), N_("Toning saturation"), nikonPcIfdId, makerTags, unsignedByte, printValue),
|
||||
// End of list marker
|
||||
TagInfo(0xffff, "(UnknownNikonPcTag)", "(UnknownNikonPcTag)", N_("Unknown Nikon Picture Control Tag"), nikonPcIfdId, makerTags, invalidTypeId, printValue)
|
||||
};
|
||||
|
||||
const TagInfo* Nikon3MakerNote::tagListPc()
|
||||
{
|
||||
return tagInfoPc_;
|
||||
}
|
||||
|
||||
// Nikon3 World Time Tag Info
|
||||
const TagInfo Nikon3MakerNote::tagInfoWt_[] = {
|
||||
TagInfo(0, "Timezone", N_("Timezone"), N_("Timezone"), nikonWtIfdId, makerTags, signedShort, printValue),
|
||||
|
||||
@@ -110,6 +110,10 @@ namespace Exiv2 {
|
||||
public:
|
||||
//! Return read-only list of built-in Nikon3 tags
|
||||
static const TagInfo* tagList();
|
||||
//! Return read-only list of built-in Vibration Reduction tags
|
||||
static const TagInfo* tagListVr();
|
||||
//! Return read-only list of built-in Picture Control tags
|
||||
static const TagInfo* tagListPc();
|
||||
//! Return read-only list of built-in World time tags
|
||||
static const TagInfo* tagListWt();
|
||||
//! Return read-only list of built-in ISO info tags
|
||||
@@ -171,6 +175,10 @@ namespace Exiv2 {
|
||||
private:
|
||||
//! Tag information
|
||||
static const TagInfo tagInfo_[];
|
||||
//! Vibration Reduction tag information
|
||||
static const TagInfo tagInfoVr_[];
|
||||
//! Picture Control tag information
|
||||
static const TagInfo tagInfoPc_[];
|
||||
//! World Time tag information
|
||||
static const TagInfo tagInfoWt_[];
|
||||
//! ISO info tag information
|
||||
|
||||
@@ -124,6 +124,8 @@ namespace Exiv2 {
|
||||
{ nikon2IfdId, "Makernote", "Nikon2", Nikon2MakerNote::tagList },
|
||||
{ nikon3IfdId, "Makernote", "Nikon3", Nikon3MakerNote::tagList },
|
||||
{ nikonPvIfdId, "Makernote", "NikonPreview", ExifTags::ifdTagList },
|
||||
{ nikonVrIfdId, "Makernote", "NikonVr", Nikon3MakerNote::tagListVr },
|
||||
{ nikonPcIfdId, "Makernote", "NikonPc", Nikon3MakerNote::tagListPc },
|
||||
{ nikonWtIfdId, "Makernote", "NikonWt", Nikon3MakerNote::tagListWt },
|
||||
{ nikonIiIfdId, "Makernote", "NikonIi", Nikon3MakerNote::tagListIi },
|
||||
{ nikonCb1IfdId, "Makernote", "NikonCb1", Nikon3MakerNote::tagListCb1 },
|
||||
|
||||
@@ -140,7 +140,9 @@ namespace Exiv2 {
|
||||
{ 307, "NikonCb2b" },
|
||||
{ 308, "NikonCb3" },
|
||||
{ 309, "NikonCb4" },
|
||||
{ 310, "CanonFi" }
|
||||
{ 310, "NikonVr" },
|
||||
{ 311, "NikonPc" },
|
||||
{ 320, "CanonFi" }
|
||||
};
|
||||
|
||||
bool TiffGroupInfo::operator==(const uint16_t& group) const
|
||||
|
||||
+44
-1
@@ -355,6 +355,40 @@ namespace Exiv2 {
|
||||
{ 2, ttUnsignedLong, 1 }
|
||||
};
|
||||
|
||||
//! Nikon Vibration Reduction binary array - configuration
|
||||
extern const ArrayCfg nikonVrCfg = {
|
||||
Group::nikonvr, // Group for the elements
|
||||
invalidByteOrder, // Use byte order from parent
|
||||
ttUndefined, // Type for array entry
|
||||
notEncrypted, // Not encrypted
|
||||
false, // No size element
|
||||
true, // Write all tags
|
||||
{ 0, ttUnsignedByte, 1 }
|
||||
};
|
||||
//! Nikon Vibration Reduction binary array - definition
|
||||
extern const ArrayDef nikonVrDef[] = {
|
||||
{ 0, ttUndefined, 4 }, // Version
|
||||
{ 7, ttUnsignedByte, 1 } // The array contains 8 bytes
|
||||
};
|
||||
|
||||
//! Nikon Picture Control binary array - configuration
|
||||
extern const ArrayCfg nikonPcCfg = {
|
||||
Group::nikonpc, // Group for the elements
|
||||
invalidByteOrder, // Use byte order from parent
|
||||
ttUndefined, // Type for array entry
|
||||
notEncrypted, // Not encrypted
|
||||
false, // No size element
|
||||
true, // Write all tags
|
||||
{ 0, ttUnsignedByte, 1 }
|
||||
};
|
||||
//! Nikon Picture Control binary array - definition
|
||||
extern const ArrayDef nikonPcDef[] = {
|
||||
{ 0, ttUndefined, 4 }, // Version
|
||||
{ 4, ttAsciiString, 20 },
|
||||
{ 24, ttAsciiString, 20 },
|
||||
{ 57, ttUnsignedByte, 1 } // The array contains 58 bytes
|
||||
};
|
||||
|
||||
//! Nikon World Time binary array - configuration
|
||||
extern const ArrayCfg nikonWtCfg = {
|
||||
Group::nikonwt, // Group for the elements
|
||||
@@ -368,7 +402,6 @@ namespace Exiv2 {
|
||||
//! Nikon World Time binary array - definition
|
||||
extern const ArrayDef nikonWtDef[] = {
|
||||
{ 0, ttSignedShort, 1 },
|
||||
{ 2, ttUnsignedByte, 1 },
|
||||
{ 3, ttUnsignedByte, 1 }
|
||||
};
|
||||
|
||||
@@ -650,6 +683,8 @@ namespace Exiv2 {
|
||||
{ Tag::root, Group::nikon2mn, Group::exif, 0x927c },
|
||||
{ Tag::root, Group::nikon3mn, Group::exif, 0x927c },
|
||||
{ Tag::root, Group::nikonpv, Group::nikon3mn, 0x0011 },
|
||||
{ Tag::root, Group::nikonvr, Group::nikon3mn, 0x001f },
|
||||
{ Tag::root, Group::nikonpc, Group::nikon3mn, 0x0023 },
|
||||
{ Tag::root, Group::nikonwt, Group::nikon3mn, 0x0024 },
|
||||
{ Tag::root, Group::nikonii, Group::nikon3mn, 0x0025 },
|
||||
{ Tag::root, Group::nikoncb1, Group::nikon3mn, 0x0097 },
|
||||
@@ -891,6 +926,8 @@ namespace Exiv2 {
|
||||
// Nikon3 makernote
|
||||
{ Tag::next, Group::nikon3mn, newTiffDirectory<Group::ignr> },
|
||||
{ 0x0011, Group::nikon3mn, newTiffSubIfd<Group::nikonpv> },
|
||||
{ 0x001f, Group::nikon3mn, EXV_BINARY_ARRAY(nikonVrCfg, nikonVrDef) },
|
||||
{ 0x0023, Group::nikon3mn, EXV_BINARY_ARRAY(nikonPcCfg, nikonPcDef) },
|
||||
{ 0x0024, Group::nikon3mn, EXV_BINARY_ARRAY(nikonWtCfg, nikonWtDef) },
|
||||
{ 0x0025, Group::nikon3mn, EXV_BINARY_ARRAY(nikonIiCfg, nikonIiDef) },
|
||||
{ 0x0097, Group::nikon3mn, EXV_COMPLEX_BINARY_ARRAY(nikonCbSet, nikonSelector) },
|
||||
@@ -903,6 +940,12 @@ namespace Exiv2 {
|
||||
{ Tag::next, Group::nikonpv, newTiffDirectory<Group::ignr> },
|
||||
{ Tag::all, Group::nikonpv, newTiffEntry },
|
||||
|
||||
// Nikon3 vibration reduction
|
||||
{ Tag::all, Group::nikonvr, newTiffBinaryElement },
|
||||
|
||||
// Nikon3 picture control
|
||||
{ Tag::all, Group::nikonpc, newTiffBinaryElement },
|
||||
|
||||
// Nikon3 world time
|
||||
{ Tag::all, Group::nikonwt, newTiffBinaryElement },
|
||||
|
||||
|
||||
+68
-21
@@ -139,27 +139,74 @@ namespace Exiv2 {
|
||||
};
|
||||
|
||||
//! Type to specify the IFD to which a metadata belongs
|
||||
enum IfdId { ifdIdNotSet,
|
||||
ifd0Id, exifIfdId, gpsIfdId, iopIfdId, ifd1Id, ifd2Id,
|
||||
subImage1Id, subImage2Id, subImage3Id, subImage4Id,
|
||||
mnIfdId,
|
||||
canonIfdId, canonCsIfdId, canonSiIfdId, canonCfIfdId,
|
||||
canonPiIfdId, canonPaIfdId, canonFiIfdId,
|
||||
fujiIfdId,
|
||||
minoltaIfdId, minoltaCs5DIfdId, minoltaCs7DIfdId,
|
||||
minoltaCsOldIfdId, minoltaCsNewIfdId,
|
||||
nikon1IfdId, nikon2IfdId, nikon3IfdId, nikonPvIfdId, nikonWtIfdId,
|
||||
nikonIiIfdId, nikonLd1IfdId, nikonLd2IfdId, nikonLd3IfdId,
|
||||
nikonCb1IfdId, nikonCb2IfdId, nikonCb2aIfdId, nikonCb2bIfdId,
|
||||
nikonCb3IfdId, nikonCb4IfdId,
|
||||
olympusIfdId, olympus2IfdId, olympusCsIfdId, olympusEqIfdId,
|
||||
olympusRdIfdId, olympusRd2IfdId, olympusIpIfdId, olympusFiIfdId,
|
||||
olympusFe1IfdId, olympusFe2IfdId, olympusFe3IfdId, olympusFe4IfdId,
|
||||
olympusFe5IfdId, olympusFe6IfdId, olympusFe7IfdId, olympusFe8IfdId,
|
||||
olympusFe9IfdId, olympusRiIfdId,
|
||||
panasonicIfdId, panaRawIfdId,
|
||||
pentaxIfdId, sigmaIfdId, sonyIfdId,
|
||||
lastIfdId };
|
||||
enum IfdId {
|
||||
ifdIdNotSet,
|
||||
ifd0Id,
|
||||
exifIfdId,
|
||||
gpsIfdId,
|
||||
iopIfdId,
|
||||
ifd1Id,
|
||||
ifd2Id,
|
||||
subImage1Id,
|
||||
subImage2Id,
|
||||
subImage3Id,
|
||||
subImage4Id,
|
||||
mnIfdId,
|
||||
canonIfdId,
|
||||
canonCsIfdId,
|
||||
canonSiIfdId,
|
||||
canonCfIfdId,
|
||||
canonPiIfdId,
|
||||
canonPaIfdId,
|
||||
canonFiIfdId,
|
||||
fujiIfdId,
|
||||
minoltaIfdId,
|
||||
minoltaCs5DIfdId,
|
||||
minoltaCs7DIfdId,
|
||||
minoltaCsOldIfdId,
|
||||
minoltaCsNewIfdId,
|
||||
nikon1IfdId,
|
||||
nikon2IfdId,
|
||||
nikon3IfdId,
|
||||
nikonPvIfdId,
|
||||
nikonVrIfdId,
|
||||
nikonPcIfdId,
|
||||
nikonWtIfdId,
|
||||
nikonIiIfdId,
|
||||
nikonLd1IfdId,
|
||||
nikonLd2IfdId,
|
||||
nikonLd3IfdId,
|
||||
nikonCb1IfdId,
|
||||
nikonCb2IfdId,
|
||||
nikonCb2aIfdId,
|
||||
nikonCb2bIfdId,
|
||||
nikonCb3IfdId,
|
||||
nikonCb4IfdId,
|
||||
olympusIfdId,
|
||||
olympus2IfdId,
|
||||
olympusCsIfdId,
|
||||
olympusEqIfdId,
|
||||
olympusRdIfdId,
|
||||
olympusRd2IfdId,
|
||||
olympusIpIfdId,
|
||||
olympusFiIfdId,
|
||||
olympusFe1IfdId,
|
||||
olympusFe2IfdId,
|
||||
olympusFe3IfdId,
|
||||
olympusFe4IfdId,
|
||||
olympusFe5IfdId,
|
||||
olympusFe6IfdId,
|
||||
olympusFe7IfdId,
|
||||
olympusFe8IfdId,
|
||||
olympusFe9IfdId,
|
||||
olympusRiIfdId,
|
||||
panasonicIfdId,
|
||||
panaRawIfdId,
|
||||
pentaxIfdId,
|
||||
sigmaIfdId,
|
||||
sonyIfdId,
|
||||
lastIfdId
|
||||
};
|
||||
|
||||
//! Container for binary data
|
||||
typedef std::vector<byte> Blob;
|
||||
|
||||
Reference in New Issue
Block a user