Loading core/java/android/hardware/camera2/impl/CameraMetadataNative.java +25 −4 Original line number Original line Diff line number Diff line Loading @@ -93,7 +93,7 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { @Override @Override public <T> T get(Key<T> key) { public <T> T get(Key<T> key) { if (key == CaptureResult.STATISTICS_FACES) { if (key.equals(CaptureResult.STATISTICS_FACES)) { /** /** * FIXME: Workaround for HAL bug that's missing FACE_DETECT_MODE * FIXME: Workaround for HAL bug that's missing FACE_DETECT_MODE */ */ Loading Loading @@ -452,10 +452,12 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { // and managed sides. // and managed sides. @SuppressWarnings("unchecked") @SuppressWarnings("unchecked") private <T> T getOverride(Key<T> key) { private <T> T getOverride(Key<T> key) { if (key == CameraCharacteristics.SCALER_AVAILABLE_FORMATS) { if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_FORMATS)) { return (T) getAvailableFormats(); return (T) getAvailableFormats(); } else if (key == CaptureResult.STATISTICS_FACES) { } else if (key.equals(CaptureResult.STATISTICS_FACES)) { return (T) getFaces(); return (T) getFaces(); } else if (key.equals(CaptureResult.STATISTICS_FACE_RECTANGLES)) { return (T) fixFaceRectangles(); } } // For other keys, get() falls back to getBase() // For other keys, get() falls back to getBase() Loading Loading @@ -536,6 +538,25 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { return faces; return faces; } } // Face rectangles are defined as (left, top, right, bottom) instead of // (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() { Rect[] faceRectangles = getBase(CaptureResult.STATISTICS_FACE_RECTANGLES); if (faceRectangles == null) return null; Rect[] fixedFaceRectangles = new Rect[faceRectangles.length]; for (int i = 0; i < faceRectangles.length; i++) { fixedFaceRectangles[i] = new Rect( faceRectangles[i].left, faceRectangles[i].top, faceRectangles[i].right - faceRectangles[i].left, faceRectangles[i].bottom - faceRectangles[i].top); } return fixedFaceRectangles; } private <T> void setBase(Key<T> key, T value) { private <T> void setBase(Key<T> key, T value) { int tag = key.getTag(); int tag = key.getTag(); Loading @@ -559,7 +580,7 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { // Set the camera metadata override. // Set the camera metadata override. private <T> boolean setOverride(Key<T> key, T value) { private <T> boolean setOverride(Key<T> key, T value) { if (key == CameraCharacteristics.SCALER_AVAILABLE_FORMATS) { if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_FORMATS)) { return setAvailableFormats((int[]) value); return setAvailableFormats((int[]) value); } } Loading Loading
core/java/android/hardware/camera2/impl/CameraMetadataNative.java +25 −4 Original line number Original line Diff line number Diff line Loading @@ -93,7 +93,7 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { @Override @Override public <T> T get(Key<T> key) { public <T> T get(Key<T> key) { if (key == CaptureResult.STATISTICS_FACES) { if (key.equals(CaptureResult.STATISTICS_FACES)) { /** /** * FIXME: Workaround for HAL bug that's missing FACE_DETECT_MODE * FIXME: Workaround for HAL bug that's missing FACE_DETECT_MODE */ */ Loading Loading @@ -452,10 +452,12 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { // and managed sides. // and managed sides. @SuppressWarnings("unchecked") @SuppressWarnings("unchecked") private <T> T getOverride(Key<T> key) { private <T> T getOverride(Key<T> key) { if (key == CameraCharacteristics.SCALER_AVAILABLE_FORMATS) { if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_FORMATS)) { return (T) getAvailableFormats(); return (T) getAvailableFormats(); } else if (key == CaptureResult.STATISTICS_FACES) { } else if (key.equals(CaptureResult.STATISTICS_FACES)) { return (T) getFaces(); return (T) getFaces(); } else if (key.equals(CaptureResult.STATISTICS_FACE_RECTANGLES)) { return (T) fixFaceRectangles(); } } // For other keys, get() falls back to getBase() // For other keys, get() falls back to getBase() Loading Loading @@ -536,6 +538,25 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { return faces; return faces; } } // Face rectangles are defined as (left, top, right, bottom) instead of // (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() { Rect[] faceRectangles = getBase(CaptureResult.STATISTICS_FACE_RECTANGLES); if (faceRectangles == null) return null; Rect[] fixedFaceRectangles = new Rect[faceRectangles.length]; for (int i = 0; i < faceRectangles.length; i++) { fixedFaceRectangles[i] = new Rect( faceRectangles[i].left, faceRectangles[i].top, faceRectangles[i].right - faceRectangles[i].left, faceRectangles[i].bottom - faceRectangles[i].top); } return fixedFaceRectangles; } private <T> void setBase(Key<T> key, T value) { private <T> void setBase(Key<T> key, T value) { int tag = key.getTag(); int tag = key.getTag(); Loading @@ -559,7 +580,7 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable { // Set the camera metadata override. // Set the camera metadata override. private <T> boolean setOverride(Key<T> key, T value) { private <T> boolean setOverride(Key<T> key, T value) { if (key == CameraCharacteristics.SCALER_AVAILABLE_FORMATS) { if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_FORMATS)) { return setAvailableFormats((int[]) value); return setAvailableFormats((int[]) value); } } Loading