diff options
3 files changed, 25 insertions, 3 deletions
diff --git a/core/java/android/hardware/ICameraService.aidl b/core/java/android/hardware/ICameraService.aidl index fc54828..542af6a 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 af0512e..798ad7b 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 9d8489c..aef61c7 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<CameraMetadataNative> { + @Override public boolean matches(Object obj) { return !((CameraMetadataNative) obj).isEmpty(); } @@ -273,6 +274,17 @@ public class CameraDeviceBinderTest extends AndroidTestCase { } @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); int requestIdStreaming = submitCameraRequest(builder.build(), /* streaming */true); |