You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.5 KiB

// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2021 Intel Corporation. All Rights Reserved.
#pragma once
#include <iostream>
#include <string>
#include <map>
#include <librealsense2/rs.hpp>
#include <algorithm>
//////////////////////////////
// Demos Helpers //
//////////////////////////////
// Find devices with specified streams
bool device_with_streams(std::vector <rs2_stream> stream_requests, std::string& out_serial)
{
rs2::context ctx;
auto devs = ctx.query_devices();
std::vector <rs2_stream> unavailable_streams = stream_requests;
for (auto dev : devs)
{
std::map<rs2_stream, bool> found_streams;
for (auto& type : stream_requests)
{
found_streams[type] = false;
for (auto& sensor : dev.query_sensors())
{
for (auto& profile : sensor.get_stream_profiles())
{
if (profile.stream_type() == type)
{
found_streams[type] = true;
unavailable_streams.erase(std::remove(unavailable_streams.begin(), unavailable_streams.end(), type), unavailable_streams.end());
if (dev.supports(RS2_CAMERA_INFO_SERIAL_NUMBER))
out_serial = dev.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER);
}
}
}
}
// Check if all streams are found in current device
bool found_all_streams = true;
for (auto& stream : found_streams)
{
if (!stream.second)
{
found_all_streams = false;
break;
}
}
if (found_all_streams)
return true;
}
// After scanning all devices, not all requested streams were found
for (auto& type : unavailable_streams)
{
switch (type)
{
case RS2_STREAM_POSE:
case RS2_STREAM_FISHEYE:
std::cerr << "Connect T26X and rerun the demo" << std::endl;
break;
case RS2_STREAM_DEPTH:
std::cerr << "The demo requires Realsense camera with DEPTH sensor" << std::endl;
break;
case RS2_STREAM_COLOR:
std::cerr << "The demo requires Realsense camera with RGB sensor" << std::endl;
break;
default:
throw std::runtime_error("The requested stream: " + std::to_string(type) + ", for the demo is not supported by connected devices!"); // stream type
}
}
return false;
}