1 /*
2 * Copyright 2019 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
17 package androidx.camera.integration.antelope
18
19 import androidx.camera.integration.antelope.MainActivity.Companion.cameraParams
20 import androidx.camera.integration.antelope.MainActivity.Companion.logd
21 import androidx.camera.integration.antelope.cameracontrollers.camera1OpenCamera
22 import androidx.camera.integration.antelope.cameracontrollers.camera2OpenCamera
23 import androidx.camera.integration.antelope.cameracontrollers.cameraXOpenCamera
24 import androidx.camera.integration.antelope.cameracontrollers.cameraXTakePicture
25 import androidx.camera.integration.antelope.cameracontrollers.closePreviewAndCamera
26 import androidx.camera.integration.antelope.cameracontrollers.initializeStillCapture
27
28 // Keeps track of what iteration of a repeated test is occurring
29 internal var multiCounter: Int = 0
30
initializeTestnull31 internal fun initializeTest(activity: MainActivity, params: CameraParams?, config: TestConfig) {
32
33 if (null == params) return
34
35 // Camera1 cannot directly access physical cameras. If we try, abort.
36 if (
37 (CameraAPI.CAMERA1 == config.api) &&
38 !(PrefHelper.getLogicalCameraIds(cameraParams).contains(config.camera))
39 ) {
40 activity.resetUIAfterTest()
41 activity.updateLog(
42 "ABORTED: Camera1 API cannot access camera with id:" + config.camera,
43 false,
44 false
45 )
46 return
47 }
48
49 when (config.currentRunningTest) {
50 TestType.INIT -> runInitTest(activity, params, config)
51 TestType.PREVIEW -> runPreviewTest(activity, params, config)
52 TestType.SWITCH_CAMERA -> runSwitchTest(activity, params, config)
53 TestType.MULTI_SWITCH -> runMultiSwitchTest(activity, params, config)
54 TestType.PHOTO -> runPhotoTest(activity, params, config)
55 TestType.MULTI_PHOTO -> runMultiPhotoTest(activity, params, config)
56 TestType.MULTI_PHOTO_CHAIN -> runMultiPhotoChainTest(activity, params, config)
57 TestType.NONE -> Unit
58 }
59 }
60
61 /** Run the INIT test */
runInitTestnull62 internal fun runInitTest(activity: MainActivity, params: CameraParams, config: TestConfig) {
63
64 logd("Running init test")
65 activity.startBackgroundThread(params)
66 activity.showProgressBar(true)
67
68 setupImageReader(activity, params, config)
69 params.timer = CameraTimer()
70 config.currentRunningTest = TestType.INIT
71 params.timer.testStart = System.currentTimeMillis()
72 beginTest(activity, params, config)
73 }
74
75 /** Run the SWITCH test */
runSwitchTestnull76 internal fun runSwitchTest(activity: MainActivity, params: CameraParams, config: TestConfig) {
77 // For switch test, always go from default back camera to default front camera and back 0->1->0
78 // TODO: Can we handle different permutations of physical cameras?
79 if (
80 !PrefHelper.getLogicalCameraIds(cameraParams).contains("0") ||
81 !PrefHelper.getLogicalCameraIds(cameraParams).contains("1")
82 ) {
83 activity.resetUIAfterTest()
84 activity.updateLog("ABORTED: Camera 0 and 1 needed for Switch test.", false, false)
85 return
86 }
87
88 config.switchTestCameras = arrayOf("0", "1")
89 config.switchTestCurrentCamera = "0"
90
91 logd("Running switch test")
92 logd("Starting with camera: " + config.switchTestCurrentCamera)
93 activity.startBackgroundThread(params)
94 activity.showProgressBar(true)
95
96 setupImageReader(activity, params, config)
97 params.timer = CameraTimer()
98 config.currentRunningTest = TestType.SWITCH_CAMERA
99 params.timer.testStart = System.currentTimeMillis()
100 beginTest(activity, params, config)
101 }
102
103 /** Run the MULTI_SWITCH test */
runMultiSwitchTestnull104 internal fun runMultiSwitchTest(activity: MainActivity, params: CameraParams, config: TestConfig) {
105 // For switch test, always go from default back camera to default front camera and back 0->1->0
106 // TODO: Can we handle different permutations of physical cameras?
107 if (
108 !PrefHelper.getLogicalCameraIds(cameraParams).contains("0") ||
109 !PrefHelper.getLogicalCameraIds(cameraParams).contains("1")
110 ) {
111 activity.resetUIAfterTest()
112 activity.updateLog("ABORTED: Camera 0 and 1 needed for Switch test.", false, false)
113 return
114 }
115
116 config.switchTestCameras = arrayOf("0", "1")
117
118 if (0 == multiCounter) {
119 // New test
120 logd("Running multi switch test")
121 config.switchTestCurrentCamera = "0"
122 activity.startBackgroundThread(params)
123 activity.showProgressBar(true, 0)
124 multiCounter = PrefHelper.getNumTests(activity)
125 config.currentRunningTest = TestType.MULTI_SWITCH
126 config.testFinished = false
127 } else {
128 // Add previous result
129 params.timer.testEnd = System.currentTimeMillis()
130 activity.showProgressBar(true, precentageCompleted(activity, multiCounter))
131 logd("In Multi Switch Test. Counter: " + multiCounter)
132
133 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
134 config.testResults.previewStart.add(params.timer.previewEnd - params.timer.previewStart)
135 config.testResults.switchToSecond.add(
136 params.timer.switchToSecondEnd - params.timer.switchToSecondStart
137 )
138 config.testResults.switchToFirst.add(
139 params.timer.switchToFirstEnd - params.timer.switchToFirstStart
140 )
141 config.testResults.previewClose.add(
142 params.timer.previewCloseEnd - params.timer.previewCloseStart
143 )
144 config.testResults.cameraClose.add(
145 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
146 )
147 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
148
149 config.testFinished = false
150 config.isFirstOnActive = true
151 }
152
153 setupImageReader(activity, params, config)
154 params.timer = CameraTimer()
155 params.timer.testStart = System.currentTimeMillis()
156 beginTest(activity, params, config)
157 }
158
159 /** Run the PREVIEW test */
runPreviewTestnull160 internal fun runPreviewTest(activity: MainActivity, params: CameraParams, config: TestConfig) {
161 logd("Running preview test")
162 activity.startBackgroundThread(params)
163 activity.showProgressBar(true)
164
165 setupImageReader(activity, params, config)
166 params.timer = CameraTimer()
167 config.currentRunningTest = TestType.PREVIEW
168 params.timer.testStart = System.currentTimeMillis()
169 beginTest(activity, params, config)
170 }
171
172 /** Run the PHOTO (single capture) test */
runPhotoTestnull173 internal fun runPhotoTest(activity: MainActivity, params: CameraParams, config: TestConfig) {
174 logd("Running photo test")
175 activity.startBackgroundThread(params)
176 activity.showProgressBar(true)
177
178 setupImageReader(activity, params, config)
179 params.timer = CameraTimer()
180 config.currentRunningTest = TestType.PHOTO
181 params.timer.testStart = System.currentTimeMillis()
182
183 logd("About to start photo test. " + config.currentRunningTest.toString())
184 beginTest(activity, params, config)
185 }
186
187 /** Run the MULTI_PHOTO (repeated capture) test */
runMultiPhotoTestnull188 internal fun runMultiPhotoTest(activity: MainActivity, params: CameraParams, config: TestConfig) {
189 if (0 == multiCounter) {
190 // New test
191 logd("Running multi photo test")
192 activity.startBackgroundThread(params)
193 activity.showProgressBar(true, 0)
194 multiCounter = PrefHelper.getNumTests(activity)
195 config.currentRunningTest = TestType.MULTI_PHOTO
196 logd(
197 "About to start multi photo test. multi_counter: " +
198 multiCounter +
199 " and test: " +
200 config.currentRunningTest.toString()
201 )
202 } else {
203 // Add previous result
204 params.timer.testEnd = System.currentTimeMillis()
205 activity.showProgressBar(true, precentageCompleted(activity, multiCounter))
206 logd("In Multi Photo Test. Counter: " + multiCounter)
207
208 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
209 config.testResults.previewStart.add(params.timer.previewEnd - params.timer.previewStart)
210 config.testResults.previewFill.add(
211 params.timer.previewFillEnd - params.timer.previewFillStart
212 )
213 config.testResults.autofocus.add(params.timer.autofocusEnd - params.timer.autofocusStart)
214 config.testResults.captureNoAF.add(
215 (params.timer.captureEnd - params.timer.captureStart) -
216 (params.timer.autofocusEnd - params.timer.autofocusStart)
217 )
218 config.testResults.capture.add(params.timer.captureEnd - params.timer.captureStart)
219 config.testResults.imageready.add(
220 params.timer.imageReaderEnd - params.timer.imageReaderStart
221 )
222 config.testResults.capturePlusImageReady.add(
223 (params.timer.captureEnd - params.timer.captureStart) +
224 (params.timer.imageReaderEnd - params.timer.imageReaderStart)
225 )
226 config.testResults.imagesave.add(params.timer.imageSaveEnd - params.timer.imageSaveStart)
227 config.testResults.isHDRPlus.add(params.timer.isHDRPlus)
228 config.testResults.previewClose.add(
229 params.timer.previewCloseEnd - params.timer.previewCloseStart
230 )
231 config.testResults.cameraClose.add(
232 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
233 )
234 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
235 config.testResults.totalNoPreview.add(
236 (params.timer.testEnd - params.timer.testStart) -
237 (params.timer.previewFillEnd - params.timer.previewFillStart)
238 )
239 config.testFinished = false
240 config.isFirstOnActive = true
241 config.isFirstOnCaptureComplete = true
242 }
243
244 setupImageReader(activity, params, config)
245 params.timer = CameraTimer()
246 params.timer.testStart = System.currentTimeMillis()
247 beginTest(activity, params, config)
248 }
249
250 /** Run the MULTI_PHOTO_CHAIN (multiple captures, do not close camera) test */
runMultiPhotoChainTestnull251 internal fun runMultiPhotoChainTest(
252 activity: MainActivity,
253 params: CameraParams,
254 config: TestConfig
255 ) {
256
257 // Cannot chain with Camera 1, run default test
258 if (CameraAPI.CAMERA1 == config.api) {
259 logd("Cannot run Chain test with Camera 1, running regular multi-test instead")
260 config.currentRunningTest = TestType.MULTI_PHOTO
261 runMultiPhotoTest(activity, params, config)
262 return
263 }
264
265 if (0 == multiCounter) {
266 // New test
267 logd("Running multi photo (chain) test")
268 activity.startBackgroundThread(params)
269 activity.showProgressBar(true, 0)
270 multiCounter = PrefHelper.getNumTests(activity)
271 params.timer = CameraTimer()
272 params.timer.testStart = System.currentTimeMillis()
273 config.currentRunningTest = TestType.MULTI_PHOTO_CHAIN
274 logd(
275 "About to start multi chain test. multi_counter: " +
276 multiCounter +
277 " and test: " +
278 config.currentRunningTest.toString()
279 )
280
281 setupImageReader(activity, params, config)
282 beginTest(activity, params, config)
283 } else {
284 // Add previous result
285 activity.showProgressBar(true, precentageCompleted(activity, multiCounter))
286
287 if (config.api == CameraAPI.CAMERA1) {
288 beginTest(activity, params, config)
289 } else {
290
291 // Camera2 and CameraX
292 config.testResults.autofocus.add(
293 params.timer.autofocusEnd - params.timer.autofocusStart
294 )
295 config.testResults.captureNoAF.add(
296 (params.timer.captureEnd - params.timer.captureStart) -
297 (params.timer.autofocusEnd - params.timer.autofocusStart)
298 )
299 config.testResults.capture.add(params.timer.captureEnd - params.timer.captureStart)
300 config.testResults.imageready.add(
301 params.timer.imageReaderEnd - params.timer.imageReaderStart
302 )
303 config.testResults.capturePlusImageReady.add(
304 (params.timer.captureEnd - params.timer.captureStart) +
305 (params.timer.imageReaderEnd - params.timer.imageReaderStart)
306 )
307 config.testResults.imagesave.add(
308 params.timer.imageSaveEnd - params.timer.imageSaveStart
309 )
310 config.testResults.isHDRPlus.add(params.timer.isHDRPlus)
311 config.testFinished = false
312
313 params.timer.clearImageTimers()
314 config.isFirstOnCaptureComplete = true
315
316 when (config.api) {
317 CameraAPI.CAMERA2 -> initializeStillCapture(activity, params, config)
318 CameraAPI.CAMERAX -> cameraXTakePicture(activity, params, config)
319 else -> {}
320 }
321 }
322 }
323 }
324
325 /**
326 * A test has ended. Depending on which test and if we are at the beginning, middle or end of a
327 * repeated test, record the results and repeat/return,
328 */
testEndednull329 internal fun testEnded(activity: MainActivity, params: CameraParams?, config: TestConfig) {
330 if (null == params) return
331 logd(
332 "In testEnded. multi_counter: " +
333 multiCounter +
334 " and test: " +
335 config.currentRunningTest.toString()
336 )
337
338 when (config.currentRunningTest) {
339 TestType.INIT -> {
340 params.timer.testEnd = System.currentTimeMillis()
341 logd("Test ended")
342 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
343 config.testResults.cameraClose.add(
344 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
345 )
346 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
347 }
348 TestType.PREVIEW -> {
349 params.timer.testEnd = System.currentTimeMillis()
350 logd("Test ended")
351 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
352 config.testResults.previewStart.add(params.timer.previewEnd - params.timer.previewStart)
353 config.testResults.previewClose.add(
354 params.timer.previewCloseEnd - params.timer.previewCloseStart
355 )
356 config.testResults.cameraClose.add(
357 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
358 )
359 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
360 }
361 TestType.SWITCH_CAMERA -> {
362 params.timer.testEnd = System.currentTimeMillis()
363 logd("Test ended")
364 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
365 config.testResults.previewStart.add(params.timer.previewEnd - params.timer.previewStart)
366 config.testResults.switchToSecond.add(
367 params.timer.switchToSecondEnd - params.timer.switchToSecondStart
368 )
369 config.testResults.switchToFirst.add(
370 params.timer.switchToFirstEnd - params.timer.switchToFirstStart
371 )
372 config.testResults.previewClose.add(
373 params.timer.previewCloseEnd - params.timer.previewCloseStart
374 )
375 config.testResults.cameraClose.add(
376 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
377 )
378 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
379 }
380 TestType.MULTI_SWITCH -> {
381 if (1 == multiCounter) {
382 params.timer.testEnd = System.currentTimeMillis()
383 config.testFinished = false // Reset flag
384
385 logd("Test ended")
386 activity.showProgressBar(true, precentageCompleted(activity, multiCounter))
387
388 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
389 config.testResults.previewStart.add(
390 params.timer.previewEnd - params.timer.previewStart
391 )
392 config.testResults.switchToSecond.add(
393 params.timer.switchToSecondEnd - params.timer.switchToSecondStart
394 )
395 config.testResults.switchToFirst.add(
396 params.timer.switchToFirstEnd - params.timer.switchToFirstStart
397 )
398 config.testResults.previewClose.add(
399 params.timer.previewCloseEnd - params.timer.previewCloseStart
400 )
401 config.testResults.cameraClose.add(
402 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
403 )
404 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
405
406 multiCounter = 0
407 } else {
408 logd(
409 "Switch " +
410 (Math.abs(multiCounter - PrefHelper.getNumTests(activity)) + 1) +
411 " completed."
412 )
413 multiCounter--
414 runMultiSwitchTest(activity, params, config)
415 return
416 }
417 }
418 TestType.PHOTO -> {
419 params.timer.testEnd = System.currentTimeMillis()
420 logd("Test ended")
421 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
422 config.testResults.previewStart.add(params.timer.previewEnd - params.timer.previewStart)
423 config.testResults.previewFill.add(
424 params.timer.previewFillEnd - params.timer.previewFillStart
425 )
426 config.testResults.autofocus.add(
427 params.timer.autofocusEnd - params.timer.autofocusStart
428 )
429 config.testResults.captureNoAF.add(
430 (params.timer.captureEnd - params.timer.captureStart) -
431 (params.timer.autofocusEnd - params.timer.autofocusStart)
432 )
433 config.testResults.capture.add(params.timer.captureEnd - params.timer.captureStart)
434 config.testResults.imageready.add(
435 params.timer.imageReaderEnd - params.timer.imageReaderStart
436 )
437 config.testResults.capturePlusImageReady.add(
438 (params.timer.captureEnd - params.timer.captureStart) +
439 (params.timer.imageReaderEnd - params.timer.imageReaderStart)
440 )
441 config.testResults.imagesave.add(
442 params.timer.imageSaveEnd - params.timer.imageSaveStart
443 )
444 config.testResults.isHDRPlus.add(params.timer.isHDRPlus)
445 config.testResults.previewClose.add(
446 params.timer.previewCloseEnd - params.timer.previewCloseStart
447 )
448 config.testResults.cameraClose.add(
449 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
450 )
451 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
452 config.testResults.totalNoPreview.add(
453 (params.timer.testEnd - params.timer.testStart) -
454 (params.timer.previewFillEnd - params.timer.previewFillStart)
455 )
456 }
457 TestType.MULTI_PHOTO -> {
458 val lastResult = params.timer.captureEnd - params.timer.captureStart
459
460 if (1 == multiCounter) {
461 params.timer.testEnd = System.currentTimeMillis()
462 config.testFinished = false // Reset flag
463
464 logd("Test ended")
465 activity.showProgressBar(true, precentageCompleted(activity, multiCounter))
466
467 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
468 config.testResults.previewStart.add(
469 params.timer.previewEnd - params.timer.previewStart
470 )
471 config.testResults.previewFill.add(
472 params.timer.previewFillEnd - params.timer.previewFillStart
473 )
474 config.testResults.autofocus.add(
475 params.timer.autofocusEnd - params.timer.autofocusStart
476 )
477 config.testResults.captureNoAF.add(
478 (params.timer.captureEnd - params.timer.captureStart) -
479 (params.timer.autofocusEnd - params.timer.autofocusStart)
480 )
481 config.testResults.capture.add(params.timer.captureEnd - params.timer.captureStart)
482 config.testResults.imageready.add(
483 params.timer.imageReaderEnd - params.timer.imageReaderStart
484 )
485 config.testResults.capturePlusImageReady.add(
486 (params.timer.captureEnd - params.timer.captureStart) +
487 (params.timer.imageReaderEnd - params.timer.imageReaderStart)
488 )
489 config.testResults.imagesave.add(
490 params.timer.imageSaveEnd - params.timer.imageSaveStart
491 )
492 config.testResults.isHDRPlus.add(params.timer.isHDRPlus)
493 config.testResults.previewClose.add(
494 params.timer.previewCloseEnd - params.timer.previewCloseStart
495 )
496 config.testResults.cameraClose.add(
497 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
498 )
499 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
500 config.testResults.totalNoPreview.add(
501 (params.timer.testEnd - params.timer.testStart) -
502 (params.timer.previewFillEnd - params.timer.previewFillStart)
503 )
504
505 multiCounter = 0
506 } else {
507 logd(
508 "Capture " +
509 (Math.abs(multiCounter - PrefHelper.getNumTests(activity)) + 1) +
510 " completed: " +
511 lastResult +
512 "ms"
513 )
514 multiCounter--
515 runMultiPhotoTest(activity, params, config)
516 return
517 }
518 }
519 TestType.MULTI_PHOTO_CHAIN -> {
520 val lastResult = params.timer.captureEnd - params.timer.captureStart
521
522 if (1 == multiCounter) {
523
524 // If this is a chain test, the camera may still be open
525 if (params.isOpen) {
526 config.testFinished = true
527 closePreviewAndCamera(activity, params, config)
528 return
529 }
530
531 params.timer.testEnd = System.currentTimeMillis()
532 logd("Test ended")
533 config.testFinished = false // Reset flag
534
535 activity.showProgressBar(true, precentageCompleted(activity, multiCounter))
536
537 config.testResults.initialization.add(params.timer.openEnd - params.timer.openStart)
538 config.testResults.previewStart.add(
539 params.timer.previewEnd - params.timer.previewStart
540 )
541 config.testResults.previewFill.add(
542 params.timer.previewFillEnd - params.timer.previewFillStart
543 )
544 config.testResults.autofocus.add(
545 params.timer.autofocusEnd - params.timer.autofocusStart
546 )
547 config.testResults.captureNoAF.add(
548 (params.timer.captureEnd - params.timer.captureStart) -
549 (params.timer.autofocusEnd - params.timer.autofocusStart)
550 )
551 config.testResults.capture.add(params.timer.captureEnd - params.timer.captureStart)
552 config.testResults.imageready.add(
553 params.timer.imageReaderEnd - params.timer.imageReaderStart
554 )
555 config.testResults.capturePlusImageReady.add(
556 (params.timer.captureEnd - params.timer.captureStart) +
557 (params.timer.imageReaderEnd - params.timer.imageReaderStart)
558 )
559 config.testResults.imagesave.add(
560 params.timer.imageSaveEnd - params.timer.imageSaveStart
561 )
562 config.testResults.isHDRPlus.add(params.timer.isHDRPlus)
563 config.testResults.previewClose.add(
564 params.timer.previewCloseEnd - params.timer.previewCloseStart
565 )
566 config.testResults.cameraClose.add(
567 params.timer.cameraCloseEnd - params.timer.cameraCloseStart
568 )
569 config.testResults.total.add(params.timer.testEnd - params.timer.testStart)
570 config.testResults.totalNoPreview.add(
571 (params.timer.testEnd - params.timer.testStart) -
572 (params.timer.previewFillEnd - params.timer.previewFillStart)
573 )
574
575 multiCounter = 0
576 } else {
577 logd(
578 "Capture " +
579 (Math.abs(multiCounter - PrefHelper.getNumTests(activity)) + 1) +
580 " completed: " +
581 lastResult +
582 "ms"
583 )
584 multiCounter--
585 runMultiPhotoChainTest(activity, params, config)
586 return
587 }
588 }
589 TestType.NONE -> {}
590 }
591
592 multiCounter = 0
593 postTestResults(activity, config)
594 }
595
596 /** Calculate the percentage of repeated tests that are complete */
precentageCompletednull597 fun precentageCompleted(activity: MainActivity, testCounter: Int): Int {
598 return (100 * (PrefHelper.getNumTests(activity) - testCounter)) /
599 PrefHelper.getNumTests(activity)
600 }
601
602 /** Test is configured, begin it based on the API in the test config */
beginTestnull603 internal fun beginTest(activity: MainActivity, params: CameraParams?, testConfig: TestConfig) {
604 if (null == params) return
605
606 when (testConfig.api) {
607 CameraAPI.CAMERA1 -> {
608 // Camera 1 doesn't have its own threading built-in
609 val runnable = Runnable { camera1OpenCamera(activity, params, testConfig) }
610 params.backgroundHandler?.post(runnable)
611 }
612 CameraAPI.CAMERA2 -> {
613 camera2OpenCamera(activity, params, testConfig)
614 }
615 CameraAPI.CAMERAX -> {
616 cameraXOpenCamera(activity, params, testConfig)
617 }
618 }
619 }
620