1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.ex.camera2.utils;
18
19import static org.junit.Assert.assertEquals;
20import static org.junit.Assert.assertFalse;
21import static org.junit.Assert.assertNotSame;
22import static org.junit.Assert.assertTrue;
23import static org.mockito.Mockito.mock;
24import static org.mockito.Mockito.verify;
25
26import android.graphics.Rect;
27import android.hardware.camera2.CameraCaptureSession.CaptureCallback;
28import android.hardware.camera2.CameraDevice;
29import android.hardware.camera2.CaptureRequest;
30import android.hardware.camera2.CaptureRequest.Key;
31import android.view.Surface;
32
33import org.junit.Test;
34
35public class Camera2UtilsTest extends Camera2DeviceTester {
36    private void captureListenerSplitterAllCallbacksReceived(CaptureCallback splitter,
37                                                             CaptureCallback... terminals) {
38        splitter.onCaptureCompleted(null, null, null);
39        for (CaptureCallback each : terminals) {
40            verify(each).onCaptureCompleted(null, null, null);
41        }
42        splitter.onCaptureFailed(null, null, null);
43        for (CaptureCallback each : terminals) {
44            verify(each).onCaptureFailed(null, null, null);
45        }
46        splitter.onCaptureProgressed(null, null, null);
47        for (CaptureCallback each : terminals) {
48            verify(each).onCaptureProgressed(null, null, null);
49        }
50        splitter.onCaptureSequenceAborted(null, 0);
51        for (CaptureCallback each : terminals) {
52            verify(each).onCaptureSequenceAborted(null, 0);
53        }
54        splitter.onCaptureSequenceCompleted(null, 0, 0L);
55        for (CaptureCallback each : terminals) {
56            verify(each).onCaptureSequenceCompleted(null, 0, 0L);
57        }
58        splitter.onCaptureStarted(null, null, 0L, 1L);
59        for (CaptureCallback each : terminals) {
60            verify(each).onCaptureStarted(null, null, 0L, 1L);
61        }
62    }
63
64    @Test
65    public void captureListenerSplitter() {
66        CaptureCallback firstBackingListener = mock(CaptureCallback.class);
67        CaptureCallback secondBackingListener = mock(CaptureCallback.class);
68        captureListenerSplitterAllCallbacksReceived(
69                new Camera2CaptureCallbackSplitter(firstBackingListener, secondBackingListener),
70                firstBackingListener, secondBackingListener);
71    }
72
73    @Test
74    public void captureListenerSplitterEmpty() {
75        captureListenerSplitterAllCallbacksReceived(new Camera2CaptureCallbackSplitter());
76    }
77
78    @Test
79    public void captureListenerSplitterNoNpe() {
80        captureListenerSplitterAllCallbacksReceived(
81                new Camera2CaptureCallbackSplitter((CaptureCallback) null));
82    }
83
84    @Test
85    public void captureListenerSplitterMultipleNulls() {
86        captureListenerSplitterAllCallbacksReceived(
87                new Camera2CaptureCallbackSplitter(null, null, null));
88    }
89
90    @Test
91    public void captureListenerSplitterValidAndNull() {
92        CaptureCallback onlyRealBackingListener = mock(CaptureCallback.class);
93        captureListenerSplitterAllCallbacksReceived(
94                new Camera2CaptureCallbackSplitter(null, onlyRealBackingListener),
95                onlyRealBackingListener);
96    }
97
98    private <T> void requestSettingsSetAndForget(Camera2RequestSettingsSet s, Key<T> k, T v) {
99        s.set(k, v);
100        assertEquals(v, s.get(k));
101    }
102
103    @Test
104    public void requestSettingsSet() {
105        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
106        // Try a boolean
107        requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_LOCK, false);
108        requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_LOCK, true);
109        // Try an int
110        requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_MODE, 1);
111        requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_MODE, -1);
112        requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_MODE, 0);
113        // Try an int[]
114        requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA, new int[] {1});
115        requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA,
116                new int[] {2, 2});
117    }
118
119    @Test
120    public void requestSettingsSetNullValue() {
121        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
122        requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA, new int[] {1});
123        requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA, null);
124        requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA,
125                new int[] {2, 2});
126    }
127
128    @Test
129    public void requestSettingsSetUnsetAndContains() {
130        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
131        assertFalse(setUp.contains(CaptureRequest.CONTROL_AE_LOCK));
132        setUp.set(CaptureRequest.CONTROL_AE_LOCK, false);
133        assertTrue(setUp.contains(CaptureRequest.CONTROL_AE_LOCK));
134        setUp.set(CaptureRequest.CONTROL_AE_LOCK, null);
135        assertTrue(setUp.contains(CaptureRequest.CONTROL_AE_LOCK));
136        setUp.unset(CaptureRequest.CONTROL_AE_LOCK);
137        assertFalse(setUp.contains(CaptureRequest.CONTROL_AE_LOCK));
138
139        setUp.set(CaptureRequest.CONTROL_AE_LOCK, null);
140        assertTrue(setUp.contains(CaptureRequest.CONTROL_AE_LOCK));
141        setUp.set(CaptureRequest.CONTROL_AE_LOCK, false);
142        assertTrue(setUp.contains(CaptureRequest.CONTROL_AE_LOCK));
143        setUp.unset(CaptureRequest.CONTROL_AE_LOCK);
144        assertFalse(setUp.contains(CaptureRequest.CONTROL_AE_LOCK));
145    }
146
147    @Test
148    public void requestSettingsSetStartsWithoutChanges() {
149        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
150        assertEquals(0, setUp.getRevision());
151    }
152
153    private <T> void requestSettingsSetAndAssertChanged(Camera2RequestSettingsSet settings,
154                                                        Key<T> key, T value,
155                                                        boolean shouldHaveChanged) {
156        long revision = settings.getRevision();
157        assertEquals(shouldHaveChanged, settings.set(key, value));
158        assertEquals(shouldHaveChanged ? revision + 1 : revision, settings.getRevision());
159    }
160
161    @Test
162    public void requestSettingsSetChangesReportedCorrectly() {
163        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
164        requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, true);
165        requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, false);
166        requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true, true);
167    }
168
169    @Test
170    public void requestSettingsSetDetectsNoopChanges() {
171        Camera2RequestSettingsSet s = new Camera2RequestSettingsSet();
172        int[] one = {1}, two = {2};
173
174        requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, one, true);
175        requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, one, false);
176
177        requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, null, true);
178        requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, null, false);
179
180        requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, two, true);
181        requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, two, false);
182    }
183
184    private <T> void requestSettingsUnsetAndAssertChanged(Camera2RequestSettingsSet settings,
185                                                          Key<T> key, boolean shouldHaveChanged) {
186        long revision = settings.getRevision();
187        assertEquals(shouldHaveChanged, settings.unset(key));
188        assertEquals(shouldHaveChanged ? revision + 1 : revision, settings.getRevision());
189    }
190
191    @Test
192    public void requestSettingsSetUnsetMakesChangesAndDetectsNoops() {
193        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
194        requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false);
195
196        requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, true);
197        requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true);
198
199        requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, true);
200        requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, false);
201        requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true);
202        requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false);
203
204        requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, true);
205        requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true, true);
206        requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true);
207    }
208
209    @Test(expected=NullPointerException.class)
210    public void requestSettingsSetNullArgToCopyConstructor() {
211        Camera2RequestSettingsSet flop = new Camera2RequestSettingsSet(null);
212    }
213
214    @Test(expected=NullPointerException.class)
215    public void requestSettingsSetNullArgToSetKey() {
216        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
217        setUp.set(null, null);
218    }
219
220    @Test(expected=NullPointerException.class)
221    public void requestSettingsSetNullArgToUnset() {
222        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
223        setUp.unset(null);
224    }
225
226    @Test(expected=NullPointerException.class)
227    public void requestSettingsSetNullArgToContains() {
228        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
229        setUp.contains(null);
230    }
231
232    @Test(expected=NullPointerException.class)
233    public void requestSettingsSetNullArgToGet() {
234        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
235        setUp.get(null);
236    }
237
238    @Test
239    public void requestSettingsSetMatchesPrimitives() {
240        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
241        assertTrue(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, null));
242        assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, false));
243        assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, true));
244
245        setUp.set(CaptureRequest.CONTROL_AE_LOCK, null);
246        assertTrue(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, null));
247        assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, false));
248        assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, true));
249
250        setUp.set(CaptureRequest.CONTROL_AE_LOCK, false);
251        assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, null));
252        assertTrue(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, false));
253        assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, true));
254
255        setUp.set(CaptureRequest.CONTROL_AE_LOCK, true);
256        assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, null));
257        assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, false));
258        assertTrue(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, true));
259    }
260
261    @Test
262    public void requestSettingsSetMatchesReferences() {
263        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
264        assertTrue(setUp.matches(CaptureRequest.SCALER_CROP_REGION, null));
265        assertFalse(setUp.matches(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 0, 0)));
266
267        setUp.set(CaptureRequest.SCALER_CROP_REGION, null);
268        assertTrue(setUp.matches(CaptureRequest.SCALER_CROP_REGION, null));
269        assertFalse(setUp.matches(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 0, 0)));
270
271        setUp.set(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 0, 0));
272        assertFalse(setUp.matches(CaptureRequest.SCALER_CROP_REGION, null));
273        assertTrue(setUp.matches(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 0, 0)));
274        assertFalse(setUp.matches(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 1, 1)));
275    }
276
277    @Test(expected=NullPointerException.class)
278    public void requestSettingsSetNullArgToCreateRequest0() throws Exception {
279        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
280        setUp.createRequest(null, CameraDevice.TEMPLATE_PREVIEW);
281    }
282
283    @Test(expected=NullPointerException.class)
284    public void requestSettingsSetNullArgToCreateRequest2() throws Exception {
285        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
286        setUp.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW, (Surface) null);
287    }
288
289    @Test(expected=NullPointerException.class)
290    public void requestSettingsSetNullArgToCreateRequest02() throws Exception {
291        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
292        setUp.createRequest(null, CameraDevice.TEMPLATE_PREVIEW, (Surface) null);
293    }
294
295    @Test
296    public void requestSettingsSetNullArgToUnion() {
297        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
298        assertFalse(setUp.union(null));
299        assertEquals(0, setUp.getRevision());
300    }
301
302    @Test
303    public void requestSettingsSetSelfArgToUnion() {
304        Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet();
305        assertFalse(setUp.union(setUp));
306        assertEquals(0, setUp.getRevision());
307    }
308
309    @Test
310    public void requestSettingsSetCopyConstructor() {
311        Camera2RequestSettingsSet original = new Camera2RequestSettingsSet();
312        Camera2RequestSettingsSet unchanged = new Camera2RequestSettingsSet(original);
313
314        requestSettingsSetAndForget(original, CaptureRequest.CONTROL_AE_LOCK, true);
315        Camera2RequestSettingsSet changed = new Camera2RequestSettingsSet(original);
316        assertEquals(true, changed.get(CaptureRequest.CONTROL_AE_LOCK));
317    }
318
319    @Test
320    public void requestSettingsSetCopyConstructorPreservesChangedStatus() {
321        Camera2RequestSettingsSet original = new Camera2RequestSettingsSet();
322        Camera2RequestSettingsSet unchanged = new Camera2RequestSettingsSet(original);
323        assertEquals(original.getRevision(), unchanged.getRevision());
324
325        requestSettingsSetAndAssertChanged(original, CaptureRequest.CONTROL_AE_LOCK, true, true);
326        Camera2RequestSettingsSet changed = new Camera2RequestSettingsSet(original);
327        assertEquals(original.getRevision(), changed.getRevision());
328        assertNotSame(original.getRevision(), unchanged.getRevision());
329    }
330
331    @Test
332    public void requestSettingsSetCopyConstructorPerformsDeepCopy() {
333        Camera2RequestSettingsSet original = new Camera2RequestSettingsSet();
334        requestSettingsSetAndForget(original, CaptureRequest.CONTROL_AE_LOCK, true);
335
336        Camera2RequestSettingsSet changed = new Camera2RequestSettingsSet(original);
337        requestSettingsSetAndForget(changed, CaptureRequest.CONTROL_AE_LOCK, false);
338        assertEquals(true, original.get(CaptureRequest.CONTROL_AE_LOCK));
339    }
340
341    @Test
342    public void requestSettingsSetNullMeansDefault() throws Exception {
343        Camera2RequestSettingsSet s = new Camera2RequestSettingsSet();
344        CaptureRequest r1 = s.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW);
345        assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW,
346                r1.get(CaptureRequest.CONTROL_CAPTURE_INTENT));
347
348        requestSettingsSetAndForget(s, CaptureRequest.CONTROL_CAPTURE_INTENT,
349                CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
350        CaptureRequest r2 = s.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW);
351        assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE,
352                r2.get(CaptureRequest.CONTROL_CAPTURE_INTENT));
353
354        requestSettingsSetAndForget(s, CaptureRequest.CONTROL_CAPTURE_INTENT, null);
355        CaptureRequest r3 = s.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW);
356        assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW,
357                r3.get(CaptureRequest.CONTROL_CAPTURE_INTENT));
358
359        s.unset(CaptureRequest.CONTROL_CAPTURE_INTENT);
360        CaptureRequest r4 = s.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW);
361        assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW,
362                r4.get(CaptureRequest.CONTROL_CAPTURE_INTENT));
363    }
364
365    @Test
366    public void requestSettingsSetNullPreservedByUnions() {
367        Camera2RequestSettingsSet master = new Camera2RequestSettingsSet();
368        requestSettingsSetAndForget(master, CaptureRequest.CONTROL_CAPTURE_INTENT,
369                CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW);
370
371        Camera2RequestSettingsSet slave = new Camera2RequestSettingsSet();
372        master.union(slave);
373        assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW,
374                master.get(CaptureRequest.CONTROL_CAPTURE_INTENT));
375
376        requestSettingsSetAndForget(slave, CaptureRequest.CONTROL_CAPTURE_INTENT, null);
377        master.union(slave);
378        assertEquals(null, master.get(CaptureRequest.CONTROL_CAPTURE_INTENT));
379
380        requestSettingsSetAndForget(slave, CaptureRequest.CONTROL_CAPTURE_INTENT,
381                CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
382        master.union(slave);
383        assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE,
384                master.get(CaptureRequest.CONTROL_CAPTURE_INTENT));
385
386        slave.unset(CaptureRequest.CONTROL_CAPTURE_INTENT);
387        master.union(slave);
388        assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE,
389                master.get(CaptureRequest.CONTROL_CAPTURE_INTENT));
390    }
391
392    @Test
393    public void requestSettingsSetNullChangesRecorded() throws Exception {
394        Camera2RequestSettingsSet s = new Camera2RequestSettingsSet();
395        requestSettingsSetAndAssertChanged(s, CaptureRequest.CONTROL_CAPTURE_INTENT, null, true);
396        requestSettingsSetAndAssertChanged(s, CaptureRequest.CONTROL_CAPTURE_INTENT,
397                CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW, true);
398        requestSettingsSetAndAssertChanged(s, CaptureRequest.CONTROL_CAPTURE_INTENT, null, true);
399        requestSettingsSetAndAssertChanged(s, CaptureRequest.CONTROL_CAPTURE_INTENT, null, false);
400    }
401
402    @Test
403    public void requestSettingsSetUnionChangesRecorded() {
404        Camera2RequestSettingsSet[] sets = { new Camera2RequestSettingsSet(),
405                                             new Camera2RequestSettingsSet() };
406        sets[0].union(sets[1]);
407        assertEquals(1, sets[0].getRevision());
408        assertEquals(0, sets[1].getRevision());
409    }
410
411    private <T> void requestSettingsSetsCheckPairOfProperties(Camera2RequestSettingsSet firstSet,
412                                                              Camera2RequestSettingsSet secondSet,
413                                                              Key<T> firstKey,
414                                                              Key<T> secondKey,
415                                                              T expectedFirstSetFirstValue,
416                                                              T expectedFirstSetSecondValue,
417                                                              T expectedSecondSetFirstValue,
418                                                              T expectedSecondSetSecondValue) {
419        assertEquals(expectedFirstSetFirstValue, firstSet.get(firstKey));
420        assertEquals(expectedFirstSetSecondValue, firstSet.get(secondKey));
421        assertEquals(expectedSecondSetFirstValue, secondSet.get(firstKey));
422        assertEquals(expectedSecondSetSecondValue, secondSet.get(secondKey));
423    }
424
425    @Test
426    public void requestSettingsSetUnionChangesReflected() {
427        Camera2RequestSettingsSet[] sets = { new Camera2RequestSettingsSet(),
428                                             new Camera2RequestSettingsSet() };
429
430        sets[0].set(CaptureRequest.CONTROL_AE_LOCK, true);
431        sets[1].set(CaptureRequest.CONTROL_AWB_LOCK, true);
432        sets[0].union(sets[1]);
433        sets[1].set(CaptureRequest.CONTROL_AE_LOCK, false);
434        requestSettingsSetsCheckPairOfProperties(sets[0], sets[1],
435                CaptureRequest.CONTROL_AE_LOCK, CaptureRequest.CONTROL_AWB_LOCK,
436                true, true, false, true);
437
438        sets[0].union(sets[1]);
439        requestSettingsSetsCheckPairOfProperties(sets[0], sets[1],
440                CaptureRequest.CONTROL_AE_LOCK, CaptureRequest.CONTROL_AWB_LOCK,
441                false, true, false, true);
442
443        sets[1].set(CaptureRequest.CONTROL_AE_LOCK, false);
444        sets[1].set(CaptureRequest.CONTROL_AWB_LOCK, false);
445        sets[0].union(sets[1]);
446        requestSettingsSetsCheckPairOfProperties(sets[0], sets[1],
447                CaptureRequest.CONTROL_AE_LOCK, CaptureRequest.CONTROL_AWB_LOCK,
448                false, false, false, false);
449    }
450}
451