17 qCWarning(ExifParserLog) <<
"Failed to parse EXIF data";
22 exif_data_unref(data);
24 if (dateTimeDigitized.isEmpty()) {
25 qCWarning(ExifParserLog) <<
"DateTimeDigitized tag not found";
29 return QDateTime::fromString(dateTimeDigitized, QStringLiteral(
"yyyy:MM:dd HH:mm:ss"));
38 qCWarning(ExifParserLog) <<
"Failed to create EXIF data";
43 const ExifByteOrder order = exif_data_get_byte_order(data);
46 auto getOrCreateEntry = [&](ExifTag tag, ExifFormat format,
unsigned long components) -> ExifEntry* {
47 ExifEntry *entry = exif_content_get_entry(data->ifd[EXIF_IFD_GPS], tag);
55 ExifEntry *versionEntry = getOrCreateEntry(
static_cast<ExifTag
>(EXIF_TAG_GPS_VERSION_ID), EXIF_FORMAT_BYTE, 4);
56 if (versionEntry && versionEntry->data) {
57 versionEntry->data[0] = 2;
58 versionEntry->data[1] = 3;
59 versionEntry->data[2] = 0;
60 versionEntry->data[3] = 0;
64 ExifEntry *latRefEntry = getOrCreateEntry(
static_cast<ExifTag
>(EXIF_TAG_GPS_LATITUDE_REF), EXIF_FORMAT_ASCII, 2);
67 ExifEntry *latEntry = getOrCreateEntry(
static_cast<ExifTag
>(EXIF_TAG_GPS_LATITUDE), EXIF_FORMAT_RATIONAL, 3);
71 ExifEntry *lonRefEntry = getOrCreateEntry(
static_cast<ExifTag
>(EXIF_TAG_GPS_LONGITUDE_REF), EXIF_FORMAT_ASCII, 2);
74 ExifEntry *lonEntry = getOrCreateEntry(
static_cast<ExifTag
>(EXIF_TAG_GPS_LONGITUDE), EXIF_FORMAT_RATIONAL, 3);
78 ExifEntry *altRefEntry = getOrCreateEntry(
static_cast<ExifTag
>(EXIF_TAG_GPS_ALTITUDE_REF), EXIF_FORMAT_BYTE, 1);
81 ExifEntry *altEntry = getOrCreateEntry(
static_cast<ExifTag
>(EXIF_TAG_GPS_ALTITUDE), EXIF_FORMAT_RATIONAL, 1);
86 exif_data_unref(data);