Introduced IFDGPSTag enum

This commit is contained in:
Vladyslav Baranovskyi
2024-09-26 19:22:22 +03:00
parent e16ef9cbe1
commit 0ea1c5c7db

View File

@@ -39,6 +39,18 @@ namespace
GPS_INFO_OFFSET = 0x8825,
};
enum class IFDGPSTag : uint16_t
{
LATITUDE_REF = 1,
LATITUDE,
LONGITUDE_REF,
LONGITUDE,
ALTITUDE_REF,
ALTITUDE,
TRACK_REF = 14,
TRACK,
};
enum class IFDValueType
{
BYTE = 1,
@@ -437,7 +449,7 @@ namespace OpenVulkano::Image
AppendU16(result, numberOfGPSInfoTags);
// Latitude Ref
AppendTagAndValueType(result, 1, (uint16_t) IFDValueType::ASCII);
AppendTagAndValueType(result, (uint16_t) IFDGPSTag::LATITUDE_REF, (uint16_t) IFDValueType::ASCII);
AppendU32(result, 2); // 2 for N/S + \0
AppendU8(result, latitude.latitudeRef == LatitudeRef::NORTH ? 'N' : 'S');
AppendU8(result, 0);
@@ -445,12 +457,12 @@ namespace OpenVulkano::Image
AppendU8(result, 0); // padding
// Latitude
AppendTagAndValueType(result, 2, (uint16_t) IFDValueType::RATIONAL);
AppendTagAndValueType(result, (uint16_t) IFDGPSTag::LATITUDE, (uint16_t) IFDValueType::RATIONAL);
AppendU32(result, 3); // number of components
int latitudeOffset = AppendU32NES(result, 0); // 0 * sizeof(RationalValue)
// Longitude Ref
AppendTagAndValueType(result, 3, (uint16_t) IFDValueType::ASCII);
AppendTagAndValueType(result, (uint16_t) IFDGPSTag::LONGITUDE_REF, (uint16_t) IFDValueType::ASCII);
AppendU32(result, 2); // 2 for E/W + \0
AppendU8(result, longitude.longitudeRef == LongitudeRef::EAST ? 'E' : 'W');
AppendU8(result, 0);
@@ -458,12 +470,12 @@ namespace OpenVulkano::Image
AppendU8(result, 0); // padding
// Longitude
AppendTagAndValueType(result, 4, (uint16_t) IFDValueType::RATIONAL);
AppendTagAndValueType(result, (uint16_t) IFDGPSTag::LONGITUDE, (uint16_t) IFDValueType::RATIONAL);
AppendU32(result, 3); // number of components
int longitudeOffset = AppendU32NES(result, 24); // 3 * sizeof(RationalValue)
// Altitude Ref
AppendTagAndValueType(result, 5, (uint16_t) IFDValueType::BYTE);
AppendTagAndValueType(result, (uint16_t) IFDGPSTag::ALTITUDE_REF, (uint16_t) IFDValueType::BYTE);
AppendU32(result, 1); // number of components
AppendU8(result, altitudeIsAboveSeaLevel ? 0 : 1);
AppendU8(result, 0); // padding
@@ -471,12 +483,12 @@ namespace OpenVulkano::Image
AppendU8(result, 0); // padding
// Altitude
AppendTagAndValueType(result, 6, (uint16_t) IFDValueType::RATIONAL);
AppendTagAndValueType(result, (uint16_t) IFDGPSTag::ALTITUDE, (uint16_t) IFDValueType::RATIONAL);
AppendU32(result, 1); // number of components
int altitudeOffset = AppendU32NES(result, 48); // 6 * sizeof(RationalValue)
// Track Ref
AppendTagAndValueType(result, 14, (uint16_t) IFDValueType::ASCII);
AppendTagAndValueType(result, (uint16_t) IFDGPSTag::TRACK_REF, (uint16_t) IFDValueType::ASCII);
AppendU32(result, 2); // 2 for T/M + \0
AppendU8(result, trackRef == GPSTrackRef::TRUE_NORTH ? 'T' : 'M');
AppendU8(result, 0);
@@ -484,7 +496,7 @@ namespace OpenVulkano::Image
AppendU8(result, 0); // padding
// Track
AppendTagAndValueType(result, 15, (uint16_t) IFDValueType::RATIONAL);
AppendTagAndValueType(result, (uint16_t) IFDGPSTag::TRACK, (uint16_t) IFDValueType::RATIONAL);
AppendU32(result, 1); // number of components
int trackOffset = AppendU32NES(result, 56); // 7 * sizeof(RationalValue)