File indexing completed on 2025-03-09 03:57:06

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2010-05-22
0007  * Description : metadata information keys
0008  *
0009  * SPDX-FileCopyrightText: 2009-2012 by Andi Clemens <andi dot clemens at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #include "metadatakeys.h"
0016 
0017 // KDE includes
0018 
0019 #include <klocalizedstring.h>
0020 
0021 // Local includes
0022 
0023 #include "coredbinfocontainers.h"
0024 #include "iteminfo.h"
0025 
0026 namespace
0027 {
0028 static const QString KEY_MAKE(QLatin1String("CameraMake"));
0029 static const QString KEY_MODEL(QLatin1String("CameraModel"));
0030 static const QString KEY_LENS(QLatin1String("CameraLens"));
0031 static const QString KEY_APERTURE(QLatin1String("Aperture"));
0032 static const QString KEY_FOCALLENGTH(QLatin1String("FocalLength"));
0033 static const QString KEY_FOCALLENGTH35(QLatin1String("FocalLength35"));
0034 static const QString KEY_EXPOSURETIME(QLatin1String("ExposureTime"));
0035 static const QString KEY_EXPOSUREPROGRAM(QLatin1String("ExposureProgram"));
0036 static const QString KEY_EXPOSUREMODE(QLatin1String("ExposureMode"));
0037 static const QString KEY_SENSITIVITY(QLatin1String("Sensitivity"));
0038 static const QString KEY_FLASHMODE(QLatin1String("FlashMode"));
0039 static const QString KEY_WHITEBALANCE(QLatin1String("WhiteBalance"));
0040 static const QString KEY_WHITEBALANCECOLORTEMPERATURE(QLatin1String("WhiteBalanceColorTemp"));
0041 static const QString KEY_METERINGMODE(QLatin1String("MeteringMode"));
0042 static const QString KEY_SUBJECTDISTANCE(QLatin1String("SubjectDistance"));
0043 static const QString KEY_SUBJECTDISTANCECATEGORY(QLatin1String("SubjectDistanceCategory"));
0044 
0045 static const QString KEY_ASPECTRATIO(QLatin1String("AspectRatio"));
0046 static const QString KEY_AUDIOBITRATE(QLatin1String("AudioBitRate"));
0047 static const QString KEY_AUDIOCHANNELTYPE(QLatin1String("AudioChannelType"));
0048 static const QString KEY_AUDIOCodec(QLatin1String("AudioCodec"));
0049 static const QString KEY_DURATION(QLatin1String("Duration"));
0050 static const QString KEY_FRAMERATE(QLatin1String("FrameRate"));
0051 static const QString KEY_VIDEOCODEC(QLatin1String("VideoCodec"));
0052 }
0053 
0054 namespace Digikam
0055 {
0056 
0057 MetadataKeys::MetadataKeys()
0058     : DbKeysCollection(i18n("Metadata Information"))
0059 {
0060     addId(KEY_MAKE,                         i18n("Make of the camera"));
0061     addId(KEY_MODEL,                        i18n("Model of the camera"));
0062     addId(KEY_LENS,                         i18n("Lens of the camera"));
0063     addId(KEY_APERTURE,                     i18n("Aperture"));
0064     addId(KEY_FOCALLENGTH,                  i18n("Focal length"));
0065     addId(KEY_FOCALLENGTH35,                i18n("Focal length (35mm equivalent)"));
0066     addId(KEY_EXPOSURETIME,                 i18n("Exposure time"));
0067     addId(KEY_EXPOSUREPROGRAM,              i18n("Exposure program"));
0068     addId(KEY_EXPOSUREMODE,                 i18n("Exposure mode"));
0069     addId(KEY_SENSITIVITY,                  i18n("Sensitivity"));
0070     addId(KEY_FLASHMODE,                    i18n("Flash mode"));
0071     addId(KEY_WHITEBALANCE,                 i18n("White balance"));
0072     addId(KEY_WHITEBALANCECOLORTEMPERATURE, i18n("White balance (color temperature)"));
0073     addId(KEY_METERINGMODE,                 i18n("Metering mode"));
0074     addId(KEY_SUBJECTDISTANCE,              i18n("Subject distance"));
0075     addId(KEY_SUBJECTDISTANCECATEGORY,      i18n("Subject distance (category)"));
0076 
0077     addId(KEY_ASPECTRATIO,                  i18n("Display Aspect Ratio"));
0078     addId(KEY_AUDIOBITRATE,                 i18n("Audio Bit Rate"));
0079     addId(KEY_AUDIOCHANNELTYPE,             i18n("Audio Channel Type"));
0080     addId(KEY_AUDIOCodec,                   i18n("Audio Codec (Audio Codec)"));
0081     addId(KEY_DURATION,                     i18n("Duration of File"));
0082     addId(KEY_FRAMERATE,                    i18n("Frame Rate of Video"));
0083     addId(KEY_VIDEOCODEC,                   i18n("Video Codec"));
0084 }
0085 
0086 QString MetadataKeys::getDbValue(const QString& key, ParseSettings& settings)
0087 {
0088     ItemInfo info                         = ItemInfo::fromUrl(settings.fileUrl);
0089     ImageMetadataContainer container      = info.imageMetadataContainer();
0090     VideoMetadataContainer videoContainer = info.videoMetadataContainer();
0091     QString result;
0092 
0093     if      (key == KEY_MAKE)
0094     {
0095         result = container.make;
0096     }
0097     else if (key == KEY_MODEL)
0098     {
0099         result = container.model;
0100     }
0101     else if (key == KEY_LENS)
0102     {
0103         result = container.lens;
0104     }
0105     else if (key == KEY_APERTURE)
0106     {
0107         result = container.aperture;
0108     }
0109     else if (key == KEY_FOCALLENGTH)
0110     {
0111         result = container.focalLength;
0112     }
0113     else if (key == KEY_FOCALLENGTH35)
0114     {
0115         result = container.focalLength35;
0116     }
0117     else if (key == KEY_EXPOSURETIME)
0118     {
0119         result = container.exposureTime;
0120     }
0121     else if (key == KEY_EXPOSUREPROGRAM)
0122     {
0123         result = container.exposureProgram;
0124     }
0125     else if (key == KEY_EXPOSUREMODE)
0126     {
0127         result = container.exposureMode;
0128     }
0129     else if (key == KEY_SENSITIVITY)
0130     {
0131         result = container.sensitivity;
0132     }
0133     else if (key == KEY_FLASHMODE)
0134     {
0135         result = container.flashMode;
0136     }
0137     else if (key == KEY_WHITEBALANCE)
0138     {
0139         result = container.whiteBalance;
0140     }
0141     else if (key == KEY_WHITEBALANCECOLORTEMPERATURE)
0142     {
0143         result = container.whiteBalanceColorTemperature;
0144     }
0145     else if (key == KEY_METERINGMODE)
0146     {
0147         result = container.meteringMode;
0148     }
0149     else if (key == KEY_SUBJECTDISTANCE)
0150     {
0151         result = container.subjectDistance;
0152     }
0153     else if (key == KEY_SUBJECTDISTANCECATEGORY)
0154     {
0155         result = container.subjectDistanceCategory;
0156     }
0157     else if (key == KEY_ASPECTRATIO)
0158     {
0159         result = videoContainer.aspectRatio;
0160     }
0161     else if (key == KEY_AUDIOBITRATE)
0162     {
0163         result = videoContainer.audioBitRate;
0164     }
0165     else if (key == KEY_AUDIOCHANNELTYPE)
0166     {
0167         result = videoContainer.audioChannelType;
0168     }
0169     else if (key == KEY_AUDIOCodec)
0170     {
0171         result = videoContainer.audioCodec;
0172     }
0173     else if (key == KEY_DURATION)
0174     {
0175         result = videoContainer.duration;
0176     }
0177     else if (key == KEY_FRAMERATE)
0178     {
0179         result = videoContainer.frameRate;
0180     }
0181     else if (key == KEY_VIDEOCODEC)
0182     {
0183         result = videoContainer.videoCodec;
0184     }
0185 
0186     result.replace(QLatin1Char('/'), QLatin1Char('_'));
0187 
0188     return result;
0189 }
0190 
0191 } // namespace Digikam