141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi/* 241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * Copyright (C) 2012 The Android Open Source Project 341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * 441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * Licensed under the Apache License, Version 2.0 (the "License"); 541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * you may not use this file except in compliance with the License. 641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * You may obtain a copy of the License at 741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * 841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * http://www.apache.org/licenses/LICENSE-2.0 941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * 1041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * Unless required by applicable law or agreed to in writing, software 1141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * distributed under the License is distributed on an "AS IS" BASIS, 1241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * See the License for the specific language governing permissions and 1441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * limitations under the License. 1541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi */ 1641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 1741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchipackage com.android.mediaframeworktest.stress; 1841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 1941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport com.android.mediaframeworktest.MediaFrameworkTest; 20c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport com.android.mediaframeworktest.CameraTestHelper; 2141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 2241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.BufferedWriter; 2341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.File; 2441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.FileWriter; 2541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.IOException; 2641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.Writer; 2741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.util.concurrent.Semaphore; 2841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.util.concurrent.TimeUnit; 29bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchiimport java.util.List; 3041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 3141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.hardware.Camera; 32c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.hardware.Camera.Parameters; 3341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Environment; 3441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Handler; 3541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Looper; 3641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.test.ActivityInstrumentationTestCase2; 3741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.test.suitebuilder.annotation.LargeTest; 3841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.util.Log; 3941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.view.SurfaceHolder; 4041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport com.android.mediaframeworktest.CameraStressTestRunner; 4141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 4241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport junit.framework.Assert; 4341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 4441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi/** 45c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Junit / Instrumentation test case for the following camera APIs: 46c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * - camera zoom 47c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * - scene mode 4841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * 4941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * adb shell am instrument 5041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * -e class com.android.mediaframeworktest.stress.CameraStressTest 5141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * -w com.android.mediaframeworktest/.CameraStressTestRunner 5241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi */ 5341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchipublic class CameraStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 5441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 55bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi private static final int NUMBER_OF_SCENE_MODE_LOOPS = 10; 56c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi private static final int NUMBER_OF_ZOOM_LOOPS = 100; 5741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi private static final long WAIT_TIMEOUT = 10 * 1000; // 10 seconds 58bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi private static final String CAMERA_STRESS_OUTPUT = "cameraStressOutput.txt"; 5941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 60c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi private CameraTestHelper mCameraTestHelper; 6141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi private Handler mHandler; 62c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi private Thread mLooperThread; 63bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi private Writer mOutput; 64bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi 65c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi private String TAG = "CameraStressTest"; 66c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi 6741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public CameraStressTest() { 6841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi super("com.android.mediaframeworktest", MediaFrameworkTest.class); 6941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 7041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 7141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi protected void setUp() throws Exception { 7241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi final Semaphore sem = new Semaphore(0); 7341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mLooperThread = new Thread() { 7441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @Override 7541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public void run() { 7641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Log.v(TAG, "starting looper"); 7741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Looper.prepare(); 7841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mHandler = new Handler(); 7941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi sem.release(); 8041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Looper.loop(); 8141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Log.v(TAG, "quit looper"); 8241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 8341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi }; 8441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mLooperThread.start(); 8541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (!sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) { 8641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi fail("Failed to start the looper."); 8741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 8841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi getActivity(); 8941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi super.setUp(); 90bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi 91c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper = new CameraTestHelper(); 92c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi File stressOutFile = new File(String.format("%s/%s", 93c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Environment.getExternalStorageDirectory(), CAMERA_STRESS_OUTPUT)); 94bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput = new BufferedWriter(new FileWriter(stressOutFile, true)); 95c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write(this.getName() + "\n"); 9641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 9741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 9841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @Override 9941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi protected void tearDown() throws Exception { 10041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (mHandler != null) { 10141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mHandler.getLooper().quit(); 10241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mHandler = null; 10341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 10441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (mLooperThread != null) { 10541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mLooperThread.join(WAIT_TIMEOUT); 10641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (mLooperThread.isAlive()) { 10741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi fail("Failed to stop the looper."); 10841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 10941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mLooperThread = null; 11041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 111bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput.write("\n\n"); 112bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput.close(); 11341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi super.tearDown(); 11441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 11541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 11641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi private void runOnLooper(final Runnable command) throws InterruptedException { 11741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi final Semaphore sem = new Semaphore(0); 11841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mHandler.post(new Runnable() { 11941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @Override 12041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public void run() { 12141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi try { 12241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi command.run(); 12341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } finally { 12441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi sem.release(); 12541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 12641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 12741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi }); 12841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (!sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) { 12941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi fail("Failed to run the command on the looper."); 13041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 13141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 13241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 133c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi /** 134c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Stress test iterating on the various scene modes (action, night, party, etc.) 135c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi */ 136c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi @LargeTest 137c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi public void testStressCameraSceneModes() throws Exception { 138c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi try { 139c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 140c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Parameters params = mCameraTestHelper.getCameraParameters(); 141c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi List<String> supportedSceneModes = params.getSupportedSceneModes(); 142c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi assertNotNull("No scene modes supported", supportedSceneModes); 14341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 144c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write("Total number of loops: " + 145c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi (NUMBER_OF_SCENE_MODE_LOOPS * supportedSceneModes.size()) + "\n"); 146c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Log.v(TAG, "Start preview"); 147c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write("No of loop: "); 14841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 149c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi for (int i = 0; i < supportedSceneModes.size(); i++) { 150c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi for (int j = 0; j < NUMBER_OF_SCENE_MODE_LOOPS; j++) { 151c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi runOnLooper(new Runnable() { 152c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi @Override 153c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi public void run() { 154c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.setupCameraTest(); 155c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi } 156c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi }); 157c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Log.v(TAG, "Setting scene mode to " + supportedSceneModes.get(i)); 158c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi params.setSceneMode(supportedSceneModes.get(i)); 159c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.setParameters(params); 160c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.startCameraPreview(surfaceHolder); 161c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.capturePhoto(); 16241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 163c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi if (i == 0 && j == 0) { 164c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write(Integer.toString(j + i * NUMBER_OF_SCENE_MODE_LOOPS)); 165c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi } else { 166c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write(", " + (j + i * NUMBER_OF_SCENE_MODE_LOOPS)); 16741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 16841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 16941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 170c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.cleanupTestImages(); 171bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } catch (Exception e) { 172c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Log.e(TAG, e.toString()); 173c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi fail("Camera scene mode test Exception"); 17441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 17541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 17641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 177c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi /** 178c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Stress test iterating on the range of supported camera zoom levels 179c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi */ 18041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @LargeTest 18141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public void testStressCameraZoom() throws Exception { 18241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi try { 183c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 184c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Parameters params = mCameraTestHelper.getCameraParameters(); 18541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 18641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (!params.isSmoothZoomSupported() && !params.isZoomSupported()) { 18741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Log.v(TAG, "Device camera does not support zoom"); 188c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi fail("Camera zoom stress test failed due to unsupported feature"); 189bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } else { 19041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Log.v(TAG, "Device camera does support zoom"); 191c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Log.v(TAG, "Start preview"); 192c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write("Total number of loops: " + NUMBER_OF_ZOOM_LOOPS + "\n"); 193c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write("No of loops: "); 19441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 19541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi int nextZoomLevel = 0; 19641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 19741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi for (int i = 0; i < NUMBER_OF_ZOOM_LOOPS; i++) { 19841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi runOnLooper(new Runnable() { 19941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @Override 20041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public void run() { 201c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.setupCameraTest(); 20241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 20341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi }); 20441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 205c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.startCameraPreview(surfaceHolder); 206c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi params = mCameraTestHelper.mCamera.getParameters(); 20741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi int currentZoomLevel = params.getZoom(); 20841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 20941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (nextZoomLevel >= params.getMaxZoom()) { 21041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi nextZoomLevel = 0; 21141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 21241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi ++nextZoomLevel; 21341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 21441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (params.isSmoothZoomSupported()) { 215c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.mCamera.startSmoothZoom(nextZoomLevel); 216bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } else { 21741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi params.setZoom(nextZoomLevel); 218c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.setParameters(params); 21941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 220c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.capturePhoto(); 22141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 222bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi if (i == 0) { 223bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput.write(Integer.toString(i)); 224bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } else { 225bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput.write(", " + i); 226bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } 22741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 22841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 229c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.cleanupTestImages(); 230bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } catch (Exception e) { 231bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi Log.e(TAG, e.toString()); 232bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi fail("Camera zoom stress test Exception"); 23341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 234bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } 23541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi} 236