35#define JPEG_MARKER_DCT 0xc0
37#define JPEG_MARKER_DHT 0xc4
39#define JPEG_MARKER_SOI 0xd8
41#define JPEG_MARKER_DQT 0xdb
42#undef JPEG_MARKER_APP0
43#define JPEG_MARKER_APP0 0xe0
44#undef JPEG_MARKER_APP1
45#define JPEG_MARKER_APP1 0xe1
46#undef JPEG_MARKER_APP2
47#define JPEG_MARKER_APP2 0xe2
48#undef JPEG_MARKER_APP3
49#define JPEG_MARKER_APP3 0xe3
50#undef JPEG_MARKER_APP4
51#define JPEG_MARKER_APP4 0xe4
52#undef JPEG_MARKER_APP5
53#define JPEG_MARKER_APP5 0xe5
54#undef JPEG_MARKER_APP10
55#define JPEG_MARKER_APP10 0xea
56#undef JPEG_MARKER_APP11
57#define JPEG_MARKER_APP11 0xeb
58#undef JPEG_MARKER_APP13
59#define JPEG_MARKER_APP13 0xed
60#undef JPEG_MARKER_APP14
61#define JPEG_MARKER_APP14 0xee
63#define JPEG_MARKER_COM 0xfe
104static const unsigned char ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00};
127 unsigned char data[1024];
132 f = fopen (path,
"rb");
135 _(
"The file '%s' could not be opened."), path);
139 size = fread (data, 1,
sizeof (data), f);
174 if (!eld || (len && !buf))
177 switch (eld->
state) {
181 if (eld->
size > len) {
207 "Scanning %i byte(s) of data...", len);
213 i =
MIN (len,
sizeof (eld->
b) - eld->
b_len);
215 memcpy (&eld->
b[eld->
b_len], buf, i);
217 if (eld->
b_len < sizeof (eld->
b))
227 if (!memcmp (eld->
b,
"FUJIFILM", 8)) {
245 for (i = 0; i <
sizeof (eld->
b); i++) {
246 switch (eld->
state) {
249 sizeof (eld->
b) - i))
269 eld->
size |= (
unsigned int)eld->
b[i] << 24;
273 eld->
size |= (
unsigned int)eld->
b[i] << 16;
277 eld->
size |= (
unsigned int)eld->
b[i] << 8;
281 eld->
size |= eld->
b[i] << 0;
294 if (eld->
size < 86) {
342 "ExifLoader",
_(
"The data supplied "
343 "does not seem to contain "
344 "EXIF data. JPEG Marker type 0x%02x"), eld->
b[i]);
451 unsigned int *buf_size)
453 const unsigned char* b = NULL;
459 "Loader format unknown");
ExifData * exif_data_new_mem(ExifMem *mem)
Allocate a new ExifData using the given memory allocator.
void exif_data_load_data(ExifData *data, const unsigned char *d_orig, unsigned int ds)
Load the ExifData structure from the raw JPEG or EXIF data in the given memory buffer.
void exif_data_log(ExifData *data, ExifLog *log)
Set the log message object for all IFDs.
void exif_loader_log(ExifLoader *loader, ExifLog *log)
Set the log message object used by this ExifLoader.
void exif_loader_reset(ExifLoader *loader)
Free any data previously loaded and reset the ExifLoader to its newly-initialized state.
static void exif_loader_free(ExifLoader *loader)
ExifLoader * exif_loader_new(void)
Allocate a new ExifLoader.
@ EL_DATA_FORMAT_FUJI_RAW
static void * exif_loader_alloc(ExifLoader *l, unsigned int i)
#define JPEG_MARKER_APP13
#define JPEG_MARKER_APP10
static const unsigned char ExifHeader[]
Magic number for EXIF header.
ExifData * exif_loader_get_data(ExifLoader *loader)
Create an ExifData from the data in the loader.
void exif_loader_unref(ExifLoader *loader)
Decrease the refcount of the ExifLoader.
#define JPEG_MARKER_APP14
#define JPEG_MARKER_APP11
ExifLoader * exif_loader_new_mem(ExifMem *mem)
Allocate a new ExifLoader using the specified memory allocator.
unsigned char exif_loader_write(ExifLoader *eld, unsigned char *buf, unsigned int len)
Load a buffer into the ExifLoader from a memory buffer.
void exif_loader_ref(ExifLoader *loader)
Increase the refcount of the ExifLoader.
static unsigned int exif_loader_copy(ExifLoader *eld, unsigned char *buf, unsigned int len)
void exif_loader_get_buf(ExifLoader *loader, const unsigned char **buf, unsigned int *buf_size)
Return the raw data read by the loader.
void exif_loader_write_file(ExifLoader *l, const char *path)
Load a file into the given ExifLoader from the filesystem.
Defines the ExifLoader type.
void exif_log(ExifLog *log, ExifLogCode code, const char *domain, const char *format,...)
void exif_log_unref(ExifLog *log)
void exif_log_ref(ExifLog *log)
@ EXIF_LOG_CODE_CORRUPT_DATA
#define EXIF_LOG_NO_MEMORY(l, d, s)
void exif_mem_free(ExifMem *mem, void *d)
void exif_mem_unref(ExifMem *mem)
Unrefcount an ExifMem.
void * exif_mem_alloc(ExifMem *mem, ExifLong ds)
ExifMem * exif_mem_new_default(void)
Create a new ExifMem with default values for your convenience.
void exif_mem_ref(ExifMem *mem)
Refcount an ExifMem.
EXIF data manipulation functions and types.
Represents the entire EXIF data found in an image.
ExifLoaderDataFormat data_format
unsigned char b[12]
Small buffer used for detection of format.
unsigned char b_len
Number of bytes in the small buffer b.