diff options
author | Brint E. Kriebel <bekit@cyngn.com> | 2014-06-30 22:42:18 -0700 |
---|---|---|
committer | Brint E. Kriebel <bekit@cyngn.com> | 2014-06-30 22:42:18 -0700 |
commit | 1cf1cb46e81002f756e6141fcd813eb1df44a2f5 (patch) | |
tree | 74c0a8aa932193154abc4e1981c17a6c238582b4 /WallpaperPicker/src/com/android/gallery3d/exif/ExifReader.java | |
parent | 4b66843493c8a8cc2bf01ac45566b71b2393a5ec (diff) | |
parent | ebf8f37515c23a167cef2bb8cff04854c52fd35b (diff) | |
download | android_packages_apps_Trebuchet-1cf1cb46e81002f756e6141fcd813eb1df44a2f5.tar.gz android_packages_apps_Trebuchet-1cf1cb46e81002f756e6141fcd813eb1df44a2f5.tar.bz2 android_packages_apps_Trebuchet-1cf1cb46e81002f756e6141fcd813eb1df44a2f5.zip |
Merge branch 'cm-11.0' into stable/cm-11.0
Conflicts:
res/values-et/cm_strings.xml
res/values-th/cm_arrays.xml
res/values-th/cm_strings.xml
Change-Id: If66ec311e06bca36268c52b42b61425c3b044556
Diffstat (limited to 'WallpaperPicker/src/com/android/gallery3d/exif/ExifReader.java')
-rw-r--r-- | WallpaperPicker/src/com/android/gallery3d/exif/ExifReader.java | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/WallpaperPicker/src/com/android/gallery3d/exif/ExifReader.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifReader.java new file mode 100644 index 000000000..68e972fb7 --- /dev/null +++ b/WallpaperPicker/src/com/android/gallery3d/exif/ExifReader.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.gallery3d.exif; + +import android.util.Log; + +import java.io.IOException; +import java.io.InputStream; + +/** + * This class reads the EXIF header of a JPEG file and stores it in + * {@link ExifData}. + */ +class ExifReader { + private static final String TAG = "ExifReader"; + + private final ExifInterface mInterface; + + ExifReader(ExifInterface iRef) { + mInterface = iRef; + } + + /** + * Parses the inputStream and and returns the EXIF data in an + * {@link ExifData}. + * + * @throws ExifInvalidFormatException + * @throws IOException + */ + protected ExifData read(InputStream inputStream) throws ExifInvalidFormatException, + IOException { + ExifParser parser = ExifParser.parse(inputStream, mInterface); + ExifData exifData = new ExifData(parser.getByteOrder()); + ExifTag tag = null; + + int event = parser.next(); + while (event != ExifParser.EVENT_END) { + switch (event) { + case ExifParser.EVENT_START_OF_IFD: + exifData.addIfdData(new IfdData(parser.getCurrentIfd())); + break; + case ExifParser.EVENT_NEW_TAG: + tag = parser.getTag(); + if (!tag.hasValue()) { + parser.registerForTagValue(tag); + } else { + exifData.getIfdData(tag.getIfd()).setTag(tag); + } + break; + case ExifParser.EVENT_VALUE_OF_REGISTERED_TAG: + tag = parser.getTag(); + if (tag.getDataType() == ExifTag.TYPE_UNDEFINED) { + parser.readFullTagValue(tag); + } + exifData.getIfdData(tag.getIfd()).setTag(tag); + break; + case ExifParser.EVENT_COMPRESSED_IMAGE: + byte buf[] = new byte[parser.getCompressedImageSize()]; + if (buf.length == parser.read(buf)) { + exifData.setCompressedThumbnail(buf); + } else { + Log.w(TAG, "Failed to read the compressed thumbnail"); + } + break; + case ExifParser.EVENT_UNCOMPRESSED_STRIP: + buf = new byte[parser.getStripSize()]; + if (buf.length == parser.read(buf)) { + exifData.setStripBytes(parser.getStripIndex(), buf); + } else { + Log.w(TAG, "Failed to read the strip bytes"); + } + break; + } + event = parser.next(); + } + return exifData; + } +} |