summaryrefslogtreecommitdiffstats
path: root/gallerycommon/src/com/android/gallery3d/exif/IfdData.java
diff options
context:
space:
mode:
Diffstat (limited to 'gallerycommon/src/com/android/gallery3d/exif/IfdData.java')
-rw-r--r--gallerycommon/src/com/android/gallery3d/exif/IfdData.java59
1 files changed, 41 insertions, 18 deletions
diff --git a/gallerycommon/src/com/android/gallery3d/exif/IfdData.java b/gallerycommon/src/com/android/gallery3d/exif/IfdData.java
index 633604940..093944aec 100644
--- a/gallerycommon/src/com/android/gallery3d/exif/IfdData.java
+++ b/gallerycommon/src/com/android/gallery3d/exif/IfdData.java
@@ -30,7 +30,10 @@ class IfdData {
private final int mIfdId;
private final Map<Short, ExifTag> mExifTags = new HashMap<Short, ExifTag>();
private int mOffsetToNextIfd = 0;
-
+ private static final int[] sIfds = {
+ IfdId.TYPE_IFD_0, IfdId.TYPE_IFD_1, IfdId.TYPE_IFD_EXIF,
+ IfdId.TYPE_IFD_INTEROPERABILITY, IfdId.TYPE_IFD_GPS
+ };
/**
* Creates an IfdData with given IFD ID.
*
@@ -40,14 +43,18 @@ class IfdData {
* @see IfdId#TYPE_IFD_GPS
* @see IfdId#TYPE_IFD_INTEROPERABILITY
*/
- public IfdData(int ifdId) {
+ IfdData(int ifdId) {
mIfdId = ifdId;
}
+ static protected int[] getIfds() {
+ return sIfds;
+ }
+
/**
* Get a array the contains all {@link ExifTag} in this IFD.
*/
- public ExifTag[] getAllTags() {
+ protected ExifTag[] getAllTags() {
return mExifTags.values().toArray(new ExifTag[mExifTags.size()]);
}
@@ -60,70 +67,86 @@ class IfdData {
* @see IfdId#TYPE_IFD_GPS
* @see IfdId#TYPE_IFD_INTEROPERABILITY
*/
- public int getId() {
+ protected int getId() {
return mIfdId;
}
/**
- * Gets the {@link ExifTag} with given tag id. Return null if there is no such tag.
+ * Gets the {@link ExifTag} with given tag id. Return null if there is no
+ * such tag.
*/
- public ExifTag getTag(short tagId) {
+ protected ExifTag getTag(short tagId) {
return mExifTags.get(tagId);
}
/**
* Adds or replaces a {@link ExifTag}.
*/
- public void setTag(ExifTag tag) {
- mExifTags.put(tag.getTagId(), tag);
+ protected ExifTag setTag(ExifTag tag) {
+ tag.setIfd(mIfdId);
+ return mExifTags.put(tag.getTagId(), tag);
+ }
+
+ protected boolean checkCollision(short tagId) {
+ return mExifTags.get(tagId) != null;
}
/**
* Removes the tag of the given ID
*/
- public void removeTag(short tagId) {
+ protected void removeTag(short tagId) {
mExifTags.remove(tagId);
}
/**
* Gets the tags count in the IFD.
*/
- public int getTagCount() {
+ protected int getTagCount() {
return mExifTags.size();
}
/**
* Sets the offset of next IFD.
*/
- void setOffsetToNextIfd(int offset) {
+ protected void setOffsetToNextIfd(int offset) {
mOffsetToNextIfd = offset;
}
/**
* Gets the offset of next IFD.
*/
- int getOffsetToNextIfd() {
+ protected int getOffsetToNextIfd() {
return mOffsetToNextIfd;
}
/**
- * Returns true if all tags in this two IFDs are equal. Note that tags of IFDs offset or
- * thumbnail offset will be ignored.
+ * Returns true if all tags in this two IFDs are equal. Note that tags of
+ * IFDs offset or thumbnail offset will be ignored.
*/
@Override
public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
if (obj instanceof IfdData) {
IfdData data = (IfdData) obj;
if (data.getId() == mIfdId && data.getTagCount() == getTagCount()) {
ExifTag[] tags = data.getAllTags();
- for (ExifTag tag: tags) {
- if (ExifTag.isOffsetTag(tag.getTagId())) continue;
+ for (ExifTag tag : tags) {
+ if (ExifInterface.isOffsetTag(tag.getTagId())) {
+ continue;
+ }
ExifTag tag2 = mExifTags.get(tag.getTagId());
- if (!tag.equals(tag2)) return false;
+ if (!tag.equals(tag2)) {
+ return false;
+ }
}
return true;
}
}
return false;
}
-} \ No newline at end of file
+}