From a08c8dd2e6df8beda0d4efc4435b27500e002902 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Tue, 7 May 2019 11:32:58 +0300 Subject: [PATCH] Use grab to sync cam capture --- reconstruct/src/main.cpp | 2 ++ vision/src/main.cpp | 23 ++++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/reconstruct/src/main.cpp b/reconstruct/src/main.cpp index 51c346da2..6145a65a3 100644 --- a/reconstruct/src/main.cpp +++ b/reconstruct/src/main.cpp @@ -83,6 +83,8 @@ static void run() { while (disp.active()) { Mat idepth; + + net.broadcast("grab"); unique_lock<mutex> lk(m); if (depth.cols > 0) { diff --git a/vision/src/main.cpp b/vision/src/main.cpp index 70edfd239..695512627 100644 --- a/vision/src/main.cpp +++ b/vision/src/main.cpp @@ -108,11 +108,24 @@ static void run(const string &file) { return buf; }); + Mat l, r, disp; + bool grabbed = false; + mutex datam; + condition_variable datacv; + + net.bind("grab", [&calibrate,&l,&r,&datam,&datacv,&grabbed]() -> void { + // LOG(INFO) << "GRAB"; + unique_lock<mutex> datalk(datam); + if (grabbed) return; + calibrate.rectified(l, r); + grabbed = true; + datacv.notify_one(); + }); + // Choose and configure disparity algorithm auto disparity = Disparity::create(config["disparity"]); if (!disparity) LOG(FATAL) << "Unknown disparity algorithm : " << config["disparity"]; - Mat l, r, disp; Mat pl, pdisp; vector<unsigned char> rgb_buf; vector<unsigned char> d_buf; @@ -132,9 +145,11 @@ static void run(const string &file) { // Pipeline for disparity pool.push([&](int id) { - auto start = std::chrono::high_resolution_clock::now(); // Read calibrated images. - calibrate.rectified(l, r); + //calibrate.rectified(l, r); + unique_lock<mutex> datalk(datam); + datacv.wait(datalk, [&grabbed](){ return grabbed; }); + grabbed = false; // Feed into sync buffer and network forward //sync->feed(ftl::LEFT, l, lsrc->getTimestamp()); @@ -144,7 +159,9 @@ static void run(const string &file) { //sync->get(ftl::LEFT, l); //sync->get(ftl::RIGHT, r); + auto start = std::chrono::high_resolution_clock::now(); disparity->compute(l, r, disp); + datalk.unlock(); unique_lock<mutex> lk(m); jobs++; -- GitLab