Add device_index parameter for camera performance test

BUG=None
TEST=Manually
Attach an external camera to a Chromebook, and pass device_index = 1

Change-Id: I3d71c8ad54c18c30a9d5f97a46727df4a13976c0
Reviewed-on: https://gerrit.chromium.org/gerrit/48636
Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org>
Commit-Queue: Justin Chuang <jchuang@chromium.org>
Tested-by: Justin Chuang <jchuang@chromium.org>
diff --git a/client/site_tests/factory_CameraPerformanceAls/factory_CameraPerformanceAls.py b/client/site_tests/factory_CameraPerformanceAls/factory_CameraPerformanceAls.py
index f9b2386..6b2fbd5 100644
--- a/client/site_tests/factory_CameraPerformanceAls/factory_CameraPerformanceAls.py
+++ b/client/site_tests/factory_CameraPerformanceAls/factory_CameraPerformanceAls.py
@@ -217,9 +217,6 @@
     version = 2
     preserve_srcdir = True
 
-    # OpenCV will automatically search for a working camera device if we use
-    # the index -1.
-    _DEVICE_INDEX = -1
     _TEST_CHART_FILE = 'test_chart.png'
     _TEST_SAMPLE_FILE = 'sample.png'
 
@@ -521,7 +518,7 @@
     def test_camera_functionality(self):
         # Initialize the camera with OpenCV.
         self.update_status(mid='init_cam')
-        cam = cv2.VideoCapture(self._DEVICE_INDEX)
+        cam = cv2.VideoCapture(self.device_index)
         if not cam.isOpened():
             cam.release()
             self.update_result('cam_stat', False)
@@ -767,7 +764,8 @@
         return
 
     def run_once(self, test_type = _TEST_TYPE_FULL, unit_test = False,
-                 use_als = True, log_good_image = False):
+                 use_als = True, log_good_image = False,
+                 device_index = -1):
         '''The entry point of the test.
 
         Args:
@@ -789,6 +787,7 @@
            use_als:    Whether to use the ambient light sensor.
            log_good_image: Log images that pass that test
                        (By default, only failed images are logged)
+           device_index: video device index (-1 to auto pick device by OpenCV)
         '''
         factory.log('%s run_once' % self.__class__)
 
@@ -801,6 +800,7 @@
         self.unit_test = unit_test
         self.use_als = use_als
         self.log_good_image = log_good_image
+        self.device_index = device_index
 
         self.talk_to_fixture = use_als
         self.config_loaded = False