|
Packit |
01d647 |
// ***************************************************************** -*- C++ -*-
|
|
Packit |
01d647 |
/*
|
|
Packit |
01d647 |
* Copyright (C) 2004-2018 Exiv2 authors
|
|
Packit |
01d647 |
* This program is part of the Exiv2 distribution.
|
|
Packit |
01d647 |
*
|
|
Packit |
01d647 |
* This program is free software; you can redistribute it and/or
|
|
Packit |
01d647 |
* modify it under the terms of the GNU General Public License
|
|
Packit |
01d647 |
* as published by the Free Software Foundation; either version 2
|
|
Packit |
01d647 |
* of the License, or (at your option) any later version.
|
|
Packit |
01d647 |
*
|
|
Packit |
01d647 |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
01d647 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
01d647 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
01d647 |
* GNU General Public License for more details.
|
|
Packit |
01d647 |
*
|
|
Packit |
01d647 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
01d647 |
* along with this program; if not, write to the Free Software
|
|
Packit |
01d647 |
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
|
|
Packit |
01d647 |
*/
|
|
Packit |
01d647 |
/*
|
|
Packit |
01d647 |
File: fujimn.cpp
|
|
Packit |
01d647 |
Author(s): Andreas Huggel (ahu) <ahuggel@gmx.net>
|
|
Packit |
01d647 |
Gilles Caulier (gc) <caulier dot gilles at gmail dot com>
|
|
Packit |
01d647 |
History: 18-Feb-04, ahu: created
|
|
Packit |
01d647 |
07-Mar-04, ahu: isolated as a separate component
|
|
Packit |
01d647 |
Credits: See header file.
|
|
Packit |
01d647 |
*/
|
|
Packit |
01d647 |
// *****************************************************************************
|
|
Packit |
01d647 |
// included header files
|
|
Packit |
01d647 |
#include "types.hpp"
|
|
Packit |
01d647 |
#include "fujimn_int.hpp"
|
|
Packit |
01d647 |
#include "tags_int.hpp"
|
|
Packit |
01d647 |
#include "value.hpp"
|
|
Packit |
01d647 |
#include "i18n.h" // NLS support.
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// + standard includes
|
|
Packit |
01d647 |
#include <string>
|
|
Packit |
01d647 |
#include <sstream>
|
|
Packit |
01d647 |
#include <iomanip>
|
|
Packit |
01d647 |
#include <cassert>
|
|
Packit |
01d647 |
#include <cstring>
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// *****************************************************************************
|
|
Packit |
01d647 |
// class member definitions
|
|
Packit |
01d647 |
namespace Exiv2 {
|
|
Packit |
01d647 |
namespace Internal {
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! OffOn, multiple tags
|
|
Packit |
01d647 |
extern const TagDetails fujiOffOn[] = {
|
|
Packit |
01d647 |
{ 0, N_("Off") },
|
|
Packit |
01d647 |
{ 1, N_("On") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Sharpness, tag 0x1001
|
|
Packit |
01d647 |
extern const TagDetails fujiSharpness[] = {
|
|
Packit |
01d647 |
{ 1, N_("Soft mode 1") },
|
|
Packit |
01d647 |
{ 2, N_("Soft mode 2") },
|
|
Packit |
01d647 |
{ 3, N_("Normal") },
|
|
Packit |
01d647 |
{ 4, N_("Hard mode 1") },
|
|
Packit |
01d647 |
{ 5, N_("Hard mode 2") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! WhiteBalance, tag 0x1002
|
|
Packit |
01d647 |
extern const TagDetails fujiWhiteBalance[] = {
|
|
Packit |
01d647 |
{ 0, N_("Auto") },
|
|
Packit |
01d647 |
{ 256, N_("Daylight") },
|
|
Packit |
01d647 |
{ 512, N_("Cloudy") },
|
|
Packit |
01d647 |
{ 768, N_("Fluorescent (daylight)") },
|
|
Packit |
01d647 |
{ 769, N_("Fluorescent (warm white)") },
|
|
Packit |
01d647 |
{ 770, N_("Fluorescent (cool white)") },
|
|
Packit |
01d647 |
{ 1024, N_("Incandescent") },
|
|
Packit |
01d647 |
{ 3480, N_("Custom") },
|
|
Packit |
01d647 |
{ 3480, N_("Custom") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Color, tag 0x1003
|
|
Packit |
01d647 |
extern const TagDetails fujiColor[] = {
|
|
Packit |
01d647 |
{ 0, N_("Normal") },
|
|
Packit |
01d647 |
{ 256, N_("High") },
|
|
Packit |
01d647 |
{ 512, N_("Low") },
|
|
Packit |
01d647 |
{ 768, N_("Monochrome") },
|
|
Packit |
01d647 |
{ 769, N_("Monochrome + R Filter") },
|
|
Packit |
01d647 |
{ 770, N_("Monochrome + Ye Filter") },
|
|
Packit |
01d647 |
{ 771, N_("Monochrome + G Filter") },
|
|
Packit |
01d647 |
{ 784, N_("Sepia") },
|
|
Packit |
01d647 |
{ 768, N_("Monochrome") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Tone, tag 0x1004
|
|
Packit |
01d647 |
extern const TagDetails fujiTone[] = {
|
|
Packit |
01d647 |
{ 0, N_("Normal") },
|
|
Packit |
01d647 |
{ 256, N_("High") },
|
|
Packit |
01d647 |
{ 512, N_("Low") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! FlashMode, tag 0x1010
|
|
Packit |
01d647 |
extern const TagDetails fujiFlashMode[] = {
|
|
Packit |
01d647 |
{ 0, N_("Auto") },
|
|
Packit |
01d647 |
{ 1, N_("On") },
|
|
Packit |
01d647 |
{ 2, N_("Off") },
|
|
Packit |
01d647 |
{ 3, N_("Red-eye reduction") },
|
|
Packit |
01d647 |
{ 4, N_("External") },
|
|
Packit |
01d647 |
{ 16, N_("Commander") },
|
|
Packit |
01d647 |
{ 16, N_("Commander") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! FocusMode, tag 0x1021
|
|
Packit |
01d647 |
extern const TagDetails fujiFocusMode[] = {
|
|
Packit |
01d647 |
{ 0, N_("Auto") },
|
|
Packit |
01d647 |
{ 1, N_("Manual") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! PictureMode, tag 0x1031
|
|
Packit |
01d647 |
extern const TagDetails fujiPictureMode[] = {
|
|
Packit |
01d647 |
{ 0, N_("Auto") },
|
|
Packit |
01d647 |
{ 1, N_("Portrait") },
|
|
Packit |
01d647 |
{ 2, N_("Landscape") },
|
|
Packit |
01d647 |
{ 4, N_("Sports") },
|
|
Packit |
01d647 |
{ 5, N_("Night scene") },
|
|
Packit |
01d647 |
{ 6, N_("Program AE") },
|
|
Packit |
01d647 |
{ 7, N_("Natural light") },
|
|
Packit |
01d647 |
{ 8, N_("Anti-blur") },
|
|
Packit |
01d647 |
{ 10, N_("Sunset") },
|
|
Packit |
01d647 |
{ 11, N_("Museum") },
|
|
Packit |
01d647 |
{ 12, N_("Party") },
|
|
Packit |
01d647 |
{ 13, N_("Flower") },
|
|
Packit |
01d647 |
{ 14, N_("Text") },
|
|
Packit |
01d647 |
{ 15, N_("Natural light & flash") },
|
|
Packit |
01d647 |
{ 16, N_("Beach") },
|
|
Packit |
01d647 |
{ 17, N_("Snow") },
|
|
Packit |
01d647 |
{ 18, N_("Fireworks") },
|
|
Packit |
01d647 |
{ 19, N_("Underwater") },
|
|
Packit |
01d647 |
{ 256, N_("Aperture-priority AE") },
|
|
Packit |
01d647 |
{ 512, N_("Shutter speed priority AE") },
|
|
Packit |
01d647 |
{ 768, N_("Manual") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Continuous, tag 0x1100
|
|
Packit |
01d647 |
extern const TagDetails fujiContinuous[] = {
|
|
Packit |
01d647 |
{ 0, N_("Off") },
|
|
Packit |
01d647 |
{ 1, N_("On") },
|
|
Packit |
01d647 |
{ 2, N_("No flash & flash") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! FinePixColor, tag 0x1210
|
|
Packit |
01d647 |
extern const TagDetails fujiFinePixColor[] = {
|
|
Packit |
01d647 |
{ 0, N_("Standard") },
|
|
Packit |
01d647 |
{ 16, N_("Chrome") },
|
|
Packit |
01d647 |
{ 48, N_("Black & white") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! DynamicRange, tag 0x1400
|
|
Packit |
01d647 |
extern const TagDetails fujiDynamicRange[] = {
|
|
Packit |
01d647 |
{ 1, N_("Standard") },
|
|
Packit |
01d647 |
{ 3, N_("Wide") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! FilmMode, tag 0x1401
|
|
Packit |
01d647 |
extern const TagDetails fujiFilmMode[] = {
|
|
Packit |
01d647 |
{ 0, N_("F0/Standard (Provia)") },
|
|
Packit |
01d647 |
{ 256, N_("F1/Studio Portrait") },
|
|
Packit |
01d647 |
{ 272, N_("F1a/Studio Portrait Enhanced Saturation") },
|
|
Packit |
01d647 |
{ 288, N_("F1b/Studio Portrait Smooth Skin Tone (Astia)") },
|
|
Packit |
01d647 |
{ 304, N_("F1c/Studio Portrait Increased Sharpness") },
|
|
Packit |
01d647 |
{ 512, N_("F2/Fujichrome (Velvia)") },
|
|
Packit |
01d647 |
{ 768, N_("F3/Studio Portrait Ex") },
|
|
Packit |
01d647 |
{ 1024, N_("F4/Velvia") },
|
|
Packit |
01d647 |
{ 1280, N_("Pro Neg. Std") },
|
|
Packit |
01d647 |
{ 1281, N_("Pro Neg. Hi") },
|
|
Packit |
01d647 |
{ 1536, N_("Classic Chrome") },
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! DynamicRange, tag 0x1402
|
|
Packit |
01d647 |
extern const TagDetails fujiDynamicRangeSetting[] = {
|
|
Packit |
01d647 |
{ 0, N_("Auto (100-400%)") },
|
|
Packit |
01d647 |
{ 1, N_("Raw") },
|
|
Packit |
01d647 |
{ 256, N_("Standard (100%)") },
|
|
Packit |
01d647 |
{ 512, N_("Wide mode 1 (230%)") },
|
|
Packit |
01d647 |
{ 513, N_("Wide mode 2 (400%)") },
|
|
Packit |
01d647 |
{ 32768, N_("Film simulation mode") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// Fujifilm MakerNote Tag Info
|
|
Packit |
01d647 |
const TagInfo FujiMakerNote::tagInfo_[] = {
|
|
Packit |
01d647 |
TagInfo(0x0000, "Version", N_("Version"),
|
|
Packit |
01d647 |
N_("Fujifilm Makernote version"),
|
|
Packit |
01d647 |
fujiId, makerTags, undefined, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0010, "SerialNumber", N_("Serial Number"),
|
|
Packit |
01d647 |
N_("This number is unique, and contains the date of manufacture, "
|
|
Packit |
01d647 |
"but is not the same as the number printed on the camera body."),
|
|
Packit |
01d647 |
fujiId, makerTags, asciiString, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1000, "Quality", N_("Quality"),
|
|
Packit |
01d647 |
N_("Image quality setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, asciiString, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1001, N_("Sharpness"), N_("Sharpness"),
|
|
Packit |
01d647 |
N_("Sharpness setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiSharpness)),
|
|
Packit |
01d647 |
TagInfo(0x1002, "WhiteBalance", N_("White Balance"),
|
|
Packit |
01d647 |
N_("White balance setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiWhiteBalance)),
|
|
Packit |
01d647 |
TagInfo(0x1003, "Color", N_("Color"),
|
|
Packit |
01d647 |
N_("Chroma saturation setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiColor)),
|
|
Packit |
01d647 |
TagInfo(0x1004, "Tone", N_("Tone"),
|
|
Packit |
01d647 |
N_("Contrast setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiTone)),
|
|
Packit |
01d647 |
TagInfo(0x1010, "FlashMode", N_("Flash Mode"),
|
|
Packit |
01d647 |
N_("Flash firing mode setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiFlashMode)),
|
|
Packit |
01d647 |
TagInfo(0x1011, "FlashStrength", N_("Flash Strength"),
|
|
Packit |
01d647 |
N_("Flash firing strength compensation setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, signedRational, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1020, "Macro", N_("Macro"),
|
|
Packit |
01d647 |
N_("Macro mode setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)),
|
|
Packit |
01d647 |
TagInfo(0x1021, "FocusMode", N_("Focus Mode"),
|
|
Packit |
01d647 |
N_("Focusing mode setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiFocusMode)),
|
|
Packit |
01d647 |
TagInfo(0x1022, "0x1022", "0x1022",
|
|
Packit |
01d647 |
N_("Unknown"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1030, "SlowSync", N_("Slow Sync"),
|
|
Packit |
01d647 |
N_("Slow synchro mode setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)),
|
|
Packit |
01d647 |
TagInfo(0x1031, "PictureMode", N_("Picture Mode"),
|
|
Packit |
01d647 |
N_("Picture mode setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiPictureMode)),
|
|
Packit |
01d647 |
TagInfo(0x1032, "0x1032", "0x1032",
|
|
Packit |
01d647 |
N_("Unknown"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1100, "Continuous", N_("Continuous"),
|
|
Packit |
01d647 |
N_("Continuous shooting or auto bracketing setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiContinuous)),
|
|
Packit |
01d647 |
TagInfo(0x1101, "SequenceNumber", N_("Sequence Number"),
|
|
Packit |
01d647 |
N_("Sequence number"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1200, "0x1200", "0x1200",
|
|
Packit |
01d647 |
N_("Unknown"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1210, "FinePixColor", N_("FinePix Color"),
|
|
Packit |
01d647 |
N_("Fuji FinePix color setting"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiFinePixColor)),
|
|
Packit |
01d647 |
TagInfo(0x1300, "BlurWarning", N_("Blur Warning"),
|
|
Packit |
01d647 |
N_("Blur warning status"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)),
|
|
Packit |
01d647 |
TagInfo(0x1301, "FocusWarning", N_("Focus Warning"),
|
|
Packit |
01d647 |
N_("Auto Focus warning status"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)),
|
|
Packit |
01d647 |
TagInfo(0x1302, "ExposureWarning", N_("Exposure Warning"),
|
|
Packit |
01d647 |
N_("Auto exposure warning status"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)),
|
|
Packit |
01d647 |
TagInfo(0x1400, "DynamicRange", N_("Dynamic Range"),
|
|
Packit |
01d647 |
N_("Dynamic range"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDynamicRange)),
|
|
Packit |
01d647 |
TagInfo(0x1401, "FilmMode", N_("Film Mode"),
|
|
Packit |
01d647 |
N_("Film mode"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiFilmMode)),
|
|
Packit |
01d647 |
TagInfo(0x1402, "DynamicRangeSetting", N_("Dynamic Range Setting"),
|
|
Packit |
01d647 |
N_("Dynamic range settings"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDynamicRangeSetting)),
|
|
Packit |
01d647 |
TagInfo(0x1403, "DevelopmentDynamicRange", N_("Development Dynamic Range"),
|
|
Packit |
01d647 |
N_("Development dynamic range"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1404, "MinFocalLength", N_("Minimum Focal Length"),
|
|
Packit |
01d647 |
N_("Minimum focal length"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedRational, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1405, "MaxFocalLength", N_("Maximum Focal Length"),
|
|
Packit |
01d647 |
N_("Maximum focal length"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedRational, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1406, "MaxApertureAtMinFocal", N_("Maximum Aperture at Minimum Focal"),
|
|
Packit |
01d647 |
N_("Maximum aperture at minimum focal"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedRational, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1407, "MaxApertureAtMaxFocal", N_("Maximum Aperture at Maximum Focal"),
|
|
Packit |
01d647 |
N_("Maximum aperture at maximum focal"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedRational, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8000, "FileSource", N_("File Source"),
|
|
Packit |
01d647 |
N_("File source"),
|
|
Packit |
01d647 |
fujiId, makerTags, asciiString, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8002, "OrderNumber", N_("Order Number"),
|
|
Packit |
01d647 |
N_("Order number"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedLong, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8003, "FrameNumber", N_("Frame Number"),
|
|
Packit |
01d647 |
N_("Frame number"),
|
|
Packit |
01d647 |
fujiId, makerTags, unsignedShort, -1, printValue),
|
|
Packit |
01d647 |
// End of list marker
|
|
Packit |
01d647 |
TagInfo(0xffff, "(UnknownFujiMakerNoteTag)", "(UnknownFujiMakerNoteTag)",
|
|
Packit |
01d647 |
N_("Unknown FujiMakerNote tag"),
|
|
Packit |
01d647 |
fujiId, makerTags, asciiString, -1, printValue)
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* FujiMakerNote::tagList()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return tagInfo_;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
}} // namespace Internal, Exiv2
|