NDEVR
API Documentation
TinyExif.h
1#pragma once
2#include "DLLInfo.h"
3#include <NDEVR/String.h>
4namespace NDEVR
5{
6
17
21 enum FieldCode {
23 FIELD_EXIF = (1 << 0),
24 FIELD_XMP = (1 << 1),
26 };
27
28 class EntryParser;
29
36 class NDEVR_DESIGN_API EXIFStream {
37 public:
38 virtual ~EXIFStream() {}
39
44 virtual bool IsValid() const = 0;
45
51 virtual const uint8_t* GetBuffer(unsigned desiredLength) = 0;
52
58 virtual bool SkipBuffer(unsigned desiredLength) = 0;
59 };
60
68 class NDEVR_DESIGN_API EXIFInfo {
69 public:
74
80
85 EXIFInfo(std::istream& stream);
86
92 EXIFInfo(const uint8_t* data, unsigned length);
93
99 int parseFrom(EXIFStream& stream);
100
106 int parseFrom(std::istream& stream);
107
114 int parseFrom(const uint8_t* data, unsigned length);
115
125 int parseFromEXIFSegment(const uint8_t* buf, unsigned len);
126
127#ifndef TINYEXIF_NO_XMP_SUPPORT
137 int parseFromXMPSegment(const uint8_t* buf, unsigned len);
138
145 int parseFromXMPSegmentXML(const char* szXML, unsigned len);
146#endif // TINYEXIF_NO_XMP_SUPPORT
147
154 void clear();
155
156 private:
166 void parseIFDImage(EntryParser&, unsigned&, unsigned&);
167
172 void parseIFDExif(EntryParser&);
173
178 void parseIFDGPS(EntryParser&);
179
184 void parseIFDMakerNote(EntryParser&);
185
186 public:
187 uint32_t Fields;
188 uint32_t ImageWidth;
189 uint32_t ImageHeight;
196 uint16_t Orientation;
199 double XResolution;
200 double YResolution;
201 uint16_t ResolutionUnit;
203 uint16_t BitsPerSample;
211 double FNumber;
222 double FocalLength;
223 uint16_t Flash;
227 uint16_t MeteringMode;
230 uint16_t LightSource;
234 uint16_t ProjectionType;
239
243 struct NDEVR_DESIGN_API Calibration_t {
244 double FocalLength;
247 } Calibration;
248
266
270 struct NDEVR_DESIGN_API Geolocation_t {
271 double Latitude;
272 double Longitude;
273 double Altitude;
274 int8_t AltitudeRef;
276 double RollDegree;
277 double PitchDegree;
278 double YawDegree;
279 double SpeedX;
280 double SpeedY;
281 double SpeedZ;
282 double AccuracyXY;
283 double AccuracyZ;
284 double GPSDOP;
290
294 struct Coord_t {
295 double degrees;
296 double minutes;
297 double seconds;
298 uint8_t direction;
299 } LatComponents,
301
308
313 bool hasLatLon() const;
314
319 bool hasAltitude() const;
320
326
331 bool hasOrientation() const;
332
337 bool hasSpeed() const;
338 } GeoLocation;
339
345 struct NDEVR_DESIGN_API GPano_t {
348
354
359 bool hasPoseRollDegrees() const;
360 } GPano;
361
365 struct NDEVR_DESIGN_API MicroVideo_t {
366 uint32_t HasMicroVideo;
369 } MicroVideo;
370 };
371
372} // namespace TinyEXIF
The equivelent of std::vector but with a bit more control.
Definition Buffer.hpp:58
uint16_t LightSource
Kind of light source.
Definition TinyExif.h:230
String DateTimeOriginal
Original capture date and time (may not exist).
Definition TinyExif.h:206
EXIFInfo(const uint8_t *data, unsigned length)
Constructs and immediately parses EXIF/XMP data from a raw memory buffer.
double ShutterSpeedValue
Shutter speed (APEX value, reciprocal of exposure time).
Definition TinyExif.h:217
int parseFromXMPSegmentXML(const char *szXML, unsigned len)
Parses metadata from raw XMP XML content.
double ExposureTime
Exposure time in seconds.
Definition TinyExif.h:210
double YResolution
Number of pixels per ResolutionUnit in the Y (height) direction.
Definition TinyExif.h:200
String ImageDescription
Image description.
Definition TinyExif.h:192
String Model
Camera model.
Definition TinyExif.h:194
int parseFromEXIFSegment(const uint8_t *buf, unsigned len)
Parses metadata from a standalone EXIF segment (blob starting with "Exif\0\0").
uint16_t Orientation
Image orientation (EXIF tag 0x0112).
Definition TinyExif.h:196
EXIFInfo(std::istream &stream)
Constructs and immediately parses EXIF/XMP data from a standard input stream.
uint32_t Fields
Bitmask of FieldCode values indicating which metadata categories are available.
Definition TinyExif.h:187
uint16_t ProjectionType
Projection type.
Definition TinyExif.h:234
String DateTime
File change date and time.
Definition TinyExif.h:205
String Copyright
File copyright information.
Definition TinyExif.h:209
double BrightnessValue
Brightness value (APEX).
Definition TinyExif.h:219
double SubjectDistance
Distance to the focus point in meters.
Definition TinyExif.h:221
String DateTimeDigitized
Digitization date and time (may not exist).
Definition TinyExif.h:207
uint32_t RelatedImageHeight
Original image height reported in EXIF data (pixels).
Definition TinyExif.h:191
double ExposureBiasValue
Exposure bias value in EV.
Definition TinyExif.h:220
String Software
Software used to create/modify the image.
Definition TinyExif.h:204
uint32_t ImageHeight
Image height reported in EXIF data (pixels).
Definition TinyExif.h:189
uint16_t Flash
Flash status bitmask.
Definition TinyExif.h:223
double FocalLength
Focal length of the lens in millimeters.
Definition TinyExif.h:222
EXIFInfo()
Default constructor.
String SubSecTimeOriginal
Sub-second time of original capture.
Definition TinyExif.h:208
void clear()
Resets all data members to their default values.
uint16_t ExposureProgram
Exposure program used.
Definition TinyExif.h:212
uint16_t ISOSpeedRatings
ISO speed rating.
Definition TinyExif.h:216
double FNumber
F-number (f-stop) of the lens.
Definition TinyExif.h:211
double XResolution
Number of pixels per ResolutionUnit in the X (width) direction.
Definition TinyExif.h:199
Buffer< uint16_t > SubjectArea
Location and area of the main subject relative to upper-left origin.
Definition TinyExif.h:236
String SerialNumber
Serial number of the camera body.
Definition TinyExif.h:195
uint16_t ResolutionUnit
Unit of measurement for XResolution and YResolution.
Definition TinyExif.h:201
String Make
Camera manufacturer's name.
Definition TinyExif.h:193
int parseFrom(EXIFStream &stream)
Parses EXIF and XMP metadata from a JPEG image provided via an EXIFStream.
int parseFrom(std::istream &stream)
Parses EXIF and XMP metadata from a JPEG image provided via a standard input stream.
double ApertureValue
Lens aperture (APEX value).
Definition TinyExif.h:218
uint16_t MeteringMode
Metering mode.
Definition TinyExif.h:227
EXIFInfo(EXIFStream &stream)
Constructs and immediately parses EXIF/XMP data from the given EXIFStream.
int parseFromXMPSegment(const uint8_t *buf, unsigned len)
Parses metadata from a standalone XMP segment.
uint32_t ImageWidth
Image width reported in EXIF data (pixels).
Definition TinyExif.h:188
int parseFrom(const uint8_t *data, unsigned length)
Parses EXIF and XMP metadata from a JPEG image in a raw memory buffer.
uint32_t RelatedImageWidth
Original image width reported in EXIF data (pixels).
Definition TinyExif.h:190
uint16_t BitsPerSample
Number of bits per component.
Definition TinyExif.h:203
Abstract interface for providing a stream of bytes to the EXIF parser.
Definition TinyExif.h:36
virtual const uint8_t * GetBuffer(unsigned desiredLength)=0
Returns a pointer to a contiguous buffer of the requested size at the current position.
virtual bool IsValid() const =0
Checks whether the stream is in a valid, readable state.
virtual bool SkipBuffer(unsigned desiredLength)=0
Advances the current stream position by the specified number of bytes.
The core String class for the NDEVR API.
Definition String.h:95
The primary namespace for the NDEVR SDK.
FieldCode
Bit flags indicating which metadata fields are available after parsing.
Definition TinyExif.h:21
@ FIELD_ALL
Both EXIF and XMP data available.
Definition TinyExif.h:25
@ FIELD_XMP
XMP data available.
Definition TinyExif.h:24
@ FIELD_EXIF
EXIF data available.
Definition TinyExif.h:23
@ FIELD_NA
No EXIF or XMP data.
Definition TinyExif.h:22
ErrorCode
Error codes returned by EXIF/XMP parsing functions.
Definition TinyExif.h:10
@ PARSE_UNKNOWN_BYTEALIGN
Byte alignment specified in EXIF file was unknown (neither Motorola nor Intel).
Definition TinyExif.h:13
@ PARSE_ABSENT_DATA
No EXIF and/or XMP data found in JPEG file.
Definition TinyExif.h:14
@ PARSE_SUCCESS
Parse EXIF and/or XMP was successful.
Definition TinyExif.h:11
@ PARSE_CORRUPT_DATA
EXIF and/or XMP header was found, but data was corrupted.
Definition TinyExif.h:15
@ PARSE_INVALID_JPEG
No JPEG markers found in buffer, possibly invalid JPEG file.
Definition TinyExif.h:12
Camera calibration information derived from EXIF metadata.
Definition TinyExif.h:243
double OpticalCenterY
Principal point Y coordinate in pixels.
Definition TinyExif.h:246
double FocalLength
Focal length in pixels.
Definition TinyExif.h:244
double OpticalCenterX
Principal point X coordinate in pixels.
Definition TinyExif.h:245
Google Photo Sphere (GPano) spherical metadata.
Definition TinyExif.h:345
double PosePitchDegrees
Pitch in degrees above the horizon for the image center. Range: [-90, 90].
Definition TinyExif.h:346
bool hasPosePitchDegrees() const
Checks whether PosePitchDegrees contains a valid value.
double PoseRollDegrees
Roll in degrees; 0 is level with horizon, positive rotates horizon counterclockwise....
Definition TinyExif.h:347
bool hasPoseRollDegrees() const
Checks whether PoseRollDegrees contains a valid value.
Geographic coordinate expressed in degrees, minutes, and seconds.
Definition TinyExif.h:294
double degrees
Degrees component.
Definition TinyExif.h:295
double minutes
Minutes component.
Definition TinyExif.h:296
uint8_t direction
Cardinal direction character (e.g., 'N', 'S', 'E', 'W').
Definition TinyExif.h:298
double seconds
Seconds component.
Definition TinyExif.h:297
GPS and flight telemetry information embedded in the image file.
Definition TinyExif.h:270
double SpeedZ
Flight speed along Z axis in meters/second.
Definition TinyExif.h:281
String GPSDateStamp
Date as UTC in YYYY:MM:DD format (may not exist).
Definition TinyExif.h:289
int8_t AltitudeRef
Altitude reference: 0 = above sea level, -1 = below sea level.
Definition TinyExif.h:274
double PitchDegree
Flight pitch in degrees.
Definition TinyExif.h:277
double RollDegree
Flight roll in degrees.
Definition TinyExif.h:276
double YawDegree
Flight yaw in degrees.
Definition TinyExif.h:278
double Latitude
Image latitude expressed as decimal degrees.
Definition TinyExif.h:271
bool hasSpeed() const
Checks whether speed data is available.
double Altitude
Altitude in meters, relative to sea level.
Definition TinyExif.h:273
double RelativeAltitude
Relative altitude in meters.
Definition TinyExif.h:275
bool hasAltitude() const
Checks whether altitude data is available.
bool hasRelativeAltitude() const
Checks whether relative altitude data is available.
void parseCoords()
Converts Latitude/Longitude from degrees/minutes/seconds to decimal degrees.
uint16_t GPSDifferential
Differential correction applied to GPS receiver (may not exist).
Definition TinyExif.h:285
struct EXIFInfo::Geolocation_t::Coord_t LonComponents
Longitude in degrees/minutes/seconds.
double Longitude
Image longitude expressed as decimal degrees.
Definition TinyExif.h:272
double SpeedX
Flight speed along X axis in meters/second.
Definition TinyExif.h:279
String GPSTimeStamp
Time as UTC (may not exist).
Definition TinyExif.h:288
double SpeedY
Flight speed along Y axis in meters/second.
Definition TinyExif.h:280
bool hasOrientation() const
Checks whether orientation (roll, yaw, pitch) data is available.
double GPSDOP
GPS dilution of precision (DOP).
Definition TinyExif.h:284
bool hasLatLon() const
Checks whether latitude and longitude data are available.
double AccuracyXY
GPS horizontal accuracy in meters.
Definition TinyExif.h:282
double AccuracyZ
GPS vertical accuracy in meters.
Definition TinyExif.h:283
String GPSMapDatum
Geodetic survey datum (may not exist).
Definition TinyExif.h:287
Lens information extracted from EXIF metadata.
Definition TinyExif.h:252
double FocalLengthMax
Maximum focal length in millimeters.
Definition TinyExif.h:256
String Make
Lens manufacturer.
Definition TinyExif.h:263
String Model
Lens model.
Definition TinyExif.h:264
double FStopMin
Minimum aperture (f-stop).
Definition TinyExif.h:253
double FocalLengthMin
Minimum focal length in millimeters.
Definition TinyExif.h:255
double FocalPlaneYResolution
Pixels per FocalPlaneResolutionUnit in Y direction (may not exist).
Definition TinyExif.h:260
double DigitalZoomRatio
Digital zoom ratio when the image was shot.
Definition TinyExif.h:257
double FocalPlaneXResolution
Pixels per FocalPlaneResolutionUnit in X direction (may not exist).
Definition TinyExif.h:259
double FocalLengthIn35mm
Equivalent focal length in 35mm film.
Definition TinyExif.h:258
uint16_t FocalPlaneResolutionUnit
Unit for FocalPlaneXResolution/YResolution.
Definition TinyExif.h:261
double FStopMax
Maximum aperture (f-stop).
Definition TinyExif.h:254
Google camera micro-video metadata embedded in the image file.
Definition TinyExif.h:365
uint32_t HasMicroVideo
Non-zero if a micro-video is present.
Definition TinyExif.h:366
uint32_t MicroVideoOffset
Byte offset of the micro-video from the end of the file.
Definition TinyExif.h:368
uint32_t MicroVideoVersion
Micro-video format version.
Definition TinyExif.h:367