diff --git a/TeamCode/src/main/java/teamcode/RobotParams.java b/TeamCode/src/main/java/teamcode/RobotParams.java index a420463..9bbe5d2 100644 --- a/TeamCode/src/main/java/teamcode/RobotParams.java +++ b/TeamCode/src/main/java/teamcode/RobotParams.java @@ -148,9 +148,10 @@ public class RobotParams public static final boolean useWebCam = false; // false to use Android phone camera. public static final boolean useBuiltinCamBack = false; // For Android Phone as Robot Controller. public static final boolean tuneColorBlobVision = false; + public static final boolean useLimelightVision = false; + public static final boolean useCameraStreamProcessor = false; public static final boolean useAprilTagVision = false; public static final boolean useColorBlobVision = false; - public static final boolean useLimelightVision = false; public static final boolean showVisionView = !inCompetition; public static final boolean showVisionStat = false; // Drive Base diff --git a/TeamCode/src/main/java/teamcode/vision/CameraStreamProcessor.java b/TeamCode/src/main/java/teamcode/vision/CameraStreamProcessor.java new file mode 100644 index 0000000..5328693 --- /dev/null +++ b/TeamCode/src/main/java/teamcode/vision/CameraStreamProcessor.java @@ -0,0 +1,49 @@ +package teamcode.vision; + +import android.graphics.Bitmap; +import android.graphics.Canvas; + +import org.firstinspires.ftc.robotcore.external.function.Consumer; +import org.firstinspires.ftc.robotcore.external.function.Continuation; +import org.firstinspires.ftc.robotcore.external.stream.CameraStreamSource; +import org.firstinspires.ftc.robotcore.internal.camera.calibration.CameraCalibration; +import org.firstinspires.ftc.vision.VisionProcessor; +import org.opencv.android.Utils; +import org.opencv.core.Mat; + +import java.util.concurrent.atomic.AtomicReference; + +public class CameraStreamProcessor implements VisionProcessor, CameraStreamSource +{ + private final AtomicReference lastFrame = + new AtomicReference<>(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)); + + @Override + public void init(int width, int height, CameraCalibration calibration) + { + lastFrame.set(Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565)); + } + + @Override + public Object processFrame(Mat frame, long captureTimeNanos) + { + Bitmap b = Bitmap.createBitmap(frame.width(), frame.height(), Bitmap.Config.RGB_565); + Utils.matToBitmap(frame, b); + lastFrame.set(b); + return null; + } + + @Override + public void onDrawFrame( + Canvas canvas, int onscreenWidth, int onscreenHeight, float scaleBmpPxToCanvasPx, float scaleCanvasDensity, + Object userContext) + { + // do nothing + } + + @Override + public void getFrameBitmap(Continuation> continuation) + { + continuation.dispatch(bitmapConsumer -> bitmapConsumer.accept(lastFrame.get())); + } +} diff --git a/TeamCode/src/main/java/teamcode/vision/Vision.java b/TeamCode/src/main/java/teamcode/vision/Vision.java index 6f4da00..4833ef1 100644 --- a/TeamCode/src/main/java/teamcode/vision/Vision.java +++ b/TeamCode/src/main/java/teamcode/vision/Vision.java @@ -89,6 +89,8 @@ public class Vision private final WebcamName webcam1, webcam2; private FtcRawEocvColorBlobPipeline rawColorBlobPipeline; public FtcRawEocvVision rawColorBlobVision; + public FtcLimelightVision limelightVision; + public CameraStreamProcessor cameraStreamProcessor; public FtcVisionAprilTag aprilTagVision; private AprilTagProcessor aprilTagProcessor; public FtcVisionEocvColorBlob redBlobVision; @@ -96,7 +98,6 @@ public class Vision public FtcVisionEocvColorBlob blueBlobVision; private FtcEocvColorBlobProcessor blueBlobProcessor; public FtcVision vision; - public FtcLimelightVision limelightVision; /** * Constructor: Create an instance of the object. @@ -156,6 +157,14 @@ public class Vision } // Creating Vision Processors for VisionPortal. ArrayList visionProcessorsList = new ArrayList<>(); + + if (RobotParams.Preferences.useCameraStreamProcessor) + { + cameraStreamProcessor = new CameraStreamProcessor(); + visionProcessorsList.add(cameraStreamProcessor); +// FtcDashboard.getInstance().startCameraStream(processor, 0); + } + if (RobotParams.Preferences.useAprilTagVision) { tracer.traceInfo(moduleName, "Starting AprilTagVision...");