[cscore] Add support for USB cameras on macOS (#4846)

The main restriction is there must be an event loop running on the main thread.
No special action is required for GUI applications, but for non-GUI applications, a
RunOsxRunLoop() function is provided that needs to be called from the main thread.
This commit is contained in:
Thad House
2022-12-25 07:36:00 -08:00
committed by GitHub
parent 1696a490fa
commit b893b3d6d3
26 changed files with 1379 additions and 96 deletions

View File

@@ -50,6 +50,7 @@ class SourceImpl : public PropertyContainer {
void SetConnectionStrategy(CS_ConnectionStrategy strategy) {
m_strategy = static_cast<int>(strategy);
NumSinksChanged();
}
bool IsEnabled() const {
return m_strategy == CS_CONNECTION_KEEP_OPEN ||

View File

@@ -154,7 +154,7 @@ template <typename T>
inline std::span<T>
UnlimitedHandleResource<THandle, TStruct, typeValue, TMutex>::GetAll(
wpi::SmallVectorImpl<T>& vec) {
ForEach([&](THandle handle, const TStruct& data) { vec.push_back(handle); });
ForEach([&](THandle handle, const TStruct&) { vec.push_back(handle); });
return vec;
}

View File

@@ -13,6 +13,7 @@
#include "cscore_cpp.h"
#include "cscore_cv.h"
#include "cscore_raw.h"
#include "cscore_runloop.h"
#include "edu_wpi_first_cscore_CameraServerJNI.h"
namespace cv {
@@ -2226,4 +2227,40 @@ Java_edu_wpi_first_cscore_CameraServerJNI_freeRawFrame
delete ptr;
}
/*
* Class: edu_wpi_first_cscore_CameraServerJNI
* Method: runOsxRunLoop
* Signature: ()V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_cscore_CameraServerJNI_runOsxRunLoop
(JNIEnv*, jclass)
{
cs::RunOsxRunLoop();
}
/*
* Class: edu_wpi_first_cscore_CameraServerJNI
* Method: runOsxRunLoopTimeout
* Signature: (D)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_cscore_CameraServerJNI_runOsxRunLoopTimeout
(JNIEnv*, jclass, jdouble timeoutSeconds)
{
return cs::RunOsxRunLoopTimeout(timeoutSeconds);
}
/*
* Class: edu_wpi_first_cscore_CameraServerJNI
* Method: stopOsxMainRunLoop
* Signature: ()V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_cscore_CameraServerJNI_stopOsxMainRunLoop
(JNIEnv*, jclass)
{
return cs::StopOsxMainRunLoop();
}
} // extern "C"