#include <iostream>
#include <string>
#include <vector>
#include <cvb/device_factory.hpp>
#include <cvb/driver/composite_stream.hpp>
#include <cvb/genapi/node_map_enumerator.hpp>
#include <cvb/global.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() {
try {
auto infoList =
if (infoList.empty())
throw std::runtime_error(
"There is no available device for this demonstration.");
infoList[0].AccessToken(), Cvb::AcquisitionStack::GenTL);
for (auto i = 0; i < NUM_ELEMENTS_TO_ACQUIRE; i++) {
auto [composite, waitStatus, enumerator] = dataStream->WaitFor(TIMEOUT);
switch (waitStatus) {
default:
std::cout << "wait status unknown.\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;
}
}
auto firstElement = composite->ItemAt(0);
if (!Cvb::holds_alternative<Cvb::ImagePtr>(firstElement)) {
std::cout
<< "composite does not contain an image at the first element\n";
continue;
}
auto image = Cvb::get<Cvb::ImagePtr>(firstElement);
auto linearAccess =
image->Plane(0).LinearAccess();
std::cout << "acquired image: " << i << " at memory location: "
<< reinterpret_cast<intptr_t>(linearAccess.BasePtr()) << "\n";
}
dataStream->Stop();
} catch (const std::exception &e) {
std::cout << e.what() << std::endl;
}
return 0;
}
static std::vector< DiscoveryInformation > Discover()
static std::shared_ptr< T > Open(const String &provider, AcquisitionStack acquisitionStack=AcquisitionStack::PreferVin)