Some updates to debug_window/threshold to support yuyv frames.
Also some errata improvements to image_types, segment, vector.
Change-Id: Ia7b32a469c20726c90b6148acf14151458f79e7d
diff --git a/aos/vision/debug/debug_framework.cc b/aos/vision/debug/debug_framework.cc
index 46f5400..1d94217 100644
--- a/aos/vision/debug/debug_framework.cc
+++ b/aos/vision/debug/debug_framework.cc
@@ -58,7 +58,7 @@
InstallKeyPress(key_press);
}
if (GetScreenHeight() < 1024) {
- view_.SetScale(0.75);
+ view_.SetScale(1.0);
}
}
@@ -70,6 +70,17 @@
return HandleBlobs(FindBlobs(filter_->Threshold(view_.img())), fmt);
}
+ bool NewImage(ImageFormat fmt,
+ const std::function<bool(ImagePtr data)> &process) override {
+ auto value = view_.img();
+ if (!value.fmt().Equals(fmt)) {
+ view_.SetFormatAndClear(fmt);
+ }
+ process(view_.img());
+
+ return HandleBlobs(FindBlobs(filter_->Threshold(view_.img())), fmt);
+ }
+
bool NewBlobList(BlobList blob_list, ImageFormat fmt) override {
view_.SetFormatAndClear(fmt);
diff --git a/aos/vision/debug/debug_framework.h b/aos/vision/debug/debug_framework.h
index d5b345f..a46812f 100644
--- a/aos/vision/debug/debug_framework.h
+++ b/aos/vision/debug/debug_framework.h
@@ -55,6 +55,9 @@
// if the frame is "interesting" ie has a target.
virtual bool NewJpeg(DataRef data) = 0;
+ virtual bool NewImage(ImageFormat fmt,
+ const std::function<bool(ImagePtr data)> &process) = 0;
+
virtual bool NewBlobList(BlobList blob_list, ImageFormat fmt) = 0;
virtual bool JustCheckForTarget(BlobList imgs, ImageFormat fmt) = 0;
diff --git a/aos/vision/debug/jpeg_list-source.cc b/aos/vision/debug/jpeg_list-source.cc
index 2dbbe44..d3e1006 100644
--- a/aos/vision/debug/jpeg_list-source.cc
+++ b/aos/vision/debug/jpeg_list-source.cc
@@ -65,16 +65,22 @@
if (jpeg_filename[i] == '#') return;
if (jpeg_filename[i] != ' ') break;
}
+ bool is_jpeg = true;
+ size_t l = jpeg_filename.size();
+ if (l > 4 && jpeg_filename[l - 1] == 'v') {
+ is_jpeg = false;
+ }
if (jpeg_filename[0] == '/') {
- images_.emplace_back(GetFileContents(jpeg_filename));
+ images_.emplace_back(Frame{is_jpeg, GetFileContents(jpeg_filename)});
} else {
- images_.emplace_back(GetFileContents(basename + jpeg_filename));
+ images_.emplace_back(
+ Frame{is_jpeg, GetFileContents(basename + jpeg_filename)});
}
}();
}
fprintf(stderr, "loaded %lu items\n", images_.size());
if (!images_.empty()) {
- interface_->NewJpeg(images_[idx_]);
+ SetCurrentFrame();
interface_->InstallKeyPress([this](uint32_t keyval) {
if (keyval == GDK_KEY_Left && idx_ > 0) {
--idx_;
@@ -83,11 +89,30 @@
} else {
return;
}
- interface_->NewJpeg(images_[idx_]);
+ SetCurrentFrame();
});
}
}
+ void SetCurrentFrame() {
+ const auto &frame = images_[idx_];
+ if (frame.is_jpeg) {
+ interface_->NewJpeg(frame.data);
+ } else {
+ const auto &data = frame.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;
+ });
+ }
+ }
+
const char *GetHelpMessage() override {
return &R"(
format_spec is the name of a file with each jpeg filename on a new line.
@@ -98,7 +123,11 @@
private:
DebugFrameworkInterface *interface_ = nullptr;
- std::vector<std::string> images_;
+ struct Frame {
+ bool is_jpeg = true;
+ std::string data;
+ };
+ std::vector<Frame> images_;
size_t idx_ = 0;
};
diff --git a/aos/vision/debug/overlay.h b/aos/vision/debug/overlay.h
index 0122c94..8eb8a23 100644
--- a/aos/vision/debug/overlay.h
+++ b/aos/vision/debug/overlay.h
@@ -121,8 +121,12 @@
// build a segment for this line
void AddLine(Vector<2> st, Vector<2> ed, PixelRef newColor) {
- lines_.emplace_back(
- std::pair<Segment<2>, PixelRef>(Segment<2>(st, ed), newColor));
+ AddLine(Segment<2>(st, ed), newColor);
+ }
+
+ // draw a segment.
+ void AddLine(Segment<2> seg, PixelRef newColor) {
+ lines_.emplace_back(std::pair<Segment<2>, PixelRef>(seg, newColor));
}
void DrawCross(aos::vision::Vector<2> center, int width,