blob: 77bd6ed88ac7a93222e9fc6ba2e804feac44e6aa [file] [log] [blame]
Parker Schuh90641112017-02-25 12:18:36 -08001#include "aos/vision/debug/debug_framework.h"
2
3#include <gdk/gdk.h>
4#include <fstream>
5#include <string>
6
Parker Schuh24ee58d2017-03-11 16:13:23 -08007#include "aos/vision/image/camera_params.pb.h"
Parker Schuh90641112017-02-25 12:18:36 -08008#include "aos/vision/image/image_stream.h"
9
10namespace aos {
11namespace vision {
12
13class CameraImageSource : public ImageSource {
14 public:
15 void Init(const std::string &jpeg_list_filename,
16 DebugFrameworkInterface *interface) override {
17 // TODO: Get these params from a config file passed in through the
18 // constructor.
Parker Schuh24ee58d2017-03-11 16:13:23 -080019 image_stream_.reset(new ImageStream(
20 jpeg_list_filename, aos::vision::CameraParams(), interface));
Parker Schuh90641112017-02-25 12:18:36 -080021 }
22
23 const char *GetHelpMessage() override {
24 return &R"(
25 format_spec is filename of the camera device.
26 example: camera:/dev/video0
Parker Schuh24ee58d2017-03-11 16:13:23 -080027 This viewer source will stream video from a usb camera of your choice.)"[1];
Parker Schuh90641112017-02-25 12:18:36 -080028 }
29
30 class ImageStream : public ImageStreamEvent {
31 public:
Parker Schuh24ee58d2017-03-11 16:13:23 -080032 ImageStream(const std::string &fname, aos::vision::CameraParams params,
Parker Schuh90641112017-02-25 12:18:36 -080033 DebugFrameworkInterface *interface)
34 : ImageStreamEvent(fname, params), interface_(interface) {
35 interface_->Loop()->Add(this);
36
37 interface_->InstallKeyPress([this](uint32_t keyval) {
38 // Takes a picture when you press 'a'.
39 // TODO(parker): Allow setting directory.
40 if (keyval == GDK_KEY_a) {
41 std::ofstream ofs(
42 std::string("/tmp/out_jpegs/test") + std::to_string(i_) + ".jpg",
43 std::ofstream::out);
44 ofs << prev_data_;
45 ofs.close();
46 ++i_;
47 }
48 });
49 }
50 void ProcessImage(DataRef data, aos::monotonic_clock::time_point) override {
51 prev_data_ = std::string(data);
52 interface_->NewJpeg(data);
53 }
54
55 private:
56 int i_ = 0;
57 std::string prev_data_;
58 DebugFrameworkInterface *interface_;
59 };
60
61 std::unique_ptr<ImageStream> image_stream_;
62};
63
64REGISTER_IMAGE_SOURCE("camera", CameraImageSource);
65
66} // namespace vision
67} // namespace aos