mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Update exif.cpp from upstream
Signed-off-by: Robert C. Helling <helling@atdotde.de>
This commit is contained in:
parent
4a550e4d7d
commit
dc55ee4a23
3 changed files with 911 additions and 584 deletions
759
core/exif.cpp
759
core/exif.cpp
File diff suppressed because it is too large
Load diff
52
core/exif.h
52
core/exif.h
|
@ -7,28 +7,10 @@
|
|||
-- http://www.media.mit.edu/pia/Research/deepview/exif.html
|
||||
-- http://www.exif.org/Exif2-2.PDF
|
||||
|
||||
Copyright (c) 2010-2013 Mayank Lahiri
|
||||
Copyright (c) 2010-2016 Mayank Lahiri
|
||||
mlahiri@gmail.com
|
||||
All rights reserved.
|
||||
|
||||
VERSION HISTORY:
|
||||
================
|
||||
|
||||
2.1: Released July 2013
|
||||
-- fixed a bug where JPEGs without an EXIF SubIFD would not be parsed
|
||||
-- fixed a bug in parsing GPS coordinate seconds
|
||||
-- fixed makefile bug
|
||||
-- added two pathological test images from Matt Galloway
|
||||
http://www.galloway.me.uk/2012/01/uiimageorientation-exif-orientation-sample-images/
|
||||
-- split main parsing routine for easier integration into Firefox
|
||||
|
||||
2.0: Released February 2013
|
||||
-- complete rewrite
|
||||
-- no new/delete
|
||||
-- added GPS support
|
||||
|
||||
1.0: Released 2010
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
@ -49,16 +31,18 @@
|
|||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef EXIF_H
|
||||
#define EXIF_H
|
||||
#ifndef __EXIF_H
|
||||
#define __EXIF_H
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace easyexif {
|
||||
|
||||
//
|
||||
// Class responsible for storing and parsing EXIF information from a JPEG blob
|
||||
//
|
||||
class EXIFInfo {
|
||||
public:
|
||||
public:
|
||||
// Parsing function for an entire JPEG image buffer.
|
||||
//
|
||||
// PARAM 'data': A pointer to a JPEG image.
|
||||
|
@ -112,12 +96,12 @@ public:
|
|||
// 5: multi-segment
|
||||
unsigned ImageWidth; // Image width reported in EXIF data
|
||||
unsigned ImageHeight; // Image height reported in EXIF data
|
||||
struct Geolocation_t
|
||||
{ // GPS information embedded in file
|
||||
struct Geolocation_t { // GPS information embedded in file
|
||||
double Latitude; // Image latitude expressed as decimal
|
||||
double Longitude; // Image longitude expressed as decimal
|
||||
double Altitude; // Altitude in meters, relative to sea level
|
||||
char AltitudeRef; // 0 = above sea level, -1 = below sea level
|
||||
double DOP; // GPS degree of precision (DOP)
|
||||
struct Coord_t {
|
||||
double degrees;
|
||||
double minutes;
|
||||
|
@ -125,14 +109,26 @@ public:
|
|||
char direction;
|
||||
} LatComponents, LonComponents; // Latitude, Longitude expressed in deg/min/sec
|
||||
} GeoLocation;
|
||||
EXIFInfo()
|
||||
{
|
||||
struct LensInfo_t { // Lens information
|
||||
double FStopMin; // Min aperture (f-stop)
|
||||
double FStopMax; // Max aperture (f-stop)
|
||||
double FocalLengthMin; // Min focal length (mm)
|
||||
double FocalLengthMax; // Max focal length (mm)
|
||||
double FocalPlaneXResolution; // Focal plane X-resolution
|
||||
double FocalPlaneYResolution; // Focal plane Y-resolution
|
||||
std::string Make; // Lens manufacturer
|
||||
std::string Model; // Lens model
|
||||
} LensInfo;
|
||||
|
||||
|
||||
EXIFInfo() {
|
||||
clear();
|
||||
}
|
||||
|
||||
time_t epoch();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
// Parse was successful
|
||||
#define PARSE_EXIF_SUCCESS 0
|
||||
// No JPEG markers found in buffer, possibly invalid JPEG file
|
||||
|
@ -144,4 +140,4 @@ public:
|
|||
// EXIF header was found, but data was corrupted.
|
||||
#define PARSE_EXIF_ERROR_CORRUPT 1985
|
||||
|
||||
#endif // EXIF_H
|
||||
#endif
|
||||
|
|
|
@ -354,7 +354,7 @@ extern "C" xsltStylesheetPtr get_stylesheet(const char *name)
|
|||
|
||||
extern "C" timestamp_t picture_get_timestamp(char *filename)
|
||||
{
|
||||
EXIFInfo exif;
|
||||
easyexif::EXIFInfo exif;
|
||||
memblock mem;
|
||||
int retval;
|
||||
|
||||
|
@ -1211,7 +1211,7 @@ extern "C" void savePictureLocal(struct picture *picture, const char *data, int
|
|||
|
||||
extern "C" void picture_load_exif_data(struct picture *p)
|
||||
{
|
||||
EXIFInfo exif;
|
||||
easyexif::EXIFInfo exif;
|
||||
memblock mem;
|
||||
|
||||
if (readfile(localFilePath(QString(p->filename)).toUtf8().data(), &mem) <= 0)
|
||||
|
|
Loading…
Add table
Reference in a new issue