* This software comes with no warranty of any kind, use at your own risk!
*/
-#include "main.h"
+#include "main.h"
#include "jpeg_parser.h"
gboolean jpeg_segment_find(const guchar *data, guint size,
{
parse_entry(tiff, offset + i * TIFF_TIFD_SIZE, size, bo, data);
}
-
+
next = tiff_byte_get_int32(tiff + offset + count * TIFF_TIFD_SIZE, bo);
if (next_offset) *next_offset = next;
-
+
return 0;
}
data_val = tiff_byte_get_int32(tiff + offset + TIFF_TIFD_OFFSET_DATA, bo);
DEBUG_1(" tag %x format %x count %x data_val %x", tag, format, count, data_val);
- if (tag == 0xb000)
- {
- mpo->version = data_val;
+ if (tag == 0xb000)
+ {
+ mpo->version = data_val;
DEBUG_1(" mpo version %x", mpo->version);
- }
- else if (tag == 0xb001)
- {
- mpo->num_images = data_val;
+ }
+ else if (tag == 0xb001)
+ {
+ mpo->num_images = data_val;
DEBUG_1(" num images %x", mpo->num_images);
- }
+ }
else if (tag == 0xb002)
{
guint i;
{
return -1;
}
-
+
mpo->images = g_new0(MPOEntry, mpo->num_images);
-
+
for (i = 0; i < mpo->num_images; i++) {
guint image_attr = tiff_byte_get_int32(tiff + data_offset + i * 16, bo);
mpo->images[i].type_code = image_attr & 0xffffff;
mpo->images[i].offset = tiff_byte_get_int32(tiff + data_offset + i * 16 + 8, bo);
mpo->images[i].dep1 = tiff_byte_get_int16(tiff + data_offset + i * 16 + 12, bo);
mpo->images[i].dep2 = tiff_byte_get_int16(tiff + data_offset + i * 16 + 14, bo);
-
- if (i == 0)
+
+ if (i == 0)
{
mpo->images[i].offset = 0;
}
else
{
- mpo->images[i].offset += mpo->mpo_offset;
- }
-
+ mpo->images[i].offset += mpo->mpo_offset;
+ }
+
DEBUG_1(" image %x %x %x", image_attr, mpo->images[i].length, mpo->images[i].offset);
}
}
data_val = tiff_byte_get_int32(tiff + offset + TIFF_TIFD_OFFSET_DATA, bo);
DEBUG_1(" tag %x format %x count %x data_val %x", tag, format, count, data_val);
- switch (tag)
- {
- case 0xb000:
- mpe->MPFVersion = data_val;
+ switch (tag)
+ {
+ case 0xb000:
+ mpe->MPFVersion = data_val;
DEBUG_1(" mpo version %x", data_val);
- break;
- case 0xb101:
- mpe->MPIndividualNum = data_val;
+ break;
+ case 0xb101:
+ mpe->MPIndividualNum = data_val;
DEBUG_1(" Individual Image Number %x", mpe->MPIndividualNum);
- break;
- case 0xb201:
- mpe->PanOrientation = data_val;
- break;
+ break;
+ case 0xb201:
+ mpe->PanOrientation = data_val;
+ break;
/*
FIXME:
Collimation Axis Distance AxisDistance_Z 45578 B20A SRATIONAL 1
Yaw Angle YawAngle 45579 B20B SRATIONAL 1
Pitch Angle PitchAngle 45580 B20C SRATIONAL 1
-Roll Angle RollAngle 45581 B20D
- */
- default:
+Roll Angle RollAngle 45581 B20D
+ */
+ default:
break;
}
MPOData *mpo;
guint i;
- DEBUG_1("mpo signature found at %x", seg_offset);
+ DEBUG_1("mpo signature found at %x", seg_offset);
seg_offset += 4;
seg_size -= 4;
-
+
if (!tiff_directory_offset(data + seg_offset, seg_size, &offset, &bo)) return NULL;
mpo = g_new0(MPOData, 1);
mpo->mpo_offset = seg_offset;
-
+
tiff_parse_IFD_table(data + seg_offset, offset , seg_size, bo, &next_offset, mpo_parse_Index_IFD_entry, (gpointer)mpo);
if (!mpo->images) mpo->num_images = 0;
-
-
+
+
for (i = 0; i < mpo->num_images; i++)
{
if (mpo->images[i].offset + mpo->images[i].length > size)
break;
}
}
-
+
for (i = 0; i < mpo->num_images; i++)
{
- if (i == 0)
+ if (i == 0)
{
offset = next_offset;
}
DEBUG_1("MPO image %d: MPO signature not found", i);
continue;
}
-
+
seg_offset += 4;
seg_size -= 4;
- if (!tiff_directory_offset(data + mpo->images[i].offset + seg_offset, seg_size, &offset, &bo))
+ if (!tiff_directory_offset(data + mpo->images[i].offset + seg_offset, seg_size, &offset, &bo))
{
DEBUG_1("MPO image %d: invalid directory offset", i);
continue;
}
tiff_parse_IFD_table(data + mpo->images[i].offset + seg_offset, offset , seg_size, bo, NULL, mpo_parse_Attributes_IFD_entry, (gpointer)&mpo->images[i]);
}
-
+
return mpo;
}
return NULL;
g_free(mpo);
}
}
+
+
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */