Make v4l2_reader use epoll

It no longer needs to be polled in a loop
and sends images directly to the channel

Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: I8fc3efc3fd2cd67836294d9dc47d5342cd7d5de4
diff --git a/frc971/vision/v4l2_reader.cc b/frc971/vision/v4l2_reader.cc
index f3640db..e549ae5 100644
--- a/frc971/vision/v4l2_reader.cc
+++ b/frc971/vision/v4l2_reader.cc
@@ -302,9 +302,19 @@
 }
 
 RockchipV4L2Reader::RockchipV4L2Reader(aos::EventLoop *event_loop,
+                                       aos::internal::EPoll *epoll,
                                        const std::string &device_name)
-    : V4L2ReaderBase(event_loop, device_name) {
+    : V4L2ReaderBase(event_loop, device_name), epoll_(epoll) {
   StreamOn();
+  epoll_->OnReadable(fd().get(), [this]() { OnImageReady(); });
+}
+
+void RockchipV4L2Reader::OnImageReady() {
+  if (!ReadLatestImage()) {
+    return;
+  }
+
+  SendLatestImage();
 }
 
 }  // namespace vision