Mercurial > geeqie.yaz
view src/format_raw.c @ 43:ee03f36e9e4b
Sun May 15 21:40:26 2005 John Ellis <johne@verizon.net>
* format_raw.[ch]: New files to parse image data and exif offsets for
the raw camera formats.
* exif.c, image-load.c: Add support calls to format_raw.c functions
above.
* filelist.c: Add Fujifilm raw file extension to known formats.
* thumb_standard.c (thumb_loader_std_start): Check for existing
thumbnail file before checking for a failure mark.
* src/Makefile.am: Add format_raw.[ch].
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
##### an offical release when making enhancements and translation updates. #####
author | gqview |
---|---|
date | Mon, 16 May 2005 01:49:51 +0000 |
parents | |
children | 7cfa60beda76 |
line wrap: on
line source
/* * GQView * (C) 2005 John Ellis * * Authors: * Original version 2005 Lars Ellenberg, base on dcraw by David coffin. * * This software is released under the GNU General Public License (GNU GPL). * Please read the included file COPYING for more information. * This software comes with no warranty of any kind, use at your own risk! */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include <stdio.h> #include <string.h> #include <unistd.h> #include <glib.h> #include "intl.h" #include "format_raw.h" static gint format_raw_test_canon(int fd, const void *data, const guint len, guint *image_offset, guint *exif_offset) { return FALSE; } static gint format_raw_test_fuji(int fd, const void *data, const guint len, guint *image_offset, guint *exif_offset) { if (len < 128 || memcmp(data, "FUJIFILM", 8) != 0) { return FALSE; } *image_offset = GUINT32_FROM_BE(*(guint32*)(data + 84)); *exif_offset = *image_offset + 12; printf("found a raw fuji file!\n"); return TRUE; } static gint format_raw_test_nikon(int fd, const void *data, const guint len, guint *image_offset, guint *exif_offset) { return FALSE; } gint format_raw_img_exif_offsets(int fd, const void *data, const guint len, guint *image_offset, guint *exif_offset) { guint32 io = 0; guint32 eo = 0; gint found; if (fd < 0 && !data) return FALSE; #if 0 if (len < 512) return FALSE; #endif found = format_raw_test_canon(fd, data, len, &io, &eo) || format_raw_test_fuji (fd, data, len, &io, &eo) || format_raw_test_nikon(fd, data, len, &io, &eo); if (!found || io >= len - 4 || eo >= len || memcmp(data + io, "\xff\xd8\xff\xe1", 4) != 0) /* jpeg marker */ { return FALSE; } if (image_offset) *image_offset = io; if (exif_offset) *exif_offset = eo; return TRUE; }