Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2001188b authored by Zhijun He's avatar Zhijun He
Browse files

Camera2: Implement CameraManager#getCameraCharacteristics

Bug: 10904541
Bug: 10360518
Change-Id: I1da0b0319703fda46789f15a232e56ed1d928bc3
parent 6a1e32ef
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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);
}
+10 −3
Original line number Diff line number Diff line
@@ -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);
    }

    /**
+12 −0
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ public class CameraDeviceBinderTest extends AndroidTestCase {
    }

    class IsMetadataNotEmpty extends ArgumentMatcher<CameraMetadataNative> {
        @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);