summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2012-08-26 20:14:48 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-08-26 20:14:49 -0700
commit3d5c7f5c79492de43dfe58b78bc97cdce1ec8dd7 (patch)
tree5ac1598ee27359c8753212fad0a7c8790e102814 /src
parent93d87ff509cabdad9f02f379df7eba01a44969c7 (diff)
parentfd745274358be4afdc0876985b108c2a20ef6b06 (diff)
downloadandroid_packages_apps_Snap-3d5c7f5c79492de43dfe58b78bc97cdce1ec8dd7.tar.gz
android_packages_apps_Snap-3d5c7f5c79492de43dfe58b78bc97cdce1ec8dd7.tar.bz2
android_packages_apps_Snap-3d5c7f5c79492de43dfe58b78bc97cdce1ec8dd7.zip
Merge "Read thumbnail into ExifData" into gb-ub-photos-arches
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/exif/ExifData.java57
-rw-r--r--src/com/android/gallery3d/exif/ExifReader.java14
2 files changed, 69 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/exif/ExifData.java b/src/com/android/gallery3d/exif/ExifData.java
index 712698ef4..5b0e3d8e4 100644
--- a/src/com/android/gallery3d/exif/ExifData.java
+++ b/src/com/android/gallery3d/exif/ExifData.java
@@ -15,6 +15,9 @@
*/
package com.android.gallery3d.exif;
+
+import java.util.ArrayList;
+
/**
* This class stores the EXIF header in IFDs according to the JPEG specification.
* It is the result produced by {@link ExifReader}.
@@ -23,6 +26,8 @@ package com.android.gallery3d.exif;
*/
public class ExifData {
private final IfdData[] mIfdDatas = new IfdData[IfdId.TYPE_IFD_COUNT];
+ private byte[] mThumbnail;
+ private ArrayList<byte[]> mStripBytes = new ArrayList<byte[]>();
/**
* Gets the IFD data of the specified IFD.
@@ -44,4 +49,56 @@ public class ExifData {
public void addIfdData(IfdData data) {
mIfdDatas[data.getId()] = data;
}
+
+ /**
+ * Gets the compressed thumbnail. Returns null if there is no compressed thumbnail.
+ *
+ * @see #hasCompressedThumbnail()
+ */
+ public byte[] getCompressedThumbnail() {
+ return mThumbnail;
+ }
+
+ /**
+ * Sets the compressed thumbnail.
+ */
+ public void setCompressedThumbnail(byte[] thumbnail) {
+ mThumbnail = thumbnail;
+ }
+
+ /**
+ * Returns true it this header contains a compressed thumbnail.
+ */
+ public boolean hasCompressedThumbnail() {
+ return mThumbnail != null;
+ }
+
+ /**
+ * Adds an uncompressed strip.
+ */
+ public void setStripBytes(int index, byte[] strip) {
+ if (index < mStripBytes.size()) {
+ mStripBytes.set(index, strip);
+ } else {
+ for (int i = mStripBytes.size(); i < index; i++) {
+ mStripBytes.add(null);
+ }
+ mStripBytes.add(strip);
+ }
+ }
+
+ /**
+ * Gets the strip count
+ */
+ public int getStripCount() {
+ return mStripBytes.size();
+ }
+
+ /**
+ * Gets the strip at the specified index.
+ * @exceptions #IndexOutOfBoundException
+ */
+ public byte[] getStrip(int index) {
+ return mStripBytes.get(index);
+ }
} \ No newline at end of file
diff --git a/src/com/android/gallery3d/exif/ExifReader.java b/src/com/android/gallery3d/exif/ExifReader.java
index 125b6c65e..c259461f2 100644
--- a/src/com/android/gallery3d/exif/ExifReader.java
+++ b/src/com/android/gallery3d/exif/ExifReader.java
@@ -24,11 +24,11 @@ import java.io.InputStream;
*/
public class ExifReader {
/**
- * Parse the inputStream and return all Exif data.
+ * Parses the inputStream and and returns the EXIF data in an {@link ExifData}.
* @throws ExifInvalidFormatException
* @throws IOException
*/
- public ExifData getExifData(InputStream inputStream) throws ExifInvalidFormatException,
+ public ExifData read(InputStream inputStream) throws ExifInvalidFormatException,
IOException {
ExifParser parser = ExifParser.parse(inputStream);
ExifData exifData = new ExifData();
@@ -56,6 +56,16 @@ public class ExifReader {
}
exifData.getIfdData(tag.getIfd()).setTag(tag);
break;
+ case ExifParser.EVENT_COMPRESSED_IMAGE:
+ byte buf[] = new byte[parser.getCompressedImageSize()];
+ parser.read(buf);
+ exifData.setCompressedThumbnail(buf);
+ break;
+ case ExifParser.EVENT_UNCOMPRESSED_STRIP:
+ buf = new byte[parser.getStripSize()];
+ parser.read(buf);
+ exifData.setStripBytes(parser.getStripIndex(), buf);
+ break;
}
event = parser.next();
}