17#include <unordered_map>
25#define PROGRAM_NAME "loading-images-demo"
34 spdlog::level::level_enum
logLevel{spdlog::level::info};
57 args::HelpFlag help(parser,
"help",
"Display this help menu", {
'h',
"help"});
59 args::MapFlag<std::string, spdlog::level::level_enum> logLevelArg(
62 args::ValueFlag<uint64_t> numFramesArg(
63 parser,
"#frames",
"Number of frames to iterate over", {
'n',
"frames-count"});
65 args::ValueFlag<double> fpsArg(parser,
"fps",
"Desired FPS for capturing image", {
'f',
"fps"});
68 parser.ParseCLI(argc, argv);
70 std::cerr << parser.Help() << std::endl;
72 }
catch(args::ParseError e) {
73 std::cerr <<
"Error parsing command-line arguments:\n" << e.what() <<
"\n\n" << parser.Help();
79 params.
logLevel = args::get(logLevelArg);
82 params.numFrames = args::get(numFramesArg);
85 params.fps = args::get(fpsArg);
103 IRSOL_LOG_INFO(
"{}x{}, {} bytes", image.GetHeight(), image.GetWidth(), image.GetSize());
144 auto lastTick = irsol::types::clock_t::now();
145 const auto desiredDt =
146 params.fps > 0.0 ? std::chrono::microseconds(
static_cast<uint64_t
>(1000000.0 / params.fps))
147 : std::chrono::microseconds(0);
148 for(
size_t i = 0; i < params.numFrames; ++i) {
149 const auto t0 = irsol::types::clock_t::now();
151 const auto nextTick = lastTick + desiredDt;
153 std::this_thread::sleep_until(nextTick);
154 const auto loopDuration = irsol::types::clock_t::now() - t0;
155 const auto measuredFps =
156 1000000.0 / std::chrono::duration_cast<std::chrono::microseconds>(loopDuration).count();
157 IRSOL_LOG_INFO(
"Desired FPS: {:.4f}, measured FPS: {:.4f}", params.fps, measuredFps);
High-level wrapper around the NeoAPI camera for synchronized access.
image_t captureImage(std::optional< irsol::types::duration_t > timeout=std::nullopt)
Capture a single image from the camera.
static Interface HalfResolution()
Factory method to create a camera interface using half sensor resolution.
static Interface FullResolution()
Factory method to create a camera interface using full sensor resolution.
Class that offers an easy way to run a background monitorin thread that periodically inspects and rep...
void start()
Starts the monitoring thread. If the monitor is already running, this call has no effect.
const std::string getProgramName()
Returns the program name, typically used for logging. If PROGRAM_NAME is not defined at compile time,...
Params getParams(int argc, char **argv)
Parses command-line arguments using args library.
void runCapture(irsol::camera::Interface &cam)
Captures a single image using the provided camera interface, logs metadata and performance stats.
void initAssertHandler()
Initializes the assertion handler system.
#define IRSOL_ASSERT_FATAL
Fatal-level assertion macro.
#define IRSOL_LOG_INFO(...)
Logs an info-level message using the default logger.
#define IRSOL_LOG_WARN(...)
Logs a warning-level message using the default logger.
void initLogging(const char *fileSinkFilename="logs/irsol.log", std::optional< spdlog::level::level_enum > minLogLevel=std::nullopt)
Initializes the irsol logging system.
const std::unordered_map< std::string, spdlog::level::level_enum > levelNameToLevelMap
Runtime map from string names to spdlog log levels.
Command-line parameters for the program.
double fps
FPS at which to capture frames from the camera (negative means as fast as you can)
uint64_t numFrames
Number of frames to capture from the camera (default: 10)
spdlog::level::level_enum logLevel
Logging verbosity level (default: info)