From b91ab0b44fea9b20cd0a28a55603424630303d3d Mon Sep 17 00:00:00 2001 From: Thad House Date: Mon, 2 Jan 2017 23:16:35 -0800 Subject: [PATCH] Gets builds working on Windows (VS 2015) (#37) Def files will be updated after the latest PR with new definitions gets added. --- cscore-jni.def | 185 +++++++++++++---------------------- cscore.def | 68 +------------ cscore.gradle | 180 +++++++++++++++++----------------- java/lib/CameraServerJNI.cpp | 25 +++++ publish.gradle | 35 +++---- src/HttpCameraImpl.cpp | 2 + src/Image.h | 10 +- src/UsbCameraImpl.h | 2 + src/UsbUtil.cpp | 4 +- src/UsbUtil.h | 3 +- 10 files changed, 212 insertions(+), 302 deletions(-) diff --git a/cscore-jni.def b/cscore-jni.def index f1916c250d..5e1f3b6bf7 100644 --- a/cscore-jni.def +++ b/cscore-jni.def @@ -1,122 +1,71 @@ -LIBRARY CAMERASERVER +LIBRARY CSCORE EXPORTS -CS_GetPropertyType @1 -CS_GetPropertyName @2 -CS_GetBooleanProperty @3 -CS_SetBooleanProperty @4 -CS_GetDoubleProperty @5 -CS_SetDoubleProperty @6 -CS_GetDoublePropertyMin @7 -CS_GetDoublePropertyMax @8 -CS_GetStringProperty @9 -CS_SetStringProperty @10 -CS_GetEnumProperty @11 -CS_SetEnumProperty @12 -CS_GetEnumPropertyChoices @13 -CS_CreateUSBSourceDev @14 -CS_CreateUSBSourcePath @15 -CS_CreateHTTPSource @16 -CS_CreateCvSource @17 -CS_GetSourceName @18 -CS_GetSourceDescription @19 -CS_GetSourceLastFrameTime @20 -CS_GetSourceNumChannels @21 -CS_IsSourceConnected @22 -CS_GetSourceProperty @23 -CS_EnumerateSourceProperties @24 -CS_CopySource @25 -CS_ReleaseSource @26 -CS_PutSourceImage @27 -CS_NotifySourceFrame @28 -CS_PutSourceFrame @29 -CS_NotifySourceError @30 -CS_SetSourceConnected @31 -CS_CreateSourceProperty @32 -CS_CreateSourcePropertyCallback @33 -CS_RemoveSourceProperty @34 -CS_RemoveSourcePropertyByName @35 -CS_CreateHTTPSink @36 -CS_CreateCvSink @37 -CS_CreateCvSinkCallback @38 -CS_GetSinkName @39 -CS_GetSinkDescription @40 -CS_SetSinkSource @41 -CS_GetSinkSource @42 -CS_GetSinkSourceProperty @43 -CS_CopySink @44 -CS_ReleaseSink @45 -CS_SetSinkSourceChannel @46 -CS_SinkWaitForFrame @47 -CS_GetSinkImage @48 -CS_GrabSinkFrame @49 -CS_GetSinkError @50 -CS_SetSinkEnabled @51 -CS_AddSourceListener @52 -CS_RemoveSourceListener @53 -CS_AddSinkListener @54 -CS_RemoveSinkListener @55 -CS_EnumerateUSBCameras @56 -CS_FreeEnumeratedUSBCameras @57 -CS_EnumerateSources @58 -CS_ReleaseEnumeratedSources @59 -CS_EnumerateSinks @60 -CS_ReleaseEnumeratedSinks @61 -CS_FreeString @62 -CS_FreeEnumPropertyChoices @63 -CS_FreeEnumeratedProperties @64 -CS_GrabSinkFrameCpp @65 -CS_PutSourceFrameCpp @66 - ; JNI functions JNI_OnLoad JNI_OnUnload -Java_edu_wpi_cameraserver_CameraServerJNI_getPropertyType -Java_edu_wpi_cameraserver_CameraServerJNI_getPropertyName -Java_edu_wpi_cameraserver_CameraServerJNI_getBooleanProperty -Java_edu_wpi_cameraserver_CameraServerJNI_setBooleanProperty -Java_edu_wpi_cameraserver_CameraServerJNI_getDoubleProperty -Java_edu_wpi_cameraserver_CameraServerJNI_setDoubleProperty -Java_edu_wpi_cameraserver_CameraServerJNI_getDoublePropertyMin -Java_edu_wpi_cameraserver_CameraServerJNI_getDoublePropertyMax -Java_edu_wpi_cameraserver_CameraServerJNI_getStringProperty -Java_edu_wpi_cameraserver_CameraServerJNI_setStringProperty -Java_edu_wpi_cameraserver_CameraServerJNI_getEnumProperty -Java_edu_wpi_cameraserver_CameraServerJNI_setEnumProperty -Java_edu_wpi_cameraserver_CameraServerJNI_getEnumPropertyChoices -Java_edu_wpi_cameraserver_CameraServerJNI_createUSBSourceDev -Java_edu_wpi_cameraserver_CameraServerJNI_createUSBSourcePath -Java_edu_wpi_cameraserver_CameraServerJNI_createHTTPSource -Java_edu_wpi_cameraserver_CameraServerJNI_createCvSource -Java_edu_wpi_cameraserver_CameraServerJNI_getSourceName -Java_edu_wpi_cameraserver_CameraServerJNI_getSourceDescription -Java_edu_wpi_cameraserver_CameraServerJNI_getSourceLastFrameTime -Java_edu_wpi_cameraserver_CameraServerJNI_getSourceNumChannels -Java_edu_wpi_cameraserver_CameraServerJNI_isSourceConnected -Java_edu_wpi_cameraserver_CameraServerJNI_getSourceProperty -Java_edu_wpi_cameraserver_CameraServerJNI_enumerateSourceProperties -Java_edu_wpi_cameraserver_CameraServerJNI_copySource -Java_edu_wpi_cameraserver_CameraServerJNI_releaseSource -Java_edu_wpi_cameraserver_CameraServerJNI_notifySourceFrame -Java_edu_wpi_cameraserver_CameraServerJNI_notifySourceError -Java_edu_wpi_cameraserver_CameraServerJNI_setSourceConnected -Java_edu_wpi_cameraserver_CameraServerJNI_createSourceProperty -Java_edu_wpi_cameraserver_CameraServerJNI_removeSourceProperty -Java_edu_wpi_cameraserver_CameraServerJNI_removeSourcePropertyByName -Java_edu_wpi_cameraserver_CameraServerJNI_createHTTPSink -Java_edu_wpi_cameraserver_CameraServerJNI_createCvSink -Java_edu_wpi_cameraserver_CameraServerJNI_getSinkName -Java_edu_wpi_cameraserver_CameraServerJNI_getSinkDescription -Java_edu_wpi_cameraserver_CameraServerJNI_setSinkSource -Java_edu_wpi_cameraserver_CameraServerJNI_getSinkSourceProperty -Java_edu_wpi_cameraserver_CameraServerJNI_getSinkSource -Java_edu_wpi_cameraserver_CameraServerJNI_copySink -Java_edu_wpi_cameraserver_CameraServerJNI_releaseSink -Java_edu_wpi_cameraserver_CameraServerJNI_setSinkSourceChannel -Java_edu_wpi_cameraserver_CameraServerJNI_sinkWaitForFrame -Java_edu_wpi_cameraserver_CameraServerJNI_getSinkError -Java_edu_wpi_cameraserver_CameraServerJNI_setSinkEnabled -Java_edu_wpi_cameraserver_CameraServerJNI_removeSourceListener -Java_edu_wpi_cameraserver_CameraServerJNI_removeSinkListener -Java_edu_wpi_cameraserver_CameraServerJNI_enumerateUSBCameras -Java_edu_wpi_cameraserver_CameraServerJNI_enumerateSources -Java_edu_wpi_cameraserver_CameraServerJNI_enumerateSinks +Java_edu_wpi_cscore_CameraServerJNI_getPropertyKind +Java_edu_wpi_cscore_CameraServerJNI_getPropertyName +Java_edu_wpi_cscore_CameraServerJNI_getProperty +Java_edu_wpi_cscore_CameraServerJNI_setProperty +Java_edu_wpi_cscore_CameraServerJNI_getPropertyMin +Java_edu_wpi_cscore_CameraServerJNI_getPropertyMax +Java_edu_wpi_cscore_CameraServerJNI_getPropertyStep +Java_edu_wpi_cscore_CameraServerJNI_getPropertyDefault +Java_edu_wpi_cscore_CameraServerJNI_getStringProperty +Java_edu_wpi_cscore_CameraServerJNI_setStringProperty +Java_edu_wpi_cscore_CameraServerJNI_getEnumPropertyChoices +Java_edu_wpi_cscore_CameraServerJNI_createUsbCameraDev +Java_edu_wpi_cscore_CameraServerJNI_createUsbCameraPath +Java_edu_wpi_cscore_CameraServerJNI_createHttpCamera +Java_edu_wpi_cscore_CameraServerJNI_createHttpCameraMulti +Java_edu_wpi_cscore_CameraServerJNI_createCvSource +Java_edu_wpi_cscore_CameraServerJNI_getSourceKind +Java_edu_wpi_cscore_CameraServerJNI_getSourceName +Java_edu_wpi_cscore_CameraServerJNI_getSourceDescription +Java_edu_wpi_cscore_CameraServerJNI_getSourceLastFrameTime +Java_edu_wpi_cscore_CameraServerJNI_isSourceConnected +Java_edu_wpi_cscore_CameraServerJNI_getSourceProperty +Java_edu_wpi_cscore_CameraServerJNI_enumerateSourceProperties +Java_edu_wpi_cscore_CameraServerJNI_getSourceVideoMode +Java_edu_wpi_cscore_CameraServerJNI_setSourceVideoMode +Java_edu_wpi_cscore_CameraServerJNI_setSourcePixelFormat +Java_edu_wpi_cscore_CameraServerJNI_setSourceResolution +Java_edu_wpi_cscore_CameraServerJNI_setSourceFPS +Java_edu_wpi_cscore_CameraServerJNI_enumerateSourceVideoModes +Java_edu_wpi_cscore_CameraServerJNI_enumerateSourceSinks +Java_edu_wpi_cscore_CameraServerJNI_copySource +Java_edu_wpi_cscore_CameraServerJNI_releaseSource +Java_edu_wpi_cscore_CameraServerJNI_getUsbCameraPath +Java_edu_wpi_cscore_CameraServerJNI_getHttpCameraKind +Java_edu_wpi_cscore_CameraServerJNI_setHttpCameraUrls +Java_edu_wpi_cscore_CameraServerJNI_getHttpCameraUrls +Java_edu_wpi_cscore_CameraServerJNI_putSourceFrame +Java_edu_wpi_cscore_CameraServerJNI_notifySourceError +Java_edu_wpi_cscore_CameraServerJNI_setSourceConnected +Java_edu_wpi_cscore_CameraServerJNI_setSourceDescription +Java_edu_wpi_cscore_CameraServerJNI_createSourceProperty +Java_edu_wpi_cscore_CameraServerJNI_setSourceEnumPropertyChoices +Java_edu_wpi_cscore_CameraServerJNI_createMjpegServer +Java_edu_wpi_cscore_CameraServerJNI_createCvSink +Java_edu_wpi_cscore_CameraServerJNI_getSinkKind +Java_edu_wpi_cscore_CameraServerJNI_getSinkName +Java_edu_wpi_cscore_CameraServerJNI_getSinkDescription +Java_edu_wpi_cscore_CameraServerJNI_setSinkSource +Java_edu_wpi_cscore_CameraServerJNI_getSinkSourceProperty +Java_edu_wpi_cscore_CameraServerJNI_getSinkSource +Java_edu_wpi_cscore_CameraServerJNI_copySink +Java_edu_wpi_cscore_CameraServerJNI_releaseSink +Java_edu_wpi_cscore_CameraServerJNI_getMjpegServerListenAddress +Java_edu_wpi_cscore_CameraServerJNI_getMjpegServerPort +Java_edu_wpi_cscore_CameraServerJNI_setSinkDescription +Java_edu_wpi_cscore_CameraServerJNI_grabSinkFrame +Java_edu_wpi_cscore_CameraServerJNI_getSinkError +Java_edu_wpi_cscore_CameraServerJNI_setSinkEnabled +Java_edu_wpi_cscore_CameraServerJNI_addListener +Java_edu_wpi_cscore_CameraServerJNI_removeListener +Java_edu_wpi_cscore_CameraServerJNI_setLogger +Java_edu_wpi_cscore_CameraServerJNI_enumerateUsbCameras +Java_edu_wpi_cscore_CameraServerJNI_enumerateSources +Java_edu_wpi_cscore_CameraServerJNI_enumerateSinks +Java_edu_wpi_cscore_CameraServerJNI_getHostname +Java_edu_wpi_cscore_CameraServerJNI_getNetworkInterfaces \ No newline at end of file diff --git a/cscore.def b/cscore.def index ded95c3c24..a37a40d3d6 100644 --- a/cscore.def +++ b/cscore.def @@ -1,68 +1,2 @@ -LIBRARY CAMERASERVER +LIBRARY CSCORE EXPORTS -CS_GetPropertyType @1 -CS_GetPropertyName @2 -CS_GetBooleanProperty @3 -CS_SetBooleanProperty @4 -CS_GetDoubleProperty @5 -CS_SetDoubleProperty @6 -CS_GetDoublePropertyMin @7 -CS_GetDoublePropertyMax @8 -CS_GetStringProperty @9 -CS_SetStringProperty @10 -CS_GetEnumProperty @11 -CS_SetEnumProperty @12 -CS_GetEnumPropertyChoices @13 -CS_CreateUSBSourceDev @14 -CS_CreateUSBSourcePath @15 -CS_CreateHTTPSource @16 -CS_CreateCvSource @17 -CS_GetSourceName @18 -CS_GetSourceDescription @19 -CS_GetSourceLastFrameTime @20 -CS_GetSourceNumChannels @21 -CS_IsSourceConnected @22 -CS_GetSourceProperty @23 -CS_EnumerateSourceProperties @24 -CS_CopySource @25 -CS_ReleaseSource @26 -CS_PutSourceImage @27 -CS_NotifySourceFrame @28 -CS_PutSourceFrame @29 -CS_NotifySourceError @30 -CS_SetSourceConnected @31 -CS_CreateSourceProperty @32 -CS_CreateSourcePropertyCallback @33 -CS_RemoveSourceProperty @34 -CS_RemoveSourcePropertyByName @35 -CS_CreateHTTPSink @36 -CS_CreateCvSink @37 -CS_CreateCvSinkCallback @38 -CS_GetSinkName @39 -CS_GetSinkDescription @40 -CS_SetSinkSource @41 -CS_GetSinkSource @42 -CS_GetSinkSourceProperty @43 -CS_CopySink @44 -CS_ReleaseSink @45 -CS_SetSinkSourceChannel @46 -CS_SinkWaitForFrame @47 -CS_GetSinkImage @48 -CS_GrabSinkFrame @49 -CS_GetSinkError @50 -CS_SetSinkEnabled @51 -CS_AddSourceListener @52 -CS_RemoveSourceListener @53 -CS_AddSinkListener @54 -CS_RemoveSinkListener @55 -CS_EnumerateUSBCameras @56 -CS_FreeEnumeratedUSBCameras @57 -CS_EnumerateSources @58 -CS_ReleaseEnumeratedSources @59 -CS_EnumerateSinks @60 -CS_ReleaseEnumeratedSinks @61 -CS_FreeString @62 -CS_FreeEnumPropertyChoices @63 -CS_FreeEnumeratedProperties @64 -CS_GrabSinkFrameCpp @65 -CS_PutSourceFrameCpp @66 diff --git a/cscore.gradle b/cscore.gradle index 095adfe9d3..5c82a58d3a 100644 --- a/cscore.gradle +++ b/cscore.gradle @@ -52,94 +52,96 @@ def cscoreSetupModel = { project -> def cscoreSetupExamplesModel = { project -> project.model { components { - enum_usb(NativeExecutableSpec) { - if (project.isArm) { - targetPlatform 'arm' - } else { - //targetPlatform 'x86' - targetPlatform 'x64' - } - setupDefines(project, binaries) - sources { - cpp { - source { - srcDir "${rootDir}/examples/enum_usb" - include '**/*.cpp' + if (!OperatingSystem.current().isWindows() && !project.isArm) { + enum_usb(NativeExecutableSpec) { + if (project.isArm) { + targetPlatform 'arm' + } else { + //targetPlatform 'x86' + targetPlatform 'x64' + } + setupDefines(project, binaries) + sources { + cpp { + source { + srcDir "${rootDir}/examples/enum_usb" + include '**/*.cpp' + } + exportedHeaders { + srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include"] + include '**/*.h' + } + lib library: 'cscore', linkage: 'static' } - exportedHeaders { - srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include"] - include '**/*.h' - } - lib library: 'cscore', linkage: 'static' } } - } - usbstream(NativeExecutableSpec) { - if (project.isArm) { - targetPlatform 'arm' - } else { - //targetPlatform 'x86' - targetPlatform 'x64' - } - setupDefines(project, binaries) - sources { - cpp { - source { - srcDir "${rootDir}/examples/usbstream" - include '**/*.cpp' + usbstream(NativeExecutableSpec) { + if (project.isArm) { + targetPlatform 'arm' + } else { + //targetPlatform 'x86' + targetPlatform 'x64' + } + setupDefines(project, binaries) + sources { + cpp { + source { + srcDir "${rootDir}/examples/usbstream" + include '**/*.cpp' + } + exportedHeaders { + srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include"] + include '**/*.h' + } + lib library: 'cscore', linkage: 'static' } - exportedHeaders { - srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include"] - include '**/*.h' - } - lib library: 'cscore', linkage: 'static' } } - } - usbcvstream(NativeExecutableSpec) { - if (project.isArm) { - targetPlatform 'arm' - } else { - //targetPlatform 'x86' - targetPlatform 'x64' - } - setupDefines(project, binaries) - sources { - cpp { - source { - srcDir "${rootDir}/examples/usbcvstream" - include '**/*.cpp' + usbcvstream(NativeExecutableSpec) { + if (project.isArm) { + targetPlatform 'arm' + } else { + //targetPlatform 'x86' + targetPlatform 'x64' + } + setupDefines(project, binaries) + sources { + cpp { + source { + srcDir "${rootDir}/examples/usbcvstream" + include '**/*.cpp' + } + exportedHeaders { + srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include", project.openCvInclude] + include '**/*.h' + } + lib library: 'cscore', linkage: 'static' } - exportedHeaders { - srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include", project.openCvInclude] - include '**/*.h' - } - lib library: 'cscore', linkage: 'static' } } - } - settings(NativeExecutableSpec) { - if (project.isArm) { - targetPlatform 'arm' - } else { - //targetPlatform 'x86' - targetPlatform 'x64' - } - setupDefines(project, binaries) - sources { - cpp { - source { - srcDir "${rootDir}/examples/settings" - include '**/*.cpp' + settings(NativeExecutableSpec) { + if (project.isArm) { + targetPlatform 'arm' + } else { + //targetPlatform 'x86' + targetPlatform 'x64' + } + setupDefines(project, binaries) + sources { + cpp { + source { + srcDir "${rootDir}/examples/settings" + include '**/*.cpp' + } + exportedHeaders { + srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include", project.openCvInclude] + include '**/*.h' + } + lib library: 'cscore', linkage: 'static' } - exportedHeaders { - srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include", project.openCvInclude] - include '**/*.h' - } - lib library: 'cscore', linkage: 'static' } } } @@ -298,25 +300,23 @@ if (buildArm) { } project(':native') { - if (!OperatingSystem.current().isWindows()) { - apply plugin: 'cpp' + apply plugin: 'cpp' - apply from: "${rootDir}/toolchains/native.gradle" + apply from: "${rootDir}/toolchains/native.gradle" - //if (!project.hasProperty("withoutTests")) { - // apply from: "${rootDir}/test/tests.gradle" - //} + //if (!project.hasProperty("withoutTests")) { + // apply from: "${rootDir}/test/tests.gradle" + //} - if (includeJava) { - apply from: "${rootDir}/java/java.gradle" - } - - cscoreSetupModel(project) - cscoreSetupExamplesModel(project) - cscoreZipTask(project) - useWpiUtil(project) - useOpenCv(project) + if (includeJava) { + apply from: "${rootDir}/java/java.gradle" } + + cscoreSetupModel(project) + cscoreSetupExamplesModel(project) + cscoreZipTask(project) + useWpiUtil(project) + useOpenCv(project) } task cscoreSourceZip(type: Zip) { diff --git a/java/lib/CameraServerJNI.cpp b/java/lib/CameraServerJNI.cpp index faa0a48729..4460caa906 100644 --- a/java/lib/CameraServerJNI.cpp +++ b/java/lib/CameraServerJNI.cpp @@ -26,6 +26,7 @@ static JClass videoModeCls; static JClass videoEventCls; static JException videoEx; static JException nullPointerEx; +static JException unsupportedEx; // Thread-attached environment for listener callbacks. static JNIEnv *listenerEnv = nullptr; @@ -74,6 +75,9 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { nullPointerEx = JException(env, "java/lang/NullPointerException"); if (!nullPointerEx) return JNI_ERR; + unsupportedEx = JException(env, "java/lang/UnsupportedOperationException"); + if (!unsupportedEx) return JNI_ERR; + // Initial configuration of listener start/exit cs::SetListenerOnStart(ListenerOnStart); cs::SetListenerOnExit(ListenerOnExit); @@ -91,6 +95,7 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) { videoEventCls.free(env); videoEx.free(env); nullPointerEx.free(env); + unsupportedEx.free(env); jvm = nullptr; } @@ -381,6 +386,10 @@ JNIEXPORT jobjectArray JNICALL Java_edu_wpi_cscore_CameraServerJNI_getEnumProper JNIEXPORT jint JNICALL Java_edu_wpi_cscore_CameraServerJNI_createUsbCameraDev (JNIEnv *env, jclass, jstring name, jint dev) { +#ifdef _WIN32 + unsupportedEx.Throw(env, "USB is not supported yet"); + return 0; +#else if (!name) { nullPointerEx.Throw(env, "name cannot be null"); return 0; @@ -389,6 +398,7 @@ JNIEXPORT jint JNICALL Java_edu_wpi_cscore_CameraServerJNI_createUsbCameraDev auto val = cs::CreateUsbCameraDev(JStringRef{env, name}, dev, &status); CheckStatus(env, status); return val; +#endif } /* @@ -399,6 +409,10 @@ JNIEXPORT jint JNICALL Java_edu_wpi_cscore_CameraServerJNI_createUsbCameraDev JNIEXPORT jint JNICALL Java_edu_wpi_cscore_CameraServerJNI_createUsbCameraPath (JNIEnv *env, jclass, jstring name, jstring path) { +#ifdef _WIN32 + unsupportedEx.Throw(env, "USB is not supported yet"); + return 0; +#else if (!name) { nullPointerEx.Throw(env, "name cannot be null"); return 0; @@ -412,6 +426,7 @@ JNIEXPORT jint JNICALL Java_edu_wpi_cscore_CameraServerJNI_createUsbCameraPath JStringRef{env, path}, &status); CheckStatus(env, status); return val; +#endif } /* @@ -750,10 +765,15 @@ JNIEXPORT void JNICALL Java_edu_wpi_cscore_CameraServerJNI_releaseSource JNIEXPORT jstring JNICALL Java_edu_wpi_cscore_CameraServerJNI_getUsbCameraPath (JNIEnv *env, jclass, jint source) { +#ifdef _WIN32 + unsupportedEx.Throw(env, "USB is not supported yet"); + return 0; +#else CS_Status status = 0; auto str = cs::GetUsbCameraPath(source, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJString(env, str); +#endif } /* @@ -1239,6 +1259,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_cscore_CameraServerJNI_removeListener JNIEXPORT jobjectArray JNICALL Java_edu_wpi_cscore_CameraServerJNI_enumerateUsbCameras (JNIEnv *env, jclass) { +#ifdef _WIN32 + unsupportedEx.Throw(env, "USB is not supported yet"); + return 0; +#else CS_Status status = 0; auto arr = cs::EnumerateUsbCameras(&status); if (!CheckStatus(env, status)) return nullptr; @@ -1250,6 +1274,7 @@ JNIEXPORT jobjectArray JNICALL Java_edu_wpi_cscore_CameraServerJNI_enumerateUsbC env->SetObjectArrayElement(jarr, i, jelem); } return jarr; +#endif } /* diff --git a/publish.gradle b/publish.gradle index 007a691306..a94c435c6b 100644 --- a/publish.gradle +++ b/publish.gradle @@ -25,9 +25,7 @@ task clean(type: Delete) { outputVersions.mustRunAfter clean -if (!OperatingSystem.current().isWindows()) { - project(':native').build.dependsOn outputVersions -} +project(':native').build.dependsOn outputVersions if (project.buildArm) { project(':arm').build.dependsOn outputVersions } @@ -45,13 +43,10 @@ publishing { def nat = project('native') if (!project.hasProperty('skipJava')) { java(MavenPublication) { - if (!OperatingSystem.current().isWindows()) { - artifact nat.jar - if (!project.buildArm) { - artifact nat.cscoreJavaSource - artifact nat.cscoreJavadoc - } - + artifact nat.jar + if (!project.buildArm) { + artifact nat.cscoreJavaSource + artifact nat.cscoreJavadoc } if (project.buildArm) { def camArm = project('arm') @@ -66,11 +61,9 @@ publishing { artifact camArm.cscoreJavaSource artifact camArm.cscoreJavadoc } - if (!OperatingSystem.current().isWindows()) { - if (project.hasProperty('makeDesktop')) { - artifact nat.jar, { - classifier = 'desktop' - } + if (project.hasProperty('makeDesktop')) { + artifact nat.jar, { + classifier = 'desktop' } } @@ -80,9 +73,7 @@ publishing { } } cpp(MavenPublication) { - if (!OperatingSystem.current().isWindows()) { - artifact nat.cscoreZip - } + artifact nat.cscoreZip artifact cscoreSourceZip if (project.buildArm) { artifact project(':arm').cscoreZip @@ -92,11 +83,9 @@ publishing { } } } - if (!OperatingSystem.current().isWindows()) { - if (project.hasProperty('makeDesktop')) { - artifact nat.cscoreZip, { - classifier = 'desktop' - } + if (project.hasProperty('makeDesktop')) { + artifact nat.cscoreZip, { + classifier = 'desktop' } } diff --git a/src/HttpCameraImpl.cpp b/src/HttpCameraImpl.cpp index c5cc04c386..600ce67657 100644 --- a/src/HttpCameraImpl.cpp +++ b/src/HttpCameraImpl.cpp @@ -51,12 +51,14 @@ void HttpCameraImpl::Start() { m_settingsThread = std::thread(&HttpCameraImpl::SettingsThreadMain, this); } +#ifndef _WIN32 static inline void DoFdSet(int fd, fd_set* set, int* nfds) { if (fd >= 0) { FD_SET(fd, set); if ((fd + 1) > *nfds) *nfds = fd + 1; } } +#endif void HttpCameraImpl::StreamThreadMain() { while (m_active) { diff --git a/src/Image.h b/src/Image.h index dd9df29f99..f20bdf830e 100644 --- a/src/Image.h +++ b/src/Image.h @@ -25,10 +25,18 @@ class Image { friend class Frame; public: + +#ifdef _WIN32 + explicit Image(std::size_t capacity) { + m_data.reserve(capacity); + } +#else explicit Image(std::size_t capacity) - : m_data{capacity, default_init_allocator{}} { + : m_data{capacity, default_init_allocator{}} { m_data.resize(0); } +#endif + Image(const Image&) = delete; Image& operator=(const Image&) = delete; diff --git a/src/UsbCameraImpl.h b/src/UsbCameraImpl.h index e26dc30267..9b5a8c80d0 100644 --- a/src/UsbCameraImpl.h +++ b/src/UsbCameraImpl.h @@ -132,7 +132,9 @@ class UsbCameraImpl : public SourceImpl { #endif // Number of buffers to ask OS for static constexpr int kNumBuffers = 4; +#ifdef __linux__ std::array m_buffers; +#endif // // Path never changes, so not protected by mutex. diff --git a/src/UsbUtil.cpp b/src/UsbUtil.cpp index bfcca07938..6632bc22ca 100644 --- a/src/UsbUtil.cpp +++ b/src/UsbUtil.cpp @@ -23,6 +23,8 @@ namespace cs { +#ifdef __linux__ + static llvm::StringRef GetUsbNameFromFile(int vendor, int product, llvm::SmallVectorImpl& buf) { int fd = open("/var/lib/usbutils/usb.ids", O_RDONLY); @@ -110,8 +112,6 @@ llvm::StringRef GetUsbNameFromId(int vendor, int product, return os.str(); } -#ifdef __linux__ - int CheckedIoctl(int fd, unsigned long req, void* data, const char* name, const char* file, int line, bool quiet) { int retval = ioctl(fd, req, data); diff --git a/src/UsbUtil.h b/src/UsbUtil.h index 4ad6eadf9c..a557d43a1c 100644 --- a/src/UsbUtil.h +++ b/src/UsbUtil.h @@ -13,10 +13,11 @@ namespace cs { +#ifdef __linux__ + llvm::StringRef GetUsbNameFromId(int vendor, int product, llvm::SmallVectorImpl& buf); -#ifdef __linux__ int CheckedIoctl(int fd, unsigned long req, void* data, const char* name, const char* file, int line, bool quiet);