#include <iostream>
#include <string>
#include <sstream>
#include <cvb/device_factory.hpp>
#include <cvb/global.hpp>
#include <cvb/driver/composite_stream.hpp>
static const constexpr int DELIVERABLE_COUNT = 10;
static const constexpr int ITEM_COUNT =
2;
static const constexpr int CVB_FLOW_SET_COUNT = 3;
int main()
{
try
{
Cvb::DiscoverFlags::IncludeMockTL
);
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.");
auto deviceNodeMap = device->NodeMap("Device");
{
auto configurationNode = deviceNodeMap->Node<
Cvb::EnumerationNode>(CVB_LIT(
"GenDCFlowMappingConfiguration"));
configurationNode->
SetValue(CVB_LIT(
"MultipleFlow"));
auto imageCountNode = deviceNodeMap->Node<
Cvb::IntegerNode>(CVB_LIT(
"TestGenDCImageCount"));
}
streamingModeNode->
SetValue(CVB_LIT(
"On"));
stream->Start();
for (auto m = 0; m < DELIVERABLE_COUNT; ++m)
{
std::cout << "Acquisition #" << m << "\n";
auto waitResultTuple = stream->WaitFor(std::chrono::seconds(10));
if (std::get<Cvb::WaitStatus>(waitResultTuple) == Cvb::WaitStatus::Timeout)
throw std::runtime_error("Acquisition timeout.");
auto &enumerator = std::get<Cvb::NodeMapEnumerator>(waitResultTuple);
const auto names = enumerator.Names();
const auto keyName = CVB_LIT("VinBuffer");
if (std::all_of(names.begin(), names.end(), [keyName](
const Cvb::String &name) { return name != keyName; }))
throw std::runtime_error("It must contain the node map of Vin buffer.");
auto vinBufferNodeMap = enumerator.NodeMap(keyName);
auto frameIDNode = vinBufferNodeMap->Node<
Cvb::IntegerNode>(CVB_LIT(
"FrameID"));
auto timestampNode = vinBufferNodeMap->Node<
Cvb::IntegerNode>(CVB_LIT(
"Timestamp"));
auto deliverable = std::get<Cvb::CompositePtr>(waitResultTuple);
std::cout << "Frame ID: " << frameIDNode->Value()
<<
", Type: " << payloadTypeNode->
Value() <<
", Timestamp: 0x" << std::hex
<< timestampNode->
Value() <<
", Item count: " << deliverable->ItemCount() <<
"\n";
for (auto n = 0; n < deliverable->ItemCount(); ++n)
{
auto item = deliverable->ItemAt(n);
std::stringstream strStream;
strStream << "Type: ";
{
strStream << "Image, Width: " << image->Width() << ", Height: " << image->Height();
}
strStream << "Plane";
strStream << "Plane enumerator";
strStream << "Buffer";
strStream << "PFNC buffer";
else
strStream << "Unknown";
std::cout << "Item index: " << n << ", " << strStream.str() << "\n";
}
}
stream->TryAbort();
}
catch (const std::exception &e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
void RegisterManagedFlowSetPool(int flowSetCount)
static std::vector< DiscoveryInformation > Discover()
static std::shared_ptr< T > Open(const String &provider, AcquisitionStack acquisitionStack=AcquisitionStack::PreferVin)
void SetValue(const String &value)
void SetValue(std::int64_t value)
std::int64_t Value() const
const variant_alternative_t< I, variant< TS... > > & get(const variant< TS... > &var)
bool holds_alternative(const variant< TS... > &var) noexcept