|
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 |
|
|
Packit |
01d647 |
// included header files
|
|
Packit |
01d647 |
#include "tags_int.hpp"
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#include "convert.hpp"
|
|
Packit |
01d647 |
#include "error.hpp"
|
|
Packit |
01d647 |
#include "i18n.h" // NLS support.
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#include "canonmn_int.hpp"
|
|
Packit |
01d647 |
#include "casiomn_int.hpp"
|
|
Packit |
01d647 |
#include "fujimn_int.hpp"
|
|
Packit |
01d647 |
#include "minoltamn_int.hpp"
|
|
Packit |
01d647 |
#include "nikonmn_int.hpp"
|
|
Packit |
01d647 |
#include "olympusmn_int.hpp"
|
|
Packit |
01d647 |
#include "panasonicmn_int.hpp"
|
|
Packit |
01d647 |
#include "pentaxmn_int.hpp"
|
|
Packit |
01d647 |
#include "samsungmn_int.hpp"
|
|
Packit |
01d647 |
#include "sigmamn_int.hpp"
|
|
Packit |
01d647 |
#include "sonymn_int.hpp"
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#include <cmath>
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// *****************************************************************************
|
|
Packit |
01d647 |
// local declarations
|
|
Packit |
01d647 |
namespace {
|
|
Packit |
01d647 |
// Print version string from an intermediate string
|
|
Packit |
01d647 |
std::ostream& printVersion(std::ostream& os, const std::string& str)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
if (str.size() != 4) {
|
|
Packit |
01d647 |
return os << "(" << str << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
if (str[0] != '0') os << str[0];
|
|
Packit |
01d647 |
return os << str[1] << "." << str[2] << str[3];
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
namespace Exiv2 {
|
|
Packit |
01d647 |
namespace Internal {
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! List of all known Exif groups. Important: Group name (3rd column) must be unique!
|
|
Packit |
01d647 |
extern const GroupInfo groupInfo[] = {
|
|
Packit |
01d647 |
{ ifdIdNotSet, "Unknown IFD", "Unknown", 0 },
|
|
Packit |
01d647 |
{ ifd0Id, "IFD0", "Image", ifdTagList },
|
|
Packit |
01d647 |
{ ifd1Id, "IFD1", "Thumbnail", ifdTagList },
|
|
Packit |
01d647 |
{ ifd2Id, "IFD2", "Image2", ifdTagList },
|
|
Packit |
01d647 |
{ ifd3Id, "IFD3", "Image3", ifdTagList },
|
|
Packit |
01d647 |
{ exifId, "Exif", "Photo", exifTagList },
|
|
Packit |
01d647 |
{ gpsId, "GPSInfo", "GPSInfo", gpsTagList },
|
|
Packit |
01d647 |
{ iopId, "Iop", "Iop", iopTagList },
|
|
Packit |
01d647 |
{ mpfId, "MPF", "MpfInfo", mpfTagList },
|
|
Packit |
01d647 |
{ subImage1Id, "SubImage1", "SubImage1", ifdTagList },
|
|
Packit |
01d647 |
{ subImage2Id, "SubImage2", "SubImage2", ifdTagList },
|
|
Packit |
01d647 |
{ subImage3Id, "SubImage3", "SubImage3", ifdTagList },
|
|
Packit |
01d647 |
{ subImage4Id, "SubImage4", "SubImage4", ifdTagList },
|
|
Packit |
01d647 |
{ subImage5Id, "SubImage5", "SubImage5", ifdTagList },
|
|
Packit |
01d647 |
{ subImage6Id, "SubImage6", "SubImage6", ifdTagList },
|
|
Packit |
01d647 |
{ subImage7Id, "SubImage7", "SubImage7", ifdTagList },
|
|
Packit |
01d647 |
{ subImage8Id, "SubImage8", "SubImage8", ifdTagList },
|
|
Packit |
01d647 |
{ subImage9Id, "SubImage9", "SubImage9", ifdTagList },
|
|
Packit |
01d647 |
{ subThumb1Id, "SubThumb1", "SubThumb1", ifdTagList },
|
|
Packit |
01d647 |
{ panaRawId, "PanaRaw", "PanasonicRaw", PanasonicMakerNote::tagListRaw },
|
|
Packit |
01d647 |
{ mnId, "Makernote", "MakerNote", mnTagList },
|
|
Packit |
01d647 |
{ canonId, "Makernote", "Canon", CanonMakerNote::tagList },
|
|
Packit |
01d647 |
{ canonCsId, "Makernote", "CanonCs", CanonMakerNote::tagListCs },
|
|
Packit |
01d647 |
{ canonSiId, "Makernote", "CanonSi", CanonMakerNote::tagListSi },
|
|
Packit |
01d647 |
{ canonCfId, "Makernote", "CanonCf", CanonMakerNote::tagListCf },
|
|
Packit |
01d647 |
{ canonPiId, "Makernote", "CanonPi", CanonMakerNote::tagListPi },
|
|
Packit |
01d647 |
{ canonTiId, "Makernote", "CanonTi", CanonMakerNote::tagListTi },
|
|
Packit |
01d647 |
{ canonFiId, "Makernote", "CanonFi", CanonMakerNote::tagListFi },
|
|
Packit |
01d647 |
{ canonPaId, "Makernote", "CanonPa", CanonMakerNote::tagListPa },
|
|
Packit |
01d647 |
{ canonPrId, "Makernote", "CanonPr", CanonMakerNote::tagListPr },
|
|
Packit |
01d647 |
{ casioId, "Makernote", "Casio", CasioMakerNote::tagList },
|
|
Packit |
01d647 |
{ casio2Id, "Makernote", "Casio2", Casio2MakerNote::tagList },
|
|
Packit |
01d647 |
{ fujiId, "Makernote", "Fujifilm", FujiMakerNote::tagList },
|
|
Packit |
01d647 |
{ minoltaId, "Makernote", "Minolta", MinoltaMakerNote::tagList },
|
|
Packit |
01d647 |
{ minoltaCs5DId, "Makernote", "MinoltaCs5D", MinoltaMakerNote::tagListCs5D },
|
|
Packit |
01d647 |
{ minoltaCs7DId, "Makernote", "MinoltaCs7D", MinoltaMakerNote::tagListCs7D },
|
|
Packit |
01d647 |
{ minoltaCsOldId, "Makernote", "MinoltaCsOld", MinoltaMakerNote::tagListCsStd },
|
|
Packit |
01d647 |
{ minoltaCsNewId, "Makernote", "MinoltaCsNew", MinoltaMakerNote::tagListCsStd },
|
|
Packit |
01d647 |
{ nikon1Id, "Makernote", "Nikon1", Nikon1MakerNote::tagList },
|
|
Packit |
01d647 |
{ nikon2Id, "Makernote", "Nikon2", Nikon2MakerNote::tagList },
|
|
Packit |
01d647 |
{ nikon3Id, "Makernote", "Nikon3", Nikon3MakerNote::tagList },
|
|
Packit |
01d647 |
{ nikonPvId, "Makernote", "NikonPreview", ifdTagList },
|
|
Packit |
01d647 |
{ nikonVrId, "Makernote", "NikonVr", Nikon3MakerNote::tagListVr },
|
|
Packit |
01d647 |
{ nikonPcId, "Makernote", "NikonPc", Nikon3MakerNote::tagListPc },
|
|
Packit |
01d647 |
{ nikonWtId, "Makernote", "NikonWt", Nikon3MakerNote::tagListWt },
|
|
Packit |
01d647 |
{ nikonIiId, "Makernote", "NikonIi", Nikon3MakerNote::tagListIi },
|
|
Packit |
01d647 |
{ nikonAfId, "Makernote", "NikonAf", Nikon3MakerNote::tagListAf },
|
|
Packit |
01d647 |
{ nikonAf21Id, "Makernote", "NikonAf2", Nikon3MakerNote::tagListAf21 },
|
|
Packit |
01d647 |
{ nikonAf22Id, "Makernote", "NikonAf22", Nikon3MakerNote::tagListAf22 },
|
|
Packit |
01d647 |
{ nikonAFTId, "Makernote", "NikonAFT", Nikon3MakerNote::tagListAFT },
|
|
Packit |
01d647 |
{ nikonFiId, "Makernote", "NikonFi", Nikon3MakerNote::tagListFi },
|
|
Packit |
01d647 |
{ nikonMeId, "Makernote", "NikonMe", Nikon3MakerNote::tagListMe },
|
|
Packit |
01d647 |
{ nikonFl1Id, "Makernote", "NikonFl1", Nikon3MakerNote::tagListFl1 },
|
|
Packit |
01d647 |
{ nikonFl2Id, "Makernote", "NikonFl2", Nikon3MakerNote::tagListFl2 },
|
|
Packit |
01d647 |
{ nikonFl3Id, "Makernote", "NikonFl3", Nikon3MakerNote::tagListFl3 },
|
|
Packit |
01d647 |
{ nikonSi1Id, "Makernote", "NikonSiD80", Nikon3MakerNote::tagListSi1 },
|
|
Packit |
01d647 |
{ nikonSi2Id, "Makernote", "NikonSiD40", Nikon3MakerNote::tagListSi2 },
|
|
Packit |
01d647 |
{ nikonSi3Id, "Makernote", "NikonSiD300a", Nikon3MakerNote::tagListSi3 },
|
|
Packit |
01d647 |
{ nikonSi4Id, "Makernote", "NikonSiD300b", Nikon3MakerNote::tagListSi4 },
|
|
Packit |
01d647 |
{ nikonSi5Id, "Makernote", "NikonSi02xx", Nikon3MakerNote::tagListSi5 },
|
|
Packit |
01d647 |
{ nikonSi6Id, "Makernote", "NikonSi01xx", Nikon3MakerNote::tagListSi5 },
|
|
Packit |
01d647 |
{ nikonCb1Id, "Makernote", "NikonCb1", Nikon3MakerNote::tagListCb1 },
|
|
Packit |
01d647 |
{ nikonCb2Id, "Makernote", "NikonCb2", Nikon3MakerNote::tagListCb2 },
|
|
Packit |
01d647 |
{ nikonCb2aId, "Makernote", "NikonCb2a", Nikon3MakerNote::tagListCb2a },
|
|
Packit |
01d647 |
{ nikonCb2bId, "Makernote", "NikonCb2b", Nikon3MakerNote::tagListCb2b },
|
|
Packit |
01d647 |
{ nikonCb3Id, "Makernote", "NikonCb3", Nikon3MakerNote::tagListCb3 },
|
|
Packit |
01d647 |
{ nikonCb4Id, "Makernote", "NikonCb4", Nikon3MakerNote::tagListCb4 },
|
|
Packit |
01d647 |
{ nikonLd1Id, "Makernote", "NikonLd1", Nikon3MakerNote::tagListLd1 },
|
|
Packit |
01d647 |
{ nikonLd2Id, "Makernote", "NikonLd2", Nikon3MakerNote::tagListLd2 },
|
|
Packit |
01d647 |
{ nikonLd3Id, "Makernote", "NikonLd3", Nikon3MakerNote::tagListLd3 },
|
|
Packit |
01d647 |
{ olympusId, "Makernote", "Olympus", OlympusMakerNote::tagList },
|
|
Packit |
01d647 |
{ olympus2Id, "Makernote", "Olympus2", OlympusMakerNote::tagList },
|
|
Packit |
01d647 |
{ olympusCsId, "Makernote", "OlympusCs", OlympusMakerNote::tagListCs },
|
|
Packit |
01d647 |
{ olympusEqId, "Makernote", "OlympusEq", OlympusMakerNote::tagListEq },
|
|
Packit |
01d647 |
{ olympusRdId, "Makernote", "OlympusRd", OlympusMakerNote::tagListRd },
|
|
Packit |
01d647 |
{ olympusRd2Id, "Makernote", "OlympusRd2", OlympusMakerNote::tagListRd2 },
|
|
Packit |
01d647 |
{ olympusIpId, "Makernote", "OlympusIp", OlympusMakerNote::tagListIp },
|
|
Packit |
01d647 |
{ olympusFiId, "Makernote", "OlympusFi", OlympusMakerNote::tagListFi },
|
|
Packit |
01d647 |
{ olympusFe1Id, "Makernote", "OlympusFe1", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusFe2Id, "Makernote", "OlympusFe2", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusFe3Id, "Makernote", "OlympusFe3", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusFe4Id, "Makernote", "OlympusFe4", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusFe5Id, "Makernote", "OlympusFe5", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusFe6Id, "Makernote", "OlympusFe6", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusFe7Id, "Makernote", "OlympusFe7", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusFe8Id, "Makernote", "OlympusFe8", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusFe9Id, "Makernote", "OlympusFe9", OlympusMakerNote::tagListFe },
|
|
Packit |
01d647 |
{ olympusRiId, "Makernote", "OlympusRi", OlympusMakerNote::tagListRi },
|
|
Packit |
01d647 |
{ panasonicId, "Makernote", "Panasonic", PanasonicMakerNote::tagList },
|
|
Packit |
01d647 |
{ pentaxDngId, "Makernote", "PentaxDng", PentaxMakerNote::tagList },
|
|
Packit |
01d647 |
{ pentaxId, "Makernote", "Pentax", PentaxMakerNote::tagList },
|
|
Packit |
01d647 |
{ samsung2Id, "Makernote", "Samsung2", Samsung2MakerNote::tagList },
|
|
Packit |
01d647 |
{ samsungPvId, "Makernote", "SamsungPreview", ifdTagList },
|
|
Packit |
01d647 |
{ samsungPwId, "Makernote", "SamsungPictureWizard", Samsung2MakerNote::tagListPw },
|
|
Packit |
01d647 |
{ sigmaId, "Makernote", "Sigma", SigmaMakerNote::tagList },
|
|
Packit |
01d647 |
{ sony1Id, "Makernote", "Sony1", SonyMakerNote::tagList },
|
|
Packit |
01d647 |
{ sony2Id, "Makernote", "Sony2", SonyMakerNote::tagList },
|
|
Packit |
01d647 |
{ sonyMltId, "Makernote", "SonyMinolta", MinoltaMakerNote::tagList },
|
|
Packit |
01d647 |
{ sony1CsId, "Makernote", "Sony1Cs", SonyMakerNote::tagListCs },
|
|
Packit |
01d647 |
{ sony1Cs2Id, "Makernote", "Sony1Cs2", SonyMakerNote::tagListCs2 },
|
|
Packit |
01d647 |
{ sony1MltCs7DId, "Makernote", "Sony1MltCs7D", MinoltaMakerNote::tagListCs7D },
|
|
Packit |
01d647 |
{ sony1MltCsOldId, "Makernote", "Sony1MltCsOld",MinoltaMakerNote::tagListCsStd },
|
|
Packit |
01d647 |
{ sony1MltCsNewId, "Makernote", "Sony1MltCsNew",MinoltaMakerNote::tagListCsStd },
|
|
Packit |
01d647 |
{ sony1MltCsA100Id,"Makernote", "Sony1MltCsA100",MinoltaMakerNote::tagListCsA100},
|
|
Packit |
01d647 |
{ sony2CsId, "Makernote", "Sony2Cs", SonyMakerNote::tagListCs },
|
|
Packit |
01d647 |
{ sony2Cs2Id, "Makernote", "Sony2Cs2", SonyMakerNote::tagListCs2 },
|
|
Packit |
01d647 |
{ sony2FpId, "Makernote", "Sony2Fp", SonyMakerNote::tagListFp },
|
|
Packit Service |
fb147c |
{ sony2010eId, "Makernote", "Sony2010e", SonyMakerNote::tagList2010e },
|
|
Packit |
01d647 |
{ lastId, "(Last IFD info)", "(Last IFD item)", 0 }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Units for measuring X and Y resolution, tags 0x0128, 0xa210
|
|
Packit |
01d647 |
extern const TagDetails exifUnit[] = {
|
|
Packit |
01d647 |
{ 1, N_("none") },
|
|
Packit |
01d647 |
{ 2, N_("inch") },
|
|
Packit |
01d647 |
{ 3, N_("cm") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS altitude reference, tag 0x0005
|
|
Packit |
01d647 |
extern const TagDetails exifGPSAltitudeRef[] = {
|
|
Packit |
01d647 |
{ 0, N_("Above sea level") },
|
|
Packit |
01d647 |
{ 1, N_("Below sea level") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS status, tag 0x0009
|
|
Packit |
01d647 |
extern const TagDetails exifGPSStatus[] = {
|
|
Packit |
01d647 |
{ 'A', N_("Measurement in progress") },
|
|
Packit |
01d647 |
{ 'V', N_("Measurement Interoperability") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS measurement mode, tag 0x000a
|
|
Packit |
01d647 |
extern const TagDetails exifGPSMeasureMode[] = {
|
|
Packit |
01d647 |
{ '2', N_("Two-dimensional measurement") },
|
|
Packit |
01d647 |
{ '3', N_("Three-dimensional measurement") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS speed reference, tag 0x000c
|
|
Packit |
01d647 |
extern const TagDetails exifGPSSpeedRef[] = {
|
|
Packit |
01d647 |
{ 'K', N_("km/h") },
|
|
Packit |
01d647 |
{ 'M', N_("mph") },
|
|
Packit |
01d647 |
{ 'N', N_("knots") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS Destination distance ref, tag 0x0019
|
|
Packit |
01d647 |
extern const TagDetails exifGPSDestDistanceRef[] = {
|
|
Packit |
01d647 |
{ 'K', N_("Kilometers") },
|
|
Packit |
01d647 |
{ 'M', N_("Miles") },
|
|
Packit |
01d647 |
{ 'N', N_("Knots") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS Differential, tag 0x001e
|
|
Packit |
01d647 |
extern const TagDetails exifGPSDifferential[] = {
|
|
Packit |
01d647 |
{ 0, N_("Without correction") },
|
|
Packit |
01d647 |
{ 1, N_("Correction applied") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Orientation, tag 0x0112
|
|
Packit |
01d647 |
extern const TagDetails exifOrientation[] = {
|
|
Packit |
01d647 |
{ 1, N_("top, left") },
|
|
Packit |
01d647 |
{ 2, N_("top, right") },
|
|
Packit |
01d647 |
{ 3, N_("bottom, right") },
|
|
Packit |
01d647 |
{ 4, N_("bottom, left") },
|
|
Packit |
01d647 |
{ 5, N_("left, top") },
|
|
Packit |
01d647 |
{ 6, N_("right, top") },
|
|
Packit |
01d647 |
{ 7, N_("right, bottom") },
|
|
Packit |
01d647 |
{ 8, N_("left, bottom") },
|
|
Packit |
01d647 |
{ 8, N_("left, bottom") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Predictor, tag 0x013d
|
|
Packit |
01d647 |
extern const TagDetails exifPredictor[] = {
|
|
Packit |
01d647 |
{ 1, N_("No prediction scheme used") },
|
|
Packit |
01d647 |
{ 2, N_("Horizontal differencing") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! InkSet, tag 0x014c
|
|
Packit |
01d647 |
extern const TagDetails exifInkSet[] = {
|
|
Packit |
01d647 |
{ 1, N_("CMYK") },
|
|
Packit |
01d647 |
{ 2, N_("not CMYK") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! NewSubfileType, TIFF tag 0x00fe - this is actually a bitmask
|
|
Packit |
01d647 |
extern const TagDetails exifNewSubfileType[] = {
|
|
Packit |
01d647 |
{ 0, N_("Primary image") },
|
|
Packit |
01d647 |
{ 1, N_("Thumbnail/Preview image") },
|
|
Packit |
01d647 |
{ 2, N_("Primary image, Multi page file") },
|
|
Packit |
01d647 |
{ 3, N_("Thumbnail/Preview image, Multi page file") },
|
|
Packit |
01d647 |
{ 4, N_("Primary image, Transparency mask") },
|
|
Packit |
01d647 |
{ 5, N_("Thumbnail/Preview image, Transparency mask") },
|
|
Packit |
01d647 |
{ 6, N_("Primary image, Multi page file, Transparency mask") },
|
|
Packit |
01d647 |
{ 7, N_("Thumbnail/Preview image, Multi page file, Transparency mask") },
|
|
Packit |
01d647 |
{ 7, N_("Thumbnail/Preview image, Multi page file, Transparency mask") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! SubfileType, TIFF tag 0x00ff
|
|
Packit |
01d647 |
extern const TagDetails exifSubfileType[] = {
|
|
Packit |
01d647 |
{ 1, N_("Full-resolution image data") },
|
|
Packit |
01d647 |
{ 2, N_("Reduced-resolution image data") },
|
|
Packit |
01d647 |
{ 3, N_("A single page of a multi-page image") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Compression, tag 0x0103
|
|
Packit |
01d647 |
extern const TagDetails exifCompression[] = {
|
|
Packit |
01d647 |
{ 1, N_("Uncompressed") },
|
|
Packit |
01d647 |
{ 2, N_("CCITT RLE") },
|
|
Packit |
01d647 |
{ 3, N_("T4/Group 3 Fax") },
|
|
Packit |
01d647 |
{ 4, N_("T6/Group 4 Fax") },
|
|
Packit |
01d647 |
{ 5, N_("LZW") },
|
|
Packit |
01d647 |
{ 6, N_("JPEG (old-style)") },
|
|
Packit |
01d647 |
{ 7, N_("JPEG") },
|
|
Packit |
01d647 |
{ 8, N_("Adobe Deflate") },
|
|
Packit |
01d647 |
{ 9, N_("JBIG B&W") },
|
|
Packit |
01d647 |
{ 10, N_("JBIG Color") },
|
|
Packit |
01d647 |
{ 32766, N_("Next 2-bits RLE") },
|
|
Packit |
01d647 |
{ 32769, N_("Epson ERF Compressed") },
|
|
Packit |
01d647 |
{ 32770, N_("Samsung SRW Compressed") },
|
|
Packit |
01d647 |
{ 32771, N_("CCITT RLE 1-word") },
|
|
Packit |
01d647 |
{ 32773, N_("PackBits (Macintosh RLE)") },
|
|
Packit |
01d647 |
{ 32809, N_("Thunderscan RLE") },
|
|
Packit |
01d647 |
{ 32895, N_("IT8 CT Padding") },
|
|
Packit |
01d647 |
{ 32896, N_("IT8 Linework RLE") },
|
|
Packit |
01d647 |
{ 32897, N_("IT8 Monochrome Picture") },
|
|
Packit |
01d647 |
{ 32898, N_("IT8 Binary Lineart") },
|
|
Packit |
01d647 |
{ 32908, N_("Pixar Film (10-bits LZW)") },
|
|
Packit |
01d647 |
{ 32909, N_("Pixar Log (11-bits ZIP)") },
|
|
Packit |
01d647 |
{ 32946, N_("Pixar Deflate") },
|
|
Packit |
01d647 |
{ 32947, N_("Kodak DCS Encoding") },
|
|
Packit |
01d647 |
{ 34661, N_("ISO JBIG") },
|
|
Packit |
01d647 |
{ 34676, N_("SGI Log Luminance RLE") },
|
|
Packit |
01d647 |
{ 34677, N_("SGI Log 24-bits packed") },
|
|
Packit |
01d647 |
{ 34712, N_("Leadtools JPEG 2000") },
|
|
Packit |
01d647 |
{ 34713, N_("Nikon NEF Compressed") },
|
|
Packit |
01d647 |
{ 65000, N_("Kodak DCR Compressed") },
|
|
Packit |
01d647 |
{ 65535, N_("Pentax PEF Compressed") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! PhotometricInterpretation, tag 0x0106
|
|
Packit |
01d647 |
extern const TagDetails exifPhotometricInterpretation[] = {
|
|
Packit |
01d647 |
{ 0, N_("White Is Zero") },
|
|
Packit |
01d647 |
{ 1, N_("Black Is Zero") },
|
|
Packit |
01d647 |
{ 2, N_("RGB") },
|
|
Packit |
01d647 |
{ 3, N_("RGB Palette") },
|
|
Packit |
01d647 |
{ 4, N_("Transparency Mask") },
|
|
Packit |
01d647 |
{ 5, N_("CMYK") },
|
|
Packit |
01d647 |
{ 6, N_("YCbCr") },
|
|
Packit |
01d647 |
{ 8, N_("CIELab") },
|
|
Packit |
01d647 |
{ 9, N_("ICCLab") },
|
|
Packit |
01d647 |
{ 10, N_("ITULab") },
|
|
Packit |
01d647 |
{ 32803, N_("Color Filter Array") },
|
|
Packit |
01d647 |
{ 32844, N_("Pixar LogL") },
|
|
Packit |
01d647 |
{ 32845, N_("Pixar LogLuv") },
|
|
Packit |
01d647 |
{ 34892, N_("Linear Raw") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Thresholding, tag 0x0107
|
|
Packit |
01d647 |
extern const TagDetails exifThresholding[] = {
|
|
Packit |
01d647 |
{ 1, N_("No dithering or halftoning") },
|
|
Packit |
01d647 |
{ 2, N_("Ordered dither or halftone technique") },
|
|
Packit |
01d647 |
{ 3, N_("Randomized process") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! SampleFormat, tag 0x0153
|
|
Packit |
01d647 |
extern const TagDetails exifSampleFormat[] = {
|
|
Packit |
01d647 |
{ 1, N_("Unsigned integer data") },
|
|
Packit |
01d647 |
{ 2, N_("Two's complement signed integer data") },
|
|
Packit |
01d647 |
{ 3, N_("IEEE floating point data") },
|
|
Packit |
01d647 |
{ 4, N_("Undefined data format") },
|
|
Packit |
01d647 |
{ 4, N_("Undefined data format") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Indexed, tag 0x015a
|
|
Packit |
01d647 |
extern const TagDetails exifIndexed[] = {
|
|
Packit |
01d647 |
{ 0, N_("Not indexed") },
|
|
Packit |
01d647 |
{ 1, N_("Indexed") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! exifJpegLosslessPredictor, tag 0x0205
|
|
Packit |
01d647 |
extern const TagDetails exifJpegLosslessPredictor[] = {
|
|
Packit |
01d647 |
{ 1, N_("A") },
|
|
Packit |
01d647 |
{ 2, N_("B") },
|
|
Packit |
01d647 |
{ 3, N_("C") },
|
|
Packit |
01d647 |
{ 4, N_("A+B-C") },
|
|
Packit |
01d647 |
{ 5, N_("A+((B-C)/2)") },
|
|
Packit |
01d647 |
{ 6, N_("B+((A-C)/2)") },
|
|
Packit |
01d647 |
{ 7, N_("(A+B)/2") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Flash, Exif tag 0x9209
|
|
Packit |
01d647 |
extern const TagDetails exifFlash[] = {
|
|
Packit |
01d647 |
{ 0x00, N_("No flash") },
|
|
Packit |
01d647 |
{ 0x01, N_("Fired") },
|
|
Packit |
01d647 |
{ 0x05, N_("Fired, return light not detected") },
|
|
Packit |
01d647 |
{ 0x07, N_("Fired, return light detected") },
|
|
Packit |
01d647 |
{ 0x08, N_("Yes, did not fire") },
|
|
Packit |
01d647 |
{ 0x09, N_("Yes, compulsory") },
|
|
Packit |
01d647 |
{ 0x0d, N_("Yes, compulsory, return light not detected") },
|
|
Packit |
01d647 |
{ 0x0f, N_("Yes, compulsory, return light detected") },
|
|
Packit |
01d647 |
{ 0x10, N_("No, compulsory") },
|
|
Packit |
01d647 |
{ 0x14, N_("No, did not fire, return light not detected") },
|
|
Packit |
01d647 |
{ 0x18, N_("No, auto") },
|
|
Packit |
01d647 |
{ 0x19, N_("Yes, auto") },
|
|
Packit |
01d647 |
{ 0x1d, N_("Yes, auto, return light not detected") },
|
|
Packit |
01d647 |
{ 0x1f, N_("Yes, auto, return light detected") },
|
|
Packit |
01d647 |
{ 0x20, N_("No flash function") },
|
|
Packit |
01d647 |
{ 0x20, N_("No, no flash function") },
|
|
Packit |
01d647 |
{ 0x41, N_("Yes, red-eye reduction") },
|
|
Packit |
01d647 |
{ 0x45, N_("Yes, red-eye reduction, return light not detected") },
|
|
Packit |
01d647 |
{ 0x47, N_("Yes, red-eye reduction, return light detected") },
|
|
Packit |
01d647 |
{ 0x49, N_("Yes, compulsory, red-eye reduction") },
|
|
Packit |
01d647 |
{ 0x4d, N_("Yes, compulsory, red-eye reduction, return light not detected") },
|
|
Packit |
01d647 |
{ 0x4f, N_("Yes, compulsory, red-eye reduction, return light detected") },
|
|
Packit |
01d647 |
{ 0x50, N_("No, red-eye reduction") },
|
|
Packit |
01d647 |
{ 0x58, N_("No, auto, red-eye reduction") },
|
|
Packit |
01d647 |
{ 0x59, N_("Yes, auto, red-eye reduction") },
|
|
Packit |
01d647 |
{ 0x5d, N_("Yes, auto, red-eye reduction, return light not detected") },
|
|
Packit |
01d647 |
{ 0x5f, N_("Yes, auto, red-eye reduction, return light detected") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! CFALayout, tag 0xc617
|
|
Packit |
01d647 |
extern const TagDetails exifCfaLayout[] = {
|
|
Packit |
01d647 |
{ 1, N_("Rectangular (or square) layout") },
|
|
Packit |
01d647 |
{ 2, N_("Staggered layout A: even columns are offset down by 1/2 row") },
|
|
Packit |
01d647 |
{ 3, N_("Staggered layout B: even columns are offset up by 1/2 row") },
|
|
Packit |
01d647 |
{ 4, N_("Staggered layout C: even rows are offset right by 1/2 column") },
|
|
Packit |
01d647 |
{ 5, N_("Staggered layout D: even rows are offset left by 1/2 column") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Base IFD Tags (IFD0 and IFD1)
|
|
Packit |
01d647 |
static const TagInfo ifdTagInfo[] = {
|
|
Packit |
01d647 |
TagInfo(0x000b, "ProcessingSoftware", N_("Processing Software"),
|
|
Packit |
01d647 |
N_("The name and version of the software used to post-process "
|
|
Packit |
01d647 |
"the picture."), // ACD Systems Digital Imaging tag
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x00fe, "NewSubfileType", N_("New Subfile Type"),
|
|
Packit |
01d647 |
N_("A general indication of the kind of data contained in this subfile."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedLong, 1, EXV_PRINT_TAG(exifNewSubfileType)), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x00ff, "SubfileType", N_("Subfile Type"),
|
|
Packit |
01d647 |
N_("A general indication of the kind of data contained in this subfile. "
|
|
Packit |
01d647 |
"This field is deprecated. The NewSubfileType field should be used instead."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, EXV_PRINT_TAG(exifSubfileType)), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0100, "ImageWidth", N_("Image Width"),
|
|
Packit |
01d647 |
N_("The number of columns of image data, equal to the number of "
|
|
Packit |
01d647 |
"pixels per row. In JPEG compressed data a JPEG marker is "
|
|
Packit |
01d647 |
"used instead of this tag."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0101, "ImageLength", N_("Image Length"),
|
|
Packit |
01d647 |
N_("The number of rows of image data. In JPEG compressed data a "
|
|
Packit |
01d647 |
"JPEG marker is used instead of this tag."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0102, "BitsPerSample", N_("Bits per Sample"),
|
|
Packit |
01d647 |
N_("The number of bits per image component. In this standard each "
|
|
Packit |
01d647 |
"component of the image is 8 bits, so the value for this "
|
|
Packit |
01d647 |
"tag is 8. See also <SamplesPerPixel>. In JPEG compressed data "
|
|
Packit |
01d647 |
"a JPEG marker is used instead of this tag."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 3, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0103, "Compression", N_("Compression"),
|
|
Packit |
01d647 |
N_("The compression scheme used for the image data. When a "
|
|
Packit |
01d647 |
"primary image is JPEG compressed, this designation is "
|
|
Packit |
01d647 |
"not necessary and is omitted. When thumbnails use JPEG "
|
|
Packit |
01d647 |
"compression, this tag value is set to 6."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, EXV_PRINT_TAG(exifCompression)),
|
|
Packit |
01d647 |
TagInfo(0x0106, "PhotometricInterpretation", N_("Photometric Interpretation"),
|
|
Packit |
01d647 |
N_("The pixel composition. In JPEG compressed data a JPEG "
|
|
Packit |
01d647 |
"marker is used instead of this tag."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, EXV_PRINT_TAG(exifPhotometricInterpretation)),
|
|
Packit |
01d647 |
TagInfo(0x0107, "Thresholding", N_("Thresholding"),
|
|
Packit |
01d647 |
N_("For black and white TIFF files that represent shades of gray, "
|
|
Packit |
01d647 |
"the technique used to convert from gray to black and white pixels."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, EXV_PRINT_TAG(exifThresholding)), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0108, "CellWidth", N_("Cell Width"),
|
|
Packit |
01d647 |
N_("The width of the dithering or halftoning matrix used to create a "
|
|
Packit |
01d647 |
"dithered or halftoned bilevel file."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0109, "CellLength", N_("Cell Length"),
|
|
Packit |
01d647 |
N_("The length of the dithering or halftoning matrix used to create a "
|
|
Packit |
01d647 |
"dithered or halftoned bilevel file."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x010a, "FillOrder", N_("Fill Order"),
|
|
Packit |
01d647 |
N_("The logical order of bits within a byte"),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x010d, "DocumentName", N_("Document Name"),
|
|
Packit |
01d647 |
N_("The name of the document from which this image was scanned"),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, asciiString, 0, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x010e, "ImageDescription", N_("Image Description"),
|
|
Packit |
01d647 |
N_("A character string giving the title of the image. It may be "
|
|
Packit |
01d647 |
"a comment such as \"1988 company picnic\" or "
|
|
Packit |
01d647 |
"the like. Two-bytes character codes cannot be used. "
|
|
Packit |
01d647 |
"When a 2-bytes code is necessary, the Exif Private tag "
|
|
Packit |
01d647 |
"<UserComment> is to be used."),
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x010f, "Make", N_("Manufacturer"),
|
|
Packit |
01d647 |
N_("The manufacturer of the recording "
|
|
Packit |
01d647 |
"equipment. This is the manufacturer of the DSC, scanner, "
|
|
Packit |
01d647 |
"video digitizer or other equipment that generated the "
|
|
Packit |
01d647 |
"image. When the field is left blank, it is treated as unknown."),
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0110, "Model", N_("Model"),
|
|
Packit |
01d647 |
N_("The model name or model number of the equipment. This is the "
|
|
Packit |
01d647 |
"model name or number of the DSC, scanner, video digitizer "
|
|
Packit |
01d647 |
"or other equipment that generated the image. When the field "
|
|
Packit |
01d647 |
"is left blank, it is treated as unknown."),
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0111, "StripOffsets", N_("Strip Offsets"),
|
|
Packit |
01d647 |
N_("For each strip, the byte offset of that strip. It is "
|
|
Packit |
01d647 |
"recommended that this be selected so the number of strip "
|
|
Packit |
01d647 |
"bytes does not exceed 64 Kbytes. With JPEG compressed "
|
|
Packit |
01d647 |
"data this designation is not needed and is omitted. See also "
|
|
Packit |
01d647 |
"<RowsPerStrip> and <StripByteCounts>."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedLong, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0112, "Orientation", N_("Orientation"),
|
|
Packit |
01d647 |
N_("The image orientation viewed in terms of rows and columns."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, print0x0112),
|
|
Packit |
01d647 |
TagInfo(0x0115, "SamplesPerPixel", N_("Samples per Pixel"),
|
|
Packit |
01d647 |
N_("The number of components per pixel. Since this standard applies "
|
|
Packit |
01d647 |
"to RGB and YCbCr images, the value set for this tag is 3. "
|
|
Packit |
01d647 |
"In JPEG compressed data a JPEG marker is used instead of this tag."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0116, "RowsPerStrip", N_("Rows per Strip"),
|
|
Packit |
01d647 |
N_("The number of rows per strip. This is the number of rows "
|
|
Packit |
01d647 |
"in the image of one strip when an image is divided into "
|
|
Packit |
01d647 |
"strips. With JPEG compressed data this designation is not "
|
|
Packit |
01d647 |
"needed and is omitted. See also <StripOffsets> and <StripByteCounts>."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0117, "StripByteCounts", N_("Strip Byte Count"),
|
|
Packit |
01d647 |
N_("The total number of bytes in each strip. With JPEG compressed "
|
|
Packit |
01d647 |
"data this designation is not needed and is omitted."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedLong, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x011a, "XResolution", N_("X-Resolution"),
|
|
Packit |
01d647 |
N_("The number of pixels per <ResolutionUnit> in the <ImageWidth> "
|
|
Packit |
01d647 |
"direction. When the image resolution is unknown, 72 [dpi] is designated."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedRational, 1, printLong),
|
|
Packit |
01d647 |
TagInfo(0x011b, "YResolution", N_("Y-Resolution"),
|
|
Packit |
01d647 |
N_("The number of pixels per <ResolutionUnit> in the <ImageLength> "
|
|
Packit |
01d647 |
"direction. The same value as <XResolution> is designated."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedRational, 1, printLong),
|
|
Packit |
01d647 |
TagInfo(0x011c, "PlanarConfiguration", N_("Planar Configuration"),
|
|
Packit |
01d647 |
N_("Indicates whether pixel components are recorded in a chunky "
|
|
Packit |
01d647 |
"or planar format. In JPEG compressed files a JPEG marker "
|
|
Packit |
01d647 |
"is used instead of this tag. If this field does not exist, "
|
|
Packit |
01d647 |
"the TIFF default of 1 (chunky) is assumed."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0122, "GrayResponseUnit", N_("Gray Response Unit"),
|
|
Packit |
01d647 |
N_("The precision of the information contained in the GrayResponseCurve."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0123, "GrayResponseCurve", N_("Gray Response Curve"),
|
|
Packit |
01d647 |
N_("For grayscale data, the optical density of each possible pixel value."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0124, "T4Options", N_("T4 Options"),
|
|
Packit |
01d647 |
N_("T.4-encoding options."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedLong, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0125, "T6Options", N_("T6 Options"),
|
|
Packit |
01d647 |
N_("T.6-encoding options."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedLong, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0128, "ResolutionUnit", N_("Resolution Unit"),
|
|
Packit |
01d647 |
N_("The unit for measuring <XResolution> and <YResolution>. The same "
|
|
Packit |
01d647 |
"unit is used for both <XResolution> and <YResolution>. If "
|
|
Packit |
01d647 |
"the image resolution is unknown, 2 (inches) is designated."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printExifUnit),
|
|
Packit |
01d647 |
TagInfo(0x0129, "PageNumber", N_("Page Number"),
|
|
Packit |
01d647 |
N_("The page number of the page from which this image was scanned."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 2, printValue),
|
|
Packit |
01d647 |
TagInfo(0x012d, "TransferFunction", N_("Transfer Function"),
|
|
Packit |
01d647 |
N_("A transfer function for the image, described in tabular style. "
|
|
Packit |
01d647 |
"Normally this tag is not necessary, since color space is "
|
|
Packit |
01d647 |
"specified in the color space information tag (<ColorSpace>)."),
|
|
Packit |
01d647 |
ifd0Id, imgCharacter, unsignedShort, 3*256, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0131, "Software", N_("Software"),
|
|
Packit |
01d647 |
N_("This tag records the name and version of the software or "
|
|
Packit |
01d647 |
"firmware of the camera or image input device used to "
|
|
Packit |
01d647 |
"generate the image. The detailed format is not specified, but "
|
|
Packit |
01d647 |
"it is recommended that the example shown below be "
|
|
Packit |
01d647 |
"followed. When the field is left blank, it is treated as unknown."),
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0132, "DateTime", N_("Date and Time"),
|
|
Packit |
01d647 |
N_("The date and time of image creation. In Exif standard, "
|
|
Packit |
01d647 |
"it is the date and time the file was changed."),
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 20, printValue),
|
|
Packit |
01d647 |
TagInfo(0x013b, "Artist", N_("Artist"),
|
|
Packit |
01d647 |
N_("This tag records the name of the camera owner, photographer or "
|
|
Packit |
01d647 |
"image creator. The detailed format is not specified, but it is "
|
|
Packit |
01d647 |
"recommended that the information be written as in the example "
|
|
Packit |
01d647 |
"below for ease of Interoperability. When the field is "
|
|
Packit |
01d647 |
"left blank, it is treated as unknown. Ex.) \"Camera owner, John "
|
|
Packit |
01d647 |
"Smith; Photographer, Michael Brown; Image creator, Ken James\""),
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x013c, "HostComputer", N_("Host Computer"),
|
|
Packit |
01d647 |
N_("This tag records information about the host computer used "
|
|
Packit |
01d647 |
"to generate the image."),
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x013d, "Predictor", N_("Predictor"),
|
|
Packit |
01d647 |
N_("A predictor is a mathematical operator that is applied to "
|
|
Packit |
01d647 |
"the image data before an encoding scheme is applied."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, EXV_PRINT_TAG(exifPredictor)), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x013e, "WhitePoint", N_("White Point"),
|
|
Packit |
01d647 |
N_("The chromaticity of the white point of the image. Normally "
|
|
Packit |
01d647 |
"this tag is not necessary, since color space is specified "
|
|
Packit |
01d647 |
"in the colorspace information tag (<ColorSpace>)."),
|
|
Packit |
01d647 |
ifd0Id, imgCharacter, unsignedRational, 2, printValue),
|
|
Packit |
01d647 |
TagInfo(0x013f, "PrimaryChromaticities", N_("Primary Chromaticities"),
|
|
Packit |
01d647 |
N_("The chromaticity of the three primary colors of the image. "
|
|
Packit |
01d647 |
"Normally this tag is not necessary, since colorspace is "
|
|
Packit |
01d647 |
"specified in the colorspace information tag (<ColorSpace>)."),
|
|
Packit |
01d647 |
ifd0Id, imgCharacter, unsignedRational, 6, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0140, "ColorMap", N_("Color Map"),
|
|
Packit |
01d647 |
N_("A color map for palette color images. This field defines "
|
|
Packit |
01d647 |
"a Red-Green-Blue color map (often called a lookup table) "
|
|
Packit |
01d647 |
"for palette-color images. In a palette-color image, a "
|
|
Packit |
01d647 |
"pixel value is used to index into an RGB lookup table."),
|
|
Packit |
01d647 |
ifd0Id, imgCharacter, unsignedShort, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0141, "HalftoneHints", N_("Halftone Hints"),
|
|
Packit |
01d647 |
N_("The purpose of the HalftoneHints field is to convey to the "
|
|
Packit |
01d647 |
"halftone function the range of gray levels within a "
|
|
Packit |
01d647 |
"colorimetrically-specified image that should retain tonal detail."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 2, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0142, "TileWidth", N_("Tile Width"),
|
|
Packit |
01d647 |
N_("The tile width in pixels. This is the number of columns in each tile."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedShort, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0143, "TileLength", N_("Tile Length"),
|
|
Packit |
01d647 |
N_("The tile length (height) in pixels. This is the number of rows in each tile."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedShort, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0144, "TileOffsets", N_("Tile Offsets"),
|
|
Packit |
01d647 |
N_("For each tile, the byte offset of that tile, as compressed and "
|
|
Packit |
01d647 |
"stored on disk. The offset is specified with respect to the "
|
|
Packit |
01d647 |
"beginning of the TIFF file. Note that this implies that each "
|
|
Packit |
01d647 |
"tile has a location independent of the locations of other tiles."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedShort, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0145, "TileByteCounts", N_("Tile Byte Counts"),
|
|
Packit |
01d647 |
N_("For each tile, the number of (compressed) bytes in that tile. See "
|
|
Packit |
01d647 |
"TileOffsets for a description of how the byte counts are ordered."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedShort, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x014a, "SubIFDs", N_("SubIFD Offsets"),
|
|
Packit |
01d647 |
N_("Defined by Adobe Corporation to enable TIFF Trees within a TIFF file."),
|
|
Packit |
01d647 |
ifd0Id, tiffEp, unsignedLong, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x014c, "InkSet", N_("Ink Set"),
|
|
Packit |
01d647 |
N_("The set of inks used in a separated (PhotometricInterpretation=5) image."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, EXV_PRINT_TAG(exifInkSet)), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x014d, "InkNames", N_("Ink Names"),
|
|
Packit |
01d647 |
N_("The name of each ink used in a separated (PhotometricInterpretation=5) image."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, asciiString, 0, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x014e, "NumberOfInks", N_("Number Of Inks"),
|
|
Packit |
01d647 |
N_("The number of inks. Usually equal to SamplesPerPixel, unless there are extra samples."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0150, "DotRange", N_("Dot Range"),
|
|
Packit |
01d647 |
N_("The component values that correspond to a 0% dot and 100% dot."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedByte, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0151, "TargetPrinter", N_("Target Printer"),
|
|
Packit |
01d647 |
N_("A description of the printing environment for which this separation is intended."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, asciiString, 0, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0152, "ExtraSamples", N_("Extra Samples"),
|
|
Packit |
01d647 |
N_("Specifies that each pixel has m extra components whose interpretation "
|
|
Packit |
01d647 |
"is defined by one of the values listed below."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0153, "SampleFormat", N_("Sample Format"),
|
|
Packit |
01d647 |
N_("This field specifies how to interpret each data sample in a pixel."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, -1, EXV_PRINT_TAG(exifSampleFormat)), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0154, "SMinSampleValue", N_("SMin Sample Value"),
|
|
Packit |
01d647 |
N_("This field specifies the minimum sample value."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0155, "SMaxSampleValue", N_("SMax Sample Value"),
|
|
Packit |
01d647 |
N_("This field specifies the maximum sample value."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0156, "TransferRange", N_("Transfer Range"),
|
|
Packit |
01d647 |
N_("Expands the range of the TransferFunction"),
|
|
Packit |
01d647 |
ifd0Id, imgCharacter, unsignedShort, 6, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0157, "ClipPath", N_("Clip Path"),
|
|
Packit |
01d647 |
N_("A TIFF ClipPath is intended to mirror the essentials of PostScript's "
|
|
Packit |
01d647 |
"path creation functionality."),
|
|
Packit |
01d647 |
ifd0Id, tiffPm6, unsignedByte, -1, printValue), // TIFF&PM6 tag
|
|
Packit |
01d647 |
TagInfo(0x0158, "XClipPathUnits", N_("X Clip Path Units"),
|
|
Packit |
01d647 |
N_("The number of units that span the width of the image, in terms of "
|
|
Packit |
01d647 |
"integer ClipPath coordinates."),
|
|
Packit |
01d647 |
ifd0Id, tiffPm6, signedShort, 1, printValue), // TIFF&PM6 tag
|
|
Packit |
01d647 |
TagInfo(0x0159, "YClipPathUnits", N_("Y Clip Path Units"),
|
|
Packit |
01d647 |
N_("The number of units that span the height of the image, in terms of "
|
|
Packit |
01d647 |
"integer ClipPath coordinates."),
|
|
Packit |
01d647 |
ifd0Id, tiffPm6, signedShort, 1, printValue), // TIFF&PM6 tag
|
|
Packit |
01d647 |
TagInfo(0x015a, "Indexed", N_("Indexed"),
|
|
Packit |
01d647 |
N_("Indexed images are images where the 'pixels' do not represent color "
|
|
Packit |
01d647 |
"values, but rather an index (usually 8-bit) into a separate color "
|
|
Packit |
01d647 |
"table, the ColorMap."),
|
|
Packit |
01d647 |
ifd0Id, tiffPm6, unsignedShort, 1, EXV_PRINT_TAG(exifIndexed)), // TIFF&PM6 tag
|
|
Packit |
01d647 |
TagInfo(0x015b, "JPEGTables", N_("JPEG tables"),
|
|
Packit |
01d647 |
N_("This optional tag may be used to encode the JPEG quantization and "
|
|
Packit |
01d647 |
"Huffman tables for subsequent use by the JPEG decompression process."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, undefined, 0, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x015F, "OPIProxy", N_("OPI Proxy"),
|
|
Packit |
01d647 |
N_("OPIProxy gives information concerning whether this image is a "
|
|
Packit |
01d647 |
"low-resolution proxy of a high-resolution image (Adobe OPI)."),
|
|
Packit |
01d647 |
ifd0Id, adobeOpi, unsignedShort, 1, printValue), // Adobe OPI tag
|
|
Packit |
01d647 |
TagInfo(0x0200, "JPEGProc", N_("JPEG Process"),
|
|
Packit |
01d647 |
N_("This field indicates the process used to produce the compressed data"),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedLong, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0201, "JPEGInterchangeFormat", N_("JPEG Interchange Format"),
|
|
Packit |
01d647 |
N_("The offset to the start byte (SOI) of JPEG compressed "
|
|
Packit |
01d647 |
"thumbnail data. This is not used for primary image JPEG data."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0202, "JPEGInterchangeFormatLength", N_("JPEG Interchange Format Length"),
|
|
Packit |
01d647 |
N_("The number of bytes of JPEG compressed thumbnail data. This "
|
|
Packit |
01d647 |
"is not used for primary image JPEG data. JPEG thumbnails "
|
|
Packit |
01d647 |
"are not divided but are recorded as a continuous JPEG "
|
|
Packit |
01d647 |
"bitstream from SOI to EOI. Appn and COM markers should "
|
|
Packit |
01d647 |
"not be recorded. Compressed thumbnails must be recorded in no "
|
|
Packit |
01d647 |
"more than 64 Kbytes, including all other data to be recorded in APP1."),
|
|
Packit |
01d647 |
ifd0Id, recOffset, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0203, "JPEGRestartInterval", N_("JPEG Restart Interval"),
|
|
Packit |
01d647 |
N_("This Field indicates the length of the restart interval used "
|
|
Packit |
01d647 |
"in the compressed image data."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0205, "JPEGLosslessPredictors", N_("JPEG Lossless Predictors"),
|
|
Packit |
01d647 |
N_("This Field points to a list of lossless predictor-selection "
|
|
Packit |
01d647 |
"values, one per component."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, -1, EXV_PRINT_TAG(exifJpegLosslessPredictor)), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0206, "JPEGPointTransforms", N_("JPEG Point Transforms"),
|
|
Packit |
01d647 |
N_("This Field points to a list of point transform values, one per component."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0207, "JPEGQTables", N_("JPEG Q-Tables"),
|
|
Packit |
01d647 |
N_("This Field points to a list of offsets to the quantization tables, "
|
|
Packit |
01d647 |
"one per component."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedLong, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0208, "JPEGDCTables", N_("JPEG DC-Tables"),
|
|
Packit |
01d647 |
N_("This Field points to a list of offsets to the DC Huffman tables or "
|
|
Packit |
01d647 |
"the lossless Huffman tables, one per component."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedLong, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0209, "JPEGACTables", N_("JPEG AC-Tables"),
|
|
Packit |
01d647 |
N_("This Field points to a list of offsets to the Huffman AC tables, "
|
|
Packit |
01d647 |
"one per component."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedLong, -1, printValue), // TIFF tag
|
|
Packit |
01d647 |
TagInfo(0x0211, "YCbCrCoefficients", N_("YCbCr Coefficients"),
|
|
Packit |
01d647 |
N_("The matrix coefficients for transformation from RGB to YCbCr "
|
|
Packit |
01d647 |
"image data. No default is given in TIFF; but here the "
|
|
Packit |
01d647 |
"value given in Appendix E, \"Color Space Guidelines\", is used "
|
|
Packit |
01d647 |
"as the default. The color space is declared in a "
|
|
Packit |
01d647 |
"color space information tag, with the default being the value "
|
|
Packit |
01d647 |
"that gives the optimal image characteristics "
|
|
Packit |
01d647 |
"Interoperability this condition."),
|
|
Packit |
01d647 |
ifd0Id, imgCharacter, unsignedRational, 3, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0212, "YCbCrSubSampling", N_("YCbCr Sub-Sampling"),
|
|
Packit |
01d647 |
N_("The sampling ratio of chrominance components in relation to the "
|
|
Packit |
01d647 |
"luminance component. In JPEG compressed data a JPEG marker "
|
|
Packit |
01d647 |
"is used instead of this tag."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 2, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0213, "YCbCrPositioning", N_("YCbCr Positioning"),
|
|
Packit |
01d647 |
N_("The position of chrominance components in relation to the "
|
|
Packit |
01d647 |
"luminance component. This field is designated only for "
|
|
Packit |
01d647 |
"JPEG compressed data or uncompressed YCbCr data. The TIFF "
|
|
Packit |
01d647 |
"default is 1 (centered); but when Y:Cb:Cr = 4:2:2 it is "
|
|
Packit |
01d647 |
"recommended in this standard that 2 (co-sited) be used to "
|
|
Packit |
01d647 |
"record data, in order to improve the image quality when viewed "
|
|
Packit |
01d647 |
"on TV systems. When this field does not exist, the reader shall "
|
|
Packit |
01d647 |
"assume the TIFF default. In the case of Y:Cb:Cr = 4:2:0, the "
|
|
Packit |
01d647 |
"TIFF default (centered) is recommended. If the reader "
|
|
Packit |
01d647 |
"does not have the capability of supporting both kinds of "
|
|
Packit |
01d647 |
"<YCbCrPositioning>, it shall follow the TIFF default regardless "
|
|
Packit |
01d647 |
"of the value in this field. It is preferable that readers "
|
|
Packit |
01d647 |
"be able to support both centered and co-sited positioning."),
|
|
Packit |
01d647 |
ifd0Id, imgStruct, unsignedShort, 1, print0x0213),
|
|
Packit |
01d647 |
TagInfo(0x0214, "ReferenceBlackWhite", N_("Reference Black/White"),
|
|
Packit |
01d647 |
N_("The reference black point value and reference white point "
|
|
Packit |
01d647 |
"value. No defaults are given in TIFF, but the values "
|
|
Packit |
01d647 |
"below are given as defaults here. The color space is declared "
|
|
Packit |
01d647 |
"in a color space information tag, with the default "
|
|
Packit |
01d647 |
"being the value that gives the optimal image characteristics "
|
|
Packit |
01d647 |
"Interoperability these conditions."),
|
|
Packit |
01d647 |
ifd0Id, imgCharacter, unsignedRational, 6, printValue),
|
|
Packit |
01d647 |
TagInfo(0x02bc, "XMLPacket", N_("XML Packet"),
|
|
Packit |
01d647 |
N_("XMP Metadata (Adobe technote 9-14-02)"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedByte, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x4746, "Rating", N_("Windows Rating"),
|
|
Packit |
01d647 |
N_("Rating tag used by Windows"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedShort, -1, printValue), // Windows Tag
|
|
Packit |
01d647 |
TagInfo(0x4749, "RatingPercent", N_("Windows Rating Percent"),
|
|
Packit |
01d647 |
N_("Rating tag used by Windows, value in percent"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedShort, -1, printValue), // Windows Tag
|
|
Packit |
01d647 |
TagInfo(0x800d, "ImageID", N_("Image ID"),
|
|
Packit |
01d647 |
N_("ImageID is the full pathname of the original, high-resolution image, "
|
|
Packit |
01d647 |
"or any other identifying string that uniquely identifies the original "
|
|
Packit |
01d647 |
"image (Adobe OPI)."),
|
|
Packit |
01d647 |
ifd0Id, adobeOpi, asciiString, 0, printValue), // Adobe OPI tag
|
|
Packit |
01d647 |
TagInfo(0x828d, "CFARepeatPatternDim", N_("CFA Repeat Pattern Dimension"),
|
|
Packit |
01d647 |
N_("Contains two values representing the minimum rows and columns "
|
|
Packit |
01d647 |
"to define the repeating patterns of the color filter array"),
|
|
Packit |
01d647 |
ifd0Id, tiffEp, unsignedShort, 2, printValue), // TIFF/EP Tag
|
|
Packit |
01d647 |
TagInfo(0x828e, "CFAPattern", N_("CFA Pattern"),
|
|
Packit |
01d647 |
N_("Indicates the color filter array (CFA) geometric pattern of the image "
|
|
Packit |
01d647 |
"sensor when a one-chip color area sensor is used. It does not apply to "
|
|
Packit |
01d647 |
"all sensing methods"),
|
|
Packit |
01d647 |
ifd0Id, tiffEp, unsignedByte, -1, printValue), // TIFF/EP Tag
|
|
Packit |
01d647 |
TagInfo(0x828f, "BatteryLevel", N_("Battery Level"),
|
|
Packit |
01d647 |
"Contains a value of the battery level as a fraction or string",
|
|
Packit |
01d647 |
ifd0Id, tiffEp, unsignedRational, 1, printValue), // TIFF/EP Tag
|
|
Packit |
01d647 |
TagInfo(0x8298, "Copyright", N_("Copyright"),
|
|
Packit |
01d647 |
N_("Copyright information. In this standard the tag is used to "
|
|
Packit |
01d647 |
"indicate both the photographer and editor copyrights. It is "
|
|
Packit |
01d647 |
"the copyright notice of the person or organization claiming "
|
|
Packit |
01d647 |
"rights to the image. The Interoperability copyright "
|
|
Packit |
01d647 |
"statement including date and rights should be written in this "
|
|
Packit |
01d647 |
"field; e.g., \"Copyright, John Smith, 19xx. All rights "
|
|
Packit |
01d647 |
"reserved.\". In this standard the field records both the "
|
|
Packit |
01d647 |
"photographer and editor copyrights, with each recorded in a "
|
|
Packit |
01d647 |
"separate part of the statement. When there is a clear distinction "
|
|
Packit |
01d647 |
"between the photographer and editor copyrights, these are to be "
|
|
Packit |
01d647 |
"written in the order of photographer followed by editor copyright, "
|
|
Packit |
01d647 |
"separated by NULL (in this case since the statement also ends with "
|
|
Packit |
01d647 |
"a NULL, there are two NULL codes). When only the photographer "
|
|
Packit |
01d647 |
"copyright is given, it is terminated by one NULL code. When only "
|
|
Packit |
01d647 |
"the editor copyright is given, the photographer copyright part "
|
|
Packit |
01d647 |
"consists of one space followed by a terminating NULL code, then "
|
|
Packit |
01d647 |
"the editor copyright is given. When the field is left blank, it is "
|
|
Packit |
01d647 |
"treated as unknown."),
|
|
Packit |
01d647 |
ifd0Id, otherTags, asciiString, 0, print0x8298),
|
|
Packit |
01d647 |
TagInfo(0x829a, "ExposureTime", N_("Exposure Time"), N_("Exposure time, given in seconds."), ifd0Id, tiffEp, unsignedRational, 1, print0x829a), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x829d, "FNumber", N_("FNumber"), N_("The F number."), ifd0Id, tiffEp, unsignedRational, 1, print0x829d), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x83bb, "IPTCNAA", N_("IPTC/NAA"),
|
|
Packit |
01d647 |
N_("Contains an IPTC/NAA record"),
|
|
Packit |
01d647 |
ifd0Id, tiffEp, unsignedLong, 0, printValue), // TIFF/EP Tag
|
|
Packit |
01d647 |
TagInfo(0x8649, "ImageResources", N_("Image Resources Block"),
|
|
Packit |
01d647 |
N_("Contains information embedded by the Adobe Photoshop application"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedByte, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8769, "ExifTag", N_("Exif IFD Pointer"),
|
|
Packit |
01d647 |
N_("A pointer to the Exif IFD. Interoperability, Exif IFD has the "
|
|
Packit |
01d647 |
"same structure as that of the IFD specified in TIFF. "
|
|
Packit |
01d647 |
"ordinarily, however, it does not contain image data as in "
|
|
Packit |
01d647 |
"the case of TIFF."),
|
|
Packit |
01d647 |
ifd0Id, exifFormat, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8773, "InterColorProfile", N_("Inter Color Profile"),
|
|
Packit |
01d647 |
N_("Contains an InterColor Consortium (ICC) format color space characterization/profile"),
|
|
Packit |
01d647 |
ifd0Id, tiffEp, undefined, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8822, "ExposureProgram", N_("Exposure Program"), N_("The class of the program used by the camera to set exposure when the picture is taken."), ifd0Id, tiffEp, unsignedShort, 1, print0x8822), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x8824, "SpectralSensitivity", N_("Spectral Sensitivity"), N_("Indicates the spectral sensitivity of each channel of the camera used."), ifd0Id, tiffEp, asciiString, 0, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x8825, "GPSTag", N_("GPS Info IFD Pointer"),
|
|
Packit |
01d647 |
N_("A pointer to the GPS Info IFD. The "
|
|
Packit |
01d647 |
"Interoperability structure of the GPS Info IFD, like that of "
|
|
Packit |
01d647 |
"Exif IFD, has no image data."),
|
|
Packit |
01d647 |
ifd0Id, exifFormat, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8827, "ISOSpeedRatings", N_("ISO Speed Ratings"), N_("Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232."), ifd0Id, tiffEp, unsignedShort, 0, print0x8827), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x8828, "OECF", N_("OECF"), N_("Indicates the Opto-Electric Conversion Function (OECF) specified in ISO 14524."), ifd0Id, tiffEp, undefined, 0, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x8829, "Interlace", N_("Interlace"), N_("Indicates the field number of multifield images."), ifd0Id, tiffEp, unsignedShort, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x882a, "TimeZoneOffset", N_("Time Zone Offset"),
|
|
Packit |
01d647 |
N_("This optional tag encodes the time zone of the camera clock (relative "
|
|
Packit |
01d647 |
"to Greenwich Mean Time) used to create the DataTimeOriginal tag-value "
|
|
Packit |
01d647 |
"when the picture was taken. It may also contain the time zone offset "
|
|
Packit |
01d647 |
"of the clock used to create the DateTime tag-value when the image was "
|
|
Packit |
01d647 |
"modified."),
|
|
Packit |
01d647 |
ifd0Id, tiffEp, signedShort, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x882b, "SelfTimerMode", N_("Self Timer Mode"), N_("Number of seconds image capture was delayed from button press."), ifd0Id, tiffEp, unsignedShort, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9003, "DateTimeOriginal", N_("Date Time Original"), N_("The date and time when the original image data was generated."), ifd0Id, tiffEp, asciiString, 20, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9102, "CompressedBitsPerPixel", N_("Compressed Bits Per Pixel"), N_("Specific to compressed data; states the compressed bits per pixel."), ifd0Id, tiffEp, unsignedRational, 1, printFloat), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9201, "ShutterSpeedValue", N_("Shutter Speed Value"), N_("Shutter speed."), ifd0Id, tiffEp, signedRational, 1, print0x9201), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9202, "ApertureValue", N_("Aperture Value"), N_("The lens aperture."), ifd0Id, tiffEp, unsignedRational, 1, print0x9202), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9203, "BrightnessValue", N_("Brightness Value"), N_("The value of brightness."), ifd0Id, tiffEp, signedRational, 1, printFloat), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9204, "ExposureBiasValue", N_("Exposure Bias Value"), N_("The exposure bias."), ifd0Id, tiffEp, signedRational, 1, print0x9204), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9205, "MaxApertureValue", N_("Max Aperture Value"), N_("The smallest F number of the lens."), ifd0Id, tiffEp, unsignedRational, 1, print0x9202), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9206, "SubjectDistance", N_("Subject Distance"), N_("The distance to the subject, given in meters."), ifd0Id, tiffEp, signedRational, 1, print0x9206), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9207, "MeteringMode", N_("Metering Mode"), N_("The metering mode."), ifd0Id, tiffEp, unsignedShort, 1, print0x9207), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9208, "LightSource", N_("Light Source"), N_("The kind of light source."), ifd0Id, tiffEp, unsignedShort, 1, print0x9208), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9209, "Flash", N_("Flash"), N_("Indicates the status of flash when the image was shot."), ifd0Id, tiffEp, unsignedShort, 1, EXV_PRINT_TAG(exifFlash)), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x920a, "FocalLength", N_("Focal Length"), N_("The actual focal length of the lens, in mm."), ifd0Id, tiffEp, unsignedRational, 1, print0x920a), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x920b, "FlashEnergy", N_("Flash Energy"), N_("Amount of flash energy (BCPS)."), ifd0Id, tiffEp, unsignedRational, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x920c, "SpatialFrequencyResponse", N_("Spatial Frequency Response"), N_("SFR of the camera."), ifd0Id, tiffEp, undefined, 0, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x920d, "Noise", N_("Noise"), N_("Noise measurement values."), ifd0Id, tiffEp, undefined, 0, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x920e, "FocalPlaneXResolution", N_("Focal Plane X Resolution"), N_("Number of pixels per FocalPlaneResolutionUnit (37392) in ImageWidth direction for main image."), ifd0Id, tiffEp, unsignedRational, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x920f, "FocalPlaneYResolution", N_("Focal Plane Y Resolution"), N_("Number of pixels per FocalPlaneResolutionUnit (37392) in ImageLength direction for main image."), ifd0Id, tiffEp, unsignedRational, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9210, "FocalPlaneResolutionUnit", N_("Focal Plane Resolution Unit"), N_("Unit of measurement for FocalPlaneXResolution(37390) and FocalPlaneYResolution(37391)."), ifd0Id, tiffEp, unsignedShort, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9211, "ImageNumber", N_("Image Number"), N_("Number assigned to an image, e.g., in a chained image burst."), ifd0Id, tiffEp, unsignedLong, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9212, "SecurityClassification", N_("Security Classification"), N_("Security classification assigned to the image."), ifd0Id, tiffEp, asciiString, 0, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9213, "ImageHistory", N_("Image History"), N_("Record of what has been done to the image."), ifd0Id, tiffEp, asciiString, 0, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9214, "SubjectLocation", N_("Subject Location"), N_("Indicates the location and area of the main subject in the overall scene."), ifd0Id, tiffEp, unsignedShort, 2, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9215, "ExposureIndex", N_("Exposure Index"), N_("Encodes the camera exposure index setting when image was captured."), ifd0Id, tiffEp, unsignedRational, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9216, "TIFFEPStandardID", N_("TIFF/EP Standard ID"),
|
|
Packit |
01d647 |
N_("Contains four ASCII characters representing the TIFF/EP standard "
|
|
Packit |
01d647 |
"version of a TIFF/EP file, eg '1', '0', '0', '0'"),
|
|
Packit |
01d647 |
ifd0Id, tiffEp, unsignedByte, 4, printValue), // TIFF/EP Tag
|
|
Packit |
01d647 |
TagInfo(0x9217, "SensingMethod", N_("Sensing Method"), N_("Type of image sensor."), ifd0Id, tiffEp, unsignedShort, 1, printValue), // TIFF/EP tag
|
|
Packit |
01d647 |
TagInfo(0x9c9b, "XPTitle", N_("Windows Title"),
|
|
Packit |
01d647 |
N_("Title tag used by Windows, encoded in UCS2"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedByte, -1, printUcs2), // Windows Tag
|
|
Packit |
01d647 |
TagInfo(0x9c9c, "XPComment", N_("Windows Comment"),
|
|
Packit |
01d647 |
N_("Comment tag used by Windows, encoded in UCS2"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedByte, -1, printUcs2), // Windows Tag
|
|
Packit |
01d647 |
TagInfo(0x9c9d, "XPAuthor", N_("Windows Author"),
|
|
Packit |
01d647 |
N_("Author tag used by Windows, encoded in UCS2"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedByte, -1, printUcs2), // Windows Tag
|
|
Packit |
01d647 |
TagInfo(0x9c9e, "XPKeywords", N_("Windows Keywords"),
|
|
Packit |
01d647 |
N_("Keywords tag used by Windows, encoded in UCS2"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedByte, -1, printUcs2), // Windows Tag
|
|
Packit |
01d647 |
TagInfo(0x9c9f, "XPSubject", N_("Windows Subject"),
|
|
Packit |
01d647 |
N_("Subject tag used by Windows, encoded in UCS2"),
|
|
Packit |
01d647 |
ifd0Id, otherTags, unsignedByte, -1, printUcs2), // Windows Tag
|
|
Packit |
01d647 |
TagInfo(0xc4a5, "PrintImageMatching", N_("Print Image Matching"),
|
|
Packit |
01d647 |
N_("Print Image Matching, description needed."),
|
|
Packit |
01d647 |
ifd0Id, otherTags, undefined, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xc612, "DNGVersion", N_("DNG version"),
|
|
Packit |
01d647 |
N_("This tag encodes the DNG four-tier version number. For files "
|
|
Packit |
01d647 |
"compliant with version 1.1.0.0 of the DNG specification, this "
|
|
Packit |
01d647 |
"tag should contain the bytes: 1, 1, 0, 0."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 4, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc613, "DNGBackwardVersion", N_("DNG backward version"),
|
|
Packit |
01d647 |
N_("This tag specifies the oldest version of the Digital Negative "
|
|
Packit |
01d647 |
"specification for which a file is compatible. Readers should"
|
|
Packit |
01d647 |
"not attempt to read a file if this tag specifies a version "
|
|
Packit |
01d647 |
"number that is higher than the version number of the specification "
|
|
Packit |
01d647 |
"the reader was based on. In addition to checking the version tags, "
|
|
Packit |
01d647 |
"readers should, for all tags, check the types, counts, and values, "
|
|
Packit |
01d647 |
"to verify it is able to correctly read the file."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 4, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc614, "UniqueCameraModel", N_("Unique Camera Model"),
|
|
Packit |
01d647 |
N_("Defines a unique, non-localized name for the camera model that "
|
|
Packit |
01d647 |
"created the image in the raw file. This name should include the "
|
|
Packit |
01d647 |
"manufacturer's name to avoid conflicts, and should not be localized, "
|
|
Packit |
01d647 |
"even if the camera name itself is localized for different markets "
|
|
Packit |
01d647 |
"(see LocalizedCameraModel). This string may be used by reader "
|
|
Packit |
01d647 |
"software to index into per-model preferences and replacement profiles."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, asciiString, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc615, "LocalizedCameraModel", N_("Localized Camera Model"),
|
|
Packit |
01d647 |
N_("Similar to the UniqueCameraModel field, except the name can be "
|
|
Packit |
01d647 |
"localized for different markets to match the localization of the "
|
|
Packit |
01d647 |
"camera name."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc616, "CFAPlaneColor", N_("CFA Plane Color"),
|
|
Packit |
01d647 |
N_("Provides a mapping between the values in the CFAPattern tag and the "
|
|
Packit |
01d647 |
"plane numbers in LinearRaw space. This is a required tag for non-RGB "
|
|
Packit |
01d647 |
"CFA images."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc617, "CFALayout", N_("CFA Layout"),
|
|
Packit |
01d647 |
N_("Describes the spatial layout of the CFA."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 1, EXV_PRINT_TAG(exifCfaLayout)), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc618, "LinearizationTable", N_("Linearization Table"),
|
|
Packit |
01d647 |
N_("Describes a lookup table that maps stored values into linear values. "
|
|
Packit |
01d647 |
"This tag is typically used to increase compression ratios by storing "
|
|
Packit |
01d647 |
"the raw data in a non-linear, more visually uniform space with fewer "
|
|
Packit |
01d647 |
"total encoding levels. If SamplesPerPixel is not equal to one, this "
|
|
Packit |
01d647 |
"single table applies to all the samples for each pixel."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc619, "BlackLevelRepeatDim", N_("Black Level Repeat Dim"),
|
|
Packit |
01d647 |
N_("Specifies repeat pattern size for the BlackLevel tag."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 2, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc61a, "BlackLevel", N_("Black Level"),
|
|
Packit |
01d647 |
N_("Specifies the zero light (a.k.a. thermal black or black current) "
|
|
Packit |
01d647 |
"encoding level, as a repeating pattern. The origin of this pattern "
|
|
Packit |
01d647 |
"is the top-left corner of the ActiveArea rectangle. The values are "
|
|
Packit |
01d647 |
"stored in row-column-sample scan order."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc61b, "BlackLevelDeltaH", N_("Black Level Delta H"),
|
|
Packit |
01d647 |
N_("If the zero light encoding level is a function of the image column, "
|
|
Packit |
01d647 |
"BlackLevelDeltaH specifies the difference between the zero light "
|
|
Packit |
01d647 |
"encoding level for each column and the baseline zero light encoding "
|
|
Packit |
01d647 |
"level. If SamplesPerPixel is not equal to one, this single table "
|
|
Packit |
01d647 |
"applies to all the samples for each pixel."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc61c, "BlackLevelDeltaV", N_("Black Level Delta V"),
|
|
Packit |
01d647 |
N_("If the zero light encoding level is a function of the image row, "
|
|
Packit |
01d647 |
"this tag specifies the difference between the zero light encoding "
|
|
Packit |
01d647 |
"level for each row and the baseline zero light encoding level. If "
|
|
Packit |
01d647 |
"SamplesPerPixel is not equal to one, this single table applies to "
|
|
Packit |
01d647 |
"all the samples for each pixel."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc61d, "WhiteLevel", N_("White Level"),
|
|
Packit |
01d647 |
N_("This tag specifies the fully saturated encoding level for the raw "
|
|
Packit |
01d647 |
"sample values. Saturation is caused either by the sensor itself "
|
|
Packit |
01d647 |
"becoming highly non-linear in response, or by the camera's analog "
|
|
Packit |
01d647 |
"to digital converter clipping."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc61e, "DefaultScale", N_("Default Scale"),
|
|
Packit |
01d647 |
N_("DefaultScale is required for cameras with non-square pixels. It "
|
|
Packit |
01d647 |
"specifies the default scale factors for each direction to convert "
|
|
Packit |
01d647 |
"the image to square pixels. Typically these factors are selected "
|
|
Packit |
01d647 |
"to approximately preserve total pixel count. For CFA images that "
|
|
Packit |
01d647 |
"use CFALayout equal to 2, 3, 4, or 5, such as the Fujifilm SuperCCD, "
|
|
Packit |
01d647 |
"these two values should usually differ by a factor of 2.0."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 2, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc61f, "DefaultCropOrigin", N_("Default Crop Origin"),
|
|
Packit |
01d647 |
N_("Raw images often store extra pixels around the edges of the final "
|
|
Packit |
01d647 |
"image. These extra pixels help prevent interpolation artifacts near "
|
|
Packit |
01d647 |
"the edges of the final image. DefaultCropOrigin specifies the origin "
|
|
Packit |
01d647 |
"of the final image area, in raw image coordinates (i.e., before the "
|
|
Packit |
01d647 |
"DefaultScale has been applied), relative to the top-left corner of "
|
|
Packit |
01d647 |
"the ActiveArea rectangle."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 2, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc620, "DefaultCropSize", N_("Default Crop Size"),
|
|
Packit |
01d647 |
N_("Raw images often store extra pixels around the edges of the final "
|
|
Packit |
01d647 |
"image. These extra pixels help prevent interpolation artifacts near "
|
|
Packit |
01d647 |
"the edges of the final image. DefaultCropSize specifies the size of "
|
|
Packit |
01d647 |
"the final image area, in raw image coordinates (i.e., before the "
|
|
Packit |
01d647 |
"DefaultScale has been applied)."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 2, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc621, "ColorMatrix1", N_("Color Matrix 1"),
|
|
Packit |
01d647 |
N_("ColorMatrix1 defines a transformation matrix that converts XYZ "
|
|
Packit |
01d647 |
"values to reference camera native color space values, under the "
|
|
Packit |
01d647 |
"first calibration illuminant. The matrix values are stored in row "
|
|
Packit |
01d647 |
"scan order. The ColorMatrix1 tag is required for all non-monochrome "
|
|
Packit |
01d647 |
"DNG files."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc622, "ColorMatrix2", N_("Color Matrix 2"),
|
|
Packit |
01d647 |
N_("ColorMatrix2 defines a transformation matrix that converts XYZ "
|
|
Packit |
01d647 |
"values to reference camera native color space values, under the "
|
|
Packit |
01d647 |
"second calibration illuminant. The matrix values are stored in row "
|
|
Packit |
01d647 |
"scan order."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc623, "CameraCalibration1", N_("Camera Calibration 1"),
|
|
Packit |
01d647 |
N_("CameraCalibration1 defines a calibration matrix that transforms "
|
|
Packit |
01d647 |
"reference camera native space values to individual camera native "
|
|
Packit |
01d647 |
"space values under the first calibration illuminant. The matrix is "
|
|
Packit |
01d647 |
"stored in row scan order. This matrix is stored separately from the "
|
|
Packit |
01d647 |
"matrix specified by the ColorMatrix1 tag to allow raw converters to "
|
|
Packit |
01d647 |
"swap in replacement color matrices based on UniqueCameraModel tag, "
|
|
Packit |
01d647 |
"while still taking advantage of any per-individual camera calibration "
|
|
Packit |
01d647 |
"performed by the camera manufacturer."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc624, "CameraCalibration2", N_("Camera Calibration 2"),
|
|
Packit |
01d647 |
N_("CameraCalibration2 defines a calibration matrix that transforms "
|
|
Packit |
01d647 |
"reference camera native space values to individual camera native "
|
|
Packit |
01d647 |
"space values under the second calibration illuminant. The matrix is "
|
|
Packit |
01d647 |
"stored in row scan order. This matrix is stored separately from the "
|
|
Packit |
01d647 |
"matrix specified by the ColorMatrix2 tag to allow raw converters to "
|
|
Packit |
01d647 |
"swap in replacement color matrices based on UniqueCameraModel tag, "
|
|
Packit |
01d647 |
"while still taking advantage of any per-individual camera calibration "
|
|
Packit |
01d647 |
"performed by the camera manufacturer."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc625, "ReductionMatrix1", N_("Reduction Matrix 1"),
|
|
Packit |
01d647 |
N_("ReductionMatrix1 defines a dimensionality reduction matrix for use as "
|
|
Packit |
01d647 |
"the first stage in converting color camera native space values to XYZ "
|
|
Packit |
01d647 |
"values, under the first calibration illuminant. This tag may only be "
|
|
Packit |
01d647 |
"used if ColorPlanes is greater than 3. The matrix is stored in row "
|
|
Packit |
01d647 |
"scan order."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc626, "ReductionMatrix2", N_("Reduction Matrix 2"),
|
|
Packit |
01d647 |
N_("ReductionMatrix2 defines a dimensionality reduction matrix for use as "
|
|
Packit |
01d647 |
"the first stage in converting color camera native space values to XYZ "
|
|
Packit |
01d647 |
"values, under the second calibration illuminant. This tag may only be "
|
|
Packit |
01d647 |
"used if ColorPlanes is greater than 3. The matrix is stored in row "
|
|
Packit |
01d647 |
"scan order."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc627, "AnalogBalance", N_("Analog Balance"),
|
|
Packit |
01d647 |
N_("Normally the stored raw values are not white balanced, since any "
|
|
Packit |
01d647 |
"digital white balancing will reduce the dynamic range of the final "
|
|
Packit |
01d647 |
"image if the user decides to later adjust the white balance; "
|
|
Packit |
01d647 |
"however, if camera hardware is capable of white balancing the color "
|
|
Packit |
01d647 |
"channels before the signal is digitized, it can improve the dynamic "
|
|
Packit |
01d647 |
"range of the final image. AnalogBalance defines the gain, either "
|
|
Packit |
01d647 |
"analog (recommended) or digital (not recommended) that has been "
|
|
Packit |
01d647 |
"applied the stored raw values."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc628, "AsShotNeutral", N_("As Shot Neutral"),
|
|
Packit |
01d647 |
N_("Specifies the selected white balance at time of capture, encoded as "
|
|
Packit |
01d647 |
"the coordinates of a perfectly neutral color in linear reference "
|
|
Packit |
01d647 |
"space values. The inclusion of this tag precludes the inclusion of "
|
|
Packit |
01d647 |
"the AsShotWhiteXY tag."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc629, "AsShotWhiteXY", N_("As Shot White XY"),
|
|
Packit |
01d647 |
N_("Specifies the selected white balance at time of capture, encoded as "
|
|
Packit |
01d647 |
"x-y chromaticity coordinates. The inclusion of this tag precludes "
|
|
Packit |
01d647 |
"the inclusion of the AsShotNeutral tag."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 2, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc62a, "BaselineExposure", N_("Baseline Exposure"),
|
|
Packit |
01d647 |
N_("Camera models vary in the trade-off they make between highlight "
|
|
Packit |
01d647 |
"headroom and shadow noise. Some leave a significant amount of "
|
|
Packit |
01d647 |
"highlight headroom during a normal exposure. This allows significant "
|
|
Packit |
01d647 |
"negative exposure compensation to be applied during raw conversion, "
|
|
Packit |
01d647 |
"but also means normal exposures will contain more shadow noise. Other "
|
|
Packit |
01d647 |
"models leave less headroom during normal exposures. This allows for "
|
|
Packit |
01d647 |
"less negative exposure compensation, but results in lower shadow "
|
|
Packit |
01d647 |
"noise for normal exposures. Because of these differences, a raw "
|
|
Packit |
01d647 |
"converter needs to vary the zero point of its exposure compensation "
|
|
Packit |
01d647 |
"control from model to model. BaselineExposure specifies by how much "
|
|
Packit |
01d647 |
"(in EV units) to move the zero point. Positive values result in "
|
|
Packit |
01d647 |
"brighter default results, while negative values result in darker "
|
|
Packit |
01d647 |
"default results."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc62b, "BaselineNoise", N_("Baseline Noise"),
|
|
Packit |
01d647 |
N_("Specifies the relative noise level of the camera model at a baseline "
|
|
Packit |
01d647 |
"ISO value of 100, compared to a reference camera model. Since noise "
|
|
Packit |
01d647 |
"levels tend to vary approximately with the square root of the ISO "
|
|
Packit |
01d647 |
"value, a raw converter can use this value, combined with the current "
|
|
Packit |
01d647 |
"ISO, to estimate the relative noise level of the current image."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc62c, "BaselineSharpness", N_("Baseline Sharpness"),
|
|
Packit |
01d647 |
N_("Specifies the relative amount of sharpening required for this camera "
|
|
Packit |
01d647 |
"model, compared to a reference camera model. Camera models vary in "
|
|
Packit |
01d647 |
"the strengths of their anti-aliasing filters. Cameras with weak or "
|
|
Packit |
01d647 |
"no filters require less sharpening than cameras with strong "
|
|
Packit |
01d647 |
"anti-aliasing filters."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc62d, "BayerGreenSplit", N_("Bayer Green Split"),
|
|
Packit |
01d647 |
N_("Only applies to CFA images using a Bayer pattern filter array. This "
|
|
Packit |
01d647 |
"tag specifies, in arbitrary units, how closely the values of the "
|
|
Packit |
01d647 |
"green pixels in the blue/green rows track the values of the green "
|
|
Packit |
01d647 |
"pixels in the red/green rows. A value of zero means the two kinds "
|
|
Packit |
01d647 |
"of green pixels track closely, while a non-zero value means they "
|
|
Packit |
01d647 |
"sometimes diverge. The useful range for this tag is from 0 (no "
|
|
Packit |
01d647 |
"divergence) to about 5000 (quite large divergence)."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedLong, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc62e, "LinearResponseLimit", N_("Linear Response Limit"),
|
|
Packit |
01d647 |
N_("Some sensors have an unpredictable non-linearity in their response "
|
|
Packit |
01d647 |
"as they near the upper limit of their encoding range. This "
|
|
Packit |
01d647 |
"non-linearity results in color shifts in the highlight areas of the "
|
|
Packit |
01d647 |
"resulting image unless the raw converter compensates for this effect. "
|
|
Packit |
01d647 |
"LinearResponseLimit specifies the fraction of the encoding range "
|
|
Packit |
01d647 |
"above which the response may become significantly non-linear."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc62f, "CameraSerialNumber", N_("Camera Serial Number"),
|
|
Packit |
01d647 |
N_("CameraSerialNumber contains the serial number of the camera or camera "
|
|
Packit |
01d647 |
"body that captured the image."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, asciiString, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc630, "LensInfo", N_("Lens Info"),
|
|
Packit |
01d647 |
N_("Contains information about the lens that captured the image. If the "
|
|
Packit |
01d647 |
"minimum f-stops are unknown, they should be encoded as 0/0."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 4, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc631, "ChromaBlurRadius", N_("Chroma Blur Radius"),
|
|
Packit |
01d647 |
N_("ChromaBlurRadius provides a hint to the DNG reader about how much "
|
|
Packit |
01d647 |
"chroma blur should be applied to the image. If this tag is omitted, "
|
|
Packit |
01d647 |
"the reader will use its default amount of chroma blurring. "
|
|
Packit |
01d647 |
"Normally this tag is only included for non-CFA images, since the "
|
|
Packit |
01d647 |
"amount of chroma blur required for mosaic images is highly dependent "
|
|
Packit |
01d647 |
"on the de-mosaic algorithm, in which case the DNG reader's default "
|
|
Packit |
01d647 |
"value is likely optimized for its particular de-mosaic algorithm."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc632, "AntiAliasStrength", N_("Anti Alias Strength"),
|
|
Packit |
01d647 |
N_("Provides a hint to the DNG reader about how strong the camera's "
|
|
Packit |
01d647 |
"anti-alias filter is. A value of 0.0 means no anti-alias filter "
|
|
Packit |
01d647 |
"(i.e., the camera is prone to aliasing artifacts with some subjects), "
|
|
Packit |
01d647 |
"while a value of 1.0 means a strong anti-alias filter (i.e., the "
|
|
Packit |
01d647 |
"camera almost never has aliasing artifacts)."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc633, "ShadowScale", N_("Shadow Scale"),
|
|
Packit |
01d647 |
N_("This tag is used by Adobe Camera Raw to control the sensitivity of "
|
|
Packit |
01d647 |
"its 'Shadows' slider."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc634, "DNGPrivateData", N_("DNG Private Data"),
|
|
Packit |
01d647 |
N_("Provides a way for camera manufacturers to store private data in the "
|
|
Packit |
01d647 |
"DNG file for use by their own raw converters, and to have that data "
|
|
Packit |
01d647 |
"preserved by programs that edit DNG files."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc635, "MakerNoteSafety", N_("MakerNote Safety"),
|
|
Packit |
01d647 |
N_("MakerNoteSafety lets the DNG reader know whether the EXIF MakerNote "
|
|
Packit |
01d647 |
"tag is safe to preserve along with the rest of the EXIF data. File "
|
|
Packit |
01d647 |
"browsers and other image management software processing an image "
|
|
Packit |
01d647 |
"with a preserved MakerNote should be aware that any thumbnail "
|
|
Packit |
01d647 |
"image embedded in the MakerNote may be stale, and may not reflect "
|
|
Packit |
01d647 |
"the current state of the full size image."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc65a, "CalibrationIlluminant1", N_("Calibration Illuminant 1"),
|
|
Packit |
01d647 |
N_("The illuminant used for the first set of color calibration tags "
|
|
Packit |
01d647 |
"(ColorMatrix1, CameraCalibration1, ReductionMatrix1). The legal "
|
|
Packit |
01d647 |
"values for this tag are the same as the legal values for the "
|
|
Packit |
01d647 |
"LightSource EXIF tag."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc65b, "CalibrationIlluminant2", N_("Calibration Illuminant 2"),
|
|
Packit |
01d647 |
N_("The illuminant used for an optional second set of color calibration "
|
|
Packit |
01d647 |
"tags (ColorMatrix2, CameraCalibration2, ReductionMatrix2). The legal "
|
|
Packit |
01d647 |
"values for this tag are the same as the legal values for the "
|
|
Packit |
01d647 |
"CalibrationIlluminant1 tag; however, if both are included, neither "
|
|
Packit |
01d647 |
"is allowed to have a value of 0 (unknown)."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc65c, "BestQualityScale", N_("Best Quality Scale"),
|
|
Packit |
01d647 |
N_("For some cameras, the best possible image quality is not achieved "
|
|
Packit |
01d647 |
"by preserving the total pixel count during conversion. For example, "
|
|
Packit |
01d647 |
"Fujifilm SuperCCD images have maximum detail when their total pixel "
|
|
Packit |
01d647 |
"count is doubled. This tag specifies the amount by which the values "
|
|
Packit |
01d647 |
"of the DefaultScale tag need to be multiplied to achieve the best "
|
|
Packit |
01d647 |
"quality image size."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc65d, "RawDataUniqueID", N_("Raw Data Unique ID"),
|
|
Packit |
01d647 |
N_("This tag contains a 16-byte unique identifier for the raw image data "
|
|
Packit |
01d647 |
"in the DNG file. DNG readers can use this tag to recognize a "
|
|
Packit |
01d647 |
"particular raw image, even if the file's name or the metadata "
|
|
Packit |
01d647 |
"contained in the file has been changed. If a DNG writer creates such "
|
|
Packit |
01d647 |
"an identifier, it should do so using an algorithm that will ensure "
|
|
Packit |
01d647 |
"that it is very unlikely two different images will end up having the "
|
|
Packit |
01d647 |
"same identifier."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 16, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc68b, "OriginalRawFileName", N_("Original Raw File Name"),
|
|
Packit |
01d647 |
N_("If the DNG file was converted from a non-DNG raw file, then this tag "
|
|
Packit |
01d647 |
"contains the file name of that original raw file."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc68c, "OriginalRawFileData", N_("Original Raw File Data"),
|
|
Packit |
01d647 |
N_("If the DNG file was converted from a non-DNG raw file, then this tag "
|
|
Packit |
01d647 |
"contains the compressed contents of that original raw file. The "
|
|
Packit |
01d647 |
"contents of this tag always use the big-endian byte order. The tag "
|
|
Packit |
01d647 |
"contains a sequence of data blocks. Future versions of the DNG "
|
|
Packit |
01d647 |
"specification may define additional data blocks, so DNG readers "
|
|
Packit |
01d647 |
"should ignore extra bytes when parsing this tag. DNG readers should "
|
|
Packit |
01d647 |
"also detect the case where data blocks are missing from the end of "
|
|
Packit |
01d647 |
"the sequence, and should assume a default value for all the missing "
|
|
Packit |
01d647 |
"blocks. There are no padding or alignment bytes between data blocks."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, undefined, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc68d, "ActiveArea", N_("Active Area"),
|
|
Packit |
01d647 |
N_("This rectangle defines the active (non-masked) pixels of the sensor. "
|
|
Packit |
01d647 |
"The order of the rectangle coordinates is: top, left, bottom, right."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 4, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc68e, "MaskedAreas", N_("Masked Areas"),
|
|
Packit |
01d647 |
N_("This tag contains a list of non-overlapping rectangle coordinates of "
|
|
Packit |
01d647 |
"fully masked pixels, which can be optionally used by DNG readers "
|
|
Packit |
01d647 |
"to measure the black encoding level. The order of each rectangle's "
|
|
Packit |
01d647 |
"coordinates is: top, left, bottom, right. If the raw image data has "
|
|
Packit |
01d647 |
"already had its black encoding level subtracted, then this tag should "
|
|
Packit |
01d647 |
"not be used, since the masked pixels are no longer useful."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc68f, "AsShotICCProfile", N_("As-Shot ICC Profile"),
|
|
Packit |
01d647 |
N_("This tag contains an ICC profile that, in conjunction with the "
|
|
Packit |
01d647 |
"AsShotPreProfileMatrix tag, provides the camera manufacturer with a "
|
|
Packit |
01d647 |
"way to specify a default color rendering from camera color space "
|
|
Packit |
01d647 |
"coordinates (linear reference values) into the ICC profile connection "
|
|
Packit |
01d647 |
"space. The ICC profile connection space is an output referred "
|
|
Packit |
01d647 |
"colorimetric space, whereas the other color calibration tags in DNG "
|
|
Packit |
01d647 |
"specify a conversion into a scene referred colorimetric space. This "
|
|
Packit |
01d647 |
"means that the rendering in this profile should include any desired "
|
|
Packit |
01d647 |
"tone and gamut mapping needed to convert between scene referred "
|
|
Packit |
01d647 |
"values and output referred values."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, undefined, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc690, "AsShotPreProfileMatrix", N_("As-Shot Pre-Profile Matrix"),
|
|
Packit |
01d647 |
N_("This tag is used in conjunction with the AsShotICCProfile tag. It "
|
|
Packit |
01d647 |
"specifies a matrix that should be applied to the camera color space "
|
|
Packit |
01d647 |
"coordinates before processing the values through the ICC profile "
|
|
Packit |
01d647 |
"specified in the AsShotICCProfile tag. The matrix is stored in the "
|
|
Packit |
01d647 |
"row scan order. If ColorPlanes is greater than three, then this "
|
|
Packit |
01d647 |
"matrix can (but is not required to) reduce the dimensionality of the "
|
|
Packit |
01d647 |
"color data down to three components, in which case the AsShotICCProfile "
|
|
Packit |
01d647 |
"should have three rather than ColorPlanes input components."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc691, "CurrentICCProfile", N_("Current ICC Profile"),
|
|
Packit |
01d647 |
N_("This tag is used in conjunction with the CurrentPreProfileMatrix tag. "
|
|
Packit |
01d647 |
"The CurrentICCProfile and CurrentPreProfileMatrix tags have the same "
|
|
Packit |
01d647 |
"purpose and usage as the AsShotICCProfile and AsShotPreProfileMatrix "
|
|
Packit |
01d647 |
"tag pair, except they are for use by raw file editors rather than "
|
|
Packit |
01d647 |
"camera manufacturers."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, undefined, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc692, "CurrentPreProfileMatrix", N_("Current Pre-Profile Matrix"),
|
|
Packit |
01d647 |
N_("This tag is used in conjunction with the CurrentICCProfile tag. "
|
|
Packit |
01d647 |
"The CurrentICCProfile and CurrentPreProfileMatrix tags have the same "
|
|
Packit |
01d647 |
"purpose and usage as the AsShotICCProfile and AsShotPreProfileMatrix "
|
|
Packit |
01d647 |
"tag pair, except they are for use by raw file editors rather than "
|
|
Packit |
01d647 |
"camera manufacturers."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6bf, "ColorimetricReference", N_("Colorimetric Reference"),
|
|
Packit |
01d647 |
N_("The DNG color model documents a transform between camera colors and "
|
|
Packit |
01d647 |
"CIE XYZ values. This tag describes the colorimetric reference for the "
|
|
Packit |
01d647 |
"CIE XYZ values. 0 = The XYZ values are scene-referred. 1 = The XYZ values "
|
|
Packit |
01d647 |
"are output-referred, using the ICC profile perceptual dynamic range. This "
|
|
Packit |
01d647 |
"tag allows output-referred data to be stored in DNG files and still processed "
|
|
Packit |
01d647 |
"correctly by DNG readers."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedShort, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6f3, "CameraCalibrationSignature", N_("Camera Calibration Signature"),
|
|
Packit |
01d647 |
N_("A UTF-8 encoded string associated with the CameraCalibration1 and "
|
|
Packit |
01d647 |
"CameraCalibration2 tags. The CameraCalibration1 and CameraCalibration2 tags "
|
|
Packit |
01d647 |
"should only be used in the DNG color transform if the string stored in the "
|
|
Packit |
01d647 |
"CameraCalibrationSignature tag exactly matches the string stored in the "
|
|
Packit |
01d647 |
"ProfileCalibrationSignature tag for the selected camera profile."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6f4, "ProfileCalibrationSignature", N_("Profile Calibration Signature"),
|
|
Packit |
01d647 |
N_("A UTF-8 encoded string associated with the camera profile tags. The "
|
|
Packit |
01d647 |
"CameraCalibration1 and CameraCalibration2 tags should only be used in the "
|
|
Packit |
01d647 |
"DNG color transfer if the string stored in the CameraCalibrationSignature "
|
|
Packit |
01d647 |
"tag exactly matches the string stored in the ProfileCalibrationSignature tag "
|
|
Packit |
01d647 |
"for the selected camera profile."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6f6, "AsShotProfileName", N_("As Shot Profile Name"),
|
|
Packit |
01d647 |
N_("A UTF-8 encoded string containing the name of the \"as shot\" camera "
|
|
Packit |
01d647 |
"profile, if any."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6f7, "NoiseReductionApplied", N_("Noise Reduction Applied"),
|
|
Packit |
01d647 |
N_("This tag indicates how much noise reduction has been applied to the raw "
|
|
Packit |
01d647 |
"data on a scale of 0.0 to 1.0. A 0.0 value indicates that no noise reduction "
|
|
Packit |
01d647 |
"has been applied. A 1.0 value indicates that the \"ideal\" amount of noise "
|
|
Packit |
01d647 |
"reduction has been applied, i.e. that the DNG reader should not apply "
|
|
Packit |
01d647 |
"additional noise reduction by default. A value of 0/0 indicates that this "
|
|
Packit |
01d647 |
"parameter is unknown."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6f8, "ProfileName", N_("Profile Name"),
|
|
Packit |
01d647 |
N_("A UTF-8 encoded string containing the name of the camera profile. This "
|
|
Packit |
01d647 |
"tag is optional if there is only a single camera profile stored in the file "
|
|
Packit |
01d647 |
"but is required for all camera profiles if there is more than one camera "
|
|
Packit |
01d647 |
"profile stored in the file."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6f9, "ProfileHueSatMapDims", N_("Profile Hue Sat Map Dims"),
|
|
Packit |
01d647 |
N_("This tag specifies the number of input samples in each dimension of the "
|
|
Packit |
01d647 |
"hue/saturation/value mapping tables. The data for these tables are stored "
|
|
Packit |
01d647 |
"in ProfileHueSatMapData1 and ProfileHueSatMapData2 tags. The most common "
|
|
Packit |
01d647 |
"case has ValueDivisions equal to 1, so only hue and saturation are used as "
|
|
Packit |
01d647 |
"inputs to the mapping table."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedLong, 3, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6fa, "ProfileHueSatMapData1", N_("Profile Hue Sat Map Data 1"),
|
|
Packit |
01d647 |
N_("This tag contains the data for the first hue/saturation/value mapping "
|
|
Packit |
01d647 |
"table. Each entry of the table contains three 32-bit IEEE floating-point "
|
|
Packit |
01d647 |
"values. The first entry is hue shift in degrees; the second entry is "
|
|
Packit |
01d647 |
"saturation scale factor; and the third entry is a value scale factor. The "
|
|
Packit |
01d647 |
"table entries are stored in the tag in nested loop order, with the value "
|
|
Packit |
01d647 |
"divisions in the outer loop, the hue divisions in the middle loop, and the "
|
|
Packit |
01d647 |
"saturation divisions in the inner loop. All zero input saturation entries "
|
|
Packit |
01d647 |
"are required to have a value scale factor of 1.0."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, tiffFloat, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6fb, "ProfileHueSatMapData2", N_("Profile Hue Sat Map Data 2"),
|
|
Packit |
01d647 |
N_("This tag contains the data for the second hue/saturation/value mapping "
|
|
Packit |
01d647 |
"table. Each entry of the table contains three 32-bit IEEE floating-point "
|
|
Packit |
01d647 |
"values. The first entry is hue shift in degrees; the second entry is a "
|
|
Packit |
01d647 |
"saturation scale factor; and the third entry is a value scale factor. The "
|
|
Packit |
01d647 |
"table entries are stored in the tag in nested loop order, with the value "
|
|
Packit |
01d647 |
"divisions in the outer loop, the hue divisions in the middle loop, and the "
|
|
Packit |
01d647 |
"saturation divisions in the inner loop. All zero input saturation entries "
|
|
Packit |
01d647 |
"are required to have a value scale factor of 1.0."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, tiffFloat, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6fc, "ProfileToneCurve", N_("Profile Tone Curve"),
|
|
Packit |
01d647 |
N_("This tag contains a default tone curve that can be applied while "
|
|
Packit |
01d647 |
"processing the image as a starting point for user adjustments. The curve "
|
|
Packit |
01d647 |
"is specified as a list of 32-bit IEEE floating-point value pairs in linear "
|
|
Packit |
01d647 |
"gamma. Each sample has an input value in the range of 0.0 to 1.0, and an "
|
|
Packit |
01d647 |
"output value in the range of 0.0 to 1.0. The first sample is required to be "
|
|
Packit |
01d647 |
"(0.0, 0.0), and the last sample is required to be (1.0, 1.0). Interpolated "
|
|
Packit |
01d647 |
"the curve using a cubic spline."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, tiffFloat, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6fd, "ProfileEmbedPolicy", N_("Profile Embed Policy"),
|
|
Packit |
01d647 |
N_("This tag contains information about the usage rules for the associated "
|
|
Packit |
01d647 |
"camera profile."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedLong, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc6fe, "ProfileCopyright", N_("Profile Copyright"),
|
|
Packit |
01d647 |
N_("A UTF-8 encoded string containing the copyright information for the "
|
|
Packit |
01d647 |
"camera profile. This string always should be preserved along with the other "
|
|
Packit |
01d647 |
"camera profile tags."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc714, "ForwardMatrix1", N_("Forward Matrix 1"),
|
|
Packit |
01d647 |
N_("This tag defines a matrix that maps white balanced camera colors to XYZ "
|
|
Packit |
01d647 |
"D50 colors."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc715, "ForwardMatrix2", N_("Forward Matrix 2"),
|
|
Packit |
01d647 |
N_("This tag defines a matrix that maps white balanced camera colors to XYZ "
|
|
Packit |
01d647 |
"D50 colors."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc716, "PreviewApplicationName", N_("Preview Application Name"),
|
|
Packit |
01d647 |
N_("A UTF-8 encoded string containing the name of the application that "
|
|
Packit |
01d647 |
"created the preview stored in the IFD."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc717, "PreviewApplicationVersion", N_("Preview Application Version"),
|
|
Packit |
01d647 |
N_("A UTF-8 encoded string containing the version number of the application "
|
|
Packit |
01d647 |
"that created the preview stored in the IFD."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc718, "PreviewSettingsName", N_("Preview Settings Name"),
|
|
Packit |
01d647 |
N_("A UTF-8 encoded string containing the name of the conversion settings "
|
|
Packit |
01d647 |
"(for example, snapshot name) used for the preview stored in the IFD."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc719, "PreviewSettingsDigest", N_("Preview Settings Digest"),
|
|
Packit |
01d647 |
N_("A unique ID of the conversion settings (for example, MD5 digest) used "
|
|
Packit |
01d647 |
"to render the preview stored in the IFD."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 16, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc71a, "PreviewColorSpace", N_("Preview Color Space"),
|
|
Packit |
01d647 |
N_("This tag specifies the color space in which the rendered preview in this "
|
|
Packit |
01d647 |
"IFD is stored. The default value for this tag is sRGB for color previews "
|
|
Packit |
01d647 |
"and Gray Gamma 2.2 for monochrome previews."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedLong, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc71b, "PreviewDateTime", N_("Preview Date Time"),
|
|
Packit |
01d647 |
N_("This tag is an ASCII string containing the name of the date/time at which "
|
|
Packit |
01d647 |
"the preview stored in the IFD was rendered. The date/time is encoded using "
|
|
Packit |
01d647 |
"ISO 8601 format."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, asciiString, 0, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc71c, "RawImageDigest", N_("Raw Image Digest"),
|
|
Packit |
01d647 |
N_("This tag is an MD5 digest of the raw image data. All pixels in the image "
|
|
Packit |
01d647 |
"are processed in row-scan order. Each pixel is zero padded to 16 or 32 bits "
|
|
Packit |
01d647 |
"deep (16-bit for data less than or equal to 16 bits deep, 32-bit otherwise). "
|
|
Packit |
01d647 |
"The data for each pixel is processed in little-endian byte order."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, undefined, 16, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc71d, "OriginalRawFileDigest", N_("Original Raw File Digest"),
|
|
Packit |
01d647 |
N_("This tag is an MD5 digest of the data stored in the OriginalRawFileData "
|
|
Packit |
01d647 |
"tag."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, undefined, 16, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc71e, "SubTileBlockSize", N_("Sub Tile Block Size"),
|
|
Packit |
01d647 |
N_("Normally, the pixels within a tile are stored in simple row-scan order. "
|
|
Packit |
01d647 |
"This tag specifies that the pixels within a tile should be grouped first "
|
|
Packit |
01d647 |
"into rectangular blocks of the specified size. These blocks are stored in "
|
|
Packit |
01d647 |
"row-scan order. Within each block, the pixels are stored in row-scan order. "
|
|
Packit |
01d647 |
"The use of a non-default value for this tag requires setting the "
|
|
Packit |
01d647 |
"DNGBackwardVersion tag to at least 1.2.0.0."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedLong, 2, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc71f, "RowInterleaveFactor", N_("Row Interleave Factor"),
|
|
Packit |
01d647 |
N_("This tag specifies that rows of the image are stored in interleaved "
|
|
Packit |
01d647 |
"order. The value of the tag specifies the number of interleaved fields. "
|
|
Packit |
01d647 |
"The use of a non-default value for this tag requires setting the "
|
|
Packit |
01d647 |
"DNGBackwardVersion tag to at least 1.2.0.0."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedLong, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc725, "ProfileLookTableDims", N_("Profile Look Table Dims"),
|
|
Packit |
01d647 |
N_("This tag specifies the number of input samples in each dimension of a "
|
|
Packit |
01d647 |
"default \"look\" table. The data for this table is stored in the "
|
|
Packit |
01d647 |
"ProfileLookTableData tag."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedLong, 3, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc726, "ProfileLookTableData", N_("Profile Look Table Data"),
|
|
Packit |
01d647 |
N_("This tag contains a default \"look\" table that can be applied while "
|
|
Packit |
01d647 |
"processing the image as a starting point for user adjustment. This table "
|
|
Packit |
01d647 |
"uses the same format as the tables stored in the ProfileHueSatMapData1 "
|
|
Packit |
01d647 |
"and ProfileHueSatMapData2 tags, and is applied in the same color space. "
|
|
Packit |
01d647 |
"However, it should be applied later in the processing pipe, after any "
|
|
Packit |
01d647 |
"exposure compensation and/or fill light stages, but before any tone curve "
|
|
Packit |
01d647 |
"stage. Each entry of the table contains three 32-bit IEEE floating-point "
|
|
Packit |
01d647 |
"values. The first entry is hue shift in degrees, the second entry is a "
|
|
Packit |
01d647 |
"saturation scale factor, and the third entry is a value scale factor. "
|
|
Packit |
01d647 |
"The table entries are stored in the tag in nested loop order, with the "
|
|
Packit |
01d647 |
"value divisions in the outer loop, the hue divisions in the middle loop, "
|
|
Packit |
01d647 |
"and the saturation divisions in the inner loop. All zero input saturation "
|
|
Packit |
01d647 |
"entries are required to have a value scale factor of 1.0."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, tiffFloat, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc740, "OpcodeList1", N_("Opcode List 1"),
|
|
Packit |
01d647 |
N_("Specifies the list of opcodes that should be applied to the raw image, "
|
|
Packit |
01d647 |
"as read directly from the file."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, undefined, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc741, "OpcodeList2", N_("Opcode List 2"),
|
|
Packit |
01d647 |
N_("Specifies the list of opcodes that should be applied to the raw image, "
|
|
Packit |
01d647 |
"just after it has been mapped to linear reference values."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, undefined, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc74e, "OpcodeList3", N_("Opcode List 3"),
|
|
Packit |
01d647 |
N_("Specifies the list of opcodes that should be applied to the raw image, "
|
|
Packit |
01d647 |
"just after it has been demosaiced."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, undefined, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc761, "NoiseProfile", N_("Noise Profile"),
|
|
Packit |
01d647 |
N_("NoiseProfile describes the amount of noise in a raw image. Specifically, "
|
|
Packit |
01d647 |
"this tag models the amount of signal-dependent photon (shot) noise and "
|
|
Packit |
01d647 |
"signal-independent sensor readout noise, two common sources of noise in "
|
|
Packit |
01d647 |
"raw images. The model assumes that the noise is white and spatially "
|
|
Packit |
01d647 |
"independent, ignoring fixed pattern effects and other sources of noise (e.g., "
|
|
Packit |
01d647 |
"pixel response non-uniformity, spatially-dependent thermal effects, etc.)."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, tiffDouble, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
////////////////////////////////////////
|
|
Packit |
01d647 |
// http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/cinemadng/pdfs/CinemaDNG_Format_Specification_v1_1.pdf
|
|
Packit |
01d647 |
TagInfo(0xc763, "TimeCodes", N_("TimeCodes"),
|
|
Packit |
01d647 |
N_("The optional TimeCodes tag shall contain an ordered array of time codes. "
|
|
Packit |
01d647 |
"All time codes shall be 8 bytes long and in binary format. The tag may "
|
|
Packit |
01d647 |
"contain from 1 to 10 time codes. When the tag contains more than one time "
|
|
Packit |
01d647 |
"code, the first one shall be the default time code. This specification "
|
|
Packit |
01d647 |
"does not prescribe how to use multiple time codes. "
|
|
Packit |
01d647 |
"Each time code shall be as defined for the 8-byte time code structure in "
|
|
Packit |
01d647 |
"SMPTE 331M-2004, Section 8.3. See also SMPTE 12-1-2008 and SMPTE 309-1999."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, unsignedByte, 8, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc764, "FrameRate", N_("FrameRate"),
|
|
Packit |
01d647 |
N_("The optional FrameRate tag shall specify the video frame "
|
|
Packit |
01d647 |
"rate in number of image frames per second, expressed as a "
|
|
Packit |
01d647 |
"signed rational number. The numerator shall be non-negative "
|
|
Packit |
01d647 |
"and the denominator shall be positive. This field value is "
|
|
Packit |
01d647 |
"identical to the sample rate field in SMPTE 377-1-2009."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc772, "TStop", N_("TStop"),
|
|
Packit |
01d647 |
N_("The optional TStop tag shall specify the T-stop of the "
|
|
Packit |
01d647 |
"actual lens, expressed as an unsigned rational number. "
|
|
Packit |
01d647 |
"T-stop is also known as T-number or the photometric "
|
|
Packit |
01d647 |
"aperture of the lens. (F-number is the geometric aperture "
|
|
Packit |
01d647 |
"of the lens.) When the exact value is known, the T-stop "
|
|
Packit |
01d647 |
"shall be specified using a single number. Alternately, "
|
|
Packit |
01d647 |
"two numbers shall be used to indicate a T-stop range, "
|
|
Packit |
01d647 |
"in which case the first number shall be the minimum "
|
|
Packit |
01d647 |
"T-stop and the second number shall be the maximum T-stop."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, signedRational, 1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc789, "ReelName", N_("ReelName"),
|
|
Packit |
01d647 |
N_("The optional ReelName tag shall specify a name for a "
|
|
Packit |
01d647 |
"sequence of images, where each image in the sequence has "
|
|
Packit |
01d647 |
"a unique image identifier (including but not limited to file "
|
|
Packit |
01d647 |
"name, frame number, date time, time code)."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, asciiString, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
TagInfo(0xc7a1, "CameraLabel", N_("CameraLabel"),
|
|
Packit |
01d647 |
N_("The optional CameraLabel tag shall specify a text label "
|
|
Packit |
01d647 |
"for how the camera is used or assigned in this clip. "
|
|
Packit |
01d647 |
"This tag is similar to CameraLabel in XMP."),
|
|
Packit |
01d647 |
ifd0Id, dngTags, asciiString, -1, printValue), // DNG tag
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
////////////////////////////////////////
|
|
Packit |
01d647 |
// End of list marker
|
|
Packit |
01d647 |
TagInfo(0xffff, "(UnknownIfdTag)", N_("Unknown IFD tag"),
|
|
Packit |
01d647 |
N_("Unknown IFD tag"),
|
|
Packit |
01d647 |
ifd0Id, sectionIdNotSet, asciiString, -1, printValue)
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* ifdTagList()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return ifdTagInfo;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// Exif IFD Tags
|
|
Packit |
01d647 |
static const TagInfo exifTagInfo[] = {
|
|
Packit |
01d647 |
TagInfo(0x829a, "ExposureTime", N_("Exposure Time"),
|
|
Packit |
01d647 |
N_("Exposure time, given in seconds (sec)."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, print0x829a),
|
|
Packit |
01d647 |
TagInfo(0x829d, "FNumber", N_("FNumber"),
|
|
Packit |
01d647 |
N_("The F number."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, print0x829d),
|
|
Packit |
01d647 |
TagInfo(0x8822, "ExposureProgram", N_("Exposure Program"),
|
|
Packit |
01d647 |
N_("The class of the program used by the camera to set exposure "
|
|
Packit |
01d647 |
"when the picture is taken."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0x8822),
|
|
Packit |
01d647 |
TagInfo(0x8824, "SpectralSensitivity", N_("Spectral Sensitivity"),
|
|
Packit |
01d647 |
N_("Indicates the spectral sensitivity of each channel of the "
|
|
Packit |
01d647 |
"camera used. The tag value is an ASCII string compatible "
|
|
Packit |
01d647 |
"with the standard developed by the ASTM Technical Committee."),
|
|
Packit |
01d647 |
exifId, captureCond, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8827, "ISOSpeedRatings", N_("ISO Speed Ratings"),
|
|
Packit |
01d647 |
N_("Indicates the ISO Speed and ISO Latitude of the camera or "
|
|
Packit |
01d647 |
"input device as specified in ISO 12232."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 0, print0x8827),
|
|
Packit |
01d647 |
TagInfo(0x8828, "OECF", N_("Opto-Electoric Conversion Function"),
|
|
Packit |
01d647 |
N_("Indicates the Opto-Electoric Conversion Function (OECF) "
|
|
Packit |
01d647 |
"specified in ISO 14524. <OECF> is the relationship between "
|
|
Packit |
01d647 |
"the camera optical input and the image values."),
|
|
Packit |
01d647 |
exifId, captureCond, undefined, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8830, "SensitivityType", N_("Sensitivity Type"),
|
|
Packit |
01d647 |
N_("The SensitivityType tag indicates which one of the parameters of "
|
|
Packit |
01d647 |
"ISO12232 is the PhotographicSensitivity tag. Although it is an optional tag, "
|
|
Packit |
01d647 |
"it should be recorded when a PhotographicSensitivity tag is recorded. "
|
|
Packit |
01d647 |
"Value = 4, 5, 6, or 7 may be used in case that the values of plural "
|
|
Packit |
01d647 |
"parameters are the same."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8831, "StandardOutputSensitivity", N_("Standard Output Sensitivity"),
|
|
Packit |
01d647 |
N_("This tag indicates the standard output sensitivity value of a camera or "
|
|
Packit |
01d647 |
"input device defined in ISO 12232. When recording this tag, the "
|
|
Packit |
01d647 |
"PhotographicSensitivity and SensitivityType tags shall also be recorded."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8832, "RecommendedExposureIndex", N_("Recommended Exposure Index"),
|
|
Packit |
01d647 |
N_("This tag indicates the recommended exposure index value of a camera or "
|
|
Packit |
01d647 |
"input device defined in ISO 12232. When recording this tag, the "
|
|
Packit |
01d647 |
"PhotographicSensitivity and SensitivityType tags shall also be recorded."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8833, "ISOSpeed", N_("ISO Speed"),
|
|
Packit |
01d647 |
N_("This tag indicates the ISO speed value of a camera or input device that "
|
|
Packit |
01d647 |
"is defined in ISO 12232. When recording this tag, the PhotographicSensitivity "
|
|
Packit |
01d647 |
"and SensitivityType tags shall also be recorded."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8834, "ISOSpeedLatitudeyyy", N_("ISO Speed Latitude yyy"),
|
|
Packit |
01d647 |
N_("This tag indicates the ISO speed latitude yyy value of a camera or input "
|
|
Packit |
01d647 |
"device that is defined in ISO 12232. However, this tag shall not be recorded "
|
|
Packit |
01d647 |
"without ISOSpeed and ISOSpeedLatitudezzz."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x8835, "ISOSpeedLatitudezzz", N_("ISO Speed Latitude zzz"),
|
|
Packit |
01d647 |
N_("This tag indicates the ISO speed latitude zzz value of a camera or input "
|
|
Packit |
01d647 |
"device that is defined in ISO 12232. However, this tag shall not be recorded "
|
|
Packit |
01d647 |
"without ISOSpeed and ISOSpeedLatitudeyyy."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x9000, "ExifVersion", N_("Exif Version"),
|
|
Packit |
01d647 |
N_("The version of this standard supported. Nonexistence of this "
|
|
Packit |
01d647 |
"field is taken to mean nonconformance to the standard."),
|
|
Packit |
01d647 |
exifId, exifVersion, undefined, 4, printExifVersion),
|
|
Packit |
01d647 |
TagInfo(0x9003, "DateTimeOriginal", N_("Date and Time (original)"),
|
|
Packit |
01d647 |
N_("The date and time when the original image data was generated. "
|
|
Packit |
01d647 |
"For a digital still camera the date and time the picture was taken are recorded."),
|
|
Packit |
01d647 |
exifId, dateTime, asciiString, 20, printValue),
|
|
Packit |
01d647 |
TagInfo(0x9004, "DateTimeDigitized", N_("Date and Time (digitized)"),
|
|
Packit |
01d647 |
N_("The date and time when the image was stored as digital data."),
|
|
Packit |
01d647 |
exifId, dateTime, asciiString, 20, printValue),
|
|
Packit |
01d647 |
TagInfo(0x9101, "ComponentsConfiguration", N_("Components Configuration"),
|
|
Packit |
01d647 |
N_("Information specific to compressed data. The channels of "
|
|
Packit |
01d647 |
"each component are arranged in order from the 1st "
|
|
Packit |
01d647 |
"component to the 4th. For uncompressed data the data "
|
|
Packit |
01d647 |
"arrangement is given in the <PhotometricInterpretation> tag. "
|
|
Packit |
01d647 |
"However, since <PhotometricInterpretation> can only "
|
|
Packit |
01d647 |
"express the order of Y, Cb and Cr, this tag is provided "
|
|
Packit |
01d647 |
"for cases when compressed data uses components other than "
|
|
Packit |
01d647 |
"Y, Cb, and Cr and to enable support of other sequences."),
|
|
Packit |
01d647 |
exifId, imgConfig, undefined, 4, print0x9101),
|
|
Packit |
01d647 |
TagInfo(0x9102, "CompressedBitsPerPixel", N_("Compressed Bits per Pixel"),
|
|
Packit |
01d647 |
N_("Information specific to compressed data. The compression mode "
|
|
Packit |
01d647 |
"used for a compressed image is indicated in unit bits per pixel."),
|
|
Packit |
01d647 |
exifId, imgConfig, unsignedRational, 1, printFloat),
|
|
Packit |
01d647 |
TagInfo(0x9201, "ShutterSpeedValue", N_("Shutter speed"),
|
|
Packit |
01d647 |
N_("Shutter speed. The unit is the APEX (Additive System of "
|
|
Packit |
01d647 |
"Photographic Exposure) setting."),
|
|
Packit |
01d647 |
exifId, captureCond, signedRational, 1, print0x9201),
|
|
Packit |
01d647 |
TagInfo(0x9202, "ApertureValue", N_("Aperture"),
|
|
Packit |
01d647 |
N_("The lens aperture. The unit is the APEX value."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, print0x9202),
|
|
Packit |
01d647 |
TagInfo(0x9203, "BrightnessValue", N_("Brightness"),
|
|
Packit |
01d647 |
N_("The value of brightness. The unit is the APEX value. "
|
|
Packit |
01d647 |
"Ordinarily it is given in the range of -99.99 to 99.99."),
|
|
Packit |
01d647 |
exifId, captureCond, signedRational, 1, printFloat),
|
|
Packit |
01d647 |
TagInfo(0x9204, "ExposureBiasValue", N_("Exposure Bias"),
|
|
Packit |
01d647 |
N_("The exposure bias. The units is the APEX value. Ordinarily "
|
|
Packit |
01d647 |
"it is given in the range of -99.99 to 99.99."),
|
|
Packit |
01d647 |
exifId, captureCond, signedRational, 1, print0x9204),
|
|
Packit |
01d647 |
TagInfo(0x9205, "MaxApertureValue", N_("Max Aperture Value"),
|
|
Packit |
01d647 |
N_("The smallest F number of the lens. The unit is the APEX value. "
|
|
Packit |
01d647 |
"Ordinarily it is given in the range of 00.00 to 99.99, "
|
|
Packit |
01d647 |
"but it is not limited to this range."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, print0x9202),
|
|
Packit |
01d647 |
TagInfo(0x9206, "SubjectDistance", N_("Subject Distance"),
|
|
Packit |
01d647 |
N_("The distance to the subject, given in meters."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, print0x9206),
|
|
Packit |
01d647 |
TagInfo(0x9207, "MeteringMode", N_("Metering Mode"),
|
|
Packit |
01d647 |
N_("The metering mode."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0x9207),
|
|
Packit |
01d647 |
TagInfo(0x9208, "LightSource", N_("Light Source"),
|
|
Packit |
01d647 |
N_("The kind of light source."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0x9208),
|
|
Packit |
01d647 |
TagInfo(0x9209, "Flash", N_("Flash"),
|
|
Packit |
01d647 |
N_("This tag is recorded when an image is taken using a strobe light (flash)."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, EXV_PRINT_TAG(exifFlash)),
|
|
Packit |
01d647 |
TagInfo(0x920a, "FocalLength", N_("Focal Length"),
|
|
Packit |
01d647 |
N_("The actual focal length of the lens, in mm. Conversion is not "
|
|
Packit |
01d647 |
"made to the focal length of a 35 mm film camera."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, print0x920a),
|
|
Packit |
01d647 |
TagInfo(0x9214, "SubjectArea", N_("Subject Area"),
|
|
Packit |
01d647 |
N_("This tag indicates the location and area of the main subject "
|
|
Packit |
01d647 |
"in the overall scene."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, -1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x927c, "MakerNote", N_("Maker Note"),
|
|
Packit |
01d647 |
N_("A tag for manufacturers of Exif writers to record any desired "
|
|
Packit |
01d647 |
"information. The contents are up to the manufacturer."),
|
|
Packit |
01d647 |
exifId, userInfo, undefined, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x9286, "UserComment", N_("User Comment"),
|
|
Packit |
01d647 |
N_("A tag for Exif users to write keywords or comments on the image "
|
|
Packit |
01d647 |
"besides those in <ImageDescription>, and without the "
|
|
Packit |
01d647 |
"character code limitations of the <ImageDescription> tag."),
|
|
Packit Service |
fb147c |
exifId, userInfo, comment, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x9290, "SubSecTime", N_("Sub-seconds Time"),
|
|
Packit |
01d647 |
N_("A tag used to record fractions of seconds for the <DateTime> tag."),
|
|
Packit |
01d647 |
exifId, dateTime, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x9291, "SubSecTimeOriginal", N_("Sub-seconds Time Original"),
|
|
Packit |
01d647 |
N_("A tag used to record fractions of seconds for the <DateTimeOriginal> tag."),
|
|
Packit |
01d647 |
exifId, dateTime, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x9292, "SubSecTimeDigitized", N_("Sub-seconds Time Digitized"),
|
|
Packit |
01d647 |
N_("A tag used to record fractions of seconds for the <DateTimeDigitized> tag."),
|
|
Packit |
01d647 |
exifId, dateTime, asciiString, 0, printValue),
|
|
Packit Service |
fb147c |
TagInfo(0x9400, "AmbientTemperature", N_("AmbientTemperature"),
|
|
Packit Service |
fb147c |
N_("AmbientTemperature"),
|
|
Packit Service |
fb147c |
exifId, captureCond, signedRational, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa000, "FlashpixVersion", N_("FlashPix Version"),
|
|
Packit |
01d647 |
N_("The FlashPix format version supported by a FPXR file."),
|
|
Packit |
01d647 |
exifId, exifVersion, undefined, 4, printExifVersion),
|
|
Packit |
01d647 |
TagInfo(0xa001, "ColorSpace", N_("Color Space"),
|
|
Packit |
01d647 |
N_("The color space information tag is always "
|
|
Packit |
01d647 |
"recorded as the color space specifier. Normally sRGB "
|
|
Packit |
01d647 |
"is used to define the color space based on the PC monitor "
|
|
Packit |
01d647 |
"conditions and environment. If a color space other than "
|
|
Packit |
01d647 |
"sRGB is used, Uncalibrated is set. Image data "
|
|
Packit |
01d647 |
"recorded as Uncalibrated can be treated as sRGB when it is "
|
|
Packit |
01d647 |
"converted to FlashPix."),
|
|
Packit |
01d647 |
exifId, imgCharacter, unsignedShort, 1, print0xa001),
|
|
Packit |
01d647 |
TagInfo(0xa002, "PixelXDimension", N_("Pixel X Dimension"),
|
|
Packit |
01d647 |
N_("Information specific to compressed data. When a "
|
|
Packit |
01d647 |
"compressed file is recorded, the valid width of the "
|
|
Packit |
01d647 |
"meaningful image must be recorded in this tag, whether or "
|
|
Packit |
01d647 |
"not there is padding data or a restart marker. This tag "
|
|
Packit |
01d647 |
"should not exist in an uncompressed file."),
|
|
Packit |
01d647 |
exifId, imgConfig, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa003, "PixelYDimension", N_("Pixel Y Dimension"),
|
|
Packit |
01d647 |
N_("Information specific to compressed data. When a compressed "
|
|
Packit |
01d647 |
"file is recorded, the valid height of the meaningful image "
|
|
Packit |
01d647 |
"must be recorded in this tag, whether or not there is padding "
|
|
Packit |
01d647 |
"data or a restart marker. This tag should not exist in an "
|
|
Packit |
01d647 |
"uncompressed file. Since data padding is unnecessary in the vertical "
|
|
Packit |
01d647 |
"direction, the number of lines recorded in this valid image height tag "
|
|
Packit |
01d647 |
"will in fact be the same as that recorded in the SOF."),
|
|
Packit |
01d647 |
exifId, imgConfig, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa004, "RelatedSoundFile", N_("Related Sound File"),
|
|
Packit |
01d647 |
N_("This tag is used to record the name of an audio file related "
|
|
Packit |
01d647 |
"to the image data. The only relational information "
|
|
Packit |
01d647 |
"recorded here is the Exif audio file name and extension (an "
|
|
Packit |
01d647 |
"ASCII string consisting of 8 characters + '.' + 3 "
|
|
Packit |
01d647 |
"characters). The path is not recorded."),
|
|
Packit |
01d647 |
exifId, relatedFile, asciiString, 13, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa005, "InteroperabilityTag", N_("Interoperability IFD Pointer"),
|
|
Packit |
01d647 |
N_("Interoperability IFD is composed of tags which stores the "
|
|
Packit |
01d647 |
"information to ensure the Interoperability and pointed "
|
|
Packit |
01d647 |
"by the following tag located in Exif IFD. "
|
|
Packit |
01d647 |
"The Interoperability structure of Interoperability IFD is "
|
|
Packit |
01d647 |
"the same as TIFF defined IFD structure but does not contain the "
|
|
Packit |
01d647 |
"image data characteristically compared with normal TIFF IFD."),
|
|
Packit |
01d647 |
exifId, exifFormat, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa20b, "FlashEnergy", N_("Flash Energy"),
|
|
Packit |
01d647 |
N_("Indicates the strobe energy at the time the image is "
|
|
Packit |
01d647 |
"captured, as measured in Beam Candle Power Seconds (BCPS)."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa20c, "SpatialFrequencyResponse", N_("Spatial Frequency Response"),
|
|
Packit |
01d647 |
N_("This tag records the camera or input device spatial frequency "
|
|
Packit |
01d647 |
"table and SFR values in the direction of image width, "
|
|
Packit |
01d647 |
"image height, and diagonal direction, as specified in ISO 12233."),
|
|
Packit |
01d647 |
exifId, captureCond, undefined, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa20e, "FocalPlaneXResolution", N_("Focal Plane X-Resolution"),
|
|
Packit |
01d647 |
N_("Indicates the number of pixels in the image width (X) direction "
|
|
Packit |
01d647 |
"per <FocalPlaneResolutionUnit> on the camera focal plane."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, printFloat),
|
|
Packit |
01d647 |
TagInfo(0xa20f, "FocalPlaneYResolution", N_("Focal Plane Y-Resolution"),
|
|
Packit |
01d647 |
N_("Indicates the number of pixels in the image height (V) direction "
|
|
Packit |
01d647 |
"per <FocalPlaneResolutionUnit> on the camera focal plane."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, printFloat),
|
|
Packit |
01d647 |
TagInfo(0xa210, "FocalPlaneResolutionUnit", N_("Focal Plane Resolution Unit"),
|
|
Packit |
01d647 |
N_("Indicates the unit for measuring <FocalPlaneXResolution> and "
|
|
Packit |
01d647 |
"<FocalPlaneYResolution>. This value is the same as the <ResolutionUnit>."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, printExifUnit),
|
|
Packit |
01d647 |
TagInfo(0xa214, "SubjectLocation", N_("Subject Location"),
|
|
Packit |
01d647 |
N_("Indicates the location of the main subject in the scene. The "
|
|
Packit |
01d647 |
"value of this tag represents the pixel at the center of the "
|
|
Packit |
01d647 |
"main subject relative to the left edge, prior to rotation "
|
|
Packit |
01d647 |
"processing as per the <Rotation> tag. The first value "
|
|
Packit |
01d647 |
"indicates the X column number and second indicates the Y row number."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 2, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa215, "ExposureIndex", N_("Exposure index"),
|
|
Packit |
01d647 |
N_("Indicates the exposure index selected on the camera or "
|
|
Packit |
01d647 |
"input device at the time the image is captured."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa217, "SensingMethod", N_("Sensing Method"),
|
|
Packit |
01d647 |
N_("Indicates the image sensor type on the camera or input device."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa217),
|
|
Packit |
01d647 |
TagInfo(0xa300, "FileSource", N_("File Source"),
|
|
Packit |
01d647 |
N_("Indicates the image source. If a DSC recorded the image, "
|
|
Packit |
01d647 |
"this tag value of this tag always be set to 3, indicating "
|
|
Packit |
01d647 |
"that the image was recorded on a DSC."),
|
|
Packit |
01d647 |
exifId, captureCond, undefined, 1, print0xa300),
|
|
Packit |
01d647 |
TagInfo(0xa301, "SceneType", N_("Scene Type"),
|
|
Packit |
01d647 |
N_("Indicates the type of scene. If a DSC recorded the image, "
|
|
Packit |
01d647 |
"this tag value must always be set to 1, indicating that the "
|
|
Packit |
01d647 |
"image was directly photographed."),
|
|
Packit |
01d647 |
exifId, captureCond, undefined, 1, print0xa301),
|
|
Packit |
01d647 |
TagInfo(0xa302, "CFAPattern", N_("Color Filter Array Pattern"),
|
|
Packit |
01d647 |
N_("Indicates the color filter array (CFA) geometric pattern of the "
|
|
Packit |
01d647 |
"image sensor when a one-chip color area sensor is used. "
|
|
Packit |
01d647 |
"It does not apply to all sensing methods."),
|
|
Packit |
01d647 |
exifId, captureCond, undefined, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa401, "CustomRendered", N_("Custom Rendered"),
|
|
Packit |
01d647 |
N_("This tag indicates the use of special processing on image "
|
|
Packit |
01d647 |
"data, such as rendering geared to output. When special "
|
|
Packit |
01d647 |
"processing is performed, the reader is expected to disable "
|
|
Packit |
01d647 |
"or minimize any further processing."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa401),
|
|
Packit |
01d647 |
TagInfo(0xa402, "ExposureMode", N_("Exposure Mode"),
|
|
Packit |
01d647 |
N_("This tag indicates the exposure mode set when the image was "
|
|
Packit |
01d647 |
"shot. In auto-bracketing mode, the camera shoots a series of "
|
|
Packit |
01d647 |
"frames of the same scene at different exposure settings."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa402),
|
|
Packit |
01d647 |
TagInfo(0xa403, "WhiteBalance", N_("White Balance"),
|
|
Packit |
01d647 |
N_("This tag indicates the white balance mode set when the image was shot."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa403),
|
|
Packit |
01d647 |
TagInfo(0xa404, "DigitalZoomRatio", N_("Digital Zoom Ratio"),
|
|
Packit |
01d647 |
N_("This tag indicates the digital zoom ratio when the image was "
|
|
Packit |
01d647 |
"shot. If the numerator of the recorded value is 0, this "
|
|
Packit |
01d647 |
"indicates that digital zoom was not used."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedRational, 1, print0xa404),
|
|
Packit |
01d647 |
TagInfo(0xa405, "FocalLengthIn35mmFilm", N_("Focal Length In 35mm Film"),
|
|
Packit |
01d647 |
N_("This tag indicates the equivalent focal length assuming a "
|
|
Packit |
01d647 |
"35mm film camera, in mm. A value of 0 means the focal "
|
|
Packit |
01d647 |
"length is unknown. Note that this tag differs from the "
|
|
Packit |
01d647 |
"<FocalLength> tag."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa405),
|
|
Packit |
01d647 |
TagInfo(0xa406, "SceneCaptureType", N_("Scene Capture Type"),
|
|
Packit |
01d647 |
N_("This tag indicates the type of scene that was shot. It can "
|
|
Packit |
01d647 |
"also be used to record the mode in which the image was "
|
|
Packit |
01d647 |
"shot. Note that this differs from the <SceneType> tag."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa406),
|
|
Packit |
01d647 |
TagInfo(0xa407, "GainControl", N_("Gain Control"),
|
|
Packit |
01d647 |
N_("This tag indicates the degree of overall image gain adjustment."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa407),
|
|
Packit |
01d647 |
TagInfo(0xa408, "Contrast", N_("Contrast"),
|
|
Packit |
01d647 |
N_("This tag indicates the direction of contrast processing "
|
|
Packit |
01d647 |
"applied by the camera when the image was shot."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, printNormalSoftHard),
|
|
Packit |
01d647 |
TagInfo(0xa409, "Saturation", N_("Saturation"),
|
|
Packit |
01d647 |
N_("This tag indicates the direction of saturation processing "
|
|
Packit |
01d647 |
"applied by the camera when the image was shot."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa409),
|
|
Packit |
01d647 |
TagInfo(0xa40a, "Sharpness", N_("Sharpness"),
|
|
Packit |
01d647 |
N_("This tag indicates the direction of sharpness processing "
|
|
Packit |
01d647 |
"applied by the camera when the image was shot."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, printNormalSoftHard),
|
|
Packit |
01d647 |
TagInfo(0xa40b, "DeviceSettingDescription", N_("Device Setting Description"),
|
|
Packit |
01d647 |
N_("This tag indicates information on the picture-taking "
|
|
Packit |
01d647 |
"conditions of a particular camera model. The tag is used "
|
|
Packit |
01d647 |
"only to indicate the picture-taking conditions in the reader."),
|
|
Packit |
01d647 |
exifId, captureCond, undefined, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa40c, "SubjectDistanceRange", N_("Subject Distance Range"),
|
|
Packit |
01d647 |
N_("This tag indicates the distance to the subject."),
|
|
Packit |
01d647 |
exifId, captureCond, unsignedShort, 1, print0xa40c),
|
|
Packit |
01d647 |
TagInfo(0xa420, "ImageUniqueID", N_("Image Unique ID"),
|
|
Packit |
01d647 |
N_("This tag indicates an identifier assigned uniquely to "
|
|
Packit |
01d647 |
"each image. It is recorded as an ASCII string equivalent "
|
|
Packit |
01d647 |
"to hexadecimal notation and 128-bit fixed length."),
|
|
Packit |
01d647 |
exifId, otherTags, asciiString, 33, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa430, "CameraOwnerName", N_("Camera Owner Name"),
|
|
Packit |
01d647 |
N_("This tag records the owner of a camera used in "
|
|
Packit |
01d647 |
"photography as an ASCII string."),
|
|
Packit |
01d647 |
exifId, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa431, "BodySerialNumber", N_("Body Serial Number"),
|
|
Packit |
01d647 |
N_("This tag records the serial number of the body of the camera "
|
|
Packit |
01d647 |
"that was used in photography as an ASCII string."),
|
|
Packit |
01d647 |
exifId, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa432, "LensSpecification", N_("Lens Specification"),
|
|
Packit |
01d647 |
N_("This tag notes minimum focal length, maximum focal length, "
|
|
Packit |
01d647 |
"minimum F number in the minimum focal length, and minimum F number "
|
|
Packit |
01d647 |
"in the maximum focal length, which are specification information "
|
|
Packit |
01d647 |
"for the lens that was used in photography. When the minimum F "
|
|
Packit |
01d647 |
"number is unknown, the notation is 0/0"),
|
|
Packit |
01d647 |
exifId, otherTags, unsignedRational, 4, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa433, "LensMake", N_("Lens Make"),
|
|
Packit |
01d647 |
N_("This tag records the lens manufactor as an ASCII string."),
|
|
Packit |
01d647 |
exifId, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa434, "LensModel", N_("Lens Model"),
|
|
Packit |
01d647 |
N_("This tag records the lens's model name and model number as an "
|
|
Packit |
01d647 |
"ASCII string."),
|
|
Packit |
01d647 |
exifId, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xa435, "LensSerialNumber", N_("Lens Serial Number"),
|
|
Packit |
01d647 |
N_("This tag records the serial number of the interchangeable lens "
|
|
Packit |
01d647 |
"that was used in photography as an ASCII string."),
|
|
Packit |
01d647 |
exifId, otherTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
// End of list marker
|
|
Packit |
01d647 |
TagInfo(0xffff, "(UnknownExifTag)", N_("Unknown Exif tag"),
|
|
Packit |
01d647 |
N_("Unknown Exif tag"),
|
|
Packit |
01d647 |
exifId, sectionIdNotSet, asciiString, -1, printValue)
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* exifTagList()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return exifTagInfo;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS latitude reference, tag 0x0001; also GPSDestLatitudeRef, tag 0x0013
|
|
Packit |
01d647 |
extern const TagDetails exifGPSLatitudeRef[] = {
|
|
Packit |
01d647 |
{ 78, N_("North") },
|
|
Packit |
01d647 |
{ 83, N_("South") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS longitude reference, tag 0x0003; also GPSDestLongitudeRef, tag 0x0015
|
|
Packit |
01d647 |
extern const TagDetails exifGPSLongitudeRef[] = {
|
|
Packit |
01d647 |
{ 69, N_("East") },
|
|
Packit |
01d647 |
{ 87, N_("West") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// GPS Info Tags
|
|
Packit |
01d647 |
static const TagInfo gpsTagInfo[] = {
|
|
Packit |
01d647 |
TagInfo(0x0000, "GPSVersionID", N_("GPS Version ID"),
|
|
Packit |
01d647 |
N_("Indicates the version of <GPSInfoIFD>. The version is given "
|
|
Packit |
01d647 |
"as 2.0.0.0. This tag is mandatory when <GPSInfo> tag is "
|
|
Packit |
01d647 |
"present. (Note: The <GPSVersionID> tag is given in bytes, "
|
|
Packit |
01d647 |
"unlike the <ExifVersion> tag. When the version is "
|
|
Packit |
01d647 |
"2.0.0.0, the tag value is 02000000.H)."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedByte, 4, print0x0000),
|
|
Packit |
01d647 |
TagInfo(0x0001, "GPSLatitudeRef", N_("GPS Latitude Reference"),
|
|
Packit |
01d647 |
N_("Indicates whether the latitude is north or south latitude. The "
|
|
Packit |
01d647 |
"ASCII value 'N' indicates north latitude, and 'S' is south latitude."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, EXV_PRINT_TAG(exifGPSLatitudeRef)),
|
|
Packit |
01d647 |
TagInfo(0x0002, "GPSLatitude", N_("GPS Latitude"),
|
|
Packit |
01d647 |
N_("Indicates the latitude. The latitude is expressed as three "
|
|
Packit |
01d647 |
"RATIONAL values giving the degrees, minutes, and seconds, "
|
|
Packit |
01d647 |
"respectively. When degrees, minutes and seconds are expressed, "
|
|
Packit |
01d647 |
"the format is dd/1,mm/1,ss/1. When degrees and minutes are used "
|
|
Packit |
01d647 |
"and, for example, fractions of minutes are given up to two "
|
|
Packit |
01d647 |
"decimal places, the format is dd/1,mmmm/100,0/1."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 3, printDegrees),
|
|
Packit |
01d647 |
TagInfo(0x0003, "GPSLongitudeRef", N_("GPS Longitude Reference"),
|
|
Packit |
01d647 |
N_("Indicates whether the longitude is east or west longitude. "
|
|
Packit |
01d647 |
"ASCII 'E' indicates east longitude, and 'W' is west longitude."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, EXV_PRINT_TAG(exifGPSLongitudeRef)),
|
|
Packit |
01d647 |
TagInfo(0x0004, "GPSLongitude", N_("GPS Longitude"),
|
|
Packit |
01d647 |
N_("Indicates the longitude. The longitude is expressed as three "
|
|
Packit |
01d647 |
"RATIONAL values giving the degrees, minutes, and seconds, "
|
|
Packit |
01d647 |
"respectively. When degrees, minutes and seconds are expressed, "
|
|
Packit |
01d647 |
"the format is ddd/1,mm/1,ss/1. When degrees and minutes are "
|
|
Packit |
01d647 |
"used and, for example, fractions of minutes are given up to "
|
|
Packit |
01d647 |
"two decimal places, the format is ddd/1,mmmm/100,0/1."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 3, printDegrees),
|
|
Packit |
01d647 |
TagInfo(0x0005, "GPSAltitudeRef", N_("GPS Altitude Reference"),
|
|
Packit |
01d647 |
N_("Indicates the altitude used as the reference altitude. If the "
|
|
Packit |
01d647 |
"reference is sea level and the altitude is above sea level, 0 "
|
|
Packit |
01d647 |
"is given. If the altitude is below sea level, a value of 1 is given "
|
|
Packit |
01d647 |
"and the altitude is indicated as an absolute value in the "
|
|
Packit |
01d647 |
"GSPAltitude tag. The reference unit is meters. Note that this tag "
|
|
Packit |
01d647 |
"is BYTE type, unlike other reference tags."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedByte, 1, print0x0005),
|
|
Packit |
01d647 |
TagInfo(0x0006, "GPSAltitude", N_("GPS Altitude"),
|
|
Packit |
01d647 |
N_("Indicates the altitude based on the reference in GPSAltitudeRef. "
|
|
Packit |
01d647 |
"Altitude is expressed as one RATIONAL value. The reference unit is meters."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 1, print0x0006),
|
|
Packit |
01d647 |
TagInfo(0x0007, "GPSTimeStamp", N_("GPS Time Stamp"),
|
|
Packit |
01d647 |
N_("Indicates the time as UTC (Coordinated Universal Time). "
|
|
Packit |
01d647 |
"<TimeStamp> is expressed as three RATIONAL values "
|
|
Packit |
01d647 |
"giving the hour, minute, and second (atomic clock)."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 3, print0x0007),
|
|
Packit |
01d647 |
TagInfo(0x0008, "GPSSatellites", N_("GPS Satellites"),
|
|
Packit |
01d647 |
N_("Indicates the GPS satellites used for measurements. This tag can be used "
|
|
Packit |
01d647 |
"to describe the number of satellites, their ID number, angle of elevation, "
|
|
Packit |
01d647 |
"azimuth, SNR and other information in ASCII notation. The format is not "
|
|
Packit |
01d647 |
"specified. If the GPS receiver is incapable of taking measurements, value "
|
|
Packit |
01d647 |
"of the tag is set to NULL."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0009, "GPSStatus", N_("GPS Status"),
|
|
Packit |
01d647 |
N_("Indicates the status of the GPS receiver when the image is recorded. "
|
|
Packit |
01d647 |
"\"A\" means measurement is in progress, and \"V\" means the measurement "
|
|
Packit |
01d647 |
"is Interoperability."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, print0x0009),
|
|
Packit |
01d647 |
TagInfo(0x000a, "GPSMeasureMode", N_("GPS Measure Mode"),
|
|
Packit |
01d647 |
N_("Indicates the GPS measurement mode. \"2\" means two-dimensional measurement and \"3\" "
|
|
Packit |
01d647 |
"means three-dimensional measurement is in progress."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, print0x000a),
|
|
Packit |
01d647 |
TagInfo(0x000b, "GPSDOP", N_("GPS Data Degree of Precision"),
|
|
Packit |
01d647 |
N_("Indicates the GPS DOP (data degree of precision). An HDOP value is written "
|
|
Packit |
01d647 |
"during two-dimensional measurement, and PDOP during three-dimensional measurement."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x000c, "GPSSpeedRef", N_("GPS Speed Reference"),
|
|
Packit |
01d647 |
N_("Indicates the unit used to express the GPS receiver speed of movement. "
|
|
Packit |
01d647 |
"\"K\" \"M\" and \"N\" represents kilometers per hour, miles per hour, and knots."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, print0x000c),
|
|
Packit |
01d647 |
TagInfo(0x000d, "GPSSpeed", N_("GPS Speed"),
|
|
Packit |
01d647 |
N_("Indicates the speed of GPS receiver movement."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x000e, "GPSTrackRef", N_("GPS Track Ref"),
|
|
Packit |
01d647 |
N_("Indicates the reference for giving the direction of GPS receiver movement. "
|
|
Packit |
01d647 |
"\"T\" denotes true direction and \"M\" is magnetic direction."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, printGPSDirRef),
|
|
Packit |
01d647 |
TagInfo(0x000f, "GPSTrack", N_("GPS Track"),
|
|
Packit |
01d647 |
N_("Indicates the direction of GPS receiver movement. The range of values is "
|
|
Packit |
01d647 |
"from 0.00 to 359.99."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0010, "GPSImgDirectionRef", N_("GPS Image Direction Reference"),
|
|
Packit |
01d647 |
N_("Indicates the reference for giving the direction of the image when it is captured. "
|
|
Packit |
01d647 |
"\"T\" denotes true direction and \"M\" is magnetic direction."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, printGPSDirRef),
|
|
Packit |
01d647 |
TagInfo(0x0011, "GPSImgDirection", N_("GPS Image Direction"),
|
|
Packit |
01d647 |
N_("Indicates the direction of the image when it was captured. The range of values "
|
|
Packit |
01d647 |
"is from 0.00 to 359.99."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0012, "GPSMapDatum", N_("GPS Map Datum"),
|
|
Packit |
01d647 |
N_("Indicates the geodetic survey data used by the GPS receiver. If the survey data "
|
|
Packit |
01d647 |
"is restricted to Japan, the value of this tag is \"TOKYO\" or \"WGS-84\"."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0013, "GPSDestLatitudeRef", N_("GPS Destination Latitude Reference"),
|
|
Packit |
01d647 |
N_("Indicates whether the latitude of the destination point is north or south latitude. "
|
|
Packit |
01d647 |
"The ASCII value \"N\" indicates north latitude, and \"S\" is south latitude."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, EXV_PRINT_TAG(exifGPSLatitudeRef)),
|
|
Packit |
01d647 |
TagInfo(0x0014, "GPSDestLatitude", N_("GPS Destination Latitude"),
|
|
Packit |
01d647 |
N_("Indicates the latitude of the destination point. The latitude is expressed as "
|
|
Packit |
01d647 |
"three RATIONAL values giving the degrees, minutes, and seconds, respectively. "
|
|
Packit |
01d647 |
"If latitude is expressed as degrees, minutes and seconds, a typical format would "
|
|
Packit |
01d647 |
"be dd/1,mm/1,ss/1. When degrees and minutes are used and, for example, "
|
|
Packit |
01d647 |
"fractions of minutes are given up to two decimal places, the format would be "
|
|
Packit |
01d647 |
"dd/1,mmmm/100,0/1."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 3, printDegrees),
|
|
Packit |
01d647 |
TagInfo(0x0015, "GPSDestLongitudeRef", N_("GPS Destination Longitude Reference"),
|
|
Packit |
01d647 |
N_("Indicates whether the longitude of the destination point is east or west longitude. "
|
|
Packit |
01d647 |
"ASCII \"E\" indicates east longitude, and \"W\" is west longitude."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, EXV_PRINT_TAG(exifGPSLongitudeRef)),
|
|
Packit |
01d647 |
TagInfo(0x0016, "GPSDestLongitude", N_("GPS Destination Longitude"),
|
|
Packit |
01d647 |
N_("Indicates the longitude of the destination point. The longitude is expressed "
|
|
Packit |
01d647 |
"as three RATIONAL values giving the degrees, minutes, and seconds, respectively. "
|
|
Packit |
01d647 |
"If longitude is expressed as degrees, minutes and seconds, a typical format would be "
|
|
Packit |
01d647 |
"ddd/1,mm/1,ss/1. When degrees and minutes are used and, for example, fractions of "
|
|
Packit |
01d647 |
"minutes are given up to two decimal places, the format would be ddd/1,mmmm/100,0/1."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 3, printDegrees),
|
|
Packit |
01d647 |
TagInfo(0x0017, "GPSDestBearingRef", N_("GPS Destination Bearing Reference"),
|
|
Packit |
01d647 |
N_("Indicates the reference used for giving the bearing to the destination point. "
|
|
Packit |
01d647 |
"\"T\" denotes true direction and \"M\" is magnetic direction."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, printGPSDirRef),
|
|
Packit |
01d647 |
TagInfo(0x0018, "GPSDestBearing", N_("GPS Destination Bearing"),
|
|
Packit |
01d647 |
N_("Indicates the bearing to the destination point. The range of values is from "
|
|
Packit |
01d647 |
"0.00 to 359.99."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0019, "GPSDestDistanceRef", N_("GPS Destination Distance Reference"),
|
|
Packit |
01d647 |
N_("Indicates the unit used to express the distance to the destination point. "
|
|
Packit |
01d647 |
"\"K\", \"M\" and \"N\" represent kilometers, miles and knots."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 2, print0x0019),
|
|
Packit |
01d647 |
TagInfo(0x001a, "GPSDestDistance", N_("GPS Destination Distance"),
|
|
Packit |
01d647 |
N_("Indicates the distance to the destination point."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedRational, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x001b, "GPSProcessingMethod", N_("GPS Processing Method"),
|
|
Packit |
01d647 |
N_("A character string recording the name of the method used for location finding. "
|
|
Packit Service |
fb147c |
"The string encoding is defined using the same scheme as UserComment."),
|
|
Packit Service |
fb147c |
gpsId, gpsTags, comment, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x001c, "GPSAreaInformation", N_("GPS Area Information"),
|
|
Packit Service |
fb147c |
N_("A character string recording the name of the GPS area."
|
|
Packit Service |
fb147c |
"The string encoding is defined using the same scheme as UserComment."),
|
|
Packit Service |
fb147c |
gpsId, gpsTags, comment, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x001d, "GPSDateStamp", N_("GPS Date Stamp"),
|
|
Packit |
01d647 |
N_("A character string recording date and time information relative to UTC "
|
|
Packit |
01d647 |
"(Coordinated Universal Time). The format is \"YYYY:MM:DD.\"."),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, 11, printValue),
|
|
Packit |
01d647 |
TagInfo(0x001e, "GPSDifferential", N_("GPS Differential"),
|
|
Packit |
01d647 |
N_("Indicates whether differential correction is applied to the GPS receiver."),
|
|
Packit |
01d647 |
gpsId, gpsTags, unsignedShort, 1, print0x001e),
|
|
Packit |
01d647 |
// End of list marker
|
|
Packit |
01d647 |
TagInfo(0xffff, "(UnknownGpsTag)", N_("Unknown GPSInfo tag"),
|
|
Packit |
01d647 |
N_("Unknown GPSInfo tag"),
|
|
Packit |
01d647 |
gpsId, gpsTags, asciiString, -1, printValue)
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* gpsTagList()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return gpsTagInfo;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// MPF Tags http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/MPF.html
|
|
Packit |
01d647 |
static const TagInfo mpfTagInfo[] = {
|
|
Packit |
01d647 |
TagInfo(0xb000, "MPFVersion", N_("MPFVersion"),
|
|
Packit |
01d647 |
N_("MPF Version"),
|
|
Packit |
01d647 |
mpfId, mpfTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb001, "MPFNumberOfImages", N_("MPFNumberOfImages"),
|
|
Packit |
01d647 |
N_("MPF Number of Images"),
|
|
Packit |
01d647 |
mpfId, mpfTags, undefined, -1, printExifVersion),
|
|
Packit |
01d647 |
TagInfo(0xb002, "MPFImageList", N_("MPFImageList"),
|
|
Packit |
01d647 |
N_("MPF Image List"),
|
|
Packit |
01d647 |
mpfId, mpfTags, asciiString, 0, printValue),
|
|
Packit Service |
fb147c |
TagInfo(0xb003, "MPFImageUIDList", N_("MPFImageUIDList "),
|
|
Packit |
01d647 |
N_("MPF Image UID List"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb004, "MPFTotalFrames", N_("MPFTotalFrames"),
|
|
Packit |
01d647 |
N_("MPF Total Frames"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb101, "MPFIndividualNum", N_("MPFIndividualNum"),
|
|
Packit |
01d647 |
N_("MPF Individual Num"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb201, "MPFPanOrientation", N_("MPFPanOrientation"),
|
|
Packit |
01d647 |
N_("MPFPanOrientation"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb202, "MPFPanOverlapH", N_("MPFPanOverlapH"),
|
|
Packit |
01d647 |
N_("MPF Pan Overlap Horizonal"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb203, "MPFPanOverlapV", N_("MPFPanOverlapV"),
|
|
Packit |
01d647 |
N_("MPF Pan Overlap Vertical"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb204, "MPFBaseViewpointNum", N_("MPFBaseViewpointNum"),
|
|
Packit |
01d647 |
N_("MPF Base Viewpoint Number"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb205, "MPFConvergenceAngle", N_("MPFConvergenceAngle"),
|
|
Packit |
01d647 |
N_("MPF Convergence Angle"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb206, "MPFBaselineLength", N_("MPFBaselineLength"),
|
|
Packit |
01d647 |
N_("MPF Baseline Length"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb207, "MPFVerticalDivergence", N_("MPFVerticalDivergence"),
|
|
Packit |
01d647 |
N_("MPF Vertical Divergence"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb208, "MPFAxisDistanceX", N_("MPFAxisDistanceX"),
|
|
Packit |
01d647 |
N_("MPF Axis Distance X"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb209, "MPFAxisDistanceY", N_("MPFAxisDistanceY"),
|
|
Packit |
01d647 |
N_("MPF Axis Distance Y"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb20a, "MPFAxisDistanceZ", N_("MPFAxisDistanceZ"),
|
|
Packit |
01d647 |
N_("MPF Axis Distance Z"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb20b, "MPFYawAngle", N_("MPFYawAngle"),
|
|
Packit |
01d647 |
N_("MPF Yaw Angle"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb20c, "MPFPitchAngle", N_("MPFPitchAngle"),
|
|
Packit |
01d647 |
N_("MPF Pitch Angle"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0xb20d, "MPFRollAngle", N_("MPFRollAngle"),
|
|
Packit |
01d647 |
N_("MPF Roll Angle"),
|
|
Packit |
01d647 |
mpfId, mpfTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
// End of list marker
|
|
Packit |
01d647 |
TagInfo(0xffff, "(UnknownMpfTag)", N_("Unknown MPF tag"),
|
|
Packit |
01d647 |
N_("Unknown MPF tag"),
|
|
Packit |
01d647 |
mpfId, mpfTags, asciiString, -1, printValue)
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* mpfTagList()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return mpfTagInfo;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// Exif Interoperability IFD Tags
|
|
Packit |
01d647 |
static const TagInfo iopTagInfo[] = {
|
|
Packit |
01d647 |
TagInfo(0x0001, "InteroperabilityIndex", N_("Interoperability Index"),
|
|
Packit |
01d647 |
N_("Indicates the identification of the Interoperability rule. "
|
|
Packit |
01d647 |
"Use \"R98\" for stating ExifR98 Rules. Four bytes used "
|
|
Packit |
01d647 |
"including the termination code (NULL). see the separate "
|
|
Packit |
01d647 |
"volume of Recommended Exif Interoperability Rules (ExifR98) "
|
|
Packit |
01d647 |
"for other tags used for ExifR98."),
|
|
Packit |
01d647 |
iopId, iopTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0002, "InteroperabilityVersion", N_("Interoperability Version"),
|
|
Packit |
01d647 |
N_("Interoperability version"),
|
|
Packit |
01d647 |
iopId, iopTags, undefined, -1, printExifVersion),
|
|
Packit |
01d647 |
TagInfo(0x1000, "RelatedImageFileFormat", N_("Related Image File Format"),
|
|
Packit |
01d647 |
N_("File format of image file"),
|
|
Packit |
01d647 |
iopId, iopTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1001, "RelatedImageWidth", N_("Related Image Width"),
|
|
Packit |
01d647 |
N_("Image width"),
|
|
Packit |
01d647 |
iopId, iopTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x1002, "RelatedImageLength", N_("Related Image Length"),
|
|
Packit |
01d647 |
N_("Image height"),
|
|
Packit |
01d647 |
iopId, iopTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
// End of list marker
|
|
Packit |
01d647 |
TagInfo(0xffff, "(UnknownIopTag)", N_("Unknown Exif Interoperability tag"),
|
|
Packit |
01d647 |
N_("Unknown Exif Interoperability tag"),
|
|
Packit |
01d647 |
iopId, iopTags, asciiString, -1, printValue)
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* iopTagList()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return iopTagInfo;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// Synthesized Exiv2 Makernote info Tags (read-only)
|
|
Packit |
01d647 |
static const TagInfo mnTagInfo[] = {
|
|
Packit |
01d647 |
TagInfo(0x0001, "Offset", N_("Offset"),
|
|
Packit |
01d647 |
N_("Offset of the makernote from the start of the TIFF header."),
|
|
Packit |
01d647 |
mnId, makerTags, unsignedLong, 1, printValue),
|
|
Packit |
01d647 |
TagInfo(0x0002, "ByteOrder", N_("Byte Order"),
|
|
Packit |
01d647 |
N_("Byte order used to encode MakerNote tags, 'MM' (big-endian) or 'II' (little-endian)."),
|
|
Packit |
01d647 |
mnId, makerTags, asciiString, 0, printValue),
|
|
Packit |
01d647 |
// End of list marker
|
|
Packit |
01d647 |
TagInfo(0xffff, "(UnknownMnTag)", N_("Unknown Exiv2 Makernote info tag"),
|
|
Packit |
01d647 |
N_("Unknown Exiv2 Makernote info tag"),
|
|
Packit |
01d647 |
mnId, makerTags, asciiString, -1, printValue)
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* mnTagList()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return mnTagInfo;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
bool isMakerIfd(IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
bool rc = false;
|
|
Packit |
01d647 |
const GroupInfo* ii = find(groupInfo, ifdId);
|
|
Packit |
01d647 |
if (ii != 0 && 0 == strcmp(ii->ifdName_, "Makernote")) {
|
|
Packit |
01d647 |
rc = true;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return rc;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
bool isExifIfd(IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
bool rc;
|
|
Packit |
01d647 |
switch (ifdId) {
|
|
Packit |
01d647 |
case ifd0Id:
|
|
Packit |
01d647 |
case exifId:
|
|
Packit |
01d647 |
case gpsId:
|
|
Packit |
01d647 |
case iopId:
|
|
Packit |
01d647 |
case ifd1Id:
|
|
Packit |
01d647 |
case ifd2Id:
|
|
Packit |
01d647 |
case ifd3Id:
|
|
Packit |
01d647 |
case mpfId:
|
|
Packit |
01d647 |
case subImage1Id:
|
|
Packit |
01d647 |
case subImage2Id:
|
|
Packit |
01d647 |
case subImage3Id:
|
|
Packit |
01d647 |
case subImage4Id:
|
|
Packit |
01d647 |
case subImage5Id:
|
|
Packit |
01d647 |
case subImage6Id:
|
|
Packit |
01d647 |
case subImage7Id:
|
|
Packit |
01d647 |
case subImage8Id:
|
|
Packit |
01d647 |
case subImage9Id:
|
|
Packit |
01d647 |
case subThumb1Id:
|
|
Packit |
01d647 |
case panaRawId: rc = true; break;
|
|
Packit |
01d647 |
default: rc = false; break;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return rc;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
void taglist(std::ostream& os, IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
const TagInfo* ti = Internal::tagList(ifdId);
|
|
Packit |
01d647 |
if (ti != 0) {
|
|
Packit |
01d647 |
for (int k = 0; ti[k].tag_ != 0xffff; ++k) {
|
|
Packit |
01d647 |
os << ti[k] << "\n";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
} // taglist
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* tagList(IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
const GroupInfo* ii = find(groupInfo, ifdId);
|
|
Packit |
01d647 |
if (ii == 0 || ii->tagList_ == 0) return 0;
|
|
Packit |
01d647 |
return ii->tagList_();
|
|
Packit |
01d647 |
} // tagList
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* tagInfo(uint16_t tag, IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
const TagInfo* ti = tagList(ifdId);
|
|
Packit |
01d647 |
if (ti == 0) return 0;
|
|
Packit |
01d647 |
int idx = 0;
|
|
Packit |
01d647 |
for (idx = 0; ti[idx].tag_ != 0xffff; ++idx) {
|
|
Packit |
01d647 |
if (ti[idx].tag_ == tag) break;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return &ti[idx];
|
|
Packit |
01d647 |
} // tagInfo
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* tagInfo(const std::string& tagName, IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
const TagInfo* ti = tagList(ifdId);
|
|
Packit |
01d647 |
if (ti == 0) return 0;
|
|
Packit |
01d647 |
const char* tn = tagName.c_str();
|
|
Packit |
01d647 |
if (tn == 0) return 0;
|
|
Packit |
01d647 |
for (int idx = 0; ti[idx].tag_ != 0xffff; ++idx) {
|
|
Packit |
01d647 |
if (0 == strcmp(ti[idx].name_, tn)) {
|
|
Packit |
01d647 |
return &ti[idx];
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return 0;
|
|
Packit |
01d647 |
} // tagInfo
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
IfdId groupId(const std::string& groupName)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
IfdId ifdId = ifdIdNotSet;
|
|
Packit |
01d647 |
const GroupInfo* ii = find(groupInfo, GroupInfo::GroupName(groupName));
|
|
Packit |
01d647 |
if (ii != 0) ifdId = static_cast<IfdId>(ii->ifdId_);
|
|
Packit |
01d647 |
return ifdId;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const char* ifdName(IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
const GroupInfo* ii = find(groupInfo, ifdId);
|
|
Packit |
01d647 |
if (ii == 0) return groupInfo[0].ifdName_;
|
|
Packit |
01d647 |
return ii->ifdName_;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const char* groupName(IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
const GroupInfo* ii = find(groupInfo, ifdId);
|
|
Packit |
01d647 |
if (ii == 0) return groupInfo[0].groupName_;
|
|
Packit |
01d647 |
return ii->groupName_;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printValue(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return os << value;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit Service |
fb147c |
std::ostream& printBitmask(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit Service |
fb147c |
{
|
|
Packit Service |
fb147c |
if (value.typeId() == Exiv2::unsignedShort || value.typeId() == Exiv2::signedShort)
|
|
Packit Service |
fb147c |
{
|
|
Packit Service |
fb147c |
uint16_t bit = 0;
|
|
Packit Service |
fb147c |
uint16_t comma = 0;
|
|
Packit Service |
fb147c |
for (uint16_t i = 0; i < value.count(); i++ ) { // for each element in value array
|
|
Packit Service |
fb147c |
uint16_t bits = static_cast<uint16_t>(value.toLong(i));
|
|
Packit Service |
fb147c |
for (uint16_t b = 0; b < 16; ++b) { // for every bit
|
|
Packit Service |
fb147c |
if (bits & (1 << b)) {
|
|
Packit Service |
fb147c |
if ( comma++ ) {
|
|
Packit Service |
fb147c |
os << ",";
|
|
Packit Service |
fb147c |
}
|
|
Packit Service |
fb147c |
os << bit;
|
|
Packit Service |
fb147c |
}
|
|
Packit Service |
fb147c |
bit++ ;
|
|
Packit Service |
fb147c |
}
|
|
Packit Service |
fb147c |
}
|
|
Packit Service |
fb147c |
// if no bits are set, print "(none)"
|
|
Packit Service |
fb147c |
if ( !comma ) os << N_("(none)");
|
|
Packit Service |
fb147c |
} else {
|
|
Packit Service |
fb147c |
printValue(os,value,metadata);
|
|
Packit Service |
fb147c |
}
|
|
Packit Service |
fb147c |
return os;
|
|
Packit Service |
fb147c |
}
|
|
Packit Service |
fb147c |
|
|
Packit |
01d647 |
float fnumber(float apertureValue)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return std::exp(std::log(2.0f) * apertureValue / 2.f);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
URational exposureTime(float shutterSpeedValue)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
URational ur(1, 1);
|
|
Packit |
01d647 |
double tmp = std::exp(std::log(2.0) * static_cast<double>(shutterSpeedValue));
|
|
Packit |
01d647 |
if (tmp > 1) {
|
|
Packit |
01d647 |
ur.second = static_cast<long>(tmp + 0.5);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
ur.first = static_cast<long>(1/tmp + 0.5);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return ur;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
uint16_t tagNumber(const std::string& tagName, IfdId ifdId)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
const TagInfo* ti = tagInfo(tagName, ifdId);
|
|
Packit |
01d647 |
if (ti != 0 && ti->tag_ != 0xffff) return ti->tag_;
|
|
Packit |
01d647 |
if (!isHex(tagName, 4, "0x")) throw Error(kerInvalidTag, tagName, ifdId);
|
|
Packit |
01d647 |
std::istringstream is(tagName);
|
|
Packit |
01d647 |
uint16_t tag;
|
|
Packit |
01d647 |
is >> std::hex >> tag;
|
|
Packit |
01d647 |
return tag;
|
|
Packit |
01d647 |
} // tagNumber
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printLong(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
Rational r = value.toRational();
|
|
Packit |
01d647 |
if (r.second != 0) return os << static_cast<long>(r.first) / r.second;
|
|
Packit |
01d647 |
return os << "(" << value << ")";
|
|
Packit |
01d647 |
} // printLong
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printFloat(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
Rational r = value.toRational();
|
|
Packit Service |
fb147c |
if (r.second != 0) {
|
|
Packit Service |
fb147c |
os << value.toFloat() ;
|
|
Packit Service |
fb147c |
} else {
|
|
Packit Service |
fb147c |
os << "(" << value << ")";
|
|
Packit Service |
fb147c |
}
|
|
Packit Service |
fb147c |
return os;
|
|
Packit |
01d647 |
} // printFloat
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printDegrees(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ios::fmtflags f( os.flags() );
|
|
Packit |
01d647 |
if (value.count() == 3) {
|
|
Packit |
01d647 |
static const char* unit[] = { "deg", "'", "\"" };
|
|
Packit Service |
fb147c |
for (int i = 0; i < value.count() ; ++i) {
|
|
Packit Service |
fb147c |
const int v = (int) (value.toFloat(i)+0.5f); // nearest integer
|
|
Packit Service |
fb147c |
os << (i != 0? " " : "") << v << unit[i];
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
os << value;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
os.flags(f);
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
} // printDegrees
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printUcs2(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
bool cnv = false;
|
|
Packit |
01d647 |
if (value.typeId() == unsignedByte && value.size() > 0) {
|
|
Packit |
01d647 |
DataBuf buf(value.size());
|
|
Packit |
01d647 |
value.copy(buf.pData_, invalidByteOrder);
|
|
Packit |
01d647 |
// Strip trailing odd byte due to failing UCS-2 conversion
|
|
Packit |
01d647 |
if (buf.size_ % 2 == 1) buf.size_ -=1;
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// Strip trailing UCS-2 0-characters
|
|
Packit |
01d647 |
while (buf.size_ >= 2) {
|
|
Packit |
01d647 |
if (buf.pData_[buf.size_ - 1] == 0 && buf.pData_[buf.size_ - 2] == 0) {
|
|
Packit |
01d647 |
buf.size_ -= 2;
|
|
Packit |
01d647 |
} else {
|
|
Packit |
01d647 |
break;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::string str((const char*)buf.pData_, buf.size_);
|
|
Packit |
01d647 |
cnv = convertStringCharset(str, "UCS-2LE", "UTF-8");
|
|
Packit |
01d647 |
if (cnv) os << str;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
if (!cnv) os << value;
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
} // printUcs2
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printExifUnit(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifUnit)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x0000(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
if (value.size() != 4 || value.typeId() != unsignedByte) {
|
|
Packit |
01d647 |
return os << value;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
for (int i = 0; i < 3; i++) {
|
|
Packit |
01d647 |
os << value.toLong(i);
|
|
Packit |
01d647 |
os << ".";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
os << value.toLong(3);
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x0005(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifGPSAltitudeRef)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x0006(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ios::fmtflags f( os.flags() );
|
|
Packit |
01d647 |
std::ostringstream oss;
|
|
Packit |
01d647 |
oss.copyfmt(os);
|
|
Packit |
01d647 |
const int32_t d = value.toRational().second;
|
|
Packit |
01d647 |
if (d == 0) return os << "(" << value << ")";
|
|
Packit |
01d647 |
const int p = d > 1 ? 1 : 0;
|
|
Packit |
01d647 |
os << std::fixed << std::setprecision(p) << value.toFloat() << " m";
|
|
Packit |
01d647 |
os.copyfmt(oss);
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
os.flags(f);
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x0007(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ios::fmtflags f( os.flags() );
|
|
Packit |
01d647 |
if (value.count() == 3) {
|
|
Packit |
01d647 |
for (int i = 0; i < 3; ++i) {
|
|
Packit |
01d647 |
if (value.toRational(i).second == 0) {
|
|
Packit |
01d647 |
return os << "(" << value << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
std::ostringstream oss;
|
|
Packit |
01d647 |
oss.copyfmt(os);
|
|
Packit |
01d647 |
const float sec = 3600 * value.toFloat(0)
|
|
Packit |
01d647 |
+ 60 * value.toFloat(1)
|
|
Packit |
01d647 |
+ value.toFloat(2);
|
|
Packit |
01d647 |
int p = 0;
|
|
Packit |
01d647 |
if (sec != static_cast<int>(sec)) p = 1;
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const int hh = static_cast<int>(sec / 3600);
|
|
Packit |
01d647 |
const int mm = static_cast<int>((sec - 3600 * hh) / 60);
|
|
Packit |
01d647 |
const float ss = sec - 3600 * hh - 60 * mm;
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
os << std::setw(2) << std::setfill('0') << std::right << hh << ":"
|
|
Packit |
01d647 |
<< std::setw(2) << std::setfill('0') << std::right << mm << ":"
|
|
Packit |
01d647 |
<< std::setw(2 + p * 2) << std::setfill('0') << std::right
|
|
Packit |
01d647 |
<< std::fixed << std::setprecision(p) << ss;
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
os.copyfmt(oss);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
os << value;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
os.flags(f);
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x0009(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifGPSStatus)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x000a(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifGPSMeasureMode)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x000c(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifGPSSpeedRef)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x0019(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifGPSDestDistanceRef)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x001e(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifGPSDifferential)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x0112(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifOrientation)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! YCbCrPositioning, tag 0x0213
|
|
Packit |
01d647 |
extern const TagDetails exifYCbCrPositioning[] = {
|
|
Packit |
01d647 |
{ 1, N_("Centered") },
|
|
Packit |
01d647 |
{ 2, N_("Co-sited") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
std::ostream& print0x0213(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifYCbCrPositioning)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x8298(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
// Print the copyright information in the format Photographer, Editor
|
|
Packit |
01d647 |
std::string val = value.toString();
|
|
Packit |
01d647 |
std::string::size_type pos = val.find('\0');
|
|
Packit |
01d647 |
if (pos != std::string::npos) {
|
|
Packit |
01d647 |
std::string photographer(val, 0, pos);
|
|
Packit |
01d647 |
if (photographer != " ") os << photographer;
|
|
Packit |
01d647 |
std::string editor(val, pos + 1);
|
|
Packit |
01d647 |
if (editor != "") {
|
|
Packit |
01d647 |
if (photographer != " ") os << ", ";
|
|
Packit |
01d647 |
os << editor;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
os << val;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x829a(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
if (value.count() == 0) return os;
|
|
Packit |
01d647 |
if (value.typeId() != unsignedRational) return os << "(" << value << ")";
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
URational t = value.toRational();
|
|
Packit |
01d647 |
if (t.first == 0 || t.second == 0) {
|
|
Packit |
01d647 |
os << "(" << t << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else if (t.second == t.first) {
|
|
Packit |
01d647 |
os << "1 s";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else if (t.second % t.first == 0) {
|
|
Packit |
01d647 |
t.second = t.second / t.first;
|
|
Packit |
01d647 |
t.first = 1;
|
|
Packit |
01d647 |
os << t << " s";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
os << static_cast<float>(t.first) / t.second << " s";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x829d(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ios::fmtflags f( os.flags() );
|
|
Packit |
01d647 |
Rational fnumber = value.toRational();
|
|
Packit |
01d647 |
if (fnumber.second != 0) {
|
|
Packit |
01d647 |
std::ostringstream oss;
|
|
Packit |
01d647 |
oss.copyfmt(os);
|
|
Packit |
01d647 |
os << "F" << std::setprecision(2)
|
|
Packit |
01d647 |
<< static_cast<float>(fnumber.first) / fnumber.second;
|
|
Packit |
01d647 |
os.copyfmt(oss);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
os << "(" << value << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
os.flags(f);
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! ExposureProgram, tag 0x8822
|
|
Packit |
01d647 |
extern const TagDetails exifExposureProgram[] = {
|
|
Packit |
01d647 |
{ 0, N_("Not defined") },
|
|
Packit |
01d647 |
{ 1, N_("Manual") },
|
|
Packit |
01d647 |
{ 2, N_("Auto") },
|
|
Packit |
01d647 |
{ 3, N_("Aperture priority") },
|
|
Packit |
01d647 |
{ 4, N_("Shutter priority") },
|
|
Packit |
01d647 |
{ 5, N_("Creative program") },
|
|
Packit |
01d647 |
{ 6, N_("Action program") },
|
|
Packit |
01d647 |
{ 7, N_("Portrait mode") },
|
|
Packit |
01d647 |
{ 8, N_("Landscape mode") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x8822(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifExposureProgram)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x8827(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return os << value.toLong();
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x9101(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
for (long i = 0; i < value.count(); ++i) {
|
|
Packit |
01d647 |
long l = value.toLong(i);
|
|
Packit |
01d647 |
switch (l) {
|
|
Packit |
01d647 |
case 0: break;
|
|
Packit |
01d647 |
case 1: os << "Y"; break;
|
|
Packit |
01d647 |
case 2: os << "Cb"; break;
|
|
Packit |
01d647 |
case 3: os << "Cr"; break;
|
|
Packit |
01d647 |
case 4: os << "R"; break;
|
|
Packit |
01d647 |
case 5: os << "G"; break;
|
|
Packit |
01d647 |
case 6: os << "B"; break;
|
|
Packit |
01d647 |
default: os << "(" << l << ")"; break;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x9201(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
Rational r = value.toRational();
|
|
Packit |
01d647 |
if (!value.ok() || r.second == 0) return os << "(" << value << ")";
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
URational ur = exposureTime(static_cast<float>(r.first) / r.second);
|
|
Packit |
01d647 |
os << ur.first;
|
|
Packit |
01d647 |
if (ur.second > 1) {
|
|
Packit |
01d647 |
os << "/" << ur.second;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return os << " s";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x9202(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ios::fmtflags f( os.flags() );
|
|
Packit |
01d647 |
if ( value.count() == 0
|
|
Packit |
01d647 |
|| value.toRational().second == 0) {
|
|
Packit |
01d647 |
return os << "(" << value << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
std::ostringstream oss;
|
|
Packit |
01d647 |
oss.copyfmt(os);
|
|
Packit |
01d647 |
os << "F" << std::setprecision(2) << fnumber(value.toFloat());
|
|
Packit |
01d647 |
os.copyfmt(oss);
|
|
Packit |
01d647 |
os.flags(f);
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x9204(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
Rational bias = value.toRational();
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (bias.first == 0 || bias.first == (int32_t)0x80000000 ) {
|
|
Packit |
01d647 |
os << "0 EV";
|
|
Packit |
01d647 |
} else if (bias.second <= 0) {
|
|
Packit |
01d647 |
os << "(" << bias.first << "/" << bias.second << ")";
|
|
Packit |
01d647 |
} else {
|
|
Packit |
01d647 |
int32_t d = gcd(bias.first, bias.second);
|
|
Packit |
01d647 |
int32_t num = std::abs(bias.first) / d;
|
|
Packit |
01d647 |
int32_t den = bias.second / d;
|
|
Packit |
01d647 |
os << (bias.first < 0 ? "-" : "+") << num;
|
|
Packit |
01d647 |
if (den != 1) {
|
|
Packit |
01d647 |
os << "/" << den;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
os << " EV";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x9206(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ios::fmtflags f( os.flags() );
|
|
Packit |
01d647 |
Rational distance = value.toRational();
|
|
Packit |
01d647 |
if (distance.first == 0) {
|
|
Packit |
01d647 |
os << _("Unknown");
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else if (static_cast<uint32_t>(distance.first) == 0xffffffff) {
|
|
Packit |
01d647 |
os << _("Infinity");
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else if (distance.second != 0) {
|
|
Packit |
01d647 |
std::ostringstream oss;
|
|
Packit |
01d647 |
oss.copyfmt(os);
|
|
Packit |
01d647 |
os << std::fixed << std::setprecision(2)
|
|
Packit |
01d647 |
<< (float)distance.first / distance.second
|
|
Packit |
01d647 |
<< " m";
|
|
Packit |
01d647 |
os.copyfmt(oss);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
os << "(" << value << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
os.flags(f);
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! MeteringMode, tag 0x9207
|
|
Packit |
01d647 |
extern const TagDetails exifMeteringMode[] = {
|
|
Packit |
01d647 |
{ 0, N_("Unknown") },
|
|
Packit |
01d647 |
{ 1, N_("Average") },
|
|
Packit |
01d647 |
{ 2, N_("Center weighted average") },
|
|
Packit |
01d647 |
{ 3, N_("Spot") },
|
|
Packit |
01d647 |
{ 4, N_("Multi-spot") },
|
|
Packit |
01d647 |
{ 5, N_("Multi-segment") },
|
|
Packit |
01d647 |
{ 6, N_("Partial") },
|
|
Packit |
01d647 |
{ 255, N_("Other") },
|
|
Packit |
01d647 |
{ 255, N_("Other") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x9207(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifMeteringMode)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! LightSource, tag 0x9208
|
|
Packit |
01d647 |
extern const TagDetails exifLightSource[] = {
|
|
Packit |
01d647 |
{ 0, N_("Unknown") },
|
|
Packit |
01d647 |
{ 1, N_("Daylight") },
|
|
Packit |
01d647 |
{ 2, N_("Fluorescent") },
|
|
Packit |
01d647 |
{ 3, N_("Tungsten (incandescent light)") },
|
|
Packit |
01d647 |
{ 4, N_("Flash") },
|
|
Packit |
01d647 |
{ 9, N_("Fine weather") },
|
|
Packit |
01d647 |
{ 10, N_("Cloudy weather") },
|
|
Packit |
01d647 |
{ 11, N_("Shade") },
|
|
Packit |
01d647 |
{ 12, N_("Daylight fluorescent (D 5700 - 7100K)") },
|
|
Packit |
01d647 |
{ 13, N_("Day white fluorescent (N 4600 - 5400K)") },
|
|
Packit |
01d647 |
{ 14, N_("Cool white fluorescent (W 3900 - 4500K)") },
|
|
Packit |
01d647 |
{ 15, N_("White fluorescent (WW 3200 - 3700K)") },
|
|
Packit |
01d647 |
{ 17, N_("Standard light A") },
|
|
Packit |
01d647 |
{ 18, N_("Standard light B") },
|
|
Packit |
01d647 |
{ 19, N_("Standard light C") },
|
|
Packit |
01d647 |
{ 20, N_("D55") },
|
|
Packit |
01d647 |
{ 21, N_("D65") },
|
|
Packit |
01d647 |
{ 22, N_("D75") },
|
|
Packit |
01d647 |
{ 23, N_("D50") },
|
|
Packit |
01d647 |
{ 24, N_("ISO studio tungsten") },
|
|
Packit |
01d647 |
{ 255, N_("Other light source") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x9208(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifLightSource)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0x920a(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ios::fmtflags f( os.flags() );
|
|
Packit |
01d647 |
Rational length = value.toRational();
|
|
Packit |
01d647 |
if (length.second != 0) {
|
|
Packit |
01d647 |
std::ostringstream oss;
|
|
Packit |
01d647 |
oss.copyfmt(os);
|
|
Packit |
01d647 |
os << std::fixed << std::setprecision(1)
|
|
Packit |
01d647 |
<< (float)length.first / length.second
|
|
Packit |
01d647 |
<< " mm";
|
|
Packit |
01d647 |
os.copyfmt(oss);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
os << "(" << value << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
os.flags(f);
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! ColorSpace, tag 0xa001
|
|
Packit |
01d647 |
extern const TagDetails exifColorSpace[] = {
|
|
Packit |
01d647 |
{ 1, N_("sRGB") },
|
|
Packit |
01d647 |
{ 2, N_("Adobe RGB") }, // Not defined to Exif 2.2 spec. But used by a lot of cameras.
|
|
Packit |
01d647 |
{ 0xffff, N_("Uncalibrated") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa001(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifColorSpace)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! SensingMethod, tag 0xa217
|
|
Packit |
01d647 |
extern const TagDetails exifSensingMethod[] = {
|
|
Packit |
01d647 |
{ 1, N_("Not defined") },
|
|
Packit |
01d647 |
{ 2, N_("One-chip color area") },
|
|
Packit |
01d647 |
{ 3, N_("Two-chip color area") },
|
|
Packit |
01d647 |
{ 4, N_("Three-chip color area") },
|
|
Packit |
01d647 |
{ 5, N_("Color sequential area") },
|
|
Packit |
01d647 |
{ 7, N_("Trilinear sensor") },
|
|
Packit |
01d647 |
{ 8, N_("Color sequential linear") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa217(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifSensingMethod)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! FileSource, tag 0xa300
|
|
Packit |
01d647 |
extern const TagDetails exifFileSource[] = {
|
|
Packit |
01d647 |
{ 1, N_("Film scanner") }, // Not defined to Exif 2.2 spec.
|
|
Packit |
01d647 |
{ 2, N_("Reflexion print scanner") }, // but used by some scanner device softwares.
|
|
Packit |
01d647 |
{ 3, N_("Digital still camera") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa300(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifFileSource)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! SceneType, tag 0xa301
|
|
Packit |
01d647 |
extern const TagDetails exifSceneType[] = {
|
|
Packit |
01d647 |
{ 1, N_("Directly photographed") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa301(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifSceneType)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! CustomRendered, tag 0xa401
|
|
Packit |
01d647 |
extern const TagDetails exifCustomRendered[] = {
|
|
Packit |
01d647 |
{ 0, N_("Normal process") },
|
|
Packit |
01d647 |
{ 1, N_("Custom process") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa401(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifCustomRendered)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! ExposureMode, tag 0xa402
|
|
Packit |
01d647 |
extern const TagDetails exifExposureMode[] = {
|
|
Packit |
01d647 |
{ 0, N_("Auto") },
|
|
Packit |
01d647 |
{ 1, N_("Manual") },
|
|
Packit |
01d647 |
{ 2, N_("Auto bracket") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa402(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifExposureMode)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! WhiteBalance, tag 0xa403
|
|
Packit |
01d647 |
extern const TagDetails exifWhiteBalance[] = {
|
|
Packit |
01d647 |
{ 0, N_("Auto") },
|
|
Packit |
01d647 |
{ 1, N_("Manual") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa403(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifWhiteBalance)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa404(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ios::fmtflags f( os.flags() );
|
|
Packit |
01d647 |
Rational zoom = value.toRational();
|
|
Packit |
01d647 |
if (zoom.second == 0) {
|
|
Packit |
01d647 |
os << _("Digital zoom not used");
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
std::ostringstream oss;
|
|
Packit |
01d647 |
oss.copyfmt(os);
|
|
Packit |
01d647 |
os << std::fixed << std::setprecision(1)
|
|
Packit |
01d647 |
<< (float)zoom.first / zoom.second;
|
|
Packit |
01d647 |
os.copyfmt(oss);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
os.flags(f);
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa405(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
long length = value.toLong();
|
|
Packit |
01d647 |
if (length == 0) {
|
|
Packit |
01d647 |
os << _("Unknown");
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
else {
|
|
Packit |
01d647 |
os << length << ".0 mm";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return os;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! SceneCaptureType, tag 0xa406
|
|
Packit |
01d647 |
extern const TagDetails exifSceneCaptureType[] = {
|
|
Packit |
01d647 |
{ 0, N_("Standard") },
|
|
Packit |
01d647 |
{ 1, N_("Landscape") },
|
|
Packit |
01d647 |
{ 2, N_("Portrait") },
|
|
Packit |
01d647 |
{ 3, N_("Night scene") },
|
|
Packit |
01d647 |
{ 3, N_("Night scene") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa406(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifSceneCaptureType)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GainControl, tag 0xa407
|
|
Packit |
01d647 |
extern const TagDetails exifGainControl[] = {
|
|
Packit |
01d647 |
{ 0, N_("None") },
|
|
Packit |
01d647 |
{ 1, N_("Low gain up") },
|
|
Packit |
01d647 |
{ 2, N_("High gain up") },
|
|
Packit |
01d647 |
{ 3, N_("Low gain down") },
|
|
Packit |
01d647 |
{ 4, N_("High gain down") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa407(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifGainControl)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Saturation, tag 0xa409
|
|
Packit |
01d647 |
extern const TagDetails exifSaturation[] = {
|
|
Packit |
01d647 |
{ 0, N_("Normal") },
|
|
Packit |
01d647 |
{ 1, N_("Low") },
|
|
Packit |
01d647 |
{ 2, N_("High") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa409(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifSaturation)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! SubjectDistanceRange, tag 0xa40c
|
|
Packit |
01d647 |
extern const TagDetails exifSubjectDistanceRange[] = {
|
|
Packit |
01d647 |
{ 0, N_("Unknown") },
|
|
Packit |
01d647 |
{ 1, N_("Macro") },
|
|
Packit |
01d647 |
{ 2, N_("Close view") },
|
|
Packit |
01d647 |
{ 3, N_("Distant view") },
|
|
Packit |
01d647 |
{ 3, N_("Distant view") } // To silence compiler warning
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& print0xa40c(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifSubjectDistanceRange)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! GPS direction ref, tags 0x000e, 0x0010, 0x0017
|
|
Packit |
01d647 |
extern const TagDetails exifGPSDirRef[] = {
|
|
Packit |
01d647 |
{ 'T', N_("True direction") },
|
|
Packit |
01d647 |
{ 'M', N_("Magnetic direction") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printGPSDirRef(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifGPSDirRef)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
//! Contrast, tag 0xa408 and Sharpness, tag 0xa40a
|
|
Packit |
01d647 |
extern const TagDetails exifNormalSoftHard[] = {
|
|
Packit |
01d647 |
{ 0, N_("Normal") },
|
|
Packit |
01d647 |
{ 1, N_("Soft") },
|
|
Packit |
01d647 |
{ 2, N_("Hard") }
|
|
Packit |
01d647 |
};
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printNormalSoftHard(std::ostream& os, const Value& value, const ExifData* metadata)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PRINT_TAG(exifNormalSoftHard)(os, value, metadata);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printExifVersion(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
if (value.size() != 4 || value.typeId() != undefined) {
|
|
Packit |
01d647 |
return os << "(" << value << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
char s[5];
|
|
Packit |
01d647 |
for (int i = 0; i < 4; ++i) {
|
|
Packit |
01d647 |
s[i] = static_cast<char>(value.toLong(i));
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
s[4] = '\0';
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
return printVersion(os, s);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printXmpVersion(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
if (value.size() != 4 || value.typeId() != xmpText) {
|
|
Packit |
01d647 |
return os << "(" << value << ")";
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
return printVersion(os, value.toString());
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::ostream& printXmpDate(std::ostream& os, const Value& value, const ExifData*)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
if (!(value.size() == 19 || value.size() == 20) || value.typeId() != xmpText) {
|
|
Packit |
01d647 |
return os << value;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::string stringValue = value.toString();
|
|
Packit |
01d647 |
if (stringValue[19] == 'Z') {
|
|
Packit |
01d647 |
stringValue = stringValue.substr(0, 19);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
for (unsigned int i = 0; i < stringValue.length(); ++i) {
|
|
Packit |
01d647 |
if (stringValue[i] == 'T') stringValue[i] = ' ';
|
|
Packit |
01d647 |
if (stringValue[i] == '-') stringValue[i] = ':';
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
return os << stringValue;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const GroupInfo *groupList()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return groupInfo + 1;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const TagInfo* tagList(const std::string& groupName)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
const GroupInfo* ii = find(groupInfo, GroupInfo::GroupName(groupName));
|
|
Packit |
01d647 |
if (ii == 0 || ii->tagList_ == 0) {
|
|
Packit |
01d647 |
return 0;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return ii->tagList_();
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
} }
|