fix: AVFoundation inconsistent camera indices
authorVadim Levin <vadim.levin@xperience.ai>
Mon, 12 Dec 2022 07:41:39 +0000 (10:41 +0300)
committerVadim Levin <vadim.levin@xperience.ai>
Mon, 12 Dec 2022 14:15:46 +0000 (17:15 +0300)
modules/videoio/src/cap_avfoundation_mac.mm

index 3049b4ba6e6b4baed4e482de93ab5fe64cdd24c9..504bdb9ce9cf3a5b8c18b77883e85cd41c8987d1 100644 (file)
@@ -376,6 +376,15 @@ int CvCaptureCAM::startCaptureDevice(int cameraNum) {
         return 0;
     }
 
+    // Preserve devices ordering on the system
+    // see AVCaptureDevice::uniqueID property documentation for more info
+    devices = [devices
+        sortedArrayUsingComparator:^NSComparisonResult(AVCaptureDevice *d1,
+                                                     AVCaptureDevice *d2) {
+          return [d1.uniqueID compare:d2.uniqueID];
+        }
+    ];
+
     mCaptureDevice = devices[cameraNum];
 
     if ( ! mCaptureDevice ) {