in camera_pkg/src/camera_node.cpp [111:135]
void videoProducerStateHdl(const std::shared_ptr<rmw_request_id_t> request_header,
const std::shared_ptr<deepracer_interfaces_pkg::srv::VideoStateSrv::Request> req,
std::shared_ptr<deepracer_interfaces_pkg::srv::VideoStateSrv::Response> res) {
(void)request_header;
// Stop the stream on request.
produceFrames_ = false;
if (videoWorker_.joinable()) {
videoWorker_.join();
}
int i = 0;
// Check that we are collecting from the mjpeg channel.
for (auto& cap : videoCaptureList_) {
if(!cap.isOpened() || cap.get(cv::CAP_PROP_FOURCC) != cv::VideoWriter::fourcc('M', 'J', 'P', 'G')) {
RCLCPP_ERROR(this->get_logger(), "Unable to get MJPEG stream: %d", videoIndexList_[i]);
res->error = 1;
return;
}
++i;
}
if (req->activate_video) {
produceFrames_ = true;
videoWorker_ = std::thread([&]{produceFrames();});
}
res->error = 0;
}