diff --git a/cameraserver.gradle b/cameraserver.gradle index 2dd770fed0..cc8ba3be43 100644 --- a/cameraserver.gradle +++ b/cameraserver.gradle @@ -111,6 +111,35 @@ def cameraserverSetupExamplesModel = { project -> } } } + + usbcvstream(NativeExecutableSpec) { + if (project.isArm) { + targetPlatform 'arm' + } else { + //targetPlatform 'x86' + targetPlatform 'x64' + } + setupDefines(project, binaries) + binaries.all { + tasks.withType(CppCompile) { + project.addOpenCvLibraryLinks(it, linker, targetPlatform) + project.addWpiUtilLibraryLinks(it, linker, targetPlatform) + } + } + sources { + cpp { + source { + srcDir "${rootDir}/examples/usbcvstream" + include '**/*.cpp' + } + exportedHeaders { + srcDirs = ["${rootDir}/include", "${rootDir}/wpiutil/include", project.openCvInclude] + include '**/*.h' + } + lib library: 'cameraserver', linkage: 'static' + } + } + } } } } diff --git a/examples/usbcvstream/usbcvstream.cpp b/examples/usbcvstream/usbcvstream.cpp new file mode 100644 index 0000000000..35ecb7cf80 --- /dev/null +++ b/examples/usbcvstream/usbcvstream.cpp @@ -0,0 +1,27 @@ +#include "cameraserver.h" +#include "opencv2/core/core.hpp" + +#include +#include + +int main() { + cs::USBCamera camera{"usbcam", 0}; + camera.SetVideoMode(cs::VideoMode::kMJPEG, 320, 240, 30); + cs::MJPEGServer mjpegServer{"httpserver", 8080}; + mjpegServer.SetSource(camera); + cs::CvSink cvsink{"cvsink"}; + cvsink.SetSource(camera); + cs::CvSource cvsource{"cvsource", cs::VideoMode::kMJPEG, 320, 240, 30}; + cs::MJPEGServer cvMjpegServer{"cvhttpserver", 8081}; + cvMjpegServer.SetSource(cvsource); + + cv::Mat test; + cv::Mat flip; + for (;;) { + uint64_t time = cvsink.GrabFrame(test); + std::cout << "got frame at time " << time << " size " << test.size() << std::endl; + if (time == 0) continue; + cv::flip(test, flip, 0); + cvsource.PutFrame(flip); + } +}