2020-12-26 14:12:05 -08:00
|
|
|
// Copyright (c) FIRST and other WPILib contributors.
|
|
|
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
|
|
|
|
// the WPILib BSD license file in the root directory of this project.
|
2016-12-23 11:48:56 -05:00
|
|
|
|
2018-09-23 21:20:12 -07:00
|
|
|
package edu.wpi.first.vision;
|
2016-12-23 11:48:56 -05:00
|
|
|
|
|
|
|
|
import edu.wpi.cscore.VideoSource;
|
|
|
|
|
|
|
|
|
|
/**
|
2020-12-29 22:45:16 -08:00
|
|
|
* A vision thread is a special thread that runs a vision pipeline. It is a <i>daemon</i> thread; it
|
|
|
|
|
* does not prevent the program from exiting when all other non-daemon threads have finished
|
|
|
|
|
* running.
|
2016-12-23 11:48:56 -05:00
|
|
|
*
|
|
|
|
|
* @see VisionPipeline
|
|
|
|
|
* @see VisionRunner
|
|
|
|
|
* @see Thread#setDaemon(boolean)
|
|
|
|
|
*/
|
|
|
|
|
public class VisionThread extends Thread {
|
|
|
|
|
/**
|
|
|
|
|
* Creates a vision thread that continuously runs a {@link VisionPipeline}.
|
|
|
|
|
*
|
|
|
|
|
* @param visionRunner the runner for a vision pipeline
|
|
|
|
|
*/
|
|
|
|
|
public VisionThread(VisionRunner<?> visionRunner) {
|
|
|
|
|
super(visionRunner::runForever, "WPILib Vision Thread");
|
|
|
|
|
setDaemon(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Creates a new vision thread that continuously runs the given vision pipeline. This is
|
|
|
|
|
* equivalent to {@code new VisionThread(new VisionRunner<>(videoSource, pipeline, listener))}.
|
|
|
|
|
*
|
|
|
|
|
* @param videoSource the source for images the pipeline should process
|
2020-12-29 22:45:16 -08:00
|
|
|
* @param pipeline the pipeline to run
|
|
|
|
|
* @param listener the listener to copy outputs from the pipeline after it runs
|
|
|
|
|
* @param <P> the type of the pipeline
|
2016-12-23 11:48:56 -05:00
|
|
|
*/
|
2020-12-29 22:45:16 -08:00
|
|
|
public <P extends VisionPipeline> VisionThread(
|
|
|
|
|
VideoSource videoSource, P pipeline, VisionRunner.Listener<? super P> listener) {
|
2016-12-23 11:48:56 -05:00
|
|
|
this(new VisionRunner<>(videoSource, pipeline, listener));
|
|
|
|
|
}
|
|
|
|
|
}
|