Blame src/easyaccess.cpp

Packit 01d647
// ***************************************************************** -*- C++ -*-
Packit 01d647
/*
Packit 01d647
 * Copyright (C) 2004-2018 Exiv2 authors
Packit 01d647
 * This program is part of the Exiv2 distribution.
Packit 01d647
 *
Packit 01d647
 * This program is free software; you can redistribute it and/or
Packit 01d647
 * modify it under the terms of the GNU General Public License
Packit 01d647
 * as published by the Free Software Foundation; either version 2
Packit 01d647
 * of the License, or (at your option) any later version.
Packit 01d647
 *
Packit 01d647
 * This program is distributed in the hope that it will be useful,
Packit 01d647
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 01d647
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 01d647
 * GNU General Public License for more details.
Packit 01d647
 *
Packit 01d647
 * You should have received a copy of the GNU General Public License
Packit 01d647
 * along with this program; if not, write to the Free Software
Packit 01d647
 * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
Packit 01d647
 */
Packit 01d647
/*
Packit 01d647
  File:      easyaccess.cpp
Packit 01d647
 */
Packit 01d647
// *****************************************************************************
Packit 01d647
// included header files
Packit 01d647
#include "easyaccess.hpp"
Packit 01d647
Packit 01d647
// *****************************************************************************
Packit 01d647
namespace {
Packit 01d647
Packit 01d647
    using namespace Exiv2;
Packit 01d647
Packit 01d647
    /*!
Packit 01d647
      @brief Search \em ed for a Metadatum specified by the \em keys.
Packit 01d647
             The \em keys are searched in the order of their appearance, the
Packit 01d647
             first available Metadatum is returned.
Packit 01d647
Packit 01d647
      @param ed The %Exif metadata container to search
Packit 01d647
      @param keys Array of keys to look for
Packit 01d647
      @param count Number of elements in the array
Packit 01d647
     */
Packit 01d647
    ExifData::const_iterator findMetadatum(const ExifData& ed,
Packit 01d647
                                           const char* keys[],
Packit 01d647
                                           int count)
Packit 01d647
    {
Packit 01d647
        for (int i = 0; i < count; ++i) {
Packit 01d647
            ExifData::const_iterator pos = ed.findKey(ExifKey(keys[i]));
Packit 01d647
            if (pos != ed.end()) return pos;
Packit 01d647
        }
Packit 01d647
        return ed.end();
Packit 01d647
    } // findMetadatum
Packit 01d647
Packit 01d647
} // anonymous namespace
Packit 01d647
Packit 01d647
// *****************************************************************************
Packit 01d647
// class member definitions
Packit 01d647
namespace Exiv2 {
Packit 01d647
Packit 01d647
    ExifData::const_iterator orientation(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Image.Orientation",
Packit 01d647
            "Exif.Panasonic.Rotation",
Packit 01d647
            "Exif.MinoltaCs5D.Rotation",
Packit 01d647
            "Exif.MinoltaCs5D.Rotation2",
Packit 01d647
            "Exif.MinoltaCs7D.Rotation",
Packit 01d647
            "Exif.Sony1MltCsA100.Rotation",
Packit 01d647
            "Exif.Sony1Cs.Rotation",
Packit 01d647
            "Exif.Sony2Cs.Rotation",
Packit 01d647
            "Exif.Sony1Cs2.Rotation",
Packit 01d647
            "Exif.Sony2Cs2.Rotation",
Packit 01d647
            "Exif.Sony1MltCsA100.Rotation"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator isoSpeed(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.ISOSpeedRatings",
Packit 01d647
            "Exif.Image.ISOSpeedRatings",
Packit 01d647
            "Exif.CanonSi.ISOSpeed",
Packit 01d647
            "Exif.CanonCs.ISOSpeed",
Packit 01d647
            "Exif.Nikon1.ISOSpeed",
Packit 01d647
            "Exif.Nikon2.ISOSpeed",
Packit 01d647
            "Exif.Nikon3.ISOSpeed",
Packit 01d647
            "Exif.NikonIi.ISO",
Packit 01d647
            "Exif.NikonIi.ISO2",
Packit 01d647
            "Exif.MinoltaCsNew.ISOSetting",
Packit 01d647
            "Exif.MinoltaCsOld.ISOSetting",
Packit 01d647
            "Exif.MinoltaCs5D.ISOSpeed",
Packit 01d647
            "Exif.MinoltaCs7D.ISOSpeed",
Packit 01d647
            "Exif.Sony1Cs.ISOSetting",
Packit 01d647
            "Exif.Sony2Cs.ISOSetting",
Packit 01d647
            "Exif.Sony1Cs2.ISOSetting",
Packit 01d647
            "Exif.Sony2Cs2.ISOSetting",
Packit 01d647
            "Exif.Sony1MltCsA100.ISOSetting",
Packit 01d647
            "Exif.Pentax.ISO",
Packit 01d647
            "Exif.PentaxDng.ISO",
Packit 01d647
            "Exif.Olympus.ISOSpeed",
Packit 01d647
            "Exif.Samsung2.ISO",
Packit 01d647
            "Exif.Casio.ISO",
Packit 01d647
            "Exif.Casio2.ISO",
Packit 01d647
            "Exif.Casio2.ISOSpeed"
Packit 01d647
        };
Packit 01d647
Packit 01d647
        struct SensKeyNameList {
Packit 01d647
            int count;
Packit 01d647
            const char* keys[3];
Packit 01d647
        };
Packit 01d647
Packit 01d647
        // covers Exif.Phot.SensitivityType values 1-7. Note that SOS, REI and
Packit 01d647
        // ISO do differ in their meaning. Values coming first in a list (and
Packit 01d647
        // existing as a tag) are picked up first and used as the "ISO" value.
Packit 01d647
        static const SensKeyNameList sensitivityKey[] = {
Packit 01d647
            { 1, { "Exif.Photo.StandardOutputSensitivity" }},
Packit 01d647
            { 1, { "Exif.Photo.RecommendedExposureIndex" }},
Packit 01d647
            { 1, { "Exif.Photo.ISOSpeed" }},
Packit 01d647
            { 2, { "Exif.Photo.RecommendedExposureIndex", "Exif.Photo.StandardOutputSensitivity" }},
Packit 01d647
            { 2, { "Exif.Photo.ISOSpeed", "Exif.Photo.StandardOutputSensitivity" }},
Packit 01d647
            { 2, { "Exif.Photo.ISOSpeed", "Exif.Photo.RecommendedExposureIndex" }},
Packit 01d647
            { 3, { "Exif.Photo.ISOSpeed", "Exif.Photo.RecommendedExposureIndex", "Exif.Photo.StandardOutputSensitivity" }}
Packit 01d647
        };
Packit 01d647
Packit 01d647
        static const char* sensitivityType[] = {
Packit 01d647
            "Exif.Photo.SensitivityType"
Packit 01d647
        };
Packit 01d647
Packit 01d647
        // Find the first ISO value which is not "0"
Packit 01d647
        const int cnt = EXV_COUNTOF(keys);
Packit 01d647
        ExifData::const_iterator md = ed.end();
Packit 01d647
        long iso_val = -1;
Packit 01d647
        for (int idx = 0; idx < cnt; ) {
Packit 01d647
            md = findMetadatum(ed, keys + idx, cnt - idx);
Packit 01d647
            if (md == ed.end()) break;
Packit 01d647
            std::ostringstream os;
Packit 01d647
            md->write(os, &ed);
Packit 01d647
            bool ok = false;
Packit 01d647
            iso_val = parseLong(os.str(), ok);
Packit 01d647
            if (ok && iso_val > 0) break;
Packit 01d647
            while (strcmp(keys[idx++], md->key().c_str()) != 0 && idx < cnt) {}
Packit 01d647
            md = ed.end();
Packit 01d647
        }
Packit 01d647
Packit 01d647
        // there is either a possible ISO "overflow" or no legacy
Packit 01d647
        // ISO tag at all. Check for SensitivityType tag and the referenced
Packit 01d647
        // ISO value (see EXIF 2.3 Annex G)
Packit 01d647
        long iso_tmp_val = -1;
Packit 01d647
        while (iso_tmp_val == -1 && (iso_val == 65535 || md == ed.end())) {
Packit 01d647
            ExifData::const_iterator md_st = findMetadatum(ed, sensitivityType, 1);
Packit 01d647
            // no SensitivityType? exit with existing data
Packit 01d647
            if (md_st == ed.end())
Packit 01d647
                break;
Packit 01d647
            // otherwise pick up actual value and grab value accordingly
Packit 01d647
            std::ostringstream os;
Packit 01d647
            md_st->write(os, &ed);
Packit 01d647
            bool ok = false;
Packit 01d647
            const long st_val = parseLong(os.str(), ok);
Packit 01d647
            // SensivityType out of range or cannot be parsed properly
Packit 01d647
            if (!ok || st_val < 1 || st_val > 7)
Packit 01d647
                break;
Packit 01d647
            // pick up list of ISO tags, and check for at least one of
Packit 01d647
            // them available.
Packit 01d647
            const SensKeyNameList *sensKeys = &sensitivityKey[st_val - 1];
Packit 01d647
            md_st = ed.end();
Packit 01d647
            for (int idx = 0; idx < sensKeys->count; md_st = ed.end()) {
Packit 01d647
                md_st = findMetadatum(ed, const_cast<const char**>(sensKeys->keys), sensKeys->count);
Packit 01d647
                if (md_st == ed.end())
Packit 01d647
                    break;
Packit 01d647
                std::ostringstream os_iso;
Packit 01d647
                md_st->write(os_iso, &ed);
Packit 01d647
                ok = false;
Packit 01d647
                iso_tmp_val = parseLong(os_iso.str(), ok);
Packit 01d647
                // something wrong with the value
Packit 01d647
                if (ok || iso_tmp_val > 0) {
Packit 01d647
                    md = md_st;
Packit 01d647
                    break;
Packit 01d647
                }
Packit 01d647
                while (strcmp(sensKeys->keys[idx++], md_st->key().c_str()) != 0 && idx < sensKeys->count) {}
Packit 01d647
            }
Packit 01d647
            break;
Packit 01d647
        }
Packit 01d647
Packit 01d647
        return md;
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator flashBias(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.CanonSi.FlashBias",
Packit 01d647
            "Exif.Panasonic.FlashBias",
Packit 01d647
            "Exif.Olympus.FlashBias",
Packit 01d647
            "Exif.OlympusCs.FlashExposureComp",
Packit 01d647
            "Exif.Minolta.FlashExposureComp",
Packit 01d647
            "Exif.SonyMinolta.FlashExposureComp",
Packit 01d647
            "Exif.Sony1.FlashExposureComp",
Packit 01d647
            "Exif.Sony2.FlashExposureComp"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator exposureMode(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.ExposureProgram",
Packit 01d647
            "Exif.Image.ExposureProgram",
Packit 01d647
            "Exif.CanonCs.ExposureProgram",
Packit 01d647
            "Exif.MinoltaCs7D.ExposureMode",
Packit 01d647
            "Exif.MinoltaCs5D.ExposureMode",
Packit 01d647
            "Exif.MinoltaCsNew.ExposureMode",
Packit 01d647
            "Exif.MinoltaCsOld.ExposureMode",
Packit 01d647
            "Exif.Sony1MltCsA100.ExposureMode",
Packit 01d647
            "Exif.Sony1Cs.ExposureProgram",
Packit 01d647
            "Exif.Sony2Cs.ExposureProgram",
Packit 01d647
            "Exif.Sigma.ExposureMode"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator sceneMode(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.CanonCs.EasyMode",
Packit 01d647
            "Exif.Fujifilm.PictureMode",
Packit 01d647
            "Exif.MinoltaCsNew.SubjectProgram",
Packit 01d647
            "Exif.MinoltaCsOld.SubjectProgram",
Packit 01d647
            "Exif.Minolta.SceneMode",
Packit 01d647
            "Exif.SonyMinolta.SceneMode",
Packit 01d647
            "Exif.Sony1.SceneMode",
Packit 01d647
            "Exif.Sony2.SceneMode",
Packit 01d647
            "Exif.OlympusCs.SceneMode",
Packit 01d647
            "Exif.Panasonic.ShootingMode",
Packit 01d647
            "Exif.Panasonic.SceneMode",
Packit 01d647
            "Exif.Pentax.PictureMode",
Packit 01d647
            "Exif.PentaxDng.PictureMode",
Packit 01d647
            "Exif.Photo.SceneCaptureType"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator macroMode(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.CanonCs.Macro",
Packit 01d647
            "Exif.Fujifilm.Macro",
Packit 01d647
            "Exif.Olympus.Macro",
Packit 01d647
            "Exif.OlympusCs.MacroMode",
Packit 01d647
            "Exif.Panasonic.Macro",
Packit 01d647
            "Exif.MinoltaCsNew.MacroMode",
Packit 01d647
            "Exif.MinoltaCsOld.MacroMode",
Packit 01d647
            "Exif.Sony1.Macro",
Packit 01d647
            "Exif.Sony2.Macro"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator imageQuality(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.CanonCs.Quality",
Packit 01d647
            "Exif.Fujifilm.Quality",
Packit 01d647
            "Exif.Sigma.Quality",
Packit 01d647
            "Exif.Nikon1.Quality",
Packit 01d647
            "Exif.Nikon2.Quality",
Packit 01d647
            "Exif.Nikon3.Quality",
Packit 01d647
            "Exif.Olympus.Quality",
Packit 01d647
            "Exif.OlympusCs.Quality",
Packit 01d647
            "Exif.Panasonic.Quality",
Packit 01d647
            "Exif.Minolta.Quality",
Packit 01d647
            "Exif.MinoltaCsNew.Quality",
Packit 01d647
            "Exif.MinoltaCsOld.Quality",
Packit 01d647
            "Exif.MinoltaCs5D.Quality",
Packit 01d647
            "Exif.MinoltaCs7D.Quality",
Packit 01d647
            "Exif.Sony1MltCsA100.Quality",
Packit 01d647
            "Exif.Sony1.JPEGQuality",
Packit 01d647
            "Exif.Sony1.Quality",
Packit 01d647
            "Exif.Sony1Cs.Quality",
Packit 01d647
            "Exif.Sony2.JPEGQuality",
Packit 01d647
            "Exif.Sony2.Quality",
Packit 01d647
            "Exif.Sony2Cs.Quality",
Packit 01d647
            "Exif.Casio.Quality",
Packit 01d647
            "Exif.Casio2.QualityMode",
Packit 01d647
            "Exif.Casio2.Quality"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator whiteBalance(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.CanonSi.WhiteBalance",
Packit 01d647
            "Exif.Fujifilm.WhiteBalance",
Packit 01d647
            "Exif.Sigma.WhiteBalance",
Packit 01d647
            "Exif.Nikon1.WhiteBalance",
Packit 01d647
            "Exif.Nikon2.WhiteBalance",
Packit 01d647
            "Exif.Nikon3.WhiteBalance",
Packit 01d647
            "Exif.Olympus.WhiteBalance",
Packit 01d647
            "Exif.OlympusCs.WhiteBalance",
Packit 01d647
            "Exif.Panasonic.WhiteBalance",
Packit 01d647
            "Exif.MinoltaCs5D.WhiteBalance",
Packit 01d647
            "Exif.MinoltaCs7D.WhiteBalance",
Packit 01d647
            "Exif.MinoltaCsNew.WhiteBalance",
Packit 01d647
            "Exif.MinoltaCsOld.WhiteBalance",
Packit 01d647
            "Exif.Minolta.WhiteBalance",
Packit 01d647
            "Exif.Sony1MltCsA100.WhiteBalance",
Packit 01d647
            "Exif.SonyMinolta.WhiteBalance",
Packit 01d647
            "Exif.Sony1.WhiteBalance",
Packit 01d647
            "Exif.Sony2.WhiteBalance",
Packit 01d647
            "Exif.Sony1.WhiteBalance2",
Packit 01d647
            "Exif.Sony2.WhiteBalance2",
Packit 01d647
            "Exif.Casio.WhiteBalance",
Packit 01d647
            "Exif.Casio2.WhiteBalance",
Packit 01d647
            "Exif.Casio2.WhiteBalance2",
Packit 01d647
            "Exif.Photo.WhiteBalance"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator lensName(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            // Exif.Canon.LensModel only reports focal length.
Packit 01d647
            // Try Exif.CanonCs.LensType first.
Packit 01d647
            "Exif.CanonCs.LensType",
Packit 01d647
            "Exif.Photo.LensModel",
Packit 01d647
            "Exif.NikonLd1.LensIDNumber",
Packit 01d647
            "Exif.NikonLd2.LensIDNumber",
Packit 01d647
            "Exif.NikonLd3.LensIDNumber",
Packit 01d647
            "Exif.Pentax.LensType",
Packit 01d647
            "Exif.PentaxDng.LensType",
Packit 01d647
            "Exif.Minolta.LensID",
Packit 01d647
            "Exif.SonyMinolta.LensID",
Packit 01d647
            "Exif.Sony1.LensID",
Packit 01d647
            "Exif.Sony2.LensID",
Packit 01d647
            "Exif.OlympusEq.LensType",
Packit 01d647
            "Exif.Panasonic.LensType",
Packit 01d647
            "Exif.Samsung2.LensType"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator saturation(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.Saturation",
Packit 01d647
            "Exif.CanonCs.Saturation",
Packit 01d647
            "Exif.MinoltaCsNew.Saturation",
Packit 01d647
            "Exif.MinoltaCsOld.Saturation",
Packit 01d647
            "Exif.MinoltaCs7D.Saturation",
Packit 01d647
            "Exif.MinoltaCs5D.Saturation",
Packit 01d647
            "Exif.Fujifilm.Color",
Packit 01d647
            "Exif.Nikon3.Saturation",
Packit 01d647
            "Exif.Panasonic.Saturation",
Packit 01d647
            "Exif.Pentax.Saturation",
Packit 01d647
            "Exif.PentaxDng.Saturation",
Packit 01d647
            "Exif.Sigma.Saturation",
Packit 01d647
            "Exif.Casio.Saturation",
Packit 01d647
            "Exif.Casio2.Saturation",
Packit 01d647
            "Exif.Casio2.Saturation2"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator sharpness(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.Sharpness",
Packit 01d647
            "Exif.CanonCs.Sharpness",
Packit 01d647
            "Exif.Fujifilm.Sharpness",
Packit 01d647
            "Exif.MinoltaCsNew.Sharpness",
Packit 01d647
            "Exif.MinoltaCsOld.Sharpness",
Packit 01d647
            "Exif.MinoltaCs7D.Sharpness",
Packit 01d647
            "Exif.MinoltaCs5D.Sharpness",
Packit 01d647
            "Exif.Olympus.SharpnessFactor",
Packit 01d647
            "Exif.Panasonic.Sharpness",
Packit 01d647
            "Exif.Pentax.Sharpness",
Packit 01d647
            "Exif.PentaxDng.Sharpness",
Packit 01d647
            "Exif.Sigma.Sharpness",
Packit 01d647
            "Exif.Casio.Sharpness",
Packit 01d647
            "Exif.Casio2.Sharpness",
Packit 01d647
            "Exif.Casio2.Sharpness2"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator contrast(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.Contrast",
Packit 01d647
            "Exif.CanonCs.Contrast",
Packit 01d647
            "Exif.Fujifilm.Tone",
Packit 01d647
            "Exif.MinoltaCsNew.Contrast",
Packit 01d647
            "Exif.MinoltaCsOld.Contrast",
Packit 01d647
            "Exif.MinoltaCs7D.Contrast",
Packit 01d647
            "Exif.MinoltaCs5D.Contrast",
Packit 01d647
            "Exif.Olympus.Contrast",
Packit 01d647
            "Exif.Panasonic.Contrast",
Packit 01d647
            "Exif.Pentax.Contrast",
Packit 01d647
            "Exif.PentaxDng.Contrast",
Packit 01d647
            "Exif.Sigma.Contrast",
Packit 01d647
            "Exif.Casio.Contrast",
Packit 01d647
            "Exif.Casio2.Contrast",
Packit 01d647
            "Exif.Casio2.Contrast2"
Packit 01d647
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator sceneCaptureType(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.SceneCaptureType",
Packit 01d647
            "Exif.Olympus.SpecialMode"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator meteringMode(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.MeteringMode",
Packit 01d647
            "Exif.Image.MeteringMode",
Packit 01d647
            "Exif.CanonCs.MeteringMode",
Packit 01d647
            "Exif.Sony1MltCsA100.MeteringMode"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator make(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Image.Make"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator model(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Image.Model"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator exposureTime(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.ExposureTime",
Packit 01d647
            "Exif.Image.ExposureTime",
Packit 01d647
            "Exif.Samsung2.ExposureTime"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator fNumber(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.FNumber",
Packit 01d647
            "Exif.Image.FNumber",
Packit 01d647
            "Exif.Samsung2.FNumber"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator subjectDistance(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.SubjectDistance",
Packit 01d647
            "Exif.Image.SubjectDistance",
Packit 01d647
            "Exif.CanonSi.SubjectDistance",
Packit 01d647
            "Exif.CanonFi.FocusDistanceUpper",
Packit 01d647
            "Exif.CanonFi.FocusDistanceLower",
Packit 01d647
            "Exif.MinoltaCsNew.FocusDistance",
Packit 01d647
            "Exif.Nikon1.FocusDistance",
Packit 01d647
            "Exif.Nikon3.FocusDistance",
Packit 01d647
            "Exif.NikonLd2.FocusDistance",
Packit 01d647
            "Exif.NikonLd3.FocusDistance",
Packit 01d647
            "Exif.Olympus.FocusDistance",
Packit 01d647
            "Exif.OlympusFi.FocusDistance",
Packit 01d647
            "Exif.Casio.ObjectDistance",
Packit 01d647
            "Exif.Casio2.ObjectDistance"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator serialNumber(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Image.CameraSerialNumber",
Packit 01d647
            "Exif.Canon.SerialNumber",
Packit 01d647
            "Exif.Nikon3.SerialNumber",
Packit 01d647
            "Exif.Nikon3.SerialNO",
Packit 01d647
            "Exif.Fujifilm.SerialNumber",
Packit 01d647
            "Exif.Olympus.SerialNumber2",
Packit 01d647
            "Exif.Sigma.SerialNumber"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator focalLength(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.Photo.FocalLength",
Packit 01d647
            "Exif.Image.FocalLength",
Packit 01d647
            "Exif.Canon.FocalLength",
Packit 01d647
            "Exif.NikonLd2.FocalLength",
Packit 01d647
            "Exif.NikonLd3.FocalLength",
Packit 01d647
            "Exif.MinoltaCsNew.FocalLength",
Packit 01d647
            "Exif.Pentax.FocalLength",
Packit 01d647
            "Exif.PentaxDng.FocalLength",
Packit 01d647
            "Exif.Casio2.FocalLength"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
    ExifData::const_iterator afPoint(const ExifData& ed)
Packit 01d647
    {
Packit 01d647
        static const char* keys[] = {
Packit 01d647
            "Exif.CanonPi.AFPointsUsed",
Packit 01d647
            "Exif.CanonPi.AFPointsUsed20D",
Packit 01d647
            "Exif.CanonSi.AFPointUsed",
Packit 01d647
            "Exif.CanonCs.AFPoint",
Packit 01d647
            "Exif.MinoltaCs7D.AFPoints",
Packit 01d647
            "Exif.Nikon1.AFFocusPos",
Packit 01d647
            "Exif.NikonAf.AFPoint",
Packit 01d647
            "Exif.NikonAf.AFPointsInFocus",
Packit 01d647
            "Exif.NikonAf2.AFPointsUsed",
Packit 01d647
            "Exif.NikonAf2.PrimaryAFPoint",
Packit 01d647
            "Exif.OlympusFi.AFPoint",
Packit 01d647
            "Exif.Pentax.AFPoint",
Packit 01d647
            "Exif.Pentax.AFPointInFocus",
Packit 01d647
            "Exif.PentaxDng.AFPoint",
Packit 01d647
            "Exif.PentaxDng.AFPointInFocus",
Packit 01d647
            "Exif.Sony1Cs.LocalAFAreaPoint",
Packit 01d647
            "Exif.Sony2Cs.LocalAFAreaPoint",
Packit 01d647
            "Exif.Sony1Cs2.LocalAFAreaPoint",
Packit 01d647
            "Exif.Sony2Cs2.LocalAFAreaPoint",
Packit 01d647
            "Exif.Sony1MltCsA100.LocalAFAreaPoint",
Packit 01d647
            "Exif.Casio.AFPoint",
Packit 01d647
            "Exif.Casio2.AFPointPosition"
Packit 01d647
        };
Packit 01d647
        return findMetadatum(ed, keys, EXV_COUNTOF(keys));
Packit 01d647
    }
Packit 01d647
Packit 01d647
}                                       // namespace Exiv2