Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 31 additions & 42 deletions src/easyaccess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,6 @@
namespace {
using namespace Exiv2;

template <size_t N, const char* const (&keys)[N]>
ExifData::const_iterator findMetadatum(const ExifData& ed) {
static_assert(N > 0, "Passed zero length findMetadatum");
for (const auto& k : keys) {
auto pos = ed.findKey(ExifKey(k));
if (pos != ed.end())
return pos;
}
return ed.end();
} // findMetadatum

/*!
@brief Search \em ed for a Metadatum specified by the \em keys.
The \em keys are searched in the order of their appearance, the
Expand Down Expand Up @@ -73,7 +62,7 @@ ExifData::const_iterator orientation(const ExifData& ed) {
"Exif.Sony1MltCsA100.Rotation", "Exif.Sony1Cs.Rotation", "Exif.Sony2Cs.Rotation",
"Exif.Sony1Cs2.Rotation", "Exif.Sony2Cs2.Rotation", "Exif.Sony1MltCsA100.Rotation",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator isoSpeed(const ExifData& ed) {
Expand Down Expand Up @@ -155,7 +144,7 @@ ExifData::const_iterator isoSpeed(const ExifData& ed) {
// ISO value (see EXIF 2.3 Annex G)
int64_t iso_tmp_val = -1;
while (iso_tmp_val == -1 && (iso_val == 65535 || md == ed.end())) {
auto md_st = findMetadatum<std::size(sensitivityType), sensitivityType>(ed);
auto md_st = findMetadatum(ed, sensitivityType, std::size(sensitivityType));
// no SensitivityType? exit with existing data
if (md_st == ed.end())
break;
Expand Down Expand Up @@ -198,7 +187,7 @@ ExifData::const_iterator dateTimeOriginal(const ExifData& ed) {
"Exif.Photo.DateTimeOriginal",
"Exif.Image.DateTimeOriginal",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator flashBias(const ExifData& ed) {
Expand All @@ -207,7 +196,7 @@ ExifData::const_iterator flashBias(const ExifData& ed) {
"Exif.OlympusCs.FlashExposureComp", "Exif.Minolta.FlashExposureComp", "Exif.SonyMinolta.FlashExposureComp",
"Exif.Sony1.FlashExposureComp", "Exif.Sony2.FlashExposureComp",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator exposureMode(const ExifData& ed) {
Expand All @@ -219,7 +208,7 @@ ExifData::const_iterator exposureMode(const ExifData& ed) {
"Exif.Sony2Cs.ExposureProgram", "Exif.Sony1MltCsA100.ExposureMode", "Exif.SonyMisc2b.ExposureProgram",
"Exif.Sigma.ExposureMode",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator sceneMode(const ExifData& ed) {
Expand All @@ -238,7 +227,7 @@ ExifData::const_iterator sceneMode(const ExifData& ed) {
"Exif.Pentax.PictureMode",
"Exif.PentaxDng.PictureMode",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator macroMode(const ExifData& ed) {
Expand All @@ -247,7 +236,7 @@ ExifData::const_iterator macroMode(const ExifData& ed) {
"Exif.OlympusCs.MacroMode", "Exif.Panasonic.Macro", "Exif.MinoltaCsNew.MacroMode", "Exif.MinoltaCsOld.MacroMode",
"Exif.Sony1.Macro", "Exif.Sony2.Macro",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator imageQuality(const ExifData& ed) {
Expand All @@ -264,7 +253,7 @@ ExifData::const_iterator imageQuality(const ExifData& ed) {
"Exif.Sony1MltCsA100.Quality", "Exif.Casio.Quality", "Exif.Casio2.QualityMode",
"Exif.Casio2.Quality",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator whiteBalance(const ExifData& ed) {
Expand All @@ -279,7 +268,7 @@ ExifData::const_iterator whiteBalance(const ExifData& ed) {
"Exif.SonyMinolta.WhiteBalance", "Exif.Casio.WhiteBalance", "Exif.Casio2.WhiteBalance",
"Exif.Casio2.WhiteBalance2", "Exif.Photo.WhiteBalance",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator lensName(const ExifData& ed) {
Expand Down Expand Up @@ -313,7 +302,7 @@ ExifData::const_iterator saturation(const ExifData& ed) {
"Exif.Sony2.Saturation", "Exif.Casio.Saturation", "Exif.Casio2.Saturation",
"Exif.Casio2.Saturation2",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator sharpness(const ExifData& ed) {
Expand All @@ -325,7 +314,7 @@ ExifData::const_iterator sharpness(const ExifData& ed) {
"Exif.Sony1.Sharpness", "Exif.Sony2.Sharpness", "Exif.Casio.Sharpness",
"Exif.Casio2.Sharpness", "Exif.Casio2.Sharpness2",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator contrast(const ExifData& ed) {
Expand All @@ -337,15 +326,15 @@ ExifData::const_iterator contrast(const ExifData& ed) {
"Exif.Sony1.Contrast", "Exif.Sony2.Contrast", "Exif.Casio.Contrast",
"Exif.Casio2.Contrast", "Exif.Casio2.Contrast2",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator sceneCaptureType(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.SceneCaptureType",
"Exif.Olympus.SpecialMode",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator meteringMode(const ExifData& ed) {
Expand All @@ -356,15 +345,15 @@ ExifData::const_iterator meteringMode(const ExifData& ed) {
"Exif.Sony1.MeteringMode2", "Exif.Sony1Cs.MeteringMode", "Exif.Sony1Cs2.MeteringMode",
"Exif.Sony2.MeteringMode2", "Exif.Sony2Cs.MeteringMode", "Exif.Sony1MltCsA100.MeteringMode",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator make(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Image.Make",
"Exif.PanasonicRaw.Make",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator model(const ExifData& ed) {
Expand All @@ -378,31 +367,31 @@ ExifData::const_iterator model(const ExifData& ed) {
"Exif.Sony1.SonyModelID",
"Exif.Sony2.SonyModelID",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator exposureTime(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.ExposureTime", "Exif.Image.ExposureTime", "Exif.Pentax.ExposureTime",
"Exif.PentaxDng.ExposureTime", "Exif.Samsung2.ExposureTime",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator fNumber(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.FNumber", "Exif.Image.FNumber", "Exif.Pentax.FNumber",
"Exif.PentaxDng.FNumber", "Exif.Samsung2.FNumber",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator shutterSpeedValue(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.ShutterSpeedValue",
"Exif.Image.ShutterSpeedValue",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator apertureValue(const ExifData& ed) {
Expand All @@ -411,7 +400,7 @@ ExifData::const_iterator apertureValue(const ExifData& ed) {
"Exif.Image.ApertureValue",
"Exif.CanonSi.ApertureValue",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator brightnessValue(const ExifData& ed) {
Expand All @@ -421,15 +410,15 @@ ExifData::const_iterator brightnessValue(const ExifData& ed) {
"Exif.Sony1.Brightness",
"Exif.Sony2.Brightness",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator exposureBiasValue(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.ExposureBiasValue", "Exif.Image.ExposureBiasValue", "Exif.MinoltaCs5D.ExposureManualBias",
"Exif.OlympusRd.ExposureBiasValue", "Exif.OlympusRd2.ExposureBiasValue",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator maxApertureValue(const ExifData& ed) {
Expand All @@ -439,7 +428,7 @@ ExifData::const_iterator maxApertureValue(const ExifData& ed) {
"Exif.CanonCs.MaxAperture",
"Exif.NikonLd4.MaxAperture",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator subjectDistance(const ExifData& ed) {
Expand All @@ -459,15 +448,15 @@ ExifData::const_iterator lightSource(const ExifData& ed) {
"Exif.Photo.LightSource",
"Exif.Image.LightSource",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator flash(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.Flash", "Exif.Image.Flash", "Exif.Pentax.Flash",
"Exif.PentaxDng.Flash", "Exif.Sony1.FlashAction", "Exif.Sony2.FlashAction",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator serialNumber(const ExifData& ed) {
Expand All @@ -480,7 +469,7 @@ ExifData::const_iterator serialNumber(const ExifData& ed) {
"Exif.PentaxDng.SerialNumber", "Exif.Sigma.SerialNumber", "Exif.Sony1.SerialNumber",
"Exif.Sony2.SerialNumber",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator focalLength(const ExifData& ed) {
Expand All @@ -498,31 +487,31 @@ ExifData::const_iterator subjectArea(const ExifData& ed) {
"Exif.Photo.SubjectArea",
"Exif.Image.SubjectLocation",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator flashEnergy(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.FlashEnergy",
"Exif.Image.FlashEnergy",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator exposureIndex(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.ExposureIndex",
"Exif.Image.ExposureIndex",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator sensingMethod(const ExifData& ed) {
static constexpr const char* keys[] = {
"Exif.Photo.SensingMethod",
"Exif.Image.SensingMethod",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

ExifData::const_iterator afPoint(const ExifData& ed) {
Expand Down Expand Up @@ -552,7 +541,7 @@ ExifData::const_iterator afPoint(const ExifData& ed) {
"Exif.Casio.AFPoint",
"Exif.Casio2.AFPointPosition",
};
return findMetadatum<std::size(keys), keys>(ed);
return findMetadatum(ed, keys, std::size(keys));
}

} // namespace Exiv2
Loading