+ /**\r
+ * Process a general Exif tag\r
+ * @param inMetadata metadata holding extracted values\r
+ * @param inTagType tag type (eg latitude)\r
+ * @param inTagValueOffset start offset in data array\r
+ * @param inComponentCount component count for tag\r
+ * @param inFormatCode format code, eg byte\r
+ */\r
+ private void processExifTag(JpegData inMetadata, int inTagType, int inTagValueOffset,\r
+ int inComponentCount, int inFormatCode)\r
+ {\r
+ // Only interested in original timestamp, thumbnail offset and thumbnail length\r
+ if (inTagType == TAG_DATETIME_ORIGINAL)\r
+ {\r
+ inMetadata.setOriginalTimestamp(readString(inTagValueOffset, inFormatCode, inComponentCount));\r
+ }\r
+ else if (inTagType == TAG_THUMBNAIL_OFFSET) {\r
+ _thumbnailOffset = TIFF_HEADER_START_OFFSET + get16Bits(inTagValueOffset);\r
+ extractThumbnail(inMetadata);\r
+ }\r
+ else if (inTagType == TAG_THUMBNAIL_LENGTH) {\r
+ _thumbnailLength = get16Bits(inTagValueOffset);\r
+ extractThumbnail(inMetadata);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Attempt to extract the thumbnail image\r
+ */\r
+ private void extractThumbnail(JpegData inMetadata)\r
+ {\r
+ if (_thumbnailOffset > 0 && _thumbnailLength > 0 && inMetadata.getThumbnailImage() == null)\r
+ {\r
+ byte[] thumbnailBytes = new byte[_thumbnailLength];\r
+ System.arraycopy(_data, _thumbnailOffset, thumbnailBytes, 0, _thumbnailLength);\r
+ inMetadata.setThumbnailImage(thumbnailBytes);\r
+ }\r
+ }\r
+\r
+\r