diff --git a/cscore/src/main/native/objcpp/UsbCameraImpl.h b/cscore/src/main/native/objcpp/UsbCameraImpl.h index 0fd09fb7e1c..86b1166b056 100644 --- a/cscore/src/main/native/objcpp/UsbCameraImpl.h +++ b/cscore/src/main/native/objcpp/UsbCameraImpl.h @@ -91,6 +91,5 @@ class UsbCameraImpl : public SourceImpl { private: UsbCameraImplObjc* m_objc; std::vector m_platformModes; - VideoMode m_mode; }; } // namespace cs diff --git a/cscore/src/main/native/objcpp/UsbCameraImplObjc.mm b/cscore/src/main/native/objcpp/UsbCameraImplObjc.mm index 0e9d65fb4c1..5d43de7f321 100644 --- a/cscore/src/main/native/objcpp/UsbCameraImplObjc.mm +++ b/cscore/src/main/native/objcpp/UsbCameraImplObjc.mm @@ -380,22 +380,27 @@ - (AVCaptureDeviceFormat*)deviceCheckModeValid:(const cs::VideoMode*)toCheck toCheck->height, toCheck->fps); std::vector& platformModes = sharedThis->objcGetPlatformVideoModes(); - // Find the matching mode - auto match = std::find_if(platformModes.begin(), platformModes.end(), - [&](CameraModeStore& input) { - return input.mode.CompareWithoutFps(*toCheck); - }); + + // Find all matching modes + std::vector matchingModes; + for (auto& mode : platformModes) { + if (mode.mode.CompareWithoutFps(*toCheck)) { + matchingModes.push_back(&mode); + } + } - if (match == platformModes.end()) { + if (matchingModes.empty()) { return nil; } // Check FPS - for (CameraFPSRange& range : match->fpsRanges) { - OBJCDEBUG3("Checking Range {} {}", range.min, range.max); - if (range.IsWithinRange(toCheck->fps)) { - *fps = toCheck->fps; - return match->format; + for (auto mode : matchingModes) { + for (CameraFPSRange& range : mode->fpsRanges) { + OBJCDEBUG3("Checking Range {} {}", range.min, range.max); + if (range.IsWithinRange(toCheck->fps)) { + *fps = toCheck->fps; + return mode->format; + } } }