1c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi/*
2c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Copyright (C) 2013 The Android Open Source Project
3c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *
4c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Licensed under the Apache License, Version 2.0 (the "License");
5c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * you may not use this file except in compliance with the License.
6c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * You may obtain a copy of the License at
7c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *
8c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *      http://www.apache.org/licenses/LICENSE-2.0
9c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *
10c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Unless required by applicable law or agreed to in writing, software
11c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * distributed under the License is distributed on an "AS IS" BASIS,
12c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * See the License for the specific language governing permissions and
14c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * limitations under the License.
15c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi */
16c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
17c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchipackage com.android.mediaframeworktest.functional.camera;
18c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
19c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.hardware.Camera;
20c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.hardware.Camera.PictureCallback;
21c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.hardware.Camera.ShutterCallback;
22c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.os.Environment;
23c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.os.Handler;
24c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.os.Looper;
25c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.test.ActivityInstrumentationTestCase2;
26c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.test.suitebuilder.annotation.LargeTest;
27c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.util.FloatMath;
28c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.util.Log;
29c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport android.view.SurfaceHolder;
30c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
31c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport java.util.concurrent.Semaphore;
32c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport java.util.concurrent.TimeUnit;
33c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport java.util.List;
34c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
35c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport com.android.mediaframeworktest.MediaFrameworkTest;
36c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport com.android.mediaframeworktest.CameraStressTestRunner;
37c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport com.android.mediaframeworktest.CameraTestHelper;
38c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchiimport junit.framework.Assert;
39c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
40c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi/**
41c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Junit / Instrumentation test case for camera API pairwise testing
42c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * Settings tested against: flash mode, exposure compensation, white balance,
43c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *  scene mode, picture size, and geotagging
44c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *
45c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi * adb shell am instrument
46c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *  - e class com.android.mediaframeworktest.stress.CameraPairwiseTest
47c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi *  - w com.android.mediaframeworktest/.CameraStressTestRunner
48c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi */
49c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchipublic class CameraPairwiseTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
50c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private CameraTestHelper mCameraTestHelper;
51c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private Handler mHandler;
52c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private Thread mLooperThread;
53c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private String TAG = "CameraPairwiseTest";
54c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
55c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private static final long WAIT_TIMEOUT = 10 * 1000; // 10 seconds
56c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
57c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    // coordinates of the Getty Museuem in Los Angeles
58c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private static final double MOCK_LATITUDE = 34.076621;
59c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private static final double MOCK_LONGITUDE = -118.473215;
60c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
61c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    // camera setting enums
62c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public enum Flash { ON, OFF, AUTO };
63c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public enum Exposure { MIN, MAX, NONE };
64c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public enum WhiteBalance { DAYLIGHT, FLUORESCENT, CLOUDY, INCANDESCENT, AUTO };
65c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public enum SceneMode { SUNSET, ACTION, PARTY, NIGHT, AUTO };
66c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public enum PictureSize { SMALL, MEDIUM, LARGE };
67c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public enum Geotagging { ON, OFF };
68c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
69c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public CameraPairwiseTest() {
70c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
71c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
72c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
73c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    protected void setUp() throws Exception {
74c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        final Semaphore sem = new Semaphore(0);
75c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        mLooperThread = new Thread() {
76c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            @Override
77c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            public void run() {
78c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                Log.v(TAG, "starting looper");
79c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                Looper.prepare();
80c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                mHandler = new Handler();
81c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                sem.release();
82c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                Looper.loop();
83c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                Log.v(TAG, "quit looper");
84c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
85c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        };
86c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        mLooperThread.start();
87c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        if (!sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) {
88c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            fail("Failed to start the looper.");
89c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        }
90c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        getActivity();
91c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        super.setUp();
92c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
93c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        mCameraTestHelper = new CameraTestHelper();
94c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
95c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
96c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @Override
97c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    protected void tearDown() throws Exception {
98c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        if (mHandler != null) {
99c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mHandler.getLooper().quit();
100c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mHandler = null;
101c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        }
102c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        if (mLooperThread != null) {
103c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mLooperThread.join(WAIT_TIMEOUT);
104c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            if (mLooperThread.isAlive()) {
105c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                fail("Failed to stop the looper.");
106c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
107c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mLooperThread = null;
108c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        }
109c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        super.tearDown();
110c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
111c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
112c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private void runOnLooper(final Runnable command) throws InterruptedException {
113c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        final Semaphore sem = new Semaphore(0);
114c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        mHandler.post(new Runnable() {
115c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            @Override
116c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            public void run() {
117c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                try {
118c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    command.run();
119c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                } finally {
120c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    sem.release();
121c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                }
122c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
123c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        });
124c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        if (!sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) {
125c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            fail("Failed to run the command on the looper.");
126c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        }
127c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
128c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
129c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
130c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: None / WB: Daylight
131c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Sunset / Pic: Medium / Geo: off
132c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
133c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
134c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario01() throws Exception {
135c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.NONE, WhiteBalance.DAYLIGHT, SceneMode.SUNSET,
136c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.OFF);
137c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
138c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
139c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
140c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: On / Exposure: Min / WB: Fluorescent
141c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Large / Geo: on
142c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
143c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
144c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario02() throws Exception {
145c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.ON, Exposure.MIN, WhiteBalance.FLUORESCENT, SceneMode.AUTO,
146c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.LARGE, Geotagging.ON);
147c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
148c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
149c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
150c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Off / Exposure: Max / WB: Auto
151c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Night / Pic: Small / Geo: on
152c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
153c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
154c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario03() throws Exception {
155c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.MAX, WhiteBalance.AUTO, SceneMode.NIGHT,
156c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.SMALL, Geotagging.ON);
157c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
158c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
159c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
160c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Off / Exposure: Max / WB: Cloudy
161c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Med / Geo: off
162c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
163c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
164c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario04() throws Exception {
165c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.MAX, WhiteBalance.CLOUDY, SceneMode.AUTO,
166c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.OFF);
167c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
168c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
169c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
170c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: Max / WB: Incandescent
171c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Large / Geo: off
172c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
173c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
174c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario05() throws Exception {
175c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.MAX, WhiteBalance.INCANDESCENT,
176c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                SceneMode.AUTO, PictureSize.LARGE, Geotagging.OFF);
177c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
178c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
179c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
180c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: On / Exposure: None / WB: Cloudy
181c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Small / Geo: on
182c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
183c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
184c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario06() throws Exception {
185c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.ON, Exposure.NONE, WhiteBalance.CLOUDY, SceneMode.AUTO,
186c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.SMALL, Geotagging.ON);
187c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
188c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
189c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
190c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: Min / WB: Auto
191c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Action / Pic: Small / Geo: on
192c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
193c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
194c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario07() throws Exception {
195c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.MIN, WhiteBalance.AUTO, SceneMode.ACTION,
196c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.SMALL, Geotagging.ON);
197c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
198c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
199c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
200c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: On / Exposure: Min / WB: Auto
201c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Action / Pic: Medium / Geo: off
202c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
203c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
204c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario08() throws Exception {
205c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.ON, Exposure.MIN, WhiteBalance.AUTO, SceneMode.ACTION,
206c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.OFF);
207c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
208c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
209c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
210c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Off / Exposure: Min / WB: Auto
211c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Night / Pic: Large / Geo: off
212c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
213c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
214c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario09() throws Exception {
215c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.MIN, WhiteBalance.AUTO, SceneMode.NIGHT,
216c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.LARGE, Geotagging.OFF);
217c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
218c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
219c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
220c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Off / Exposure: Min / WB: Daylight
221c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Sunset / Pic: Small / Geo: off
222c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
223c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
224c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario10() throws Exception {
225c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.MIN, WhiteBalance.DAYLIGHT, SceneMode.SUNSET,
226c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.SMALL, Geotagging.OFF);
227c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
228c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
229c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
230c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: On / Exposure: Max / WB: Daylight
231c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Sunset / Pic: Large / Geo: on
232c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
233c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
234c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario11() throws Exception {
235c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.ON, Exposure.MAX, WhiteBalance.DAYLIGHT, SceneMode.SUNSET,
236c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.LARGE, Geotagging.ON);
237c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
238c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
239c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
240c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: Min / WB: Cloudy
241c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Large / Geo: off
242c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
243c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
244c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario12() throws Exception {
245c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.MIN, WhiteBalance.CLOUDY, SceneMode.AUTO,
246c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.LARGE, Geotagging.OFF);
247c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
248c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
249c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
250c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Off / Exposure: None / WB: Auto
251c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Party / Pic: Medium / Geo: on
252c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
253c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
254c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario13() throws Exception {
255c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.NONE, WhiteBalance.AUTO, SceneMode.PARTY,
256c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.ON);
257c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
258c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
259c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
260c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: None / WB: Auto
261c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Night / Pic: Small / Geo: off
262c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
263c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
264c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario14() throws Exception {
265c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.NONE, WhiteBalance.AUTO, SceneMode.NIGHT,
266c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.SMALL, Geotagging.OFF);
267c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
268c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
269c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
270c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: On / Exposure: None / WB: Incandescent
271c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Medium / Geo: on
272c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
273c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
274c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario15() throws Exception {
275c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.ON, Exposure.NONE, WhiteBalance.INCANDESCENT, SceneMode.AUTO,
276c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.ON);
277c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
278c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
279c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
280c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: Min / WB: Auto
281c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Party / Pic: Small / Geo: off
282c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
283c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
284c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario16() throws Exception {
285c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.MIN, WhiteBalance.AUTO, SceneMode.PARTY,
286c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.SMALL, Geotagging.OFF);
287c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
288c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
289c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
290c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Off / Exposure: Min / WB: Incandescent
291c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Small / Geo: off
292c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
293c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
294c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario17() throws Exception {
295c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.MIN, WhiteBalance.INCANDESCENT, SceneMode.AUTO,
296c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.SMALL, Geotagging.OFF);
297c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
298c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
299c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
300c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: On / Exposure: None / WB: Auto
301c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Party / Pic: Large / Geo: off
302c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
303c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
304c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario18() throws Exception {
305c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.ON, Exposure.NONE, WhiteBalance.AUTO, SceneMode.PARTY,
306c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.LARGE, Geotagging.OFF);
307c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
308c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
309c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
310c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash Off / Exposure: None / WB: Auto
311c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Action / Pic: Large / Geo: off
312c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
313c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
314c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario19() throws Exception {
315c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.NONE, WhiteBalance.AUTO, SceneMode.ACTION,
316c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.LARGE, Geotagging.OFF);
317c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
318c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
319c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
320c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Off / Exposure: Max / WB: Fluorescent
321c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Medium / Geo: Off
322c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
323c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    @LargeTest
324c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario20() throws Exception {
325c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.MAX, WhiteBalance.FLUORESCENT, SceneMode.AUTO,
326c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.OFF);
327c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
328c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
329c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
330c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Off / Exposure: Min / WB: Auto
331c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Medium / Geo: off
332c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
333c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario21() throws Exception {
334c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.OFF, Exposure.MIN, WhiteBalance.AUTO, SceneMode.AUTO,
335c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.OFF);
336c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
337c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
338c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
339c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: On / Exposure: Max / WB: Auto
340c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Action / Pic: Small / Geo: off
341c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
342c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario22() throws Exception {
343c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.ON, Exposure.MAX, WhiteBalance.AUTO, SceneMode.ACTION,
344c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.SMALL, Geotagging.OFF);
345c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
346c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
347c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
348c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: On / Exposure: Max / WB: Auto
349c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Night / Pic: Medium / Geo: on
350c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
351c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario23() throws Exception {
352c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.ON, Exposure.MAX, WhiteBalance.AUTO, SceneMode.NIGHT,
353c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.ON);
354c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
355c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
356c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
357c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: None / WB: Fluorescent
358c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Small / Geo: on
359c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
360c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario24() throws Exception {
361c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.NONE, WhiteBalance.FLUORESCENT,
362c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                SceneMode.AUTO, PictureSize.SMALL, Geotagging.ON);
363c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
364c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
365c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
366c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: Max / WB: Daylight
367c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Auto / Pic: Medium / Geo: off
368c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
369c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario25() throws Exception {
370c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.MAX, WhiteBalance.DAYLIGHT, SceneMode.AUTO,
371c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.OFF);
372c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
373c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
374c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
375c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Flash: Auto / Exposure: Max / WB: Auto
376c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Scene: Party / Pic: Medium / Geo: on
377c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
378c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    public void testCameraPairwiseScenario26() throws Exception {
379c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        genericPairwiseTestCase(Flash.AUTO, Exposure.MAX, WhiteBalance.AUTO, SceneMode.PARTY,
380c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                PictureSize.MEDIUM, Geotagging.ON);
381c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
382c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
383c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    /**
384c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     * Generic pairwise test method
385c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi     */
386c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    private void genericPairwiseTestCase(Flash flash, Exposure exposure, WhiteBalance whitebalance,
387c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            SceneMode scenemode, PictureSize picturesize, Geotagging geotagging) throws Exception {
388c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        try {
389c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
390c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            Camera.Parameters params = mCameraTestHelper.getCameraParameters();
391c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
392c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            runOnLooper(new Runnable() {
393c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                @Override
394c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                public void run() {
395c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    mCameraTestHelper.setupCameraTest();
396c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                }
397c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            });
398c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
399c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            // Configure flash setting
400c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            switch (flash) {
401c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case ON:
402c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
403c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
404c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case OFF:
405c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
406c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
407c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case AUTO:
408c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
409c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
410c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
411c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
412c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            // Configure exposure setting
413c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            switch (exposure) {
414c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case MIN:
415c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setExposureCompensation(params.getMinExposureCompensation());
416c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
417c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case MAX:
418c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setExposureCompensation(params.getMaxExposureCompensation());
419c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
420c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case NONE:
421c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setExposureCompensation(0);
422c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
423c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
424c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
425c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            // Configure white balance setting
426c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            switch (whitebalance) {
427c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case DAYLIGHT:
428c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_DAYLIGHT);
429c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
430c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case FLUORESCENT:
431c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_FLUORESCENT);
432c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
433c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case INCANDESCENT:
434c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_INCANDESCENT);
435c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
436c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case CLOUDY:
437c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT);
438c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
439c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case AUTO:
440c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
441c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
442c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
443c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
444c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            // Configure scene mode setting
445c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            switch (scenemode) {
446c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case SUNSET:
447c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setSceneMode(Camera.Parameters.SCENE_MODE_SUNSET);
448c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
449c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case ACTION:
450c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setSceneMode(Camera.Parameters.SCENE_MODE_ACTION);
451c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
452c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case PARTY:
453c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setSceneMode(Camera.Parameters.SCENE_MODE_PARTY);
454c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
455c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case NIGHT:
456c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setSceneMode(Camera.Parameters.SCENE_MODE_NIGHT);
457c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
458c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case AUTO:
459c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
460c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
461c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
462c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
463c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            // Configure picture size setting
464c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            List<Camera.Size> supportedPictureSizes = params.getSupportedPictureSizes();
465c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            int mid = (int) Math.floor(supportedPictureSizes.size() / 2);
466c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            int low = supportedPictureSizes.size() - 1;
467c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            switch (picturesize) {
468c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case SMALL:
469c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setPictureSize(supportedPictureSizes.get(low).width,
470c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                            supportedPictureSizes.get(low).height);
471c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
472c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case MEDIUM:
473c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setPictureSize(supportedPictureSizes.get(mid).width,
474c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                            supportedPictureSizes.get(mid).height);
475c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
476c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case LARGE:
477c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setPictureSize(supportedPictureSizes.get(0).width,
478c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                            supportedPictureSizes.get(mid).height);
479c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
480c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
481c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
482c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            // Configure geotagging setting
483c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            switch (geotagging) {
484c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case ON:
485c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setGpsLatitude(MOCK_LATITUDE);
486c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    params.setGpsLongitude(MOCK_LONGITUDE);
487c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
488c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                case OFF:
489c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi                    break;
490c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            }
491c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi
492c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mCameraTestHelper.setParameters(params);
493c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mCameraTestHelper.startCameraPreview(surfaceHolder);
494c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mCameraTestHelper.capturePhoto();
495c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            mCameraTestHelper.cleanupTestImages();
496c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        } catch (Exception e) {
497c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            Log.e(TAG, e.toString());
498c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi            fail("Test case failed");
499c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi        }
500c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi    }
501c6cedc84f49b8b72d32069cfa515a51b8c128cc0Jason Noguchi}
502