Mercurial > geeqie
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/format_raw.c Mon May 16 01:49:51 2005 +0000 @@ -0,0 +1,86 @@ +/* + * 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; +} + + +