Skip to content
Snippets Groups Projects
Commit dbfaf965 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Do not use thread pool for second camera

parent 98aaec29
No related branches found
No related tags found
1 merge request!321Reduce latency in device capture and parallel encoding
......@@ -347,32 +347,32 @@ bool OpenCVDevice::get(ftl::rgbd::Frame &frame, cv::cuda::GpuMat &l_out, cv::cud
if (!camera_a_) return false;
std::future<bool> future_b;
//std::future<bool> future_b;
if (camera_b_) {
future_b = std::move(ftl::pool.push([this,&rfull,&r,c,&r_out,&r_hres_out,&stream](int id) {
//future_b = std::move(ftl::pool.push([this,&rfull,&r,c,&r_out,&r_hres_out,&stream](int id) {
if (!camera_b_->retrieve(frame_r_)) {
LOG(ERROR) << "Unable to read frame from camera B";
return false;
} else {
cv::cvtColor(frame_r_, rtmp2_, cv::COLOR_BGR2BGRA);
//if (stereo_) {
c->rectify(rtmp2_, rfull, Channel::Right);
if (hasHigherRes()) {
// TODO: Use threads?
cv::resize(rfull, r, r.size(), 0.0, 0.0, interpolation_);
r_hres_out = rfull;
}
else {
r_hres_out = Mat();
}
//}
r_out.upload(r, stream);
}
cv::cvtColor(frame_r_, rtmp2_, cv::COLOR_BGR2BGRA);
//if (stereo_) {
c->rectify(rtmp2_, rfull, Channel::Right);
if (hasHigherRes()) {
// TODO: Use threads?
cv::resize(rfull, r, r.size(), 0.0, 0.0, interpolation_);
r_hres_out = rfull;
}
else {
r_hres_out = Mat();
}
//}
r_out.upload(r, stream);
return true;
}));
//return true;
//}));
}
if (camera_b_) {
......@@ -431,10 +431,10 @@ bool OpenCVDevice::get(ftl::rgbd::Frame &frame, cv::cuda::GpuMat &l_out, cv::cud
cv::imencode(".jpg", thumb, thumbdata, params);
}
if (camera_b_) {
//if (camera_b_) {
//FTL_Profile("WaitCamB", 0.05);
future_b.wait();
}
//future_b.wait();
//}
return true;
}
......
......@@ -283,47 +283,49 @@ bool PylonDevice::get(ftl::rgbd::Frame &frame, cv::cuda::GpuMat &l_out, cv::cuda
try {
FTL_Profile("Frame Retrieve", 0.005);
std::future<bool> future_b;
//std::future<bool> future_b;
bool res_r = false;
if (rcam_) {
future_b = std::move(ftl::pool.push([this,&rfull,&r,&l,c,&r_out,&h_r,&stream](int id) {
//future_b = std::move(ftl::pool.push([this,&rfull,&r,&l,c,&r_out,&h_r,&stream](int id) {
Pylon::CGrabResultPtr result_right;
if (!_retrieveFrames(result_right, rcam_)) return false;
if (_retrieveFrames(result_right, rcam_)) {
cv::Mat wrap_right(
result_right->GetHeight(),
result_right->GetWidth(),
CV_8UC1,
(uint8_t*)result_right->GetBuffer());
cv::Mat wrap_right(
result_right->GetHeight(),
result_right->GetWidth(),
CV_8UC1,
(uint8_t*)result_right->GetBuffer());
{
FTL_Profile("Bayer Colour (R)", 0.005);
cv::cvtColor(wrap_right, rtmp2_, cv::COLOR_BayerRG2BGRA);
}
//if (isStereo()) {
FTL_Profile("Rectify and Resize (R)", 0.005);
c->rectify(rtmp2_, rfull, Channel::Right);
if (hasHigherRes()) {
cv::resize(rfull, r, r.size(), 0.0, 0.0, interpolation_);
h_r = rfull;
{
FTL_Profile("Bayer Colour (R)", 0.005);
cv::cvtColor(wrap_right, rtmp2_, cv::COLOR_BayerRG2BGRA);
}
else {
h_r = Mat();
}
//}
r_out.upload(r, stream);
return true;
}));
//if (isStereo()) {
FTL_Profile("Rectify and Resize (R)", 0.005);
c->rectify(rtmp2_, rfull, Channel::Right);
if (hasHigherRes()) {
cv::resize(rfull, r, r.size(), 0.0, 0.0, interpolation_);
h_r = rfull;
}
else {
h_r = Mat();
}
//}
r_out.upload(r, stream);
res_r = true;
}
//}));
}
Pylon::CGrabResultPtr result_left;
if (!_retrieveFrames(result_left, lcam_)) {
if (rcam_) {
future_b.wait();
//future_b.wait();
}
return false;
}
......@@ -357,8 +359,9 @@ bool PylonDevice::get(ftl::rgbd::Frame &frame, cv::cuda::GpuMat &l_out, cv::cuda
l_out.upload(l, stream);
if (rcam_) {
future_b.wait();
if (!future_b.get()) return false;
//future_b.wait();
//if (!future_b.get()) return false;
if (!res_r) return false;
}
} catch (const GenericException &e) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment