Author: post
Date: 2011-12-29 20:16:13 +0100 (Thu, 29 Dec 2011)
New Revision: 4074

Modified:
   trunk/plugins/meta-tiff/tiff-meta.c
Log:
Add more TIFF data types (by Erik Wognsen)

Modified: trunk/plugins/meta-tiff/tiff-meta.c
===================================================================
--- trunk/plugins/meta-tiff/tiff-meta.c 2011-12-29 19:14:50 UTC (rev 4073)
+++ trunk/plugins/meta-tiff/tiff-meta.c 2011-12-29 19:16:13 UTC (rev 4074)
@@ -49,9 +49,15 @@
        guint count;
        guint value_offset;
        guchar value_uchar;
+       gchar value_char;
        gushort value_ushort;
+       gshort value_short;
        guint value_uint;
+       gint value_int;
        gdouble value_rational;
+       gdouble value_srational;
+       gfloat value_float;
+       gdouble value_double;
        guint offset;
        gdouble value;
 };
@@ -119,6 +125,23 @@
        return ((gdouble) uint1) / ((gdouble) uint2);
 }
 
+/**
+ * Get a TIFF_FIELD_TYPE_SRATIONAL value from a TIFF file
+ */
+static gfloat
+get_srational(RAWFILE *rawfile, guint offset)
+{
+       gint int1=0, int2=1;
+       if (!raw_get_int(rawfile, offset, &int1))
+               return 0;
+       if (!raw_get_int(rawfile, offset+4, &int2))
+               return 0;
+
+       if (int2 == 0)
+               return 0;
+       return ((gdouble) int1) / ((gdouble) int2);
+}
+
 inline static void
 read_ifd(RAWFILE *rawfile, guint offset, struct IFD *ifd)
 {
@@ -146,6 +169,7 @@
                                raw_get_uchar(rawfile, offset+8, 
&ifd->value_uchar);
                                ifd->value = ifd->value_uchar;
                                break;
+                       /* case TIFF_FIELD_TYPE_ASCII: TODO? */
                        case TIFF_FIELD_TYPE_SHORT:
                                raw_get_ushort(rawfile, offset+8, 
&ifd->value_ushort);
                                ifd->value = ifd->value_ushort;
@@ -158,8 +182,32 @@
                                ifd->value_rational = get_rational(rawfile,  
ifd->value_offset);
                                ifd->value = ifd->value_rational;
                                break;
+                       case TIFF_FIELD_TYPE_SBYTE:
+                               raw_get_char(rawfile, offset+8, 
&ifd->value_char);
+                               ifd->value = ifd->value_char;
+                               break;
+                       /* case TIFF_FIELD_TYPE_UNDEFINED: TODO? */
+                       case TIFF_FIELD_TYPE_SSHORT:
+                               raw_get_short(rawfile, offset+8, 
&ifd->value_short);
+                               ifd->value = ifd->value_short;
+                               break;
+                       case TIFF_FIELD_TYPE_SLONG:
+                               raw_get_int(rawfile, offset+8, &ifd->value_int);
+                               ifd->value = ifd->value_int;
+                               break;
+                       case TIFF_FIELD_TYPE_SRATIONAL:
+                               ifd->value_srational = get_srational(rawfile, 
ifd->value_offset);
+                               ifd->value = ifd->value_srational;
+                               break;
+                       case TIFF_FIELD_TYPE_FLOAT:
+                               raw_get_float(rawfile, offset+8, 
&ifd->value_float);
+                               ifd->value = ifd->value_float;
+                               break;
+                       case TIFF_FIELD_TYPE_DOUBLE:
+                               raw_get_double(rawfile, offset+8, 
&ifd->value_double);
+                               ifd->value = ifd->value_double;
+                               break;
                        default:
-                               /* FIXME: Implement types from TIFF 6.0 */
                                break;
                }
 }


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to