From bfe15245a625d8e30351fc1096d2df1ca71210c3 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Fri, 7 Dec 2018 23:57:37 -0800 Subject: [PATCH] Add multiCameraServer executable (#1422) This standalone CameraServer reads its configuration from a json file. --- cameraserver/multiCameraServer/build.gradle | 62 +++++ .../multiCameraServer/src/main/java/Main.java | 211 ++++++++++++++++++ .../src/main/native/cpp/main.cpp | 190 ++++++++++++++++ settings.gradle | 1 + 4 files changed, 464 insertions(+) create mode 100644 cameraserver/multiCameraServer/build.gradle create mode 100644 cameraserver/multiCameraServer/src/main/java/Main.java create mode 100644 cameraserver/multiCameraServer/src/main/native/cpp/main.cpp diff --git a/cameraserver/multiCameraServer/build.gradle b/cameraserver/multiCameraServer/build.gradle new file mode 100644 index 0000000000..c49cfb00c3 --- /dev/null +++ b/cameraserver/multiCameraServer/build.gradle @@ -0,0 +1,62 @@ +plugins { + id 'java' + id 'application' + id 'cpp' + id 'visual-studio' +} + +apply plugin: 'edu.wpi.first.NativeUtils' + +apply from: "${rootDir}/shared/config.gradle" + +ext { + staticCvConfigs = [multiCameraServerCpp: []] + useJava = true + useCpp = true + skipDev = true +} + +apply from: "${rootDir}/shared/opencv.gradle" + +mainClassName = 'Main' + +apply plugin: 'com.github.johnrengelman.shadow' + +repositories { + mavenCentral() +} + +dependencies { + compile 'com.google.code.gson:gson:2.8.5' + + compile project(':wpiutil') + compile project(':ntcore') + compile project(':cscore') + compile project(':cameraserver') +} + +model { + components { + multiCameraServerCpp(NativeExecutableSpec) { + targetBuildTypes 'release' + sources { + cpp { + source { + srcDirs = ['src/main/native/cpp'] + includes = ['**/*.cpp'] + } + exportedHeaders { + srcDirs = ['src/main/native/include'] + includes = ['**/*.h'] + } + } + } + binaries.all { binary -> + lib project: ':cameraserver', library: 'cameraserver', linkage: 'static' + lib project: ':ntcore', library: 'ntcore', linkage: 'static' + lib project: ':cscore', library: 'cscore', linkage: 'static' + lib project: ':wpiutil', library: 'wpiutil', linkage: 'static' + } + } + } +} diff --git a/cameraserver/multiCameraServer/src/main/java/Main.java b/cameraserver/multiCameraServer/src/main/java/Main.java new file mode 100644 index 0000000000..8bcc54d031 --- /dev/null +++ b/cameraserver/multiCameraServer/src/main/java/Main.java @@ -0,0 +1,211 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import edu.wpi.cscore.VideoSource; +import edu.wpi.first.cameraserver.CameraServer; +import edu.wpi.first.networktables.NetworkTableInstance; + +/* + JSON format: + { + "team": , + "ntmode": <"client" or "server", "client" if unspecified> + "cameras": [ + { + "name": + "path": + "pixel format": <"MJPEG", "YUYV", etc> // optional + "width":