#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 =
5000;
static const constexpr int FEEDBACK_INTERVAL =
NUM_ELEMENTS_TO_ACQUIRE / 10;
static const constexpr int NUM_FLOW_SETS =
10;
int main() {
try {
Cvb::DiscoverFlags::IgnoreVins | Cvb::DiscoverFlags::IgnoreGevFD);
auto &item = itemList.at(0);
item.SetParameter(CVB_LIT("UseRdma"), CVB_LIT("1"));
item.AccessToken(), Cvb::AcquisitionStack::GenTL);
auto payloadSize =
static_cast<double>(device->NodeMap(Cvb::NodeMapID::Device)
->Node<Cvb::IntegerNode>(CVB_LIT("PayloadSize"))
->Value());
dataStream->Start();
auto startTime = std::chrono::high_resolution_clock::now();
for (auto i = 0; i < NUM_ELEMENTS_TO_ACQUIRE; i++) {
std::tie(composite, waitStatus, enumerator) =
dataStream->WaitFor(TIMEOUT);
switch (waitStatus) {
default:
case Cvb::WaitStatus::Abort:
throw std::runtime_error("wait status unknown.");
case Cvb::WaitStatus::Timeout:
throw std::runtime_error("time out during wait");
case Cvb::WaitStatus::Ok:
break;
}
if (i && i % FEEDBACK_INTERVAL == 0) {
auto firstElement = composite->ItemAt(0);
if (!Cvb::holds_alternative<Cvb::ImagePtr>(firstElement)) {
std::cout << "acquired composites: " << i << " which is not an image"
<< std::endl;
} else {
auto image = Cvb::get<Cvb::ImagePtr>(firstElement);
std::cout <<
"acquired images: " << i <<
" | size: " <<
image->Width()
<<
" x " <<
image->Height() << std::endl;
}
}
}
auto endTime = std::chrono::high_resolution_clock::now();
auto durationMs = std::chrono::duration_cast<std::chrono::milliseconds>(
endTime - startTime)
.count();
dataStream->TryAbort();
auto dataRate = static_cast<int>(
(static_cast<double>(NUM_ELEMENTS_TO_ACQUIRE) * payloadSize) /
(1000.0 * static_cast<double>(durationMs)));
std::cout << std::endl
<< "acquired " << NUM_ELEMENTS_TO_ACQUIRE << " buffers in "
<< durationMs << " ms ( " << dataRate << " MB/s )" << std::endl;
} 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)
std::shared_ptr< Composite > CompositePtr