CameraBinderTest.java revision 5717612ba9ac78021e81f5b45ca7903c318499f9
14491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin/* 24491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * Copyright (C) 2013 The Android Open Source Project 34491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * 44491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 54491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * you may not use this file except in compliance with the License. 64491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * You may obtain a copy of the License at 74491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * 84491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 94491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * 104491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * Unless required by applicable law or agreed to in writing, software 114491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 124491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * See the License for the specific language governing permissions and 144491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * limitations under the License. 154491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin */ 164491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 174491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinpackage com.android.mediaframeworktest.integration; 184491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 194491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.CameraInfo; 204491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.ICamera; 214491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.ICameraClient; 224491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.ICameraServiceListener; 232f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalaimport android.hardware.camera2.ICameraDeviceCallbacks; 242f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalaimport android.hardware.camera2.ICameraDeviceUser; 2570c2207c34cf0e6b3b383b1b1500ff5385aa51a6Eino-Ville Talvalaimport android.hardware.camera2.impl.CameraMetadataNative; 2672f9f0a96e4476ef231d5001cb30521ad4ce5b1eIgor Murashkinimport android.hardware.camera2.impl.CaptureResultExtras; 2766ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunkimport android.hardware.camera2.utils.BinderHolder; 2866ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunkimport android.hardware.camera2.utils.CameraBinderDecorator; 294491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.Binder; 304491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.IBinder; 314491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.RemoteException; 324491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.test.AndroidTestCase; 334491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.test.suitebuilder.annotation.SmallTest; 344491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.util.Log; 354491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 364491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin/** 3770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <p> 384491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * Junit / Instrumentation test case for the camera2 api 3970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </p> 4070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <p> 4170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * To run only tests in this class: 4270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </p> 434491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * 4470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <pre> 454491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * adb shell am instrument \ 4670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -e class com.android.mediaframeworktest.integration.CameraBinderTest \ 4770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner 4870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </pre> 494491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin */ 504491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinpublic class CameraBinderTest extends AndroidTestCase { 514961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin private static final int MAX_PARAMETERS_LENGTH = 100; 524961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 5370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin static String TAG = "CameraBinderTest"; 544491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 554961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin // From ICameraService.h 564961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin private static final int API_VERSION_1 = 1; 574961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin private static final int API_VERSION_2 = 2; 584961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 595717612ba9ac78021e81f5b45ca7903c318499f9Eino-Ville Talvala private static final int CAMERA_TYPE_BACKWARD_COMPATIBLE = 0; 605717612ba9ac78021e81f5b45ca7903c318499f9Eino-Ville Talvala private static final int CAMERA_TYPE_ALL = 1; 615717612ba9ac78021e81f5b45ca7903c318499f9Eino-Ville Talvala 6270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin protected CameraBinderTestUtils mUtils; 634491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 644491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public CameraBinderTest() { 654491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 664491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 6770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin @Override 684491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin protected void setUp() throws Exception { 694491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin super.setUp(); 704491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 7170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils = new CameraBinderTestUtils(getContext()); 724491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 734491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 744491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 754491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testNumberOfCameras() throws Exception { 7670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 775717612ba9ac78021e81f5b45ca7903c318499f9Eino-Ville Talvala int numCameras = mUtils.getCameraService().getNumberOfCameras(CAMERA_TYPE_ALL); 7870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue("At least this many cameras: " + mUtils.getGuessedNumCameras(), 7970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin numCameras >= mUtils.getGuessedNumCameras()); 804491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, "Number of cameras " + numCameras); 814491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 824491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 834491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 844491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testCameraInfo() throws Exception { 8570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 864491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 874491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin CameraInfo info = new CameraInfo(); 884491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin info.info.facing = -1; 894491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin info.info.orientation = -1; 904491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 9170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 9270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Camera service returned info for camera " + cameraId, 9370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().getCameraInfo(cameraId, info) == 9470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.NO_ERROR); 954491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertTrue("Facing was not set for camera " + cameraId, info.info.facing != -1); 964491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertTrue("Orientation was not set for camera " + cameraId, 974491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin info.info.orientation != -1); 984491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 994491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, "Camera " + cameraId + " info: facing " + info.info.facing 1004491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin + ", orientation " + info.info.orientation); 1014491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1024491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1034491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1044961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @SmallTest 1054961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin public void testGetLegacyParameters() throws Exception { 1064961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1074961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1084961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin String[] parameters = new String[1]; 1094961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin assertEquals("Camera service returned parameters for camera " + cameraId, 1104961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin CameraBinderTestUtils.NO_ERROR, 1114961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin mUtils.getCameraService().getLegacyParameters(cameraId, /*out*/parameters)); 1124961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin assertNotNull(parameters[0]); 1134961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin assertTrue("Parameters should have at least one character in it", 1144961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin parameters[0].length() > 0); 1154961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1164961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin int end = parameters[0].length(); 1174961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin if (end > MAX_PARAMETERS_LENGTH) { 1184961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin end = MAX_PARAMETERS_LENGTH; 1194961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1204961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1214961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin Log.v(TAG, "Camera " + cameraId + " parameters: " + parameters[0].substring(0, end)); 1224961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1234961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1244961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1254961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin /** The camera2 api is only supported on HAL3.2+ devices */ 1264961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @SmallTest 1274961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin public void testSupportsCamera2Api() throws Exception { 1284961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1294961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1304961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin int res = mUtils.getCameraService().supportsCameraApi(cameraId, API_VERSION_2); 1314961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1324961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin if (res != CameraBinderTestUtils.NO_ERROR && res != CameraBinderTestUtils.EOPNOTSUPP) { 1334961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin fail("Camera service returned bad value when queried if it supports camera2 api: " 1344961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin + res + " for camera ID " + cameraId); 1354961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1364961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1374961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin boolean supports = res == CameraBinderTestUtils.NO_ERROR; 1384961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin Log.v(TAG, "Camera " + cameraId + " supports api2: " + supports); 1394961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1404961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1414961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1424961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin /** The camera1 api is supported on *all* devices regardless of HAL version */ 1434961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @SmallTest 1444961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin public void testSupportsCamera1Api() throws Exception { 1454961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1464961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1474961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin int res = mUtils.getCameraService().supportsCameraApi(cameraId, API_VERSION_1); 1484961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin assertEquals( 1494961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin "Camera service returned bad value when queried if it supports camera1 api: " 1504961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin + res + " for camera ID " + cameraId, CameraBinderTestUtils.NO_ERROR, res); 1514961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1524961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1534961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1544491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin static abstract class DummyBase extends Binder implements android.os.IInterface { 1554491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @Override 1564491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public IBinder asBinder() { 1574491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin return this; 1584491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1594491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1604491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1614491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin static class DummyCameraClient extends DummyBase implements ICameraClient { 1624491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1634491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1644491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 1654491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testConnect() throws Exception { 16670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1674491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1684491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin ICameraClient dummyCallbacks = new DummyCameraClient(); 1694491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1704491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin String clientPackageName = getContext().getPackageName(); 1714491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 17266ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk BinderHolder holder = new BinderHolder(); 17366ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk CameraBinderDecorator.newInstance(mUtils.getCameraService()) 17466ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk .connect(dummyCallbacks, cameraId, clientPackageName, 17566ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk CameraBinderTestUtils.USE_CALLING_UID, holder); 17666ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk ICamera cameraUser = ICamera.Stub.asInterface(holder.getBinder()); 1774491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 17870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 17970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin Log.v(TAG, String.format("Camera %s connected", cameraId)); 18070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 18170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin cameraUser.disconnect(); 18270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 18370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 18470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 1854c913801141163362dd5bb7c9784c83f69c11054Zhijun He @SmallTest 1864c913801141163362dd5bb7c9784c83f69c11054Zhijun He public void testConnectLegacy() throws Exception { 1874c913801141163362dd5bb7c9784c83f69c11054Zhijun He final int CAMERA_HAL_API_VERSION_1_0 = 0x100; 1884c913801141163362dd5bb7c9784c83f69c11054Zhijun He for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1894c913801141163362dd5bb7c9784c83f69c11054Zhijun He ICamera cameraUser = null; 1904c913801141163362dd5bb7c9784c83f69c11054Zhijun He ICameraClient dummyCallbacks = new DummyCameraClient(); 1914c913801141163362dd5bb7c9784c83f69c11054Zhijun He 1924c913801141163362dd5bb7c9784c83f69c11054Zhijun He String clientPackageName = getContext().getPackageName(); 1934c913801141163362dd5bb7c9784c83f69c11054Zhijun He 1944c913801141163362dd5bb7c9784c83f69c11054Zhijun He BinderHolder holder = new BinderHolder(); 1954c913801141163362dd5bb7c9784c83f69c11054Zhijun He 1964c913801141163362dd5bb7c9784c83f69c11054Zhijun He try { 1974c913801141163362dd5bb7c9784c83f69c11054Zhijun He CameraBinderDecorator.newInstance(mUtils.getCameraService()) 1984c913801141163362dd5bb7c9784c83f69c11054Zhijun He .connectLegacy(dummyCallbacks, cameraId, CAMERA_HAL_API_VERSION_1_0, 1994c913801141163362dd5bb7c9784c83f69c11054Zhijun He clientPackageName, 2004c913801141163362dd5bb7c9784c83f69c11054Zhijun He CameraBinderTestUtils.USE_CALLING_UID, holder); 2014c913801141163362dd5bb7c9784c83f69c11054Zhijun He cameraUser = ICamera.Stub.asInterface(holder.getBinder()); 2024c913801141163362dd5bb7c9784c83f69c11054Zhijun He assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 2034c913801141163362dd5bb7c9784c83f69c11054Zhijun He 2044c913801141163362dd5bb7c9784c83f69c11054Zhijun He Log.v(TAG, String.format("Camera %s connected as HAL1 legacy device", cameraId)); 2054c913801141163362dd5bb7c9784c83f69c11054Zhijun He } catch (RuntimeException e) { 2064c913801141163362dd5bb7c9784c83f69c11054Zhijun He // Not all camera device support openLegacy. 2074c913801141163362dd5bb7c9784c83f69c11054Zhijun He Log.i(TAG, "Unable to open camera as HAL1 legacy camera device " + e); 2084c913801141163362dd5bb7c9784c83f69c11054Zhijun He } finally { 2094c913801141163362dd5bb7c9784c83f69c11054Zhijun He if (cameraUser != null) { 2104c913801141163362dd5bb7c9784c83f69c11054Zhijun He cameraUser.disconnect(); 2114c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 2124c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 2134c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 2144c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 2154c913801141163362dd5bb7c9784c83f69c11054Zhijun He 216693e21d6052b32ad7815d9c0d7bd01fd6170a608Zhijun He static class DummyCameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub { 21770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 218438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He /* 219438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * (non-Javadoc) 220438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * @see 221438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.ICameraDeviceCallbacks#onCameraError(int, 222438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.CaptureResultExtras) 223438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He */ 2244961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @Override 225acc0095bc84914d3ce41ad8298f698c37935b8a8Eino-Ville Talvala public void onDeviceError(int errorCode, CaptureResultExtras resultExtras) 226438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He throws RemoteException { 227438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He // TODO Auto-generated method stub 22870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 229e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala } 230e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala 231438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He /* 232438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * (non-Javadoc) 233438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * @see 234438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.ICameraDeviceCallbacks#onCaptureStarted( 235438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.CaptureResultExtras, long) 236438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He */ 2374961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @Override 238438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He public void onCaptureStarted(CaptureResultExtras resultExtras, long timestamp) 239438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He throws RemoteException { 240438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He // TODO Auto-generated method stub 241438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He 242e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala } 243e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala 244438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He /* 245438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * (non-Javadoc) 246438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * @see 247438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.ICameraDeviceCallbacks#onResultReceived( 248438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.impl.CameraMetadataNative, 249438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.CaptureResultExtras) 250438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He */ 2514961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @Override 252438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He public void onResultReceived(CameraMetadataNative result, CaptureResultExtras resultExtras) 253e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala throws RemoteException { 254438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He // TODO Auto-generated method stub 255438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He 256438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He } 257438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He 258438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He /* 259438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * (non-Javadoc) 260438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * @see android.hardware.camera2.ICameraDeviceCallbacks#onCameraIdle() 261438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He */ 2624961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @Override 263acc0095bc84914d3ce41ad8298f698c37935b8a8Eino-Ville Talvala public void onDeviceIdle() throws RemoteException { 264ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala // TODO Auto-generated method stub 265ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala 266ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala } 267ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala 268ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala /* 269ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala * (non-Javadoc) 270ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala * @see android.hardware.camera2.ICameraDeviceCallbacks#onPrepared() 271ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala */ 272ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala @Override 273ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala public void onPrepared(int streamId) throws RemoteException { 274438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He // TODO Auto-generated method stub 275438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He 27670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 27770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 27870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 27970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin @SmallTest 28070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin public void testConnectDevice() throws Exception { 28170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 28270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 28370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin ICameraDeviceCallbacks dummyCallbacks = new DummyCameraDeviceCallbacks(); 28470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 28570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin String clientPackageName = getContext().getPackageName(); 28670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 28766ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk BinderHolder holder = new BinderHolder(); 28866ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk CameraBinderDecorator.newInstance(mUtils.getCameraService()) 28966ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk .connectDevice(dummyCallbacks, cameraId, 29066ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk clientPackageName, CameraBinderTestUtils.USE_CALLING_UID, holder); 29166ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk ICameraDeviceUser cameraUser = ICameraDeviceUser.Stub.asInterface(holder.getBinder()); 2924491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 2934491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 2944491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, String.format("Camera %s connected", cameraId)); 2954491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 2964491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin cameraUser.disconnect(); 2974491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 2984491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 2994491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 300693e21d6052b32ad7815d9c0d7bd01fd6170a608Zhijun He static class DummyCameraServiceListener extends ICameraServiceListener.Stub { 3014491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @Override 3024491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void onStatusChanged(int status, int cameraId) 3034491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin throws RemoteException { 3044491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, String.format("Camera %d has status changed to 0x%x", cameraId, status)); 3054491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 306afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen public void onTorchStatusChanged(int status, String cameraId) 307afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen throws RemoteException { 308afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen Log.v(TAG, String.format("Camera %s has torch status changed to 0x%x", 309afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen cameraId, status)); 310afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen } 3114491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 3124491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 3134491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin /** 31470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <pre> 3154491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * adb shell am instrument \ 31670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testAddRemoveListeners' \ 31770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner 31870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </pre> 3194491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin */ 3204491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 3214491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testAddRemoveListeners() throws Exception { 32270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 3234491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 3244491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin ICameraServiceListener listener = new DummyCameraServiceListener(); 3254491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 32670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 32770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Listener was removed before added", 32870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().removeListener(listener) == 32970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.BAD_VALUE); 33070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 33170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue("Listener was not added", 33270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().addListener(listener) == 33370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.NO_ERROR); 33470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 33570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Listener was wrongly added again", 33670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().addListener(listener) == 33770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.ALREADY_EXISTS); 33870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 33970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 34070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Listener was not removed", 34170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().removeListener(listener) == 34270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.NO_ERROR); 34370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 34470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Listener was wrongly removed again", 34570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().removeListener(listener) == 34670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.BAD_VALUE); 3474491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 3484491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 3494491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin} 350