Rev 12898 |
Rev 22652 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
#ifndef __EXIF_H__
#define __EXIF_H__
/**
exif.h
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "qstring.h"
#include "qfile.h"
#include "qimage.h"
typedef enum {
READ_EXIF = 1,
READ_IMAGE = 2,
READ_ALL = 3
}ReadMode_t;
//--------------------------------------------------------------------------
// This structure is used to store jpeg file sections in memory.
/*
typedef struct
{
uchar * Data;
int Type;
unsigned Size;
}
Section_t;
*/
typedef unsigned char uchar;
class TagTable
{
public:
TagTable ( unsigned short t, const char* d ) : Tag ( t ), Desc ( d ) {}
unsigned short Tag;
const char*const Desc;
};
#define MAX_SECTIONS 60
#define PSEUDO_IMAGE_MARKER 0x123; // Extra value.
class ExifData
{
// Section_t Sections[MAX_SECTIONS];
QString CameraMake;
QString CameraModel;
QString DateTime;
int Orientation;
int orientationCount;
int Height, Width;
int ExifImageLength, ExifImageWidth;
int IsColor;
int Process;
int FlashUsed;
float FocalLength;
float ExposureTime;
float ApertureFNumber;
float Distance;
int Whitebalance;
int MeteringMode;
float CCDWidth;
float ExposureBias;
int ExposureProgram;
int ISOequivalent;
int CompressionLevel;
QString UserComment;
QString Comment;
int recurseLevel;
unsigned char * LastExifRefd;
int ExifSettingsLength;
double FocalplaneXRes;
double FocalplaneUnits;
int MotorolaOrder;
int getch ( QFile &infile );
int ReadJpegSections ( QFile & infile, ReadMode_t ReadMode );
void DiscardData ( void );
int Get16u ( void * Short );
int Get32s ( void * Long );
unsigned Get32u ( void * Long );
double ConvertAnyFormat ( void * ValuePtr, int Format );
void ProcessExifDir ( unsigned char * DirStart, unsigned char * OffsetBase, unsigned ExifLength );
void process_COM ( const uchar * Data, int length );
void process_SOFn ( const uchar * Data, int marker );
int Get16m ( const void * Short );
void process_EXIF ( unsigned char * CharBuf, unsigned int length );
int Exif2tm ( struct tm * timeptr, char * ExifTime );
public:
ExifData();
bool scan ( const QString & );
QString getCameraMake() { return CameraMake; }
QString getCameraModel() { return CameraModel; }
QString getDateTime() { return DateTime; }
int getOrientation() { return Orientation; }
int getHeight() { return Height; }
int getWidth() { return Width; }
int getIsColor() { return IsColor; }
int getProcess() { return Process; }
int getFlashUsed() { return FlashUsed; }
float getFocalLength() { return FocalLength; }
float getExposureTime() { return ExposureTime; }
float getApertureFNumber() { return ApertureFNumber; }
float getDistance() { return Distance; }
int getWhitebalance() { return Whitebalance; }
int getMeteringMode() { return MeteringMode; }
float getCCDWidth() { return CCDWidth; }
float getExposureBias() { return ExposureBias; }
int getExposureProgram() { return ExposureProgram; }
int getISOequivalent() { return ISOequivalent; }
int getCompressionLevel() { return CompressionLevel; }
QString getUserComment() { return UserComment; }
QString getComment() { return Comment; }
QImage getThumbnail();
bool isThumbnailSane();
bool isNullThumbnail() { return !isThumbnailSane(); }
bool exifDataValid;
QImage Thumbnail;
};
class FatalError
{
const char* ex;
public:
FatalError ( const char* s ) { ex = s; }
void debug_print() const { qDebug ( "exception: " ); }
};
extern TagTable ProcessTable[];
//--------------------------------------------------------------------------
// Define comment writing code, impelemented in setcomment.c
extern int safe_copy_and_modify ( const char * original_filename, const char * comment );
#endif