Author: post
Date: 2011-12-29 20:14:50 +0100 (Thu, 29 Dec 2011)
New Revision: 4073
Modified:
trunk/librawstudio/rs-rawfile.c
trunk/librawstudio/rs-rawfile.h
Log:
Add more TIFF types (by Erik Wognsen)
Modified: trunk/librawstudio/rs-rawfile.c
===================================================================
--- trunk/librawstudio/rs-rawfile.c 2011-12-29 19:14:08 UTC (rev 4072)
+++ trunk/librawstudio/rs-rawfile.c 2011-12-29 19:14:50 UTC (rev 4073)
@@ -72,6 +72,18 @@
}
gboolean
+raw_get_int(RAWFILE *rawfile, guint pos, gint *target)
+{
+ if((rawfile->base+pos+4)>rawfile->size)
+ return(FALSE);
+ if (rawfile->byteorder == cpuorder)
+ *target = *(gint *)(rawfile->map+pos+rawfile->base);
+ else
+ *target = ENDIANSWAP4(*(gint
*)(rawfile->map+pos+rawfile->base));
+ return(TRUE);
+}
+
+gboolean
raw_get_ushort(RAWFILE *rawfile, guint pos, gushort *target)
{
if((rawfile->base+pos+2)>rawfile->size)
@@ -124,7 +136,6 @@
{
if((rawfile->base+pos+4)>rawfile->size)
return(FALSE);
-
if (rawfile->byteorder == cpuorder)
*target = *(gfloat *)(rawfile->map+rawfile->base+pos);
else
@@ -133,6 +144,18 @@
}
gboolean
+raw_get_double(RAWFILE *rawfile, guint pos, gdouble *target)
+{
+ if((rawfile->base+pos+8)>rawfile->size)
+ return(FALSE);
+ if (rawfile->byteorder == cpuorder)
+ *target = *(gdouble *)(rawfile->map+rawfile->base+pos);
+ else
+ *target = (gdouble) (ENDIANSWAP8(*(gint64
*)(rawfile->map+rawfile->base+pos)));
+ return(TRUE);
+}
+
+gboolean
raw_get_uchar(RAWFILE *rawfile, guint pos, guchar *target)
{
if((rawfile->base+pos+1)>rawfile->size)
@@ -143,6 +166,16 @@
}
gboolean
+raw_get_char(RAWFILE *rawfile, guint pos, gchar *target)
+{
+ if((rawfile->base+pos+1)>rawfile->size)
+ return(FALSE);
+
+ *target = *(gchar *)(rawfile->map+rawfile->base+pos);
+ return(TRUE);
+}
+
+gboolean
raw_get_rational(RAWFILE *rawfile, guint pos, gfloat *target)
{
if((rawfile->base+pos+8)>rawfile->size)
Modified: trunk/librawstudio/rs-rawfile.h
===================================================================
--- trunk/librawstudio/rs-rawfile.h 2011-12-29 19:14:08 UTC (rev 4072)
+++ trunk/librawstudio/rs-rawfile.h 2011-12-29 19:14:50 UTC (rev 4073)
@@ -19,8 +19,9 @@
#ifndef RAWFILE_H
#define RAWFILE_H
-#define ENDIANSWAP4(a) (((a) & 0x000000FF) << 24 | ((a) & 0x0000FF00) << 8 |
((a) & 0x00FF0000) >> 8) | (((a) & 0xFF000000) >> 24)
-#define ENDIANSWAP2(a) (((a) & 0x00FF) << 8) | (((a) & 0xFF00) >> 8)
+#define ENDIANSWAP8(a) (((a) & 0x00000000000000FF) << 56 | ((a) &
0x000000000000FF00) << 40 | ((a) & 0x0000000000FF0000) << 24 | ((a) &
0x00000000FF000000) << 8 | ((a) & 0x000000FF00000000) >> 8 | ((a) &
0x0000FF0000000000) >> 24 | ((a) & 0x00FF000000000000) >> 40 | ((a) &
0xFF00000000000000) >> 56)
+#define ENDIANSWAP4(a) (((a) & 0x000000FF) << 24 | ((a) & 0x0000FF00) << 8 |
((a) & 0x00FF0000) >> 8 | ((a) & 0xFF000000) >> 24)
+#define ENDIANSWAP2(a) (((a) & 0x00FF) << 8 | ((a) & 0xFF00) >> 8)
#include "rs-types.h"
@@ -29,12 +30,15 @@
RAWFILE *raw_create_from_memory(void *memory, guint size, guint
first_ifd_offset, gushort byteorder);
guchar raw_init_file_tiff(RAWFILE *rawfile, guint pos);
gboolean raw_get_uint(RAWFILE *rawfile, guint pos, guint *target);
+gboolean raw_get_int(RAWFILE *rawfile, guint pos, gint *target);
gboolean raw_get_ushort(RAWFILE *rawfile, guint pos, gushort *target);
gushort raw_get_ushort_from_string(RAWFILE *rawfile, gchar *source);
gboolean raw_get_short(RAWFILE *rawfile, guint pos, gshort *target);
gshort raw_get_short_from_string(RAWFILE *rawfile, gchar *source);
gboolean raw_get_float(RAWFILE *rawfile, guint pos, gfloat *target);
+gboolean raw_get_double(RAWFILE *rawfile, guint pos, gdouble *target);
gboolean raw_get_uchar(RAWFILE *rawfile, guint pos, guchar *target);
+gboolean raw_get_char(RAWFILE *rawfile, guint pos, gchar *target);
gboolean raw_get_rational(RAWFILE *rawfile, guint pos, gfloat *target);
gboolean raw_strcmp(RAWFILE *rawfile, guint pos, const gchar *needle, gint
len);
gboolean raw_strcpy(RAWFILE *rawfile, guint pos, void *target, gint len);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit