#include <chrono>
#include <iostream>
#include <cvb/device_factory.hpp>
#include <cvb/global.hpp>
#include <cvb/image.hpp>
static const constexpr auto TIMEOUT = std::chrono::milliseconds(3000);
static const constexpr int NUM_ELEMENTS_TO_ACQUIRE = 10;
static std::map<Cvb::WaitStatus, const char *> WAIT_ERROR_STATES{
{Cvb::WaitStatus::Timeout, "Timeout"}, {Cvb::WaitStatus::Abort, "Abort"}};
int main(int argc, char *argv[]) {
try {
bool demonstrateWithMock =
((argc > 1) &&
(std::string(argv[1]).find("--mock") != std::string::npos))
? true
: false;
auto discoverFlags =
Cvb::DiscoverFlags::IgnoreVins;
if (demonstrateWithMock)
discoverFlags |= Cvb::DiscoverFlags::IncludeMockTL;
if (infoList.empty())
throw std::runtime_error("No devices found.");
if (demonstrateWithMock) {
for (auto n = 0; (n < infoList.size()) && accessToken.empty(); ++n)
if (infoList.at(n).AccessToken().find("MockTL") != std::string::npos)
accessToken = infoList.at(n).AccessToken();
if (accessToken.empty())
throw std::runtime_error("Could not find CVMockTL.");
} else
accessToken = infoList.front().AccessToken();
infoList.front().AccessToken(), Cvb::AcquisitionStack::GenTL);
std::vector<Cvb::ImageStreamPtr> streams;
std::generate_n(std::back_inserter(streams), device->StreamCount(),
[&device, i = 0]() mutable {
return device->Stream<Cvb::ImageStream>(i++);
});
std::cout << "Stream count: " << streams.size() << "\n";
for (const auto stream : streams)
stream->Start();
for (auto imageIndex = 0; imageIndex < NUM_ELEMENTS_TO_ACQUIRE;
++imageIndex) {
for (auto streamIndex = 0u; streamIndex < streams.size(); ++streamIndex) {
const auto stream = streams[streamIndex];
auto [
image, waitStatus, nodeMaps] = stream->WaitFor(TIMEOUT);
switch (waitStatus) {
default:
std::cout << "Unknown wait status.\n";
case Cvb::WaitStatus::Abort:
case Cvb::WaitStatus::Timeout: {
std::cout << "Wait status not OK: " << WAIT_ERROR_STATES[waitStatus]
<< "\n";
continue;
}
case Cvb::WaitStatus::Ok:
break;
}
std::cout << "Stream #" << streamIndex << ", Image #" << imageIndex;
std::cout << std::hex <<
", Width: " <<
image->Width()
<<
", Height: " <<
image->Height() <<
"\n";
}
}
for (const auto stream : streams)
stream->TryAbort();
} catch (const std::exception &error) {
std::cout << error.what() << std::endl;
}
return 0;
}
static std::vector< DiscoveryInformation > Discover()
static std::shared_ptr< T > Open(const String &provider, AcquisitionStack acquisitionStack=AcquisitionStack::PreferVin)