// License: Apache 2.0. See LICENSE file in root directory. // Copyright(c) 2019 Intel Corporation. All Rights Reserved. #include #include #include #include #include #include #include #include #include #include #include #include "tclap/CmdLine.h" using namespace TCLAP; int main(int argc, char * argv[]) try { // Parse command line arguments CmdLine cmd("librealsense rs-record example tool", ' '); SwitchArg debug_arg( "", "debug", "Turn on LibRS debug logs" ); ValueArg time("t", "Time", "Amount of time to record (in seconds)", false, 10., ""); ValueArg out_file("f", "FullFilePath", "the file where the data will be saved to", false, "test.bag", ""); cmd.add(debug_arg); cmd.add(time); cmd.add(out_file); cmd.parse(argc, argv); #ifdef BUILD_EASYLOGGINGPP bool const debugging = debug_arg.getValue(); rs2::log_to_console( debugging ? RS2_LOG_SEVERITY_DEBUG : RS2_LOG_SEVERITY_ERROR ); #endif rs2::pipeline pipe; rs2::config cfg; cfg.enable_record_to_file(out_file.getValue()); std::mutex m; auto callback = [&](const rs2::frame& frame) { std::lock_guard lock(m); auto t = std::chrono::system_clock::now(); static auto tk = t; static auto t0 = t; if (t - tk >= std::chrono::seconds(1)) { std::cout << "\r" << std::setprecision(3) << std::fixed << "Recording t = " << std::chrono::duration_cast(t-t0).count() << "s" << std::flush; tk = t; } }; rs2::pipeline_profile profiles = pipe.start(cfg, callback); auto t = std::chrono::system_clock::now(); auto t0 = t; while( t - t0 <= std::chrono::milliseconds( (unsigned)( time.getValue() * 1000 ) ) ) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); t = std::chrono::system_clock::now(); } std::cout << "\nFinished" << std::endl; pipe.stop(); 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; }