Skip to content

Commit

Permalink
easyaccess const changes
Browse files Browse the repository at this point in the history
Signed-off-by: Rosen Penev <rosenp@gmail.com>
  • Loading branch information
neheb committed Jun 29, 2023
1 parent 6b186a4 commit 0072ebc
Showing 1 changed file with 43 additions and 33 deletions.
76 changes: 43 additions & 33 deletions src/easyaccess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ using namespace Exiv2;
@param keys Array of keys to look for
@param count Number of elements in the array
*/
template <size_t N, const char* const (&keys)[N]>
ExifData::const_iterator findMetadatum(const ExifData& ed) {
for (const auto& k : keys) {
auto pos = ed.findKey(ExifKey(k));
if (pos != ed.end())
return pos;
}
return ed.end();
} // findMetadatum

ExifData::const_iterator findMetadatum(const ExifData& ed, const char* const keys[], size_t count) {
for (size_t i = 0; i < count; ++i) {
auto pos = ed.findKey(ExifKey(keys[i]));
Expand All @@ -37,7 +47,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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

ExifData::const_iterator isoSpeed(const ExifData& ed) {
Expand Down Expand Up @@ -119,7 +129,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(ed, sensitivityType, std::size(sensitivityType));
auto md_st = findMetadatum<std::size(sensitivityType), sensitivityType>(ed);
// no SensitivityType? exit with existing data
if (md_st == ed.end())
break;
Expand Down Expand Up @@ -162,7 +172,7 @@ ExifData::const_iterator dateTimeOriginal(const ExifData& ed) {
"Exif.Photo.DateTimeOriginal",
"Exif.Image.DateTimeOriginal",
};
return findMetadatum(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

ExifData::const_iterator flashBias(const ExifData& ed) {
Expand All @@ -171,7 +181,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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

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

ExifData::const_iterator macroMode(const ExifData& ed) {
Expand All @@ -212,7 +222,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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

ExifData::const_iterator whiteBalance(const ExifData& ed) {
Expand All @@ -244,7 +254,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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

ExifData::const_iterator sharpness(const ExifData& ed) {
Expand All @@ -296,7 +306,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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

ExifData::const_iterator contrast(const ExifData& ed) {
Expand All @@ -308,15 +318,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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

ExifData::const_iterator meteringMode(const ExifData& ed) {
Expand All @@ -327,15 +337,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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

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

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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

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

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

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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

ExifData::const_iterator subjectDistance(const ExifData& ed) {
Expand All @@ -421,23 +431,23 @@ ExifData::const_iterator subjectDistance(const ExifData& ed) {
"Exif.NikonLd3.FocusDistance", "Exif.NikonLd4.FocusDistance", "Exif.Olympus.FocusDistance",
"Exif.OlympusFi.FocusDistance", "Exif.Casio.ObjectDistance", "Exif.Casio2.ObjectDistance",
};
return findMetadatum(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

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(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

ExifData::const_iterator focalLength(const ExifData& ed) {
Expand All @@ -457,39 +467,39 @@ ExifData::const_iterator focalLength(const ExifData& ed) {
"Exif.NikonLd2.FocalLength", "Exif.NikonLd3.FocalLength", "Exif.MinoltaCsNew.FocalLength",
"Exif.Pentax.FocalLength", "Exif.PentaxDng.FocalLength", "Exif.Casio2.FocalLength",
};
return findMetadatum(ed, keys, std::size(keys));
return findMetadatum<std::size(keys), keys>(ed);
}

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

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

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

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

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

} // namespace Exiv2

0 comments on commit 0072ebc

Please sign in to comment.