Changes to aos/vision/debug in preparation for the competition.
- blob_log-source: Support multiple key-commands for seeking to a target
also added JustCheckForTarget which can be implemented to run faster
for slow computer (will implement in followup).
- camera-source + debug_framework: Takes in camera parameters from the
caller.
- debug_window -> Scale text up on smaller monitors.
- overlay.h: Ben changed width to measure point to point on the cross.
And added circles to the pixel-lines overlay.
- tcp-source: Drop packects when the computer can't keep up.
- debug_framework -> detect smaller monitors and scale down the viewport.
Change-Id: Iae65a0799231d006b38694a8a9cb3894e252033c
diff --git a/aos/vision/debug/debug_framework.cc b/aos/vision/debug/debug_framework.cc
index 64f370c..d4ba0d2 100644
--- a/aos/vision/debug/debug_framework.cc
+++ b/aos/vision/debug/debug_framework.cc
@@ -12,6 +12,27 @@
namespace aos {
namespace vision {
+// Detect screen height on smaller monitors.
+int GetScreenHeight() {
+ fprintf(stderr, "gtk version_info: %d.%d.%d\n", gtk_get_major_version(),
+ gtk_get_minor_version(), gtk_get_micro_version());
+
+ GdkScreen *screen = gdk_screen_get_default();
+ GdkRectangle dimensions;
+// Deprecated in newer versions of GTK and missing from older versions.
+#if GTK_CHECK_VERSION(3, 22, 7)
+ GdkDisplay *display = gdk_screen_get_display(screen);
+ GdkMonitor *monitor = gdk_display_get_primary_monitor(display);
+ gdk_monitor_get_geometry(monitor, &dimensions);
+#else
+ dimensions.height = gdk_screen_get_height(screen);
+ dimensions.width = gdk_screen_get_width(screen);
+#endif
+ fprintf(stdout, "Monitor dimensions: %dx%d\n", dimensions.width,
+ dimensions.height);
+ return dimensions.height;
+}
+
bool DecodeJpeg(aos::vision::DataRef data,
aos::vision::BlobStreamViewer *view) {
auto fmt = aos::vision::GetFmt(data);
@@ -24,37 +45,55 @@
class DebugFramework : public DebugFrameworkInterface {
public:
- explicit DebugFramework(FilterHarness *filter) : filter_(filter) {
+ explicit DebugFramework(FilterHarness *filter, CameraParams camera_params)
+ : camera_params_(camera_params), filter_(filter) {
view_.key_press_event = [this](uint32_t keyval) {
for (const auto &event : key_press_events()) {
event(keyval);
}
};
filter->InstallViewer(&view_);
+ auto key_press = filter->RegisterKeyPress();
+ if (key_press) {
+ InstallKeyPress(key_press);
+ }
+ if (GetScreenHeight() < 1024) {
+ view_.SetScale(0.75);
+ }
}
// This the first stage in the pipeline that takes
- void NewJpeg(DataRef data) override {
+ bool NewJpeg(DataRef data) override {
DecodeJpeg(data, &view_);
auto fmt = view_.img().fmt();
- HandleBlobs(FindBlobs(filter_->Threshold(view_.img())), fmt);
+ return HandleBlobs(FindBlobs(filter_->Threshold(view_.img())), fmt);
}
- void NewBlobList(BlobList blob_list, ImageFormat fmt) override {
+ bool NewBlobList(BlobList blob_list, ImageFormat fmt) override {
view_.SetFormatAndClear(fmt);
- HandleBlobs(std::move(blob_list), fmt);
+ return HandleBlobs(std::move(blob_list), fmt);
}
- void HandleBlobs(BlobList blob_list, ImageFormat fmt) {
- filter_->HandleBlobs(std::move(blob_list), fmt);
+ bool JustCheckForTarget(BlobList blob_list, ImageFormat fmt) override {
+ return filter_->JustCheckForTarget(std::move(blob_list), fmt);
+ }
+
+ bool HandleBlobs(BlobList blob_list, ImageFormat fmt) {
+ bool result = filter_->HandleBlobs(std::move(blob_list), fmt);
view_.Redraw();
+ return result;
}
aos::events::EpollLoop *Loop() override { return &loop_; }
+ const CameraParams &camera_params() override { return camera_params_; }
+
+ BlobStreamViewer *viewer() override { return &view_; }
+
private:
+ CameraParams camera_params_;
FilterHarness *filter_;
BlobStreamViewer view_;
@@ -93,7 +132,8 @@
parameter. A single command line argument help will print this message.
)";
-void DebugFrameworkMain(int argc, char **argv, FilterHarness *filter) {
+void DebugFrameworkMain(int argc, char **argv, FilterHarness *filter,
+ CameraParams camera_params) {
::aos::logging::Init();
::aos::logging::AddImplementation(
new ::aos::logging::StreamLogImplementation(stdout));
@@ -116,7 +156,7 @@
exit(-1);
}
- DebugFramework replay(filter);
+ DebugFramework replay(filter, camera_params);
std::unique_ptr<ImageSource> image_source = MakeImageSource(argv[1], &replay);