diff options
| author | Zhijun He <zhijunhe@google.com> | 2013-11-13 13:16:56 -0800 |
|---|---|---|
| committer | Zhijun He <zhijunhe@google.com> | 2013-11-14 12:11:32 -0800 |
| commit | 2f1680be3d5963dc1026c8e5bcda491b77d71734 (patch) | |
| tree | ab5a13b3930d3f538ed131b4363a83aaab72afbe | |
| parent | e77a040f3adcdbfc8fea265126c2d27f73c01243 (diff) | |
| download | frameworks_base-2f1680be3d5963dc1026c8e5bcda491b77d71734.zip frameworks_base-2f1680be3d5963dc1026c8e5bcda491b77d71734.tar.gz frameworks_base-2f1680be3d5963dc1026c8e5bcda491b77d71734.tar.bz2 | |
Camera2: Fix metadata unit test failures
The get/set override for special cases broke the metadata unit test, add proper
handling to fix the test failures.
Also make the key equals check both names and types.
Bug: 11259962
Change-Id: I00ff53115e7043212035cc4306e0481f9d113747
| -rw-r--r-- | core/java/android/hardware/camera2/CameraMetadata.java | 2 | ||||
| -rw-r--r-- | core/java/android/hardware/camera2/impl/CameraMetadataNative.java | 47 |
2 files changed, 42 insertions, 7 deletions
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index 1d6ff7d..5d0bb33 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -168,7 +168,7 @@ public abstract class CameraMetadata { Key lhs = (Key) o; - return mName.equals(lhs.mName); + return mName.equals(lhs.mName) && mType.equals(lhs.mType); } /** diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java index 072c5bb..2ddcb14 100644 --- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java +++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java @@ -448,7 +448,7 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { } else if (key.equals(CaptureResult.STATISTICS_FACES)) { return (T) getFaces(); } else if (key.equals(CaptureResult.STATISTICS_FACE_RECTANGLES)) { - return (T) fixFaceRectangles(); + return (T) getFaceRectangles(); } // For other keys, get() falls back to getBase() @@ -457,12 +457,15 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { private int[] getAvailableFormats() { int[] availableFormats = getBase(CameraCharacteristics.SCALER_AVAILABLE_FORMATS); - for (int i = 0; i < availableFormats.length; i++) { - // JPEG has different value between native and managed side, need override. - if (availableFormats[i] == NATIVE_JPEG_FORMAT) { - availableFormats[i] = ImageFormat.JPEG; + if (availableFormats != null) { + for (int i = 0; i < availableFormats.length; i++) { + // JPEG has different value between native and managed side, need override. + if (availableFormats[i] == NATIVE_JPEG_FORMAT) { + availableFormats[i] = ImageFormat.JPEG; + } } } + return availableFormats; } @@ -550,7 +553,7 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { // (left, top, width, height) at the native level, so the normal Rect // conversion that does (l, t, w, h) -> (l, t, r, b) is unnecessary. Undo // that conversion here for just the faces. - private Rect[] fixFaceRectangles() { + private Rect[] getFaceRectangles() { Rect[] faceRectangles = getBase(CaptureResult.STATISTICS_FACE_RECTANGLES); if (faceRectangles == null) return null; @@ -590,6 +593,8 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { private <T> boolean setOverride(Key<T> key, T value) { if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_FORMATS)) { return setAvailableFormats((int[]) value); + } else if (key.equals(CaptureResult.STATISTICS_FACE_RECTANGLES)) { + return setFaceRectangles((Rect[]) value); } // For other keys, set() falls back to setBase(). @@ -615,6 +620,36 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { return true; } + /** + * Convert Face Rectangles from managed side to native side as they have different definitions. + * <p> + * Managed side face rectangles are defined as: left, top, width, height. + * Native side face rectangles are defined as: left, top, right, bottom. + * The input face rectangle need to be converted to native side definition when set is called. + * </p> + * + * @param faceRects Input face rectangles. + * @return true if face rectangles can be set successfully. Otherwise, Let the caller + * (setBase) to handle it appropriately. + */ + private boolean setFaceRectangles(Rect[] faceRects) { + if (faceRects == null) { + return false; + } + + Rect[] newFaceRects = new Rect[faceRects.length]; + for (int i = 0; i < newFaceRects.length; i++) { + newFaceRects[i] = new Rect( + faceRects[i].left, + faceRects[i].top, + faceRects[i].right + faceRects[i].left, + faceRects[i].bottom + faceRects[i].top); + } + + setBase(CaptureResult.STATISTICS_FACE_RECTANGLES, newFaceRects); + return true; + } + private long mMetadataPtr; // native CameraMetadata* private native long nativeAllocate(); |
