wh1ter0se/PowerUp-2018

View on GitHub
wpilib18/java/current/javadoc/edu/wpi/first/wpilibj/vision/VisionRunner.html

Summary

Maintainability
Test Coverage
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_144) on Sat Oct 28 05:22:55 EDT 2017 -->
<title>VisionRunner (Documentation - Release API)</title>
<meta name="date" content="2017-10-28">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="VisionRunner (Documentation - Release API)";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":10,"i1":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionPipeline.html" title="interface in edu.wpi.first.wpilibj.vision"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.Listener.html" title="interface in edu.wpi.first.wpilibj.vision"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?edu/wpi/first/wpilibj/vision/VisionRunner.html" target="_top">Frames</a></li>
<li><a href="VisionRunner.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">edu.wpi.first.wpilibj.vision</div>
<h2 title="Class VisionRunner" class="title">Class VisionRunner&lt;P extends <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionPipeline.html" title="interface in edu.wpi.first.wpilibj.vision">VisionPipeline</a>&gt;</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>edu.wpi.first.wpilibj.vision.VisionRunner&lt;P&gt;</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">VisionRunner&lt;P extends <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionPipeline.html" title="interface in edu.wpi.first.wpilibj.vision">VisionPipeline</a>&gt;</span>
extends java.lang.Object</pre>
<div class="block">A vision runner is a convenient wrapper object to make it easy to run vision pipelines
 from robot code. The easiest  way to use this is to run it in a <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionThread.html" title="class in edu.wpi.first.wpilibj.vision"><code>VisionThread</code></a>
 and use the listener to take snapshots of the pipeline's outputs.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionPipeline.html" title="interface in edu.wpi.first.wpilibj.vision"><code>VisionPipeline</code></a>, 
<a href="../../../../../edu/wpi/first/wpilibj/vision/VisionThread.html" title="class in edu.wpi.first.wpilibj.vision"><code>VisionThread</code></a>, 
<code>edu.wpi.first.wpilibj.vision</code></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!--   -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.Listener.html" title="interface in edu.wpi.first.wpilibj.vision">VisionRunner.Listener</a>&lt;<a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.Listener.html" title="type parameter in VisionRunner.Listener">P</a> extends <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionPipeline.html" title="interface in edu.wpi.first.wpilibj.vision">VisionPipeline</a>&gt;</span></code>
<div class="block">Listener interface for a callback that should run after a pipeline has processed its input.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html#VisionRunner-edu.wpi.cscore.VideoSource-P-edu.wpi.first.wpilibj.vision.VisionRunner.Listener-">VisionRunner</a></span>(<a href="../../../../../edu/wpi/cscore/VideoSource.html" title="class in edu.wpi.cscore">VideoSource</a>&nbsp;videoSource,
            <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html" title="type parameter in VisionRunner">P</a>&nbsp;pipeline,
            <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.Listener.html" title="interface in edu.wpi.first.wpilibj.vision">VisionRunner.Listener</a>&lt;? super <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html" title="type parameter in VisionRunner">P</a>&gt;&nbsp;listener)</code>
<div class="block">Creates a new vision runner.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html#runForever--">runForever</a></span>()</code>
<div class="block">A convenience method that calls <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html#runOnce--"><code>runOnce()</code></a> in an infinite loop.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html#runOnce--">runOnce</a></span>()</code>
<div class="block">Runs the pipeline one time, giving it the next image from the video source specified
 in the constructor.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="VisionRunner-edu.wpi.cscore.VideoSource-edu.wpi.first.wpilibj.vision.VisionPipeline-edu.wpi.first.wpilibj.vision.VisionRunner.Listener-">
<!--   -->
</a><a name="VisionRunner-edu.wpi.cscore.VideoSource-P-edu.wpi.first.wpilibj.vision.VisionRunner.Listener-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>VisionRunner</h4>
<pre>public&nbsp;VisionRunner(<a href="../../../../../edu/wpi/cscore/VideoSource.html" title="class in edu.wpi.cscore">VideoSource</a>&nbsp;videoSource,
                    <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html" title="type parameter in VisionRunner">P</a>&nbsp;pipeline,
                    <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.Listener.html" title="interface in edu.wpi.first.wpilibj.vision">VisionRunner.Listener</a>&lt;? super <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html" title="type parameter in VisionRunner">P</a>&gt;&nbsp;listener)</pre>
<div class="block">Creates a new vision runner. It will take images from the <code>videoSource</code>, send them to
 the <code>pipeline</code>, and call the <code>listener</code> when the pipeline has finished to alert
 user code when it is safe to access the pipeline's outputs.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>videoSource</code> - the video source to use to supply images for the pipeline</dd>
<dd><code>pipeline</code> - the vision pipeline to run</dd>
<dd><code>listener</code> - a function to call after the pipeline has finished running</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="runOnce--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>runOnce</h4>
<pre>public&nbsp;void&nbsp;runOnce()</pre>
<div class="block">Runs the pipeline one time, giving it the next image from the video source specified
 in the constructor. This will block until the source either has an image or throws an error.
 If the source successfully supplied a frame, the pipeline's image input will be set,
 the pipeline will run, and the listener specified in the constructor will be called to notify
 it that the pipeline ran.

 <p>This method is exposed to allow teams to add additional functionality or have their own
 ways to run the pipeline. Most teams, however, should just use <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html#runForever--"><code>runForever()</code></a> in its own
 thread using a <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionThread.html" title="class in edu.wpi.first.wpilibj.vision"><code>VisionThread</code></a>.</p></div>
</li>
</ul>
<a name="runForever--">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>runForever</h4>
<pre>public&nbsp;void&nbsp;runForever()</pre>
<div class="block">A convenience method that calls <a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.html#runOnce--"><code>runOnce()</code></a> in an infinite loop. This must
 be run in a dedicated thread, and cannot be used in the main robot thread because
 it will freeze the robot program.

 <p><strong>Do not call this method directly from the main thread.</strong></p></div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalStateException</code> - if this is called from the main robot thread</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionThread.html" title="class in edu.wpi.first.wpilibj.vision"><code>VisionThread</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionPipeline.html" title="interface in edu.wpi.first.wpilibj.vision"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../edu/wpi/first/wpilibj/vision/VisionRunner.Listener.html" title="interface in edu.wpi.first.wpilibj.vision"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?edu/wpi/first/wpilibj/vision/VisionRunner.html" target="_top">Frames</a></li>
<li><a href="VisionRunner.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>