Hard forking reader.h because jevois kernel is weird.
Change-Id: I5f59dca9b245050aa17bca7faf3643370ddc698a
diff --git a/y2019/jevois/camera/image_stream.h b/y2019/jevois/camera/image_stream.h
new file mode 100644
index 0000000..62661c6
--- /dev/null
+++ b/y2019/jevois/camera/image_stream.h
@@ -0,0 +1,55 @@
+#ifndef _AOS_VISION_IMAGE_IMAGE_STREAM_H_
+#define _AOS_VISION_IMAGE_IMAGE_STREAM_H_
+
+#include "aos/vision/events/epoll_events.h"
+#include "aos/vision/image/camera_params.pb.h"
+#include "y2019/jevois/camera/reader.h"
+
+#include <memory>
+
+namespace y2019 {
+namespace camera {
+
+// Converts a camera reader into a virtual base class that calls ProcessImage
+// on each new image.
+class ImageStreamEvent : public ::aos::events::EpollEvent {
+ public:
+ static std::unique_ptr<Reader> GetCamera(const std::string &fname,
+ ImageStreamEvent *obj,
+ aos::vision::CameraParams params) {
+ using namespace std::placeholders;
+ std::unique_ptr<Reader> camread(new Reader(
+ fname, std::bind(&ImageStreamEvent::ProcessHelper, obj, _1, _2),
+ params));
+ camread->StartAsync();
+ return camread;
+ }
+
+ explicit ImageStreamEvent(std::unique_ptr<Reader> reader)
+ : ::aos::events::EpollEvent(reader->fd()), reader_(std::move(reader)) {}
+
+ explicit ImageStreamEvent(const std::string &fname,
+ aos::vision::CameraParams params)
+ : ImageStreamEvent(GetCamera(fname, this, params)) {}
+
+ void ProcessHelper(aos::vision::DataRef data,
+ aos::monotonic_clock::time_point timestamp) {
+ if (data.size() < 300) {
+ LOG(INFO, "got bad img of size(%d)\n", static_cast<int>(data.size()));
+ return;
+ }
+ ProcessImage(data, timestamp);
+ }
+ virtual void ProcessImage(aos::vision::DataRef data,
+ aos::monotonic_clock::time_point timestamp) = 0;
+
+ void ReadEvent() override { reader_->HandleFrame(); }
+
+ private:
+ std::unique_ptr<Reader> reader_;
+};
+
+} // namespace vision
+} // namespace aos
+
+#endif // _AOS_VISION_DEBUG_IMAGE_STREAM_H_