From 2001188be30649198972a3199a4322d6f7f5f93d Mon Sep 17 00:00:00 2001 From: Zhijun He Date: Wed, 25 Sep 2013 10:05:59 -0700 Subject: [PATCH] Camera2: Implement CameraManager#getCameraCharacteristics Bug: 10904541 Bug: 10360518 Change-Id: I1da0b0319703fda46789f15a232e56ed1d928bc3 --- core/java/android/hardware/ICameraService.aidl | 3 +++ .../android/hardware/camera2/CameraManager.java | 13 ++++++++++--- .../integration/CameraDeviceBinderTest.java | 12 ++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/core/java/android/hardware/ICameraService.aidl b/core/java/android/hardware/ICameraService.aidl index fc54828c8c684..542af6ac53f0f 100644 --- a/core/java/android/hardware/ICameraService.aidl +++ b/core/java/android/hardware/ICameraService.aidl @@ -22,6 +22,7 @@ import android.hardware.IProCameraUser; import android.hardware.IProCameraCallbacks; import android.hardware.camera2.ICameraDeviceUser; import android.hardware.camera2.ICameraDeviceCallbacks; +import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.camera2.utils.BinderHolder; import android.hardware.ICameraServiceListener; import android.hardware.CameraInfo; @@ -58,4 +59,6 @@ interface ICameraService int addListener(ICameraServiceListener listener); int removeListener(ICameraServiceListener listener); + + int getCameraCharacteristics(int cameraId, out CameraMetadataNative info); } diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index af0512e287643..798ad7b7fc13a 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -176,10 +176,17 @@ public final class CameraManager { } } - // TODO: implement and call a service function to get the capabilities on C++ side + CameraMetadataNative info = new CameraMetadataNative(); + try { + mCameraService.getCameraCharacteristics(Integer.valueOf(cameraId), info); + } catch(CameraRuntimeException e) { + throw e.asChecked(); + } catch(RemoteException e) { + // impossible + return null; + } - // TODO: get properties from service - return new CameraCharacteristics(new CameraMetadataNative()); + return new CameraCharacteristics(info); } /** diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java index 9d8489c639d34..aef61c74f976c 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java @@ -68,6 +68,7 @@ public class CameraDeviceBinderTest extends AndroidTestCase { } class IsMetadataNotEmpty extends ArgumentMatcher { + @Override public boolean matches(Object obj) { return !((CameraMetadataNative) obj).isEmpty(); } @@ -272,6 +273,17 @@ public class CameraDeviceBinderTest extends AndroidTestCase { assertNotNull(info.get(CameraCharacteristics.SCALER_AVAILABLE_FORMATS)); } + @SmallTest + public void testCameraCharacteristics() throws RemoteException { + CameraMetadataNative info = new CameraMetadataNative(); + + int status = mUtils.getCameraService().getCameraCharacteristics(mCameraId, /*out*/info); + assertEquals(CameraBinderTestUtils.NO_ERROR, status); + + assertFalse(info.isEmpty()); + assertNotNull(info.get(CameraCharacteristics.SCALER_AVAILABLE_FORMATS)); + } + @SmallTest public void testWaitUntilIdle() throws Exception { CaptureRequest.Builder builder = createDefaultBuilder(/* needStream */true);