From c27ecc21a04d901d8069dddd31a00d335e9ae097 Mon Sep 17 00:00:00 2001 From: Earl Ou Date: Thu, 30 Aug 2012 14:46:58 +0800 Subject: Rearrange the constants in ExifTag Change-Id: I62ab6e52869dfa5b3fee7993bd109f4c5eed91a9 --- src/com/android/gallery3d/app/CropImage.java | 4 +- src/com/android/gallery3d/exif/ExifData.java | 16 +- .../android/gallery3d/exif/ExifOutputStream.java | 26 +- src/com/android/gallery3d/exif/ExifParser.java | 14 +- src/com/android/gallery3d/exif/ExifTag.java | 760 +++++++++++++-------- .../com/android/gallery3d/exif/ExifParserTest.java | 8 +- .../com/android/gallery3d/exif/ExifReaderTest.java | 20 +- 7 files changed, 507 insertions(+), 341 deletions(-) diff --git a/src/com/android/gallery3d/app/CropImage.java b/src/com/android/gallery3d/app/CropImage.java index f9254eefe..90eb8e5bb 100644 --- a/src/com/android/gallery3d/app/CropImage.java +++ b/src/com/android/gallery3d/app/CropImage.java @@ -394,12 +394,12 @@ public class CropImage extends AbstractGalleryActivity { private void changeExifImageSizeTags(ExifData data, int width, int height) { // FIXME: would the image size be too large for TYPE_UNSIGHED_SHORT? - ExifTag tag = new ExifTag(ExifTag.TIFF_TAG.TAG_IMAGE_WIDTH, + ExifTag tag = new ExifTag(ExifTag.TAG_IMAGE_WIDTH, ExifTag.TYPE_UNSIGNED_SHORT, 1, IfdId.TYPE_IFD_0); tag.setValue(new int[] {width}); data.getIfdData(IfdId.TYPE_IFD_0).setTag(tag); - tag = new ExifTag(ExifTag.TIFF_TAG.TAG_IMAGE_HEIGHT, + tag = new ExifTag(ExifTag.TAG_IMAGE_LENGTH, ExifTag.TYPE_UNSIGNED_SHORT, 1, IfdId.TYPE_IFD_0); tag.setValue(new int[] {height}); data.getIfdData(IfdId.TYPE_IFD_0).setTag(tag); diff --git a/src/com/android/gallery3d/exif/ExifData.java b/src/com/android/gallery3d/exif/ExifData.java index 88fa13cab..0c16cc9aa 100644 --- a/src/com/android/gallery3d/exif/ExifData.java +++ b/src/com/android/gallery3d/exif/ExifData.java @@ -149,18 +149,22 @@ public class ExifData { gpsIfd = new IfdData(IfdId.TYPE_IFD_GPS); addIfdData(gpsIfd); } - ExifTag latTag = new ExifTag(ExifTag.GPS_TAG.TAG_GPS_LATITUDE, ExifTag.TYPE_RATIONAL, + ExifTag latTag = new ExifTag(ExifTag.TAG_GPS_LATITUDE, ExifTag.TYPE_RATIONAL, 3, IfdId.TYPE_IFD_GPS); - ExifTag longTag = new ExifTag(ExifTag.GPS_TAG.TAG_GPS_LONGITUDE, ExifTag.TYPE_RATIONAL, + ExifTag longTag = new ExifTag(ExifTag.TAG_GPS_LONGITUDE, ExifTag.TYPE_RATIONAL, 3, IfdId.TYPE_IFD_GPS); - ExifTag latRefTag = new ExifTag(ExifTag.GPS_TAG.TAG_GPS_LATITUDE_REF, + ExifTag latRefTag = new ExifTag(ExifTag.TAG_GPS_LATITUDE_REF, ExifTag.TYPE_ASCII, 2, IfdId.TYPE_IFD_GPS); - ExifTag longRefTag = new ExifTag(ExifTag.GPS_TAG.TAG_GPS_LONGITUDE_REF, + ExifTag longRefTag = new ExifTag(ExifTag.TAG_GPS_LONGITUDE_REF, ExifTag.TYPE_ASCII, 2, IfdId.TYPE_IFD_GPS); latTag.setValue(toExifLatLong(latitude)); longTag.setValue(toExifLatLong(longitude)); - latRefTag.setValue(latitude >= 0 ? "N" : "S"); - longRefTag.setValue(longitude >= 0 ? "E" : "W"); + latRefTag.setValue(latitude >= 0 + ? ExifTag.GpsLatitudeRef.NORTH + : ExifTag.GpsLatitudeRef.SOUTH); + longRefTag.setValue(longitude >= 0 + ? ExifTag.GpsLongitudeRef.EAST + : ExifTag.GpsLongitudeRef.WEST); gpsIfd.setTag(latTag); gpsIfd.setTag(longTag); gpsIfd.setTag(latRefTag); diff --git a/src/com/android/gallery3d/exif/ExifOutputStream.java b/src/com/android/gallery3d/exif/ExifOutputStream.java index e9475c53e..9466faa58 100644 --- a/src/com/android/gallery3d/exif/ExifOutputStream.java +++ b/src/com/android/gallery3d/exif/ExifOutputStream.java @@ -270,8 +270,8 @@ public class ExifOutputStream extends FilterOutputStream { ifd0 = new IfdData(IfdId.TYPE_IFD_0); mExifData.addIfdData(ifd0); } - ExifTag exifOffsetTag = new ExifTag(ExifTag.TIFF_TAG.TAG_EXIF_IFD - , ExifTag.TYPE_UNSIGNED_INT, 1, IfdId.TYPE_IFD_0); + ExifTag exifOffsetTag = new ExifTag(ExifTag.TAG_EXIF_IFD, + ExifTag.TYPE_UNSIGNED_INT, 1, IfdId.TYPE_IFD_0); ifd0.setTag(exifOffsetTag); // Exif IFD is required for all file. @@ -284,7 +284,7 @@ public class ExifOutputStream extends FilterOutputStream { // GPS IFD IfdData gpsIfd = mExifData.getIfdData(IfdId.TYPE_IFD_GPS); if (gpsIfd != null) { - ExifTag gpsOffsetTag = new ExifTag(ExifTag.TIFF_TAG.TAG_GPS_IFD, + ExifTag gpsOffsetTag = new ExifTag(ExifTag.TAG_GPS_IFD, ExifTag.TYPE_UNSIGNED_INT, 1, IfdId.TYPE_IFD_0); ifd0.setTag(gpsOffsetTag); } @@ -292,7 +292,7 @@ public class ExifOutputStream extends FilterOutputStream { // Interoperability IFD IfdData interIfd = mExifData.getIfdData(IfdId.TYPE_IFD_INTEROPERABILITY); if (interIfd != null) { - ExifTag interOffsetTag = new ExifTag(ExifTag.EXIF_TAG.TAG_INTEROPERABILITY_IFD, + ExifTag interOffsetTag = new ExifTag(ExifTag.TAG_INTEROPERABILITY_IFD, ExifTag.TYPE_UNSIGNED_INT, 1, IfdId.TYPE_IFD_EXIF); exifIfd.setTag(interOffsetTag); } @@ -305,10 +305,10 @@ public class ExifOutputStream extends FilterOutputStream { ifd1 = new IfdData(IfdId.TYPE_IFD_1); mExifData.addIfdData(ifd1); } - ExifTag offsetTag = new ExifTag(ExifTag.TIFF_TAG.TAG_JPEG_INTERCHANGE_FORMAT, + ExifTag offsetTag = new ExifTag(ExifTag.TAG_JPEG_INTERCHANGE_FORMAT, ExifTag.TYPE_UNSIGNED_INT, 1, IfdId.TYPE_IFD_1); ifd1.setTag(offsetTag); - ExifTag lengthTag = new ExifTag(ExifTag.TIFF_TAG.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, + ExifTag lengthTag = new ExifTag(ExifTag.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, ExifTag.TYPE_UNSIGNED_INT, 1, IfdId.TYPE_IFD_1); lengthTag.setValue(mExifData.getCompressedThumbnail().length); ifd1.setTag(lengthTag); @@ -318,9 +318,9 @@ public class ExifOutputStream extends FilterOutputStream { mExifData.addIfdData(ifd1); } int stripCount = mExifData.getStripCount(); - ExifTag offsetTag = new ExifTag(ExifTag.TIFF_TAG.TAG_STRIP_OFFSETS, + ExifTag offsetTag = new ExifTag(ExifTag.TAG_STRIP_OFFSETS, ExifTag.TYPE_UNSIGNED_INT, stripCount, IfdId.TYPE_IFD_1); - ExifTag lengthTag = new ExifTag(ExifTag.TIFF_TAG.TAG_STRIP_BYTE_COUNTS, + ExifTag lengthTag = new ExifTag(ExifTag.TAG_STRIP_BYTE_COUNTS, ExifTag.TYPE_UNSIGNED_INT, stripCount, IfdId.TYPE_IFD_1); long[] lengths = new long[stripCount]; for (int i = 0; i < mExifData.getStripCount(); i++) { @@ -336,20 +336,20 @@ public class ExifOutputStream extends FilterOutputStream { int offset = TIFF_HEADER_SIZE; IfdData ifd0 = mExifData.getIfdData(IfdId.TYPE_IFD_0); offset = calculateOffsetOfIfd(ifd0, offset); - ifd0.getTag(ExifTag.TIFF_TAG.TAG_EXIF_IFD).setValue(offset); + ifd0.getTag(ExifTag.TAG_EXIF_IFD).setValue(offset); IfdData exifIfd = mExifData.getIfdData(IfdId.TYPE_IFD_EXIF); offset = calculateOffsetOfIfd(exifIfd, offset); IfdData interIfd = mExifData.getIfdData(IfdId.TYPE_IFD_INTEROPERABILITY); if (interIfd != null) { - exifIfd.getTag(ExifTag.EXIF_TAG.TAG_INTEROPERABILITY_IFD).setValue(offset); + exifIfd.getTag(ExifTag.TAG_INTEROPERABILITY_IFD).setValue(offset); offset = calculateOffsetOfIfd(interIfd, offset); } IfdData gpsIfd = mExifData.getIfdData(IfdId.TYPE_IFD_GPS); if (gpsIfd != null) { - ifd0.getTag(ExifTag.TIFF_TAG.TAG_GPS_IFD).setValue(offset); + ifd0.getTag(ExifTag.TAG_GPS_IFD).setValue(offset); offset = calculateOffsetOfIfd(gpsIfd, offset); } @@ -361,7 +361,7 @@ public class ExifOutputStream extends FilterOutputStream { // thumbnail if (mExifData.hasCompressedThumbnail()) { - ifd1.getTag(ExifTag.TIFF_TAG.TAG_JPEG_INTERCHANGE_FORMAT).setValue(offset); + ifd1.getTag(ExifTag.TAG_JPEG_INTERCHANGE_FORMAT).setValue(offset); offset += mExifData.getCompressedThumbnail().length; } else if (mExifData.hasUncompressedStrip()){ int stripCount = mExifData.getStripCount(); @@ -370,7 +370,7 @@ public class ExifOutputStream extends FilterOutputStream { offsets[i] = offset; offset += mExifData.getStrip(i).length; } - ifd1.getTag(ExifTag.TIFF_TAG.TAG_STRIP_OFFSETS).setValue(offsets); + ifd1.getTag(ExifTag.TAG_STRIP_OFFSETS).setValue(offsets); } return offset; } diff --git a/src/com/android/gallery3d/exif/ExifParser.java b/src/com/android/gallery3d/exif/ExifParser.java index 72b479bed..dfa818409 100644 --- a/src/com/android/gallery3d/exif/ExifParser.java +++ b/src/com/android/gallery3d/exif/ExifParser.java @@ -471,33 +471,33 @@ public class ExifParser { */ private void checkOffsetOrImageTag(ExifTag tag) { switch (tag.getTagId()) { - case ExifTag.TIFF_TAG.TAG_EXIF_IFD: + case ExifTag.TAG_EXIF_IFD: if (isIfdRequested(IfdId.TYPE_IFD_EXIF) || isIfdRequested(IfdId.TYPE_IFD_INTEROPERABILITY)) { registerIfd(IfdId.TYPE_IFD_EXIF, tag.getUnsignedInt(0)); } break; - case ExifTag.TIFF_TAG.TAG_GPS_IFD: + case ExifTag.TAG_GPS_IFD: if (isIfdRequested(IfdId.TYPE_IFD_GPS)) { registerIfd(IfdId.TYPE_IFD_GPS, tag.getUnsignedInt(0)); } break; - case ExifTag.EXIF_TAG.TAG_INTEROPERABILITY_IFD: + case ExifTag.TAG_INTEROPERABILITY_IFD: if (isIfdRequested(IfdId.TYPE_IFD_INTEROPERABILITY)) { registerIfd(IfdId.TYPE_IFD_INTEROPERABILITY, tag.getUnsignedInt(0)); } break; - case ExifTag.TIFF_TAG.TAG_JPEG_INTERCHANGE_FORMAT: + case ExifTag.TAG_JPEG_INTERCHANGE_FORMAT: if (isThumbnailRequested()) { registerCompressedImage(tag.getUnsignedInt(0)); } break; - case ExifTag.TIFF_TAG.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH: + case ExifTag.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH: if (isThumbnailRequested()) { mJpegSizeTag = tag; } break; - case ExifTag.TIFF_TAG.TAG_STRIP_OFFSETS: + case ExifTag.TAG_STRIP_OFFSETS: if (isThumbnailRequested()) { if (tag.hasValue()) { for (int i = 0; i < tag.getComponentCount(); i++) { @@ -512,7 +512,7 @@ public class ExifParser { } } break; - case ExifTag.TIFF_TAG.TAG_STRIP_BYTE_COUNTS: + case ExifTag.TAG_STRIP_BYTE_COUNTS: if (isThumbnailRequested()) { if (tag.hasValue()) { mStripSizeTag = tag; diff --git a/src/com/android/gallery3d/exif/ExifTag.java b/src/com/android/gallery3d/exif/ExifTag.java index 35e308d77..92b055642 100644 --- a/src/com/android/gallery3d/exif/ExifTag.java +++ b/src/com/android/gallery3d/exif/ExifTag.java @@ -27,302 +27,464 @@ import java.util.Arrays; * @see ExifData */ public class ExifTag { - public static interface TIFF_TAG { - public static final short TAG_IMAGE_WIDTH = 0x100; - public static final short TAG_IMAGE_HEIGHT = 0x101; - public static final short TAG_BITS_PER_SAMPLE = 0x102; - public static final short TAG_COMPRESSION = 0x103; - public static final short TAG_PHOTOMETRIC_INTERPRETATION = 0x106; - public static final short TAG_IMAGE_DESCRIPTION = 0x10E; - public static final short TAG_MAKE = 0x10F; - public static final short TAG_MODEL = 0x110; - public static final short TAG_STRIP_OFFSETS = 0x111; - public static final short TAG_ORIENTATION = 0x112; - public static final short TAG_SAMPLES_PER_PIXEL = 0x115; - public static final short TAG_ROWS_PER_STRIP = 0x116; - public static final short TAG_STRIP_BYTE_COUNTS = 0x117; - public static final short TAG_X_RESOLUTION = 0x11A; - public static final short TAG_Y_RESOLUTION = 0x11B; - public static final short TAG_PLANAR_CONFIGURATION = 0x11C; - public static final short TAG_RESOLUTION_UNIT = 0x128; - public static final short TAG_TRANSFER_FUNCTION = 0x12D; - public static final short TAG_SOFTWARE = 0x131; - public static final short TAG_DATE_TIME = 0x132; - public static final short TAG_ARTIST = 0x13B; - public static final short TAG_WHITE_POINT = 0x13E; - public static final short TAG_PRIMARY_CHROMATICITIES = 0x13F; - public static final short TAG_JPEG_INTERCHANGE_FORMAT = 0x201; - public static final short TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = 0x202; - public static final short TAG_Y_CB_CR_COEFFICIENTS = 0x211; - public static final short TAG_Y_CB_CR_SUB_SAMPLING = 0x212; - public static final short TAG_Y_CB_CR_POSITIONING = 0x213; - public static final short TAG_REFERENCE_BLACK_WHITE = 0x214; - public static final short TAG_COPYRIGHT = (short) 0x8298; - public static final short TAG_EXIF_IFD = (short) 0x8769; - public static final short TAG_GPS_IFD = (short) 0x8825; - - public static final short ORIENTATION_TOP_LEFT = 1; - public static final short ORIENTATION_TOP_RIGHT = 2; - public static final short ORIENTATION_BOTTOM_LEFT = 3; - public static final short ORIENTATION_BOTTOM_RIGHT = 4; - public static final short ORIENTATION_LEFT_TOP = 5; - public static final short ORIENTATION_RIGHT_TOP = 6; - public static final short ORIENTATION_LEFT_BOTTOM = 7; - public static final short ORIENTATION_RIGHT_BOTTOM = 8; - - public static final short Y_CB_CR_POSITIONING_CENTERED = 1; - public static final short Y_CB_CR_POSITIONING_CO_SITED = 2; - - public static final short COMPRESSION_UNCOMPRESSION = 1; - public static final short COMPRESSION_JPEG = 6; - - public static final short RESOLUTION_UNIT_INCHES = 2; - public static final short RESOLUTION_UNIT_CENTIMETERS = 3; - - public static final short PHOTOMETRIC_INTERPRETATION_RGB = 2; - public static final short PHOTOMETRIC_INTERPRETATION_YCBCR = 6; - - public static final short PLANAR_CONFIGURATION_CHUNKY = 1; - public static final short PLANAR_CONFIGURATION_PLANAR = 2; - } - - public static interface EXIF_TAG { - public static final short TAG_EXPOSURE_TIME = (short) 0x829A; - public static final short TAG_F_NUMBER = (short) 0x829D; - public static final short TAG_EXPOSURE_PROGRAM = (short) 0x8822; - public static final short TAG_SPECTRAL_SENSITIVITY = (short) 0x8824; - public static final short TAG_ISO_SPEED_RATINGS = (short) 0x8827; - public static final short TAG_OECF = (short) 0x8828; - public static final short TAG_EXIF_VERSION = (short) 0x9000; - public static final short TAG_DATE_TIME_ORIGINAL = (short) 0x9003; - public static final short TAG_DATE_TIME_DIGITIZED = (short) 0x9004; - public static final short TAG_COMPONENTS_CONFIGURATION = (short) 0x9101; - public static final short TAG_COMPRESSED_BITS_PER_PIXEL = (short) 0x9102; - public static final short TAG_SHUTTER_SPEED = (short) 0x9201; - public static final short TAG_APERTURE_VALUE = (short) 0x9202; - public static final short TAG_BRIGHTNESS_VALUE = (short) 0x9203; - public static final short TAG_EXPOSURE_BIAS_VALUE = (short) 0x9204; - public static final short TAG_MAX_APERTURE_VALUE = (short) 0x9205; - public static final short TAG_SUBJECT_DISTANCE = (short) 0x9206; - public static final short TAG_METERING_MODE = (short) 0x9207; - public static final short TAG_LIGHT_SOURCE = (short) 0x9208; - public static final short TAG_FLASH = (short) 0x9209; - public static final short TAG_FOCAL_LENGTH = (short) 0x920A; - public static final short TAG_SUBJECT_AREA = (short) 0x9214; - public static final short TAG_MARER_NOTE = (short) 0x927C; - public static final short TAG_USER_COMMENT = (short) 0x9286; - public static final short TAG_SUB_SEC_TIME = (short) 0x9290; - public static final short TAG_SUB_SEC_TIME_ORIGINAL = (short) 0x9291; - public static final short TAG_SUB_SEC_TIME_DIGITIZED = (short) 0x9292; - public static final short TAG_FLASHPIX_VERSION = (short) 0xA000; - public static final short TAG_COLOR_SPACE = (short) 0xA001; - public static final short TAG_PIXEL_X_DIMENSION = (short) 0xA002; - public static final short TAG_PIXEL_Y_DIMENSION = (short) 0xA003; - public static final short TAG_RELATED_SOUND_FILE = (short) 0xA004; - public static final short TAG_INTEROPERABILITY_IFD = (short) 0xA005; - public static final short TAG_FLASH_ENERGY = (short) 0xA20B; - public static final short TAG_SPATIAL_FREQUENCY_REPSONSE = (short) 0xA20C; - public static final short TAG_FOCAL_PLANE_X_RESOLUTION = (short) 0xA20E; - public static final short TAG_FOCAL_PLANE_Y_RESOLUTION = (short) 0xA20F; - public static final short TAG_FOCAL_PLANE_RESOLUTION_UNIT = (short) 0xA210; - public static final short TAG_SUBJECT_LOCATION = (short) 0xA214; - public static final short TAG_EXPOSURE_INDEX = (short) 0xA215; - public static final short TAG_SENSING_METHOD = (short) 0xA217; - public static final short TAG_FILE_SOURCE = (short) 0xA300; - public static final short TAG_SCENE_TYPE = (short) 0xA301; - public static final short TAG_CFA_PATTERN = (short) 0xA302; - public static final short TAG_CUSTOM_RENDERED = (short) 0xA401; - public static final short TAG_EXPOSURE_MODE = (short) 0xA402; - public static final short TAG_WHITH_BALANCE = (short) 0xA403; - public static final short TAG_DIGITAL_ZOOM_RATIO = (short) 0xA404; - public static final short TAG_FOCAL_LENGTH_IN_35_MM_FILE = (short) 0xA405; - public static final short TAG_SCENE_CAPTURE_TYPE = (short) 0xA406; - public static final short TAG_GAIN_CONTROL = (short) 0xA407; - public static final short TAG_CONTRAST = (short) 0xA408; - public static final short TAG_SATURATION = (short) 0xA409; - public static final short TAG_SHARPNESS = (short) 0xA40A; - public static final short TAG_DEVICE_SETTING_DESCRIPTION = (short) 0xA40B; - public static final short TAG_SUBJECT_DISTANCE_RANGE = (short) 0xA40C; - public static final short TAG_IMAGE_UNIQUE_ID = (short) 0xA420; - - public static final short EXPOSURE_PROGRAM_NOT_DEFINED = 0; - public static final short EXPOSURE_PROGRAM_MANUAL = 1; - public static final short EXPOSURE_PROGRAM_NORMAL_PROGRAM = 2; - public static final short EXPOSURE_PROGRAM_APERTURE_PRIORITY = 3; - public static final short EXPOSURE_PROGRAM_SHUTTER_PRIORITY = 4; - public static final short EXPOSURE_PROGRAM_CREATIVE_PROGRAM = 5; - public static final short EXPOSURE_PROGRAM_ACTION_PROGRAM = 6; - public static final short EXPOSURE_PROGRAM_PROTRAIT_MODE = 7; - public static final short EXPOSURE_PROGRAM_LANDSCAPE_MODE = 8; - - public static final short METERING_MODE_UNKNOWN = 0; - public static final short METERING_MODE_AVERAGE = 1; - public static final short METERING_MODE_CENTER_WEIGHTED_AVERAGE = 2; - public static final short METERING_MODE_SPOT = 3; - public static final short METERING_MODE_MULTISPOT = 4; - public static final short METERING_MODE_PATTERN = 5; - public static final short METERING_MODE_PARTAIL = 6; - public static final short METERING_MODE_OTHER = 255; - - // Flash flag + // Tiff Tags + public static final short TAG_IMAGE_WIDTH = 0x100; + /* + * The height of the image. + */ + public static final short TAG_IMAGE_LENGTH = 0x101; + public static final short TAG_BITS_PER_SAMPLE = 0x102; + public static final short TAG_COMPRESSION = 0x103; + public static final short TAG_PHOTOMETRIC_INTERPRETATION = 0x106; + public static final short TAG_IMAGE_DESCRIPTION = 0x10E; + public static final short TAG_MAKE = 0x10F; + public static final short TAG_MODEL = 0x110; + public static final short TAG_STRIP_OFFSETS = 0x111; + public static final short TAG_ORIENTATION = 0x112; + public static final short TAG_SAMPLES_PER_PIXEL = 0x115; + public static final short TAG_ROWS_PER_STRIP = 0x116; + public static final short TAG_STRIP_BYTE_COUNTS = 0x117; + public static final short TAG_X_RESOLUTION = 0x11A; + public static final short TAG_Y_RESOLUTION = 0x11B; + public static final short TAG_PLANAR_CONFIGURATION = 0x11C; + public static final short TAG_RESOLUTION_UNIT = 0x128; + public static final short TAG_TRANSFER_FUNCTION = 0x12D; + public static final short TAG_SOFTWARE = 0x131; + public static final short TAG_DATE_TIME = 0x132; + public static final short TAG_ARTIST = 0x13B; + public static final short TAG_WHITE_POINT = 0x13E; + public static final short TAG_PRIMARY_CHROMATICITIES = 0x13F; + public static final short TAG_JPEG_INTERCHANGE_FORMAT = 0x201; + public static final short TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = 0x202; + public static final short TAG_Y_CB_CR_COEFFICIENTS = 0x211; + public static final short TAG_Y_CB_CR_SUB_SAMPLING = 0x212; + public static final short TAG_Y_CB_CR_POSITIONING = 0x213; + public static final short TAG_REFERENCE_BLACK_WHITE = 0x214; + public static final short TAG_COPYRIGHT = (short) 0x8298; + public static final short TAG_EXIF_IFD = (short) 0x8769; + public static final short TAG_GPS_IFD = (short) 0x8825; + + // Exif Tags + public static final short TAG_EXPOSURE_TIME = (short) 0x829A; + public static final short TAG_F_NUMBER = (short) 0x829D; + public static final short TAG_EXPOSURE_PROGRAM = (short) 0x8822; + public static final short TAG_SPECTRAL_SENSITIVITY = (short) 0x8824; + public static final short TAG_ISO_SPEED_RATINGS = (short) 0x8827; + public static final short TAG_OECF = (short) 0x8828; + public static final short TAG_EXIF_VERSION = (short) 0x9000; + public static final short TAG_DATE_TIME_ORIGINAL = (short) 0x9003; + public static final short TAG_DATE_TIME_DIGITIZED = (short) 0x9004; + public static final short TAG_COMPONENTS_CONFIGURATION = (short) 0x9101; + public static final short TAG_COMPRESSED_BITS_PER_PIXEL = (short) 0x9102; + public static final short TAG_SHUTTER_SPEED = (short) 0x9201; + public static final short TAG_APERTURE_VALUE = (short) 0x9202; + public static final short TAG_BRIGHTNESS_VALUE = (short) 0x9203; + public static final short TAG_EXPOSURE_BIAS_VALUE = (short) 0x9204; + public static final short TAG_MAX_APERTURE_VALUE = (short) 0x9205; + public static final short TAG_SUBJECT_DISTANCE = (short) 0x9206; + public static final short TAG_METERING_MODE = (short) 0x9207; + public static final short TAG_LIGHT_SOURCE = (short) 0x9208; + public static final short TAG_FLASH = (short) 0x9209; + public static final short TAG_FOCAL_LENGTH = (short) 0x920A; + public static final short TAG_SUBJECT_AREA = (short) 0x9214; + public static final short TAG_MARER_NOTE = (short) 0x927C; + public static final short TAG_USER_COMMENT = (short) 0x9286; + public static final short TAG_SUB_SEC_TIME = (short) 0x9290; + public static final short TAG_SUB_SEC_TIME_ORIGINAL = (short) 0x9291; + public static final short TAG_SUB_SEC_TIME_DIGITIZED = (short) 0x9292; + public static final short TAG_FLASHPIX_VERSION = (short) 0xA000; + public static final short TAG_COLOR_SPACE = (short) 0xA001; + public static final short TAG_PIXEL_X_DIMENSION = (short) 0xA002; + public static final short TAG_PIXEL_Y_DIMENSION = (short) 0xA003; + public static final short TAG_RELATED_SOUND_FILE = (short) 0xA004; + public static final short TAG_INTEROPERABILITY_IFD = (short) 0xA005; + public static final short TAG_FLASH_ENERGY = (short) 0xA20B; + public static final short TAG_SPATIAL_FREQUENCY_REPSONSE = (short) 0xA20C; + public static final short TAG_FOCAL_PLANE_X_RESOLUTION = (short) 0xA20E; + public static final short TAG_FOCAL_PLANE_Y_RESOLUTION = (short) 0xA20F; + public static final short TAG_FOCAL_PLANE_RESOLUTION_UNIT = (short) 0xA210; + public static final short TAG_SUBJECT_LOCATION = (short) 0xA214; + public static final short TAG_EXPOSURE_INDEX = (short) 0xA215; + public static final short TAG_SENSING_METHOD = (short) 0xA217; + public static final short TAG_FILE_SOURCE = (short) 0xA300; + public static final short TAG_SCENE_TYPE = (short) 0xA301; + public static final short TAG_CFA_PATTERN = (short) 0xA302; + public static final short TAG_CUSTOM_RENDERED = (short) 0xA401; + public static final short TAG_EXPOSURE_MODE = (short) 0xA402; + public static final short TAG_WHITE_BALANCE = (short) 0xA403; + public static final short TAG_DIGITAL_ZOOM_RATIO = (short) 0xA404; + public static final short TAG_FOCAL_LENGTH_IN_35_MM_FILE = (short) 0xA405; + public static final short TAG_SCENE_CAPTURE_TYPE = (short) 0xA406; + public static final short TAG_GAIN_CONTROL = (short) 0xA407; + public static final short TAG_CONTRAST = (short) 0xA408; + public static final short TAG_SATURATION = (short) 0xA409; + public static final short TAG_SHARPNESS = (short) 0xA40A; + public static final short TAG_DEVICE_SETTING_DESCRIPTION = (short) 0xA40B; + public static final short TAG_SUBJECT_DISTANCE_RANGE = (short) 0xA40C; + public static final short TAG_IMAGE_UNIQUE_ID = (short) 0xA420; + + // GPS tags + public static final short TAG_GPS_VERSION_ID = 0; + public static final short TAG_GPS_LATITUDE_REF = 1; + public static final short TAG_GPS_LATITUDE = 2; + public static final short TAG_GPS_LONGITUDE_REF = 3; + public static final short TAG_GPS_LONGITUDE = 4; + public static final short TAG_GPS_ALTITUDE_REF = 5; + public static final short TAG_GPS_ALTITUDE = 6; + public static final short TAG_GPS_TIME_STAMP = 7; + public static final short TAG_GPS_SATTELLITES = 8; + public static final short TAG_GPS_STATUS = 9; + public static final short TAG_GPS_MEASURE_MODE = 10; + public static final short TAG_GPS_DOP = 11; + public static final short TAG_GPS_SPEED_REF = 12; + public static final short TAG_GPS_SPEED = 13; + public static final short TAG_GPS_TRACK_REF = 14; + public static final short TAG_GPS_TRACK = 15; + public static final short TAG_GPS_IMG_DIRECTION_REF = 16; + public static final short TAG_GPS_IMG_DIRECTION = 17; + public static final short TAG_GPS_MAP_DATUM = 18; + public static final short TAG_GPS_DEST_LATITUDE_REF = 19; + public static final short TAG_GPS_DEST_LATITUDE = 20; + public static final short TAG_GPS_DEST_LONGITUDE_REF = 21; + public static final short TAG_GPS_DEST_LONGITUDE = 22; + public static final short TAG_GPS_DEST_BEARING_REF = 23; + public static final short TAG_GPS_DEST_BEARING = 24; + public static final short TAG_GPS_DEST_DISTANCE_REF = 25; + public static final short TAG_GPS_DEST_DISTANCE = 26; + public static final short TAG_GPS_PROCESSING_METHOD = 27; + public static final short TAG_GPS_AREA_INFORMATION = 28; + public static final short TAG_GPS_DATA_STAMP = 29; + public static final short TAG_GPS_DIFFERENTIAL = 30; + + //Interoperability tag + public static final short TAG_INTEROPERABILITY_INDEX = 1; + + /** + * Constants for {@link #TAG_ORIENTATION} + */ + public static interface Orientation { + public static final short TOP_LEFT = 1; + public static final short TOP_RIGHT = 2; + public static final short BOTTOM_LEFT = 3; + public static final short BOTTOM_RIGHT = 4; + public static final short LEFT_TOP = 5; + public static final short RIGHT_TOP = 6; + public static final short LEFT_BOTTOM = 7; + public static final short RIGHT_BOTTOM = 8; + } + + /** + * Constants for {@link #TAG_Y_CB_CR_POSITIONING} + */ + public static interface YCbCrPositioning { + public static final short CENTERED = 1; + public static final short CO_SITED = 2; + } + + /** + * Contants for {@link #TAG_COMPRESSION} + */ + public static interface Compression { + public static final short UNCOMPRESSION = 1; + public static final short JPEG = 6; + } + + /** + * Constants for {@link #TAG_RESOLUTION_UNIT} + */ + public static interface ResolutionUnit { + public static final short INCHES = 2; + public static final short CENTIMETERS = 3; + } + + /** + * Constants for {@link #TAG_PHOTOMETRIC_INTERPRETATION} + */ + public static interface PhotometricInterpretation { + public static final short RGB = 2; + public static final short YCBCR = 6; + } + + /** + * Constants for {@link #TAG_PLANAR_CONFIGURATION} + */ + public static interface PlanarConfiguration { + public static final short CHUNKY = 1; + public static final short PLANAR = 2; + } + + /** + * Constants for {@link #TAG_EXPOSURE_PROGRAM} + */ + public static interface ExposureProgram { + public static final short NOT_DEFINED = 0; + public static final short MANUAL = 1; + public static final short NORMAL_PROGRAM = 2; + public static final short APERTURE_PRIORITY = 3; + public static final short SHUTTER_PRIORITY = 4; + public static final short CREATIVE_PROGRAM = 5; + public static final short ACTION_PROGRAM = 6; + public static final short PROTRAIT_MODE = 7; + public static final short LANDSCAPE_MODE = 8; + } + + /** + * Constants for {@link #TAG_METERING_MODE} + */ + public static interface MeteringMode { + public static final short UNKNOWN = 0; + public static final short AVERAGE = 1; + public static final short CENTER_WEIGHTED_AVERAGE = 2; + public static final short SPOT = 3; + public static final short MULTISPOT = 4; + public static final short PATTERN = 5; + public static final short PARTAIL = 6; + public static final short OTHER = 255; + } + + /** + * Constants for {@link #TAG_FLASH} As the definition in Jeita EXIF 2.2 standard, we can + * treat this constant as bitwise flag. + *

+ * e.g. + *

+ * short flash = FIRED | RETURN_STROBE_RETURN_LIGHT_DETECTED | MODE_AUTO_MODE + */ + public static interface Flash { // LSB - public static final short FLASH_DID_NOT_FIRED = 0; - public static final short FLASH_FIRED = 1; + public static final short DID_NOT_FIRED = 0; + public static final short FIRED = 1; // 1~2 bits - public static final short FLASH_RETURN_NO_STROBE_RETURN_DETECTION_FUNCTION = 0 << 1; - public static final short FLASH_RETURN_STROBE_RETURN_LIGHT_NOT_DETECTED = 2 << 1; - public static final short FLASH_RETURN_STROBE_RETURN_LIGHT_DETECTED = 3 << 1; + public static final short RETURN_NO_STROBE_RETURN_DETECTION_FUNCTION = 0 << 1; + public static final short RETURN_STROBE_RETURN_LIGHT_NOT_DETECTED = 2 << 1; + public static final short RETURN_STROBE_RETURN_LIGHT_DETECTED = 3 << 1; // 3~4 bits - public static final short FLASH_MODE_UNKNOWN = 0 << 3; - public static final short FLASH_MODE_COMPULSORY_FLASH_FIRING = 1 << 3; - public static final short FLASH_MODE_COMPULSORY_FLASH_SUPPRESSION = 2 << 3; - public static final short FLASH_MODE_AUTO_MODE = 3 << 3; + public static final short MODE_UNKNOWN = 0 << 3; + public static final short MODE_COMPULSORY_FLASH_FIRING = 1 << 3; + public static final short MODE_COMPULSORY_FLASH_SUPPRESSION = 2 << 3; + public static final short MODE_AUTO_MODE = 3 << 3; // 5 bit - public static final short FLASH_FUNCTION_PRESENT = 0 << 5; - public static final short FLASH_FUNCTION_NO_FUNCTION = 1 << 5; + public static final short FUNCTION_PRESENT = 0 << 5; + public static final short FUNCTION_NO_FUNCTION = 1 << 5; // 6 bit - public static final short FLASH_RED_EYE_REDUCTION_NO_OR_UNKNOWN = 0 << 6; - public static final short FLASH_RED_EYE_REDUCTION_SUPPORT = 1 << 6; - - public static final short COLOR_SPACE_SRGB = 1; - public static final short COLOR_SPACE_UNCALIBRATED = (short) 0xFFFF; - - public static final short EXPOSURE_MODE_AUTO_EXPOSURE = 0; - public static final short EXPOSURE_MODE_MANUAL_EXPOSURE = 1; - public static final short EXPOSURE_MODE_AUTO_BRACKET = 2; - - public static final short WHITE_BALACE_MODE_AUTO = 0; - public static final short WHITE_BALACE_MODE_MANUAL = 1; - - public static final short SCENE_CAPTURE_TYPE_STANDARD = 0; - public static final short SCENE_CAPTURE_TYPE_LANDSCAPE = 1; - public static final short SCENE_CAPTURE_TYPE_PROTRAIT = 2; - public static final short SCENE_CAPTURE_TYPE_NIGHT_SCENE = 3; - - public static final short COMPONENTS_CONFIGURATION_NOT_EXIST = 0; - public static final short COMPONENTS_CONFIGURATION_Y = 1; - public static final short COMPONENTS_CONFIGURATION_CB = 2; - public static final short COMPONENTS_CONFIGURATION_CR = 3; - public static final short COMPONENTS_CONFIGURATION_R = 4; - public static final short COMPONENTS_CONFIGURATION_G = 5; - public static final short COMPONENTS_CONFIGURATION_B = 6; - - public static final short LIGHT_SOURCE_UNKNOWN = 0; - public static final short LIGHT_SOURCE_DAYLIGHT = 1; - public static final short LIGHT_SOURCE_FLUORESCENT = 2; - public static final short LIGHT_SOURCE_TUNGSTEN = 3; - public static final short LIGHT_SOURCE_FLASH = 4; - public static final short LIGHT_SOURCE_FINE_WEATHER = 9; - public static final short LIGHT_SOURCE_CLOUDY_WEATHER = 10; - public static final short LIGHT_SOURCE_SHADE = 11; - public static final short LIGHT_SOURCE_DAYLIGHT_FLUORESCENT = 12; - public static final short LIGHT_SOURCE_DAY_WHITE_FLUORESCENT = 13; - public static final short LIGHT_SOURCE_COOL_WHITE_FLUORESCENT = 14; - public static final short LIGHT_SOURCE_WHITE_FLUORESCENT = 15; - public static final short LIGHT_SOURCE_STANDARD_LIGHT_A = 17; - public static final short LIGHT_SOURCE_STANDARD_LIGHT_B = 18; - public static final short LIGHT_SOURCE_STANDARD_LIGHT_C = 19; - public static final short LIGHT_SOURCE_D55 = 20; - public static final short LIGHT_SOURCE_D65 = 21; - public static final short LIGHT_SOURCE_D75 = 22; - public static final short LIGHT_SOURCE_D50 = 23; - public static final short LIGHT_SOURCE_ISO_STUDIO_TUNGSTEN = 24; - public static final short LIGHT_SOURCE_OTHER = 255; - - public static final short SENSING_METHOD_NOT_DEFINED = 1; - public static final short SENSING_METHOD_ONE_CHIP_COLOR = 2; - public static final short SENSING_METHOD_TWO_CHIP_COLOR = 3; - public static final short SENSING_METHOD_THREE_CHIP_COLOR = 4; - public static final short SENSING_METHOD_COLOR_SEQUENTIAL_AREA = 5; - public static final short SENSING_METHOD_TRILINEAR = 7; - public static final short SENSING_METHOD_COLOR_SEQUENTIAL_LINEAR = 8; - - public static final short FILE_SOURCE_DSC = 3; - - public static final short SCENE_TYPE_DIRECT_PHOTOGRAPHED = 1; - - public static final short GAIN_CONTROL_NONE = 0; - public static final short GAIN_CONTROL_LOW_UP = 1; - public static final short GAIN_CONTROL_HIGH_UP = 2; - public static final short GAIN_CONTROL_LOW_DOWN = 3; - public static final short GAIN_CONTROL_HIGH_DOWN = 4; - - public static final short CONTRAST_NORMAL = 0; - public static final short CONTRAST_SOFT = 1; - public static final short CONTRAST_HARD = 2; - - public static final short SATURATION_NORMAL = 0; - public static final short SATURATION_LOW = 1; - public static final short SATURATION_HIGH = 2; - - public static final short SHARPNESS_NORMAL = 0; - public static final short SHARPNESS_SOFT = 1; - public static final short SHARPNESS_HARD = 2; - - public static final short SUBJECT_DISTANCE_RANGE_UNKNOWN = 0; - public static final short SUBJECT_DISTANCE_RANGE_MACRO = 1; - public static final short SUBJECT_DISTANCE_RANGE_CLOSE_VIEW = 2; - public static final short SUBJECT_DISTANCE_RANGE_DISTANT_VIEW = 3; - } - - public static interface GPS_TAG { - public static final short TAG_GPS_VERSION_ID = 0; - public static final short TAG_GPS_LATITUDE_REF = 1; - public static final short TAG_GPS_LATITUDE = 2; - public static final short TAG_GPS_LONGITUDE_REF = 3; - public static final short TAG_GPS_LONGITUDE = 4; - public static final short TAG_GPS_ALTITUDE_REF = 5; - public static final short TAG_GPS_ALTITUDE = 6; - public static final short TAG_GPS_TIME_STAMP = 7; - public static final short TAG_GPS_SATTELLITES = 8; - public static final short TAG_GPS_STATUS = 9; - public static final short TAG_GPS_MEASURE_MODE = 10; - public static final short TAG_GPS_DOP = 11; - public static final short TAG_GPS_SPEED_REF = 12; - public static final short TAG_GPS_SPEED = 13; - public static final short TAG_GPS_TRACK_REF = 14; - public static final short TAG_GPS_TRACK = 15; - public static final short TAG_GPS_IMG_DIRECTION_REF = 16; - public static final short TAG_GPS_IMG_DIRECTION = 17; - public static final short TAG_GPS_MAP_DATUM = 18; - public static final short TAG_GPS_DEST_LATITUDE_REF = 19; - public static final short TAG_GPS_DEST_LATITUDE = 20; - public static final short TAG_GPS_DEST_LONGITUDE_REF = 21; - public static final short TAG_GPS_DEST_LONGITUDE = 22; - public static final short TAG_GPS_DEST_BEARING_REF = 23; - public static final short TAG_GPS_DEST_BEARING = 24; - public static final short TAG_GPS_DEST_DISTANCE_REF = 25; - public static final short TAG_GPS_DEST_DISTANCE = 26; - public static final short TAG_GPS_PROCESSING_METHOD = 27; - public static final short TAG_GPS_AREA_INFORMATION = 28; - public static final short TAG_GPS_DATA_STAMP = 29; - public static final short TAG_GPS_DIFFERENTIAL = 30; - - public static final String GPS_REF_NORTH = "N"; - public static final String GPS_REF_SOUTH = "S"; - - public static final String GPS_REF_EAST = "E"; - public static final String GPS_REF_WEST = "W"; - - public static final short GPS_ALTITUDE_REF_SEA_LEVEL = 0; - public static final short GPS_ALTITUDE_REF_SEA_LEVEL_NEGATIVE = 1; - - public static final String GPS_STATUS_IN_PROGRESS = "A"; - public static final String GPS_STATUS_INTEROPERABILITY = "V"; - - public static final String GPS_MEASURE_MODE_2_DIMENSIONAL = "2"; - public static final String GPS_MEASURE_MODE_3_DIMENSIONAL = "3"; - - public static final String GPS_REF_KILOMETERS = "K"; - public static final String GPS_REF_MILES = "M"; - public static final String GPS_REF_KNOTS = "N"; - - public static final String GPS_REF_TRUE_DIRECTION = "T"; - public static final String GPS_REF_MAGNETIC_DIRECTION = "M"; - } - - public static interface INTEROPERABILITY_TAG { - public static final short INTEROPERABILITY_INDEX = 1; + public static final short RED_EYE_REDUCTION_NO_OR_UNKNOWN = 0 << 6; + public static final short RED_EYE_REDUCTION_SUPPORT = 1 << 6; + } + + /** + * Constants for {@link #TAG_COLOR_SPACE} + */ + public static interface ColorSpace { + public static final short SRGB = 1; + public static final short UNCALIBRATED = (short) 0xFFFF; + } + + /** + * Constants for {@link #TAG_EXPOSURE_MODE} + */ + public static interface ExposureMode { + public static final short AUTO_EXPOSURE = 0; + public static final short MANUAL_EXPOSURE = 1; + public static final short AUTO_BRACKET = 2; + } + + /** + * Constants for {@link #TAG_WHITE_BALANCE} + */ + public static interface WhiteBalance { + public static final short AUTO = 0; + public static final short MANUAL = 1; + } + + /** + * Constants for {@link #TAG_SCENE_CAPTURE_TYPE} + */ + public static interface SceneCapture { + public static final short STANDARD = 0; + public static final short LANDSCAPE = 1; + public static final short PROTRAIT = 2; + public static final short NIGHT_SCENE = 3; + } + + /** + * Constants for {@link #TAG_COMPONENTS_CONFIGURATION} + */ + public static interface ComponentsConfiguration { + public static final short NOT_EXIST = 0; + public static final short Y = 1; + public static final short CB = 2; + public static final short CR = 3; + public static final short R = 4; + public static final short G = 5; + public static final short B = 6; + } + + /** + * Constants for {@link #TAG_LIGHT_SOURCE} + */ + public static interface LightSource { + public static final short UNKNOWN = 0; + public static final short DAYLIGHT = 1; + public static final short FLUORESCENT = 2; + public static final short TUNGSTEN = 3; + public static final short FLASH = 4; + public static final short FINE_WEATHER = 9; + public static final short CLOUDY_WEATHER = 10; + public static final short SHADE = 11; + public static final short DAYLIGHT_FLUORESCENT = 12; + public static final short DAY_WHITE_FLUORESCENT = 13; + public static final short COOL_WHITE_FLUORESCENT = 14; + public static final short WHITE_FLUORESCENT = 15; + public static final short STANDARD_LIGHT_A = 17; + public static final short STANDARD_LIGHT_B = 18; + public static final short STANDARD_LIGHT_C = 19; + public static final short D55 = 20; + public static final short D65 = 21; + public static final short D75 = 22; + public static final short D50 = 23; + public static final short ISO_STUDIO_TUNGSTEN = 24; + public static final short OTHER = 255; + } + + /** + * Constants for {@link #TAG_SENSING_METHOD} + */ + public static interface SensingMethod { + public static final short NOT_DEFINED = 1; + public static final short ONE_CHIP_COLOR = 2; + public static final short TWO_CHIP_COLOR = 3; + public static final short THREE_CHIP_COLOR = 4; + public static final short COLOR_SEQUENTIAL_AREA = 5; + public static final short TRILINEAR = 7; + public static final short COLOR_SEQUENTIAL_LINEAR = 8; + } + + /** + * Constants for {@link #TAG_FILE_SOURCE} + */ + public static interface FileSource { + public static final short DSC = 3; + } + + /** + * Constants for {@link #TAG_SCENE_TYPE} + */ + public static interface SceneType { + public static final short DIRECT_PHOTOGRAPHED = 1; + } + + /** + * Constants for {@link #TAG_GAIN_CONTROL} + */ + public static interface GainControl { + public static final short NONE = 0; + public static final short LOW_UP = 1; + public static final short HIGH_UP = 2; + public static final short LOW_DOWN = 3; + public static final short HIGH_DOWN = 4; + } + + /** + * Constants for {@link #TAG_CONTRAST} + */ + public static interface Contrast { + public static final short NORMAL = 0; + public static final short SOFT = 1; + public static final short HARD = 2; + } + + /** + * Constants for {@link #TAG_SATURATION} + */ + public static interface Saturation { + public static final short NORMAL = 0; + public static final short LOW = 1; + public static final short HIGH = 2; + } + + /** + * Constants for {@link #TAG_SHARPNESS} + */ + public static interface Sharpness { + public static final short NORMAL = 0; + public static final short SOFT = 1; + public static final short HARD = 2; + } + + /** + * Constants for {@link #TAG_SUBJECT_DISTANCE} + */ + public static interface SubjectDistance { + public static final short UNKNOWN = 0; + public static final short MACRO = 1; + public static final short CLOSE_VIEW = 2; + public static final short DISTANT_VIEW = 3; + } + + /** + * Constants for {@link #TAG_GPS_LATITUDE_REF}, {@link #TAG_GPS_DEST_LATITUDE_REF} + */ + public static interface GpsLatitudeRef { + public static final String NORTH = "N"; + public static final String SOUTH = "S"; + } + + /** + * Constants for {@link #TAG_GPS_LONGITUDE_REF}, {@link #TAG_GPS_DEST_LONGITUDE_REF} + */ + public static interface GpsLongitudeRef { + public static final String EAST = "E"; + public static final String WEST = "W"; + } + + /** + * Constants for {@link #TAG_GPS_ALTITUDE_REF} + */ + public static interface GpsAltitudeRef { + public static final short SEA_LEVEL = 0; + public static final short SEA_LEVEL_NEGATIVE = 1; + } + + /** + * Constants for {@link #TAG_GPS_STATUS} + */ + public static interface GpsStatus { + public static final String IN_PROGRESS = "A"; + public static final String INTEROPERABILITY = "V"; + } + + /** + * Constants for {@link #TAG_GPS_MEASURE_MODE} + */ + public static interface GpsMeasureMode { + public static final String MODE_2_DIMENSIONAL = "2"; + public static final String MODE_3_DIMENSIONAL = "3"; + } + + /** + * Constants for {@link #TAG_GPS_SPEED_REF}, {@link #TAG_GPS_DEST_DISTANCE_REF} + */ + public static interface GpsSpeedRef { + public static final String KILOMETERS = "K"; + public static final String MILES = "M"; + public static final String KNOTS = "N"; + } + + /** + * Constants for {@link #TAG_GPS_TRACK_REF}, {@link #TAG_GPS_IMG_DIRECTION_REF}, + * {@link #TAG_GPS_DEST_BEARING_REF} + */ + public static interface GpsTrackRef { + public static final String TRUE_DIRECTION = "T"; + public static final String MAGNETIC_DIRECTION = "M"; + } + + /** + * Constants for {@link #TAG_GPS_DIFFERENTIAL} + */ + public static interface GpsDifferential { + public static final short WITHOUT_DIFFERENTIAL_CORRECTION = 0; + public static final short DIFFERENTIAL_CORRECTION_APPLIED = 1; } public static final short TYPE_UNSIGNED_BYTE = 1; @@ -674,16 +836,16 @@ public class ExifTag { } /** - * Returns true if the ID is one of the following: {@link TIFF_TAG#TAG_EXIF_IFD}, - * {@link TIFF_TAG#TAG_GPS_IFD}, {@link TIFF_TAG#TAG_JPEG_INTERCHANGE_FORMAT}, - * {@link TIFF_TAG#TAG_STRIP_OFFSETS}, {@link EXIF_TAG#TAG_INTEROPERABILITY_IFD} + * Returns true if the ID is one of the following: {@link #TAG_EXIF_IFD}, + * {@link #TAG_GPS_IFD}, {@link #TAG_JPEG_INTERCHANGE_FORMAT}, + * {@link #TAG_STRIP_OFFSETS}, {@link #TAG_INTEROPERABILITY_IFD} */ public static boolean isOffsetTag(short tagId) { - return tagId == ExifTag.TIFF_TAG.TAG_EXIF_IFD - || tagId == ExifTag.TIFF_TAG.TAG_GPS_IFD - || tagId == ExifTag.TIFF_TAG.TAG_JPEG_INTERCHANGE_FORMAT - || tagId == ExifTag.TIFF_TAG.TAG_STRIP_OFFSETS - || tagId == ExifTag.EXIF_TAG.TAG_INTEROPERABILITY_IFD; + return tagId == TAG_EXIF_IFD + || tagId == TAG_GPS_IFD + || tagId == TAG_JPEG_INTERCHANGE_FORMAT + || tagId == TAG_STRIP_OFFSETS + || tagId == TAG_INTEROPERABILITY_IFD; } @Override diff --git a/tests/src/com/android/gallery3d/exif/ExifParserTest.java b/tests/src/com/android/gallery3d/exif/ExifParserTest.java index e967e3d28..1af106f3b 100644 --- a/tests/src/com/android/gallery3d/exif/ExifParserTest.java +++ b/tests/src/com/android/gallery3d/exif/ExifParserTest.java @@ -176,7 +176,7 @@ public class ExifParserTest extends InstrumentationTestCase { break; case ExifParser.EVENT_NEW_TAG: ExifTag tag = parser.getTag(); - if (tag.getTagId() == ExifTag.TIFF_TAG.TAG_MODEL) { + if (tag.getTagId() == ExifTag.TAG_MODEL) { if (tag.hasValue()) { isTagFound = true; checkTag(tag); @@ -188,7 +188,7 @@ public class ExifParserTest extends InstrumentationTestCase { break; case ExifParser.EVENT_VALUE_OF_REGISTERED_TAG: tag = parser.getTag(); - assertEquals(ExifTag.TIFF_TAG.TAG_MODEL, tag.getTagId()); + assertEquals(ExifTag.TAG_MODEL, tag.getTagId()); checkTag(tag); isTagFound = true; break; @@ -209,8 +209,8 @@ public class ExifParserTest extends InstrumentationTestCase { switch (event) { case ExifParser.EVENT_NEW_TAG: ExifTag tag = parser.getTag(); - if (tag.getTagId() == ExifTag.TIFF_TAG.TAG_COMPRESSION) { - if (tag.getUnsignedShort(0) == ExifTag.TIFF_TAG.COMPRESSION_JPEG) { + if (tag.getTagId() == ExifTag.TAG_COMPRESSION) { + if (tag.getUnsignedShort(0) == ExifTag.Compression.JPEG) { mIsContainCompressedImage = true; } } diff --git a/tests/src/com/android/gallery3d/exif/ExifReaderTest.java b/tests/src/com/android/gallery3d/exif/ExifReaderTest.java index e4ed8ebf9..236c0aea2 100644 --- a/tests/src/com/android/gallery3d/exif/ExifReaderTest.java +++ b/tests/src/com/android/gallery3d/exif/ExifReaderTest.java @@ -69,38 +69,38 @@ public class ExifReaderTest extends InstrumentationTestCase { private void checkThumbnail(ExifData exifData) { IfdData ifd1 = exifData.getIfdData(IfdId.TYPE_IFD_1); if (ifd1 != null) { - if (ifd1.getTag(ExifTag.TIFF_TAG.TAG_COMPRESSION).getUnsignedShort(0) == - ExifTag.TIFF_TAG.COMPRESSION_JPEG) { + if (ifd1.getTag(ExifTag.TAG_COMPRESSION).getUnsignedShort(0) == + ExifTag.Compression.JPEG) { assertTrue(exifData.hasCompressedThumbnail()); byte[] thumbnail = exifData.getCompressedThumbnail(); assertTrue(BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length) != null); } else { // Try to check the strip count with the formula provided by EXIF spec. - int planarType = ExifTag.TIFF_TAG.PLANAR_CONFIGURATION_CHUNKY; - ExifTag planarTag = ifd1.getTag(ExifTag.TIFF_TAG.TAG_PLANAR_CONFIGURATION); + int planarType = ExifTag.PlanarConfiguration.CHUNKY; + ExifTag planarTag = ifd1.getTag(ExifTag.TAG_PLANAR_CONFIGURATION); if (planarTag != null) { planarType = planarTag.getUnsignedShort(0); } - ExifTag heightTag = ifd1.getTag(ExifTag.TIFF_TAG.TAG_IMAGE_HEIGHT); - ExifTag rowPerStripTag = ifd1.getTag(ExifTag.TIFF_TAG.TAG_ROWS_PER_STRIP); + ExifTag heightTag = ifd1.getTag(ExifTag.TAG_IMAGE_LENGTH); + ExifTag rowPerStripTag = ifd1.getTag(ExifTag.TAG_ROWS_PER_STRIP); int imageLength = getUnsignedIntOrShort(heightTag); int rowsPerStrip = getUnsignedIntOrShort(rowPerStripTag); int stripCount = ifd1.getTag( - ExifTag.TIFF_TAG.TAG_STRIP_OFFSETS).getComponentCount(); + ExifTag.TAG_STRIP_OFFSETS).getComponentCount(); - if (planarType == ExifTag.TIFF_TAG.PLANAR_CONFIGURATION_CHUNKY) { + if (planarType == ExifTag.PlanarConfiguration.CHUNKY) { assertTrue(stripCount == (imageLength + rowsPerStrip - 1) / rowsPerStrip); } else { - ExifTag samplePerPixelTag = ifd1.getTag(ExifTag.TIFF_TAG.TAG_SAMPLES_PER_PIXEL); + ExifTag samplePerPixelTag = ifd1.getTag(ExifTag.TAG_SAMPLES_PER_PIXEL); int samplePerPixel = samplePerPixelTag.getUnsignedShort(0); assertTrue(stripCount == (imageLength + rowsPerStrip - 1) / rowsPerStrip * samplePerPixel); } for (int i = 0; i < stripCount; i++) { - ExifTag byteCountTag = ifd1.getTag(ExifTag.TIFF_TAG.TAG_STRIP_BYTE_COUNTS); + ExifTag byteCountTag = ifd1.getTag(ExifTag.TAG_STRIP_BYTE_COUNTS); if (byteCountTag.getDataType() == ExifTag.TYPE_UNSIGNED_SHORT) { assertEquals(byteCountTag.getUnsignedShort(i), exifData.getStrip(i).length); } else { -- cgit v1.2.3