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; 225d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvalaimport android.hardware.ICameraService; 234491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.ICameraServiceListener; 242f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalaimport android.hardware.camera2.ICameraDeviceCallbacks; 252f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalaimport android.hardware.camera2.ICameraDeviceUser; 2670c2207c34cf0e6b3b383b1b1500ff5385aa51a6Eino-Ville Talvalaimport android.hardware.camera2.impl.CameraMetadataNative; 2772f9f0a96e4476ef231d5001cb30521ad4ce5b1eIgor Murashkinimport android.hardware.camera2.impl.CaptureResultExtras; 284491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.Binder; 294491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.IBinder; 304491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.RemoteException; 315d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvalaimport android.os.ServiceSpecificException; 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 875d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala CameraInfo info = mUtils.getCameraService().getCameraInfo(cameraId); 884491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertTrue("Facing was not set for camera " + cameraId, info.info.facing != -1); 894491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertTrue("Orientation was not set for camera " + cameraId, 904491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin info.info.orientation != -1); 914491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 924491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, "Camera " + cameraId + " info: facing " + info.info.facing 934491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin + ", orientation " + info.info.orientation); 944491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 954491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 964491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 974961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @SmallTest 984961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin public void testGetLegacyParameters() throws Exception { 994961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1004961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1015d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala String parameters = mUtils.getCameraService().getLegacyParameters(cameraId); 1025d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala assertNotNull(parameters); 1034961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin assertTrue("Parameters should have at least one character in it", 1045d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala parameters.length() > 0); 1054961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1065d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala int end = parameters.length(); 1074961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin if (end > MAX_PARAMETERS_LENGTH) { 1084961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin end = MAX_PARAMETERS_LENGTH; 1094961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1104961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1115d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala Log.v(TAG, "Camera " + cameraId + " parameters: " + parameters.substring(0, end)); 1124961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1134961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1144961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1154961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin /** The camera2 api is only supported on HAL3.2+ devices */ 1164961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @SmallTest 1174961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin public void testSupportsCamera2Api() throws Exception { 1184961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1194961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1205d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala boolean supports = mUtils.getCameraService().supportsCameraApi(cameraId, API_VERSION_2); 1214961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1224961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin Log.v(TAG, "Camera " + cameraId + " supports api2: " + supports); 1234961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1244961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1254961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1264961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin /** The camera1 api is supported on *all* devices regardless of HAL version */ 1274961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @SmallTest 1284961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin public void testSupportsCamera1Api() throws Exception { 1294961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1304961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1315d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala boolean supports = mUtils.getCameraService().supportsCameraApi(cameraId, API_VERSION_1); 1325d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala assertTrue( 1335d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala "Camera service returned false when queried if it supports camera1 api " + 1345d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala " for camera ID " + cameraId, supports); 1354961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1364961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin } 1374961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin 1384491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin static abstract class DummyBase extends Binder implements android.os.IInterface { 1394491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @Override 1404491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public IBinder asBinder() { 1414491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin return this; 1424491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1434491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1444491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1454491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin static class DummyCameraClient extends DummyBase implements ICameraClient { 1464491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1474491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1484491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 1494491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testConnect() throws Exception { 15070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1514491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1524491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin ICameraClient dummyCallbacks = new DummyCameraClient(); 1534491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1544491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin String clientPackageName = getContext().getPackageName(); 1554491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1565d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala ICamera cameraUser = mUtils.getCameraService() 15766ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk .connect(dummyCallbacks, cameraId, clientPackageName, 1585d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala ICameraService.USE_CALLING_UID, 1595d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala ICameraService.USE_CALLING_PID); 1604491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 16170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 16270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin Log.v(TAG, String.format("Camera %s connected", cameraId)); 16370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 16470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin cameraUser.disconnect(); 16570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 16670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 16770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 1684c913801141163362dd5bb7c9784c83f69c11054Zhijun He @SmallTest 1694c913801141163362dd5bb7c9784c83f69c11054Zhijun He public void testConnectLegacy() throws Exception { 1704c913801141163362dd5bb7c9784c83f69c11054Zhijun He final int CAMERA_HAL_API_VERSION_1_0 = 0x100; 1714c913801141163362dd5bb7c9784c83f69c11054Zhijun He for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1724c913801141163362dd5bb7c9784c83f69c11054Zhijun He ICamera cameraUser = null; 1734c913801141163362dd5bb7c9784c83f69c11054Zhijun He ICameraClient dummyCallbacks = new DummyCameraClient(); 1744c913801141163362dd5bb7c9784c83f69c11054Zhijun He 1754c913801141163362dd5bb7c9784c83f69c11054Zhijun He String clientPackageName = getContext().getPackageName(); 1764c913801141163362dd5bb7c9784c83f69c11054Zhijun He 1774c913801141163362dd5bb7c9784c83f69c11054Zhijun He try { 1785d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala cameraUser = mUtils.getCameraService() 1794c913801141163362dd5bb7c9784c83f69c11054Zhijun He .connectLegacy(dummyCallbacks, cameraId, CAMERA_HAL_API_VERSION_1_0, 1805d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala clientPackageName, 1815d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala ICameraService.USE_CALLING_UID); 1824c913801141163362dd5bb7c9784c83f69c11054Zhijun He assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 1834c913801141163362dd5bb7c9784c83f69c11054Zhijun He 1844c913801141163362dd5bb7c9784c83f69c11054Zhijun He Log.v(TAG, String.format("Camera %s connected as HAL1 legacy device", cameraId)); 1854c913801141163362dd5bb7c9784c83f69c11054Zhijun He } catch (RuntimeException e) { 1864c913801141163362dd5bb7c9784c83f69c11054Zhijun He // Not all camera device support openLegacy. 1874c913801141163362dd5bb7c9784c83f69c11054Zhijun He Log.i(TAG, "Unable to open camera as HAL1 legacy camera device " + e); 1884c913801141163362dd5bb7c9784c83f69c11054Zhijun He } finally { 1894c913801141163362dd5bb7c9784c83f69c11054Zhijun He if (cameraUser != null) { 1904c913801141163362dd5bb7c9784c83f69c11054Zhijun He cameraUser.disconnect(); 1914c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 1924c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 1934c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 1944c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 1954c913801141163362dd5bb7c9784c83f69c11054Zhijun He 196693e21d6052b32ad7815d9c0d7bd01fd6170a608Zhijun He static class DummyCameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub { 19770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 198438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He /* 199438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * (non-Javadoc) 200438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * @see 201438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.ICameraDeviceCallbacks#onCameraError(int, 202438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.CaptureResultExtras) 203438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He */ 2044961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @Override 205acc0095bc84914d3ce41ad8298f698c37935b8a8Eino-Ville Talvala public void onDeviceError(int errorCode, CaptureResultExtras resultExtras) 206438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He throws RemoteException { 207438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He // TODO Auto-generated method stub 20870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 209e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala } 210e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala 211438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He /* 212438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * (non-Javadoc) 213438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * @see 214438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.ICameraDeviceCallbacks#onCaptureStarted( 215438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.CaptureResultExtras, long) 216438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He */ 2174961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @Override 218438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He public void onCaptureStarted(CaptureResultExtras resultExtras, long timestamp) 219438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He throws RemoteException { 220438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He // TODO Auto-generated method stub 221438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He 222e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala } 223e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala 224438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He /* 225438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * (non-Javadoc) 226438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * @see 227438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.ICameraDeviceCallbacks#onResultReceived( 228438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.impl.CameraMetadataNative, 229438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * android.hardware.camera2.CaptureResultExtras) 230438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He */ 2314961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @Override 232438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He public void onResultReceived(CameraMetadataNative result, CaptureResultExtras resultExtras) 233e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala throws RemoteException { 234438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He // TODO Auto-generated method stub 235438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He 236438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He } 237438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He 238438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He /* 239438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * (non-Javadoc) 240438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He * @see android.hardware.camera2.ICameraDeviceCallbacks#onCameraIdle() 241438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He */ 2424961bc88d7bab869a5296789d26fcfa31ad5f644Igor Murashkin @Override 243acc0095bc84914d3ce41ad8298f698c37935b8a8Eino-Ville Talvala public void onDeviceIdle() throws RemoteException { 244ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala // TODO Auto-generated method stub 245ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala 246ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala } 247ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala 248ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala /* 249ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala * (non-Javadoc) 250ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala * @see android.hardware.camera2.ICameraDeviceCallbacks#onPrepared() 251ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala */ 252ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala @Override 253ad916f7fd3fbb202f2993fea04b0bdad3dcd6de6Eino-Ville Talvala public void onPrepared(int streamId) throws RemoteException { 254438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He // TODO Auto-generated method stub 255438d77e0429f78def6c0cb3c21095202c71b8220Zhijun He 25670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 2572da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen 2582da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen /* 2592da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen * (non-Javadoc) 2602da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen * @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError() 2612da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen */ 2622da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen @Override 2632da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen public void onRepeatingRequestError(long lastFrameNumber) { 2642da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen // TODO Auto-generated method stub 2652da496f1ce63548486fe28e074f6af90c970db8cChien-Yu Chen } 26670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 26770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 26870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin @SmallTest 26970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin public void testConnectDevice() throws Exception { 27070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 27170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 27270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin ICameraDeviceCallbacks dummyCallbacks = new DummyCameraDeviceCallbacks(); 27370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 27470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin String clientPackageName = getContext().getPackageName(); 27570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 2765d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala ICameraDeviceUser cameraUser = 2775d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala mUtils.getCameraService().connectDevice( 2785d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala dummyCallbacks, cameraId, 2795d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala clientPackageName, 2805d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala ICameraService.USE_CALLING_UID); 2814491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 2824491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 2834491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, String.format("Camera %s connected", cameraId)); 2844491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 2854491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin cameraUser.disconnect(); 2864491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 2874491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 2884491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 289693e21d6052b32ad7815d9c0d7bd01fd6170a608Zhijun He static class DummyCameraServiceListener extends ICameraServiceListener.Stub { 2904491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @Override 2914491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void onStatusChanged(int status, int cameraId) 2924491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin throws RemoteException { 2934491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, String.format("Camera %d has status changed to 0x%x", cameraId, status)); 2944491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 295afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen public void onTorchStatusChanged(int status, String cameraId) 296afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen throws RemoteException { 297afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen Log.v(TAG, String.format("Camera %s has torch status changed to 0x%x", 298afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen cameraId, status)); 299afa91399fd32ede17d440ec1c3321eee0426123cChien-Yu Chen } 3004491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 3014491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 3024491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin /** 30370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <pre> 3044491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * adb shell am instrument \ 30570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testAddRemoveListeners' \ 30670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner 30770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </pre> 3084491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin */ 3094491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 3104491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testAddRemoveListeners() throws Exception { 31170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 3124491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 3134491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin ICameraServiceListener listener = new DummyCameraServiceListener(); 3144491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 3155d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala try { 3165d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala mUtils.getCameraService().removeListener(listener); 3175d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala fail("Listener was removed before added"); 3185d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } catch (ServiceSpecificException e) { 3195d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala assertEquals("Listener was removed before added", 3205d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala e.errorCode, ICameraService.ERROR_ILLEGAL_ARGUMENT); 3215d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } 32270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 3235d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala mUtils.getCameraService().addListener(listener); 32470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 3255d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala try { 3265d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala mUtils.getCameraService().addListener(listener); 3275d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala fail("Listener was wrongly added again"); 3285d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } catch (ServiceSpecificException e) { 3295d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala assertEquals("Listener was wrongly added again", 3305d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala e.errorCode, ICameraService.ERROR_ALREADY_EXISTS); 3315d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } 3325d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala 3335d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala mUtils.getCameraService().removeListener(listener); 3345d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala 3355d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala try { 3365d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala mUtils.getCameraService().removeListener(listener); 3375d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala fail("Listener was wrongly removed twice"); 3385d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } catch (ServiceSpecificException e) { 3395d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala assertEquals("Listener was wrongly removed twice", 3405d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala e.errorCode, ICameraService.ERROR_ILLEGAL_ARGUMENT); 3415d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } 3424491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 3434491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 3444491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin} 345