Adding 'jevois:' source to debug viewer.
Change-Id: I866134558bc2ac38e3665e5bad7aa6d1866806e3
diff --git a/aos/vision/debug/aveugle-source.cc b/aos/vision/debug/aveugle-source.cc
new file mode 100644
index 0000000..cbe3d0a
--- /dev/null
+++ b/aos/vision/debug/aveugle-source.cc
@@ -0,0 +1,75 @@
+#include "aos/vision/debug/debug_framework.h"
+
+#include <gdk/gdk.h>
+#include <fstream>
+#include <string>
+
+#include "aos/vision/image/camera_params.pb.h"
+#include "aos/vision/image/image_stream.h"
+
+namespace aos {
+namespace vision {
+
+class AveugleImageSource : public ImageSource {
+ public:
+ void Init(const std::string &jpeg_list_filename,
+ DebugFrameworkInterface *interface) override {
+ // TODO: These camera params make this ugly and less generic.
+ image_stream_.reset(new ImageStream(jpeg_list_filename,
+ interface->camera_params(), interface));
+ }
+
+ const char *GetHelpMessage() override {
+ return &R"(
+ format_spec is filename of the camera device.
+ example: jevois:/dev/video1
+ This viewer source will stream video from a jevois camera of your choice.
+)"[1];
+ }
+
+ class ImageStream : public ImageStreamEvent {
+ public:
+ ImageStream(const std::string &fname, aos::vision::CameraParams params,
+ DebugFrameworkInterface *interface)
+ : ImageStreamEvent(fname, params), interface_(interface) {
+ interface_->Loop()->Add(this);
+
+ interface_->InstallKeyPress([this](uint32_t keyval) {
+ // Takes a picture when you press 'a'.
+ // TODO(parker): Allow setting directory.
+ if (keyval == GDK_KEY_a) {
+ std::ofstream ofs(std::string("/tmp/debug_viewer_jpeg_") +
+ std::to_string(i_) + ".yuyv",
+ std::ofstream::out);
+ ofs << prev_data_;
+ ofs.close();
+ ++i_;
+ }
+ });
+ }
+ void ProcessImage(DataRef data, aos::monotonic_clock::time_point) override {
+ prev_data_ = std::string(data);
+ interface_->NewImage({640, 480}, [&](ImagePtr img_data) {
+ for (int y = 0; y < 480; ++y) {
+ for (int x = 0; x < 640; ++x) {
+ uint8_t v = data[y * 640 * 2 + x * 2 + 0];
+ img_data.get_px(x, y) = PixelRef{v, v, v};
+ }
+ }
+ return false;
+ });
+ }
+
+ private:
+ int i_ = 0;
+ std::string prev_data_;
+ DebugFrameworkInterface *interface_;
+ };
+
+ std::unique_ptr<ImageStream> image_stream_;
+};
+
+REGISTER_IMAGE_SOURCE("jevois", AveugleImageSource);
+
+} // namespace vision
+} // namespace aos