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; 206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport com.android.mediaframeworktest.helpers.CameraTestHelper; 2141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 2241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.BufferedWriter; 2341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.File; 2441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.FileWriter; 2541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.io.Writer; 2641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.util.concurrent.Semaphore; 2741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport java.util.concurrent.TimeUnit; 28bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchiimport java.util.List; 2941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 30c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.hardware.Camera.Parameters; 3141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Environment; 3241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Handler; 3341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.os.Looper; 3441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.test.ActivityInstrumentationTestCase2; 3541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.test.suitebuilder.annotation.LargeTest; 3641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.util.Log; 3741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchiimport android.view.SurfaceHolder; 3841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 3941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi/** 40c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Junit / Instrumentation test case for the following camera APIs: 41c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * - camera zoom 42c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * - scene mode 4341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * 4441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * adb shell am instrument 4541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * -e class com.android.mediaframeworktest.stress.CameraStressTest 4641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi * -w com.android.mediaframeworktest/.CameraStressTestRunner 4741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi */ 4841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchipublic class CameraStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 4941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 50bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi private static final int NUMBER_OF_SCENE_MODE_LOOPS = 10; 51c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi private static final int NUMBER_OF_ZOOM_LOOPS = 100; 5241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi private static final long WAIT_TIMEOUT = 10 * 1000; // 10 seconds 53bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi private static final String CAMERA_STRESS_OUTPUT = "cameraStressOutput.txt"; 5441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 55c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi private CameraTestHelper mCameraTestHelper; 5641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi private Handler mHandler; 57c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi private Thread mLooperThread; 58bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi private Writer mOutput; 59bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi 60c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi private String TAG = "CameraStressTest"; 61c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi 6241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public CameraStressTest() { 6341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi super("com.android.mediaframeworktest", MediaFrameworkTest.class); 6441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 6541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 6641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi protected void setUp() throws Exception { 6741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi final Semaphore sem = new Semaphore(0); 6841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mLooperThread = new Thread() { 6941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @Override 7041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public void run() { 7141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Log.v(TAG, "starting looper"); 7241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Looper.prepare(); 7341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mHandler = new Handler(); 7441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi sem.release(); 7541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Looper.loop(); 7641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Log.v(TAG, "quit looper"); 7741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 7841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi }; 7941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mLooperThread.start(); 8041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (!sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) { 8141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi fail("Failed to start the looper."); 8241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 8341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi getActivity(); 8441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi super.setUp(); 85bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi 86c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper = new CameraTestHelper(); 87c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi File stressOutFile = new File(String.format("%s/%s", 88c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Environment.getExternalStorageDirectory(), CAMERA_STRESS_OUTPUT)); 89bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput = new BufferedWriter(new FileWriter(stressOutFile, true)); 90c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write(this.getName() + "\n"); 9141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 9241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 9341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @Override 9441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi protected void tearDown() throws Exception { 9541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (mHandler != null) { 9641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mHandler.getLooper().quit(); 9741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mHandler = null; 9841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 9941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (mLooperThread != null) { 10041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mLooperThread.join(WAIT_TIMEOUT); 10141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (mLooperThread.isAlive()) { 10241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi fail("Failed to stop the looper."); 10341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 10441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mLooperThread = null; 10541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 106bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput.write("\n\n"); 107bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput.close(); 10841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi super.tearDown(); 10941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 11041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 11141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi private void runOnLooper(final Runnable command) throws InterruptedException { 11241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi final Semaphore sem = new Semaphore(0); 11341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi mHandler.post(new Runnable() { 11441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @Override 11541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public void run() { 11641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi try { 11741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi command.run(); 11841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } finally { 11941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi sem.release(); 12041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 12141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 12241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi }); 12341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (!sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) { 12441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi fail("Failed to run the command on the looper."); 12541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 12641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 12741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 128c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi /** 129c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Stress test iterating on the various scene modes (action, night, party, etc.) 130c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi */ 131c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi @LargeTest 132c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi public void testStressCameraSceneModes() throws Exception { 133c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi try { 134c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 135c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Parameters params = mCameraTestHelper.getCameraParameters(); 136c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi List<String> supportedSceneModes = params.getSupportedSceneModes(); 137c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi assertNotNull("No scene modes supported", supportedSceneModes); 13841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 139c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write("Total number of loops: " + 140c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi (NUMBER_OF_SCENE_MODE_LOOPS * supportedSceneModes.size()) + "\n"); 141c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Log.v(TAG, "Start preview"); 142c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write("No of loop: "); 14341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 144c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi for (int i = 0; i < supportedSceneModes.size(); i++) { 145c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi for (int j = 0; j < NUMBER_OF_SCENE_MODE_LOOPS; j++) { 146c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi runOnLooper(new Runnable() { 147c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi @Override 148c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi public void run() { 149c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.setupCameraTest(); 150c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi } 151c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi }); 152c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Log.v(TAG, "Setting scene mode to " + supportedSceneModes.get(i)); 153c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi params.setSceneMode(supportedSceneModes.get(i)); 154c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.setParameters(params); 155c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.startCameraPreview(surfaceHolder); 156c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.capturePhoto(); 15741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 158c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi if (i == 0 && j == 0) { 159c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write(Integer.toString(j + i * NUMBER_OF_SCENE_MODE_LOOPS)); 160c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi } else { 161c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write(", " + (j + i * NUMBER_OF_SCENE_MODE_LOOPS)); 16241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 16341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 16441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 165c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.cleanupTestImages(); 166bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } catch (Exception e) { 167c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Log.e(TAG, e.toString()); 168c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi fail("Camera scene mode test Exception"); 16941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 17041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 17141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 172c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi /** 173c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Stress test iterating on the range of supported camera zoom levels 174c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi */ 17541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @LargeTest 17641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public void testStressCameraZoom() throws Exception { 17741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi try { 178c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 179c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Parameters params = mCameraTestHelper.getCameraParameters(); 18041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 18141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (!params.isSmoothZoomSupported() && !params.isZoomSupported()) { 18241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Log.v(TAG, "Device camera does not support zoom"); 183c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi fail("Camera zoom stress test failed due to unsupported feature"); 184bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } else { 18541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi Log.v(TAG, "Device camera does support zoom"); 186c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi Log.v(TAG, "Start preview"); 187c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write("Total number of loops: " + NUMBER_OF_ZOOM_LOOPS + "\n"); 188c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mOutput.write("No of loops: "); 18941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 19041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi int nextZoomLevel = 0; 19141d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 19241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi for (int i = 0; i < NUMBER_OF_ZOOM_LOOPS; i++) { 19341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi runOnLooper(new Runnable() { 19441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi @Override 19541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi public void run() { 196c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.setupCameraTest(); 19741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 19841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi }); 19941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 200c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.startCameraPreview(surfaceHolder); 201c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi params = mCameraTestHelper.mCamera.getParameters(); 20241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi int currentZoomLevel = params.getZoom(); 20341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 20441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (nextZoomLevel >= params.getMaxZoom()) { 20541d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi nextZoomLevel = 0; 20641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 20741d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi ++nextZoomLevel; 20841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 20941d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi if (params.isSmoothZoomSupported()) { 210c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.mCamera.startSmoothZoom(nextZoomLevel); 211bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } else { 21241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi params.setZoom(nextZoomLevel); 213c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.setParameters(params); 21441d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 215c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.capturePhoto(); 21641d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi 217bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi if (i == 0) { 218bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput.write(Integer.toString(i)); 219bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } else { 220bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi mOutput.write(", " + i); 221bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } 22241d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 22341d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 224c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi mCameraTestHelper.cleanupTestImages(); 225bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } catch (Exception e) { 226bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi Log.e(TAG, e.toString()); 227bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi fail("Camera zoom stress test Exception"); 22841d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi } 229bac8666893ee6d0074db7fa7f995de04598013b1Jason Noguchi } 23041d88d5f58ede432c7574c55b388dc390b08dc3bJason Noguchi} 231