Auto Exposure:

  - Filter results down to the three best.
  - Changing exposure based on distance to the target or at random.
  - Plumb exposure through the debug framework.
  - Refactor into target finder.

Change-Id: Ia083f56859938bf0825472fd15d248c545f6f2fc
diff --git a/aos/vision/image/image_stream.h b/aos/vision/image/image_stream.h
index 57e06cb..8aab97d 100644
--- a/aos/vision/image/image_stream.h
+++ b/aos/vision/image/image_stream.h
@@ -37,6 +37,11 @@
 
   void ReadEvent() override { reader_->HandleFrame(); }
 
+  bool SetExposure(int abs_exp) {
+    return reader_->SetCameraControl(V4L2_CID_EXPOSURE_ABSOLUTE,
+                                     "V4L2_CID_EXPOSURE_ABSOLUTE", abs_exp);
+  }
+
  private:
   void ProcessHelper(DataRef data, aos::monotonic_clock::time_point timestamp);
 
diff --git a/aos/vision/image/reader.cc b/aos/vision/image/reader.cc
index aaf9a10..23b58c2 100644
--- a/aos/vision/image/reader.cc
+++ b/aos/vision/image/reader.cc
@@ -85,17 +85,6 @@
   }
   --queued_;
 
-  if (tick_id_ % 10 == 0) {
-    if (!SetCameraControl(V4L2_CID_EXPOSURE_AUTO, "V4L2_CID_EXPOSURE_AUTO",
-                          V4L2_EXPOSURE_MANUAL)) {
-      LOG(FATAL, "Failed to set exposure\n");
-    }
-
-    if (!SetCameraControl(V4L2_CID_EXPOSURE_ABSOLUTE,
-                          "V4L2_CID_EXPOSURE_ABSOLUTE", params_.exposure())) {
-      LOG(FATAL, "Failed to set exposure\n");
-    }
-  }
   ++tick_id_;
   // Get a timestamp now as proxy for when the image was taken
   // TODO(ben): the image should come with a timestamp, parker
@@ -171,8 +160,6 @@
   struct v4l2_control setArg = {id, value};
   r = xioctl(fd_, VIDIOC_S_CTRL, &setArg);
   if (r == 0) {
-    LOG(DEBUG, "Set camera control %s from %d to %d\n", name, getArg.value,
-        value);
     return true;
   }
 
diff --git a/aos/vision/image/reader.h b/aos/vision/image/reader.h
index adb3a3c..25fc0bd 100644
--- a/aos/vision/image/reader.h
+++ b/aos/vision/image/reader.h
@@ -32,10 +32,11 @@
   }
   int fd() { return fd_; }
 
+  bool SetCameraControl(uint32_t id, const char *name, int value);
+
  private:
   void QueueBuffer(v4l2_buffer *buf);
   void InitMMap();
-  bool SetCameraControl(uint32_t id, const char *name, int value);
   void Init();
   void Start();
   void MMapBuffers();