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.
79 lines
2.6 KiB
79 lines
2.6 KiB
2 months ago
|
// License: Apache 2.0. See LICENSE file in root directory.
|
||
|
// Copyright(c) 2017 Intel Corporation. All Rights Reserved.
|
||
|
|
||
|
#include <librealsense2/rs.hpp> // Include RealSense Cross Platform API
|
||
|
#include <iostream>
|
||
|
#include <map>
|
||
|
#include <chrono>
|
||
|
#include <mutex>
|
||
|
#include <thread>
|
||
|
|
||
|
// The callback example demonstrates asynchronous usage of the pipeline
|
||
|
int main(int argc, char * argv[]) try
|
||
|
{
|
||
|
//rs2::log_to_console(RS2_LOG_SEVERITY_ERROR);
|
||
|
|
||
|
std::map<int, int> counters;
|
||
|
std::map<int, std::string> stream_names;
|
||
|
std::mutex mutex;
|
||
|
|
||
|
// Define frame callback
|
||
|
// The callback is executed on a sensor thread and can be called simultaneously from multiple sensors
|
||
|
// Therefore any modification to common memory should be done under lock
|
||
|
auto callback = [&](const rs2::frame& frame)
|
||
|
{
|
||
|
std::lock_guard<std::mutex> lock(mutex);
|
||
|
if (rs2::frameset fs = frame.as<rs2::frameset>())
|
||
|
{
|
||
|
// With callbacks, all synchronized stream will arrive in a single frameset
|
||
|
for (const rs2::frame& f : fs)
|
||
|
counters[f.get_profile().unique_id()]++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Stream that bypass synchronization (such as IMU) will produce single frames
|
||
|
counters[frame.get_profile().unique_id()]++;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Declare RealSense pipeline, encapsulating the actual device and sensors.
|
||
|
rs2::pipeline pipe;
|
||
|
|
||
|
// Start streaming through the callback with default recommended configuration
|
||
|
// The default video configuration contains Depth and Color streams
|
||
|
// If a device is capable to stream IMU data, both Gyro and Accelerometer are enabled by default
|
||
|
//
|
||
|
rs2::pipeline_profile profiles = pipe.start(callback);
|
||
|
|
||
|
// Collect the enabled streams names
|
||
|
for (auto p : profiles.get_streams())
|
||
|
stream_names[p.unique_id()] = p.stream_name();
|
||
|
|
||
|
std::cout << "RealSense callback sample" << std::endl << std::endl;
|
||
|
|
||
|
while (true)
|
||
|
{
|
||
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||
|
|
||
|
std::lock_guard<std::mutex> lock(mutex);
|
||
|
|
||
|
std::cout << "\r";
|
||
|
for (auto p : counters)
|
||
|
{
|
||
|
std::cout << stream_names[p.first] << "[" << p.first << "]: " << p.second << " [frames] || ";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return EXIT_SUCCESS;
|
||
|
}
|
||
|
catch (const rs2::error & e)
|
||
|
{
|
||
|
std::cerr << "RealSense error calling " << e.get_failed_function() << "(" << e.get_failed_args() << "):\n " << e.what() << std::endl;
|
||
|
return EXIT_FAILURE;
|
||
|
}
|
||
|
catch (const std::exception& e)
|
||
|
{
|
||
|
std::cerr << e.what() << std::endl;
|
||
|
return EXIT_FAILURE;
|
||
|
}
|