IDS peak genericC++  v1.7.0
peak_data_stream.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 
13 
18 #include <peak/dll_interface/peak_dll_interface_util.hpp>
19 
20 #include <unordered_map>
21 #include <algorithm>
22 #include <cstddef>
23 #include <cstdint>
24 #include <functional>
25 #include <iterator>
26 #include <memory>
27 #include <mutex>
28 #include <string>
29 #include <vector>
30 
31 
32 namespace peak
33 {
34 namespace core
35 {
36 
43 {
78  DiscardAll,
79 
83  Custom = 1000
84 };
85 
92 {
96  Default,
97 
101  Custom = 1000
102 };
103 
110 {
116  Default,
125  Kill,
126 
130  Custom = 1000
131 };
132 
133 
134 class Device;
135 
182  : public EventSupportingModule
183  , public std::enable_shared_from_this<DataStream>
184 {
185 public:
187  using BufferRevocationCallback = std::function<void(void* buffer, void* userPtr)>;
189  static const uint64_t INFINITE_NUMBER = PEAK_INFINITE_NUMBER;
190 
191  DataStream() = delete;
192  ~DataStream() override;
193  DataStream(const DataStream& other) = delete;
194  DataStream& operator=(const DataStream& other) = delete;
195  DataStream(DataStream&& other) = delete;
196  DataStream& operator=(DataStream&& other) = delete;
197 
199  std::string Key() const;
200 
202  RawInformation Info(int32_t infoCommand) const;
203 
205  std::string ID() const;
206 
208  std::string TLType() const;
209 
219  size_t NumBuffersAnnouncedMinRequired() const;
220 
230  size_t NumBuffersAnnounced() const;
231 
241  size_t NumBuffersQueued() const;
242 
252  size_t NumBuffersAwaitDelivery() const;
253 
263  uint64_t NumBuffersDelivered() const;
264 
274  uint64_t NumBuffersStarted() const;
275 
285  uint64_t NumUnderruns() const;
286 
296  size_t NumChunksPerBufferMax() const;
297 
307  size_t BufferAlignment() const;
308 
318  size_t PayloadSize() const;
319 
334  bool DefinesPayloadSize() const;
335 
346  bool IsGrabbing() const;
347 
352 
387  std::shared_ptr<Buffer> AnnounceBuffer(
388  void* buffer, size_t size, void* userPtr, const BufferRevocationCallback& revocationCallback);
389 
412  std::shared_ptr<Buffer> AllocAndAnnounceBuffer(size_t size, void* userPtr);
413 
427  void QueueBuffer(const std::shared_ptr<Buffer>& buffer);
428 
442  void RevokeBuffer(const std::shared_ptr<Buffer>& buffer);
443 
454  void Flush(DataStreamFlushMode mode);
455 
465  std::vector<std::shared_ptr<Buffer>> AnnouncedBuffers() const;
466 
468 
473 
493  void StartAcquisition(
494  AcquisitionStartMode mode = AcquisitionStartMode::Default, uint64_t numToAcquire = INFINITE_NUMBER);
495 
505  void StopAcquisition(AcquisitionStopMode mode = AcquisitionStopMode::Default);
506 
508 
513 
539  std::shared_ptr<Buffer> WaitForFinishedBuffer(Timeout timeout_ms);
540 
551  void KillWait();
552 
554 
556  std::shared_ptr<Device> ParentDevice() const;
557 
558 private:
559  static void PEAK_CALL_CONV BufferRevocationCallbackCWrapper(void* buffer, void* userPtr, void* context);
560 
561  PEAK_MODULE_HANDLE ModuleHandle() const override;
562  PEAK_EVENT_SUPPORTING_MODULE_HANDLE EventSupportingModuleHandle() const override;
563 
564  std::shared_ptr<Buffer> GetAnnouncedBuffer(PEAK_BUFFER_HANDLE bufferHandle) const;
565  void AddAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer);
566  void RemoveAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer);
567  void RevokeAnnouncedBuffers();
568 
569  void Shutdown();
570 
571  friend ClassCreator<DataStream>;
572  DataStream(PEAK_DATA_STREAM_HANDLE dataStreamHandle, const std::weak_ptr<Device>& parentDevice);
573  PEAK_DATA_STREAM_HANDLE m_backendHandle;
574 
575  std::weak_ptr<Device> m_parentDevice;
576 
577  std::vector<std::shared_ptr<Buffer>> m_announcedBuffers;
578  std::unordered_map<PEAK_BUFFER_HANDLE, std::shared_ptr<Buffer>> m_announcedBuffersByHandle;
579  std::unordered_map<PEAK_BUFFER_HANDLE, std::unique_ptr<BufferRevocationCallback>>
580  m_bufferRevocationCallbacksByBufferHandle;
581 
582  mutable std::mutex m_announcedBuffersMutex;
583  mutable std::mutex m_bufferRevocationCallbacksByBufferHandleMutex;
584 
585  std::string m_key;
586 };
587 
588 } /* namespace core */
589 } /* namespace peak */
590 
591 /* Implementation */
592 namespace peak
593 {
594 namespace core
595 {
596 
597 inline std::string ToString(DataStreamFlushMode entry)
598 {
599  std::string entryString;
600 
602  {
603  entryString = "InputPoolToOutputQueue";
604  }
605  else if (entry == DataStreamFlushMode::DiscardOutputQueue)
606  {
607  entryString = "DiscardOutputQueue";
608  }
609  else if (entry == DataStreamFlushMode::AllToInputPool)
610  {
611  entryString = "AllToInputPool";
612  }
614  {
615  entryString = "UnqueuedToInputPool";
616  }
617  else if (entry == DataStreamFlushMode::DiscardAll)
618  {
619  entryString = "DiscardAll";
620  }
621  else if (entry >= DataStreamFlushMode::Custom)
622  {
623  entryString = "Custom";
624  }
625 
626  return entryString;
627 }
628 
629 inline std::string ToString(AcquisitionStartMode entry)
630 {
631  std::string entryString;
632 
633  if (entry == AcquisitionStartMode::Default)
634  {
635  entryString = "Default";
636  }
637  else if (entry >= AcquisitionStartMode::Custom)
638  {
639  entryString = "Custom";
640  }
641 
642  return entryString;
643 }
644 
645 inline std::string ToString(AcquisitionStopMode entry)
646 {
647  std::string entryString;
648 
649  if (entry == AcquisitionStopMode::Default)
650  {
651  entryString = "Default";
652  }
653  else if (entry == AcquisitionStopMode::Kill)
654  {
655  entryString = "Kill";
656  }
657  else if (entry >= AcquisitionStopMode::Custom)
658  {
659  entryString = "Custom";
660  }
661 
662  return entryString;
663 }
664 
665 inline DataStream::DataStream(PEAK_DATA_STREAM_HANDLE dataStreamHandle, const std::weak_ptr<Device>& parentDevice)
666  : m_backendHandle(dataStreamHandle)
667  , m_parentDevice(parentDevice)
668  , m_announcedBuffers()
669  , m_announcedBuffersByHandle()
670  , m_announcedBuffersMutex()
671  , m_key(QueryStringFromCInterfaceFunction([&](char* key, size_t* keySize) {
672  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetKey(dataStreamHandle, key, keySize);
673  }))
674 {}
675 
677 {
678  try
679  {
680  Shutdown();
681  }
682  catch (const Exception&)
683  {}
684 
685  (void)PEAK_C_ABI_PREFIX PEAK_DataStream_Destruct(m_backendHandle);
686 }
687 
688 inline std::string DataStream::Key() const
689 {
690  return m_key;
691 }
692 
693 inline RawInformation DataStream::Info(int32_t infoCommand) const
694 {
695  return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
697  m_backendHandle, infoCommand, dataType, buffer, bufferSize);
698  });
699 }
700 
701 inline std::string DataStream::ID() const
702 {
703  return QueryStringFromCInterfaceFunction([&](char* id, size_t* idSize) {
704  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetID(m_backendHandle, id, idSize);
705  });
706 }
707 
708 inline std::string DataStream::TLType() const
709 {
710  return QueryStringFromCInterfaceFunction([&](char* tlType, size_t* tlTypeSize) {
711  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetTLType(m_backendHandle, tlType, tlTypeSize);
712  });
713 }
714 
716 {
717  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAnnouncedMinRequired) {
719  m_backendHandle, numBuffersAnnouncedMinRequired);
720  });
721 }
722 
723 inline size_t DataStream::NumBuffersAnnounced() const
724 {
725  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAnnounced) {
726  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersAnnounced(m_backendHandle, numBuffersAnnounced);
727  });
728 }
729 
730 inline size_t DataStream::NumBuffersQueued() const
731 {
732  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersQueued) {
733  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersQueued(m_backendHandle, numBuffersQueued);
734  });
735 }
736 
738 {
739  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAwaitDelivery) {
741  m_backendHandle, numBuffersAwaitDelivery);
742  });
743 }
744 
745 inline uint64_t DataStream::NumBuffersDelivered() const
746 {
747  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numBuffersDelivered) {
748  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersDelivered(m_backendHandle, numBuffersDelivered);
749  });
750 }
751 
752 inline uint64_t DataStream::NumBuffersStarted() const
753 {
754  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numBuffersStarted) {
755  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersStarted(m_backendHandle, numBuffersStarted);
756  });
757 }
758 
759 inline uint64_t DataStream::NumUnderruns() const
760 {
761  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numUnderruns) {
762  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumUnderruns(m_backendHandle, numUnderruns);
763  });
764 }
765 
767 {
768  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numChunksPerBufferMax) {
769  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumChunksPerBufferMax(m_backendHandle, numChunksPerBufferMax);
770  });
771 }
772 
773 inline size_t DataStream::BufferAlignment() const
774 {
775  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* bufferAlignment) {
776  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetBufferAlignment(m_backendHandle, bufferAlignment);
777  });
778 }
779 
780 inline size_t DataStream::PayloadSize() const
781 {
782  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* payloadSize) {
783  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetPayloadSize(m_backendHandle, payloadSize);
784  });
785 }
786 
788 {
789  return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* definesPayloadSize) {
790  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetDefinesPayloadSize(m_backendHandle, definesPayloadSize);
791  }) > 0;
792 }
793 
794 inline bool DataStream::IsGrabbing() const
795 {
796  return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isGrabbing) {
797  return PEAK_C_ABI_PREFIX PEAK_DataStream_GetIsGrabbing(m_backendHandle, isGrabbing);
798  }) > 0;
799 }
800 
801 inline std::shared_ptr<Buffer> DataStream::AnnounceBuffer(
802  void* buffer, size_t size, void* userPtr, const DataStream::BufferRevocationCallback& revocationCallback)
803 {
804  auto _callback = std::make_unique<BufferRevocationCallback>(revocationCallback);
805 
806  auto callbackContext = _callback.get();
807 
808  auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
809  [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
810  return PEAK_C_ABI_PREFIX PEAK_DataStream_AnnounceBuffer(m_backendHandle, buffer, size, userPtr,
811  BufferRevocationCallbackCWrapper, callbackContext, _bufferHandle);
812  });
813 
814  auto _buffer = std::make_shared<ClassCreator<Buffer>>(bufferHandle, shared_from_this());
815  AddAnnouncedBuffer(_buffer);
816 
817  {
818  std::lock_guard<std::mutex> lock(m_bufferRevocationCallbacksByBufferHandleMutex);
819 
820  m_bufferRevocationCallbacksByBufferHandle.emplace(bufferHandle, std::move(_callback));
821  }
822 
823  return _buffer;
824 }
825 
826 inline std::shared_ptr<Buffer> DataStream::AllocAndAnnounceBuffer(size_t size, void* userPtr)
827 {
828  auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
829  [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
831  m_backendHandle, size, userPtr, _bufferHandle);
832  });
833 
834  auto buffer = std::make_shared<ClassCreator<Buffer>>(bufferHandle, shared_from_this());
835  AddAnnouncedBuffer(buffer);
836 
837  return buffer;
838 }
839 
840 inline void DataStream::QueueBuffer(const std::shared_ptr<Buffer>& buffer)
841 {
842  if (buffer == nullptr)
843  {
844  throw InvalidArgumentException("The given buffer is a nullptr!");
845  }
846 
847  auto bufferHandle = buffer->m_backendHandle;
848 
849  CallAndCheckCInterfaceFunction(
850  [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_QueueBuffer(m_backendHandle, bufferHandle); });
851 }
852 
853 inline void DataStream::RevokeBuffer(const std::shared_ptr<Buffer>& buffer)
854 {
855  if (buffer == nullptr)
856  {
857  throw InvalidArgumentException("The given buffer is a nullptr!");
858  }
859 
860  auto bufferHandle = buffer->m_backendHandle;
861 
862  CallAndCheckCInterfaceFunction(
863  [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_RevokeBuffer(m_backendHandle, bufferHandle); });
864 
865  RemoveAnnouncedBuffer(buffer);
866 
867  {
868  std::lock_guard<std::mutex> lock(m_bufferRevocationCallbacksByBufferHandleMutex);
869 
870  m_bufferRevocationCallbacksByBufferHandle.erase(bufferHandle);
871  }
872 
873  buffer->Revoke();
874 }
875 
876 inline std::shared_ptr<Buffer> DataStream::WaitForFinishedBuffer(Timeout timeout_ms)
877 {
878  auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
879  [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
881  m_backendHandle, timeout_ms, _bufferHandle);
882  });
883 
884  return GetAnnouncedBuffer(bufferHandle);
885 }
886 
887 inline void DataStream::KillWait()
888 {
889  CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_KillWait(m_backendHandle); });
890 }
891 
893 {
894  CallAndCheckCInterfaceFunction([&] {
896  m_backendHandle, static_cast<PEAK_DATA_STREAM_FLUSH_MODE>(mode));
897  });
898 }
899 
900 inline std::vector<std::shared_ptr<Buffer>> DataStream::AnnouncedBuffers() const
901 {
902  std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
903 
904  return m_announcedBuffers;
905 }
906 
907 inline void DataStream::StartAcquisition(AcquisitionStartMode mode, uint64_t numToAcquire /*= INFINITE_NUMBER*/)
908 {
909  CallAndCheckCInterfaceFunction([&] {
911  m_backendHandle, static_cast<PEAK_ACQUISITION_START_MODE>(mode), numToAcquire);
912  });
913 }
914 
916 {
917  CallAndCheckCInterfaceFunction([&] {
919  m_backendHandle, static_cast<PEAK_ACQUISITION_STOP_MODE>(mode));
920  });
921 }
922 
923 inline std::shared_ptr<Device> DataStream::ParentDevice() const
924 {
925  return LockOrThrow(m_parentDevice);
926 }
927 
928 inline void PEAK_CALL_CONV DataStream::BufferRevocationCallbackCWrapper(void* buffer, void* userPtr, void* context)
929 {
930  auto callback = static_cast<DataStream::BufferRevocationCallback*>(context);
931  if (*callback)
932  {
933  callback->operator()(buffer, userPtr);
934  }
935 }
936 
937 inline PEAK_MODULE_HANDLE DataStream::ModuleHandle() const
938 {
939  auto moduleHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_HANDLE>(
940  [&](PEAK_MODULE_HANDLE* _moduleHandle) {
941  return PEAK_C_ABI_PREFIX PEAK_DataStream_ToModule(m_backendHandle, _moduleHandle);
942  });
943 
944  return moduleHandle;
945 }
946 
947 inline PEAK_EVENT_SUPPORTING_MODULE_HANDLE DataStream::EventSupportingModuleHandle() const
948 {
949  auto eventSupportingModuleHandle = QueryNumericFromCInterfaceFunction<PEAK_EVENT_SUPPORTING_MODULE_HANDLE>(
950  [&](PEAK_EVENT_SUPPORTING_MODULE_HANDLE* _eventSupportingModuleHandle) {
952  m_backendHandle, _eventSupportingModuleHandle);
953  });
954 
955  return eventSupportingModuleHandle;
956 }
957 
958 inline std::shared_ptr<Buffer> DataStream::GetAnnouncedBuffer(PEAK_BUFFER_HANDLE bufferHandle) const
959 {
960  std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
961 
962  return m_announcedBuffersByHandle.at(bufferHandle);
963 }
964 
965 inline void DataStream::AddAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer)
966 {
967  std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
968 
969  m_announcedBuffers.emplace_back(buffer);
970  m_announcedBuffersByHandle.emplace(buffer->m_backendHandle, buffer);
971 }
972 
973 inline void DataStream::RemoveAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer)
974 {
975  std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
976 
977  m_announcedBuffers.erase(std::remove(std::begin(m_announcedBuffers), std::end(m_announcedBuffers), buffer));
978  m_announcedBuffersByHandle.erase(buffer->m_backendHandle);
979 }
980 
981 inline void DataStream::RevokeAnnouncedBuffers()
982 {
983  for (const auto& buffer : AnnouncedBuffers())
984  {
985  RevokeBuffer(buffer);
986  }
987 }
988 
989 inline void DataStream::Shutdown()
990 {
991  if (IsGrabbing())
992  {
993  StopAcquisition(AcquisitionStopMode::Default);
994  }
996  RevokeAnnouncedBuffers();
997 }
998 
999 } /* namespace core */
1000 } /* namespace peak */
PEAK_C_API PEAK_DataStream_RevokeBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BUFFER_HANDLE bufferHandle)
Tells the given data stream to revoke the given buffer.
std::vector< std::shared_ptr< Buffer > > AnnouncedBuffers() const
Returns the currently announced buffers.
Definition: peak_data_stream.hpp:900
uint64_t NumUnderruns() const
Returns the number of underruns.
Definition: peak_data_stream.hpp:759
PEAK_C_API PEAK_DataStream_AnnounceBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, void *buffer, size_t bufferSize, void *userPtr, PEAK_BUFFER_REVOCATION_CALLBACK revocationCallback, void *callbackContext, PEAK_BUFFER_HANDLE *bufferHandle)
Announces the given buffer at the given data stream.
const uint64_t PEAK_INFINITE_NUMBER
The constant defining an infinite number of buffers.
Definition: peak_backend.h:340
The exception thrown for pass an invalid argument to a function.
Definition: peak_exception.hpp:73
PEAK_C_API PEAK_DataStream_Destruct(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Destroys the given data stream.
bool DefinesPayloadSize() const
Checks whether the data stream defines the payload size.
Definition: peak_data_stream.hpp:787
void RevokeBuffer(const std::shared_ptr< Buffer > &buffer)
Revokes a given buffer.
Definition: peak_data_stream.hpp:853
int8_t PEAK_BOOL8
Definition: peak_backend.h:26
PEAK_C_API PEAK_DataStream_GetNumBuffersQueued(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numBuffersQueued)
Asks the given data stream for its number of queued buffers.
PEAK_C_API PEAK_DataStream_ToModule(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_MODULE_HANDLE *moduleHandle)
Casts the given data stream to a module.
size_t NumChunksPerBufferMax() const
Returns the maximum number of chunks per buffer.
Definition: peak_data_stream.hpp:766
PEAK_C_API PEAK_DataStream_QueueBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BUFFER_HANDLE bufferHandle)
Tells the given data stream to queue the given buffer.
void StopAcquisition(AcquisitionStopMode mode=AcquisitionStopMode::Default)
Stops the acquisition.
Definition: peak_data_stream.hpp:915
PEAK_C_API PEAK_DataStream_GetNumBuffersStarted(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t *numBuffersStarted)
Asks the given data stream for its number of started buffers.
std::function< void(void *buffer, void *userPtr)> BufferRevocationCallback
Definition: peak_data_stream.hpp:187
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition: peak_dynamic_loader.h:32
struct PEAK_EVENT_SUPPORTING_MODULE * PEAK_EVENT_SUPPORTING_MODULE_HANDLE
Definition: peak_backend.h:459
std::shared_ptr< Buffer > AllocAndAnnounceBuffer(size_t size, void *userPtr)
Allocates and announces a producer allocated buffer on the data stream.
Definition: peak_data_stream.hpp:826
size_t PayloadSize() const
Returns the payload size in bytes, i.e. the size of the buffers.
Definition: peak_data_stream.hpp:780
PEAK_C_API PEAK_DataStream_GetNumBuffersAnnounced(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numBuffersAnnounced)
Asks the given data stream for its number of announced buffers.
DataStreamFlushMode
Operation modes for DataStream::Flush() method.
Definition: peak_data_stream.hpp:42
std::string ToString(BufferPayloadType entry)
Definition: peak_buffer.hpp:505
PEAK_C_API PEAK_DataStream_KillWait(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Tells the given data stream to kill a wait for a finished buffer.
uint64_t NumBuffersDelivered() const
Returns the number of delivered buffers.
Definition: peak_data_stream.hpp:745
void Flush(DataStreamFlushMode mode)
Move buffers between the Input Buffer Pool, the Output Buffer Queue and the Announced Buffer Pool...
Definition: peak_data_stream.hpp:892
size_t NumBuffersAwaitDelivery() const
Returns the number of buffers awaiting delivery.
Definition: peak_data_stream.hpp:737
PEAK_C_API PEAK_DataStream_AllocAndAnnounceBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t bufferSize, void *userPtr, PEAK_BUFFER_HANDLE *bufferHandle)
Tells the given data stream to allocate and announce a buffer with the given size.
void KillWait()
Tells the data stream to kill a wait for a finished buffer.
Definition: peak_data_stream.hpp:887
PEAK_C_API PEAK_DataStream_GetIsGrabbing(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BOOL8 *isGrabbing)
Asks the given data stream whether it is grabbing.
std::shared_ptr< Buffer > AnnounceBuffer(void *buffer, size_t size, void *userPtr, const BufferRevocationCallback &revocationCallback)
Announces a given client allocated buffer to the data stream.
Definition: peak_data_stream.hpp:801
uint64_t NumBuffersStarted() const
Returns the number of started buffers.
Definition: peak_data_stream.hpp:752
~DataStream() override
Definition: peak_data_stream.hpp:676
size_t NumBuffersQueued() const
Returns the number of queued buffers.
Definition: peak_data_stream.hpp:730
AcquisitionStartMode
The enum holding the possible acquisition start modes, for DataStream::StartAcquisition().
Definition: peak_data_stream.hpp:91
PEAK_C_API PEAK_DataStream_WaitForFinishedBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t timeout_ms, PEAK_BUFFER_HANDLE *bufferHandle)
Tells the given data stream to wait for a finished buffer with the given timeout. ...
Represents a GenTL Device module, i.e. a local virtual Device proxy for the actual hardware RemoteDev...
Definition: peak_device.hpp:52
std::string Key() const
Returns the unique key.
Definition: peak_data_stream.hpp:688
PEAK_C_API PEAK_DataStream_GetTLType(PEAK_DATA_STREAM_HANDLE dataStreamHandle, char *tlType, size_t *tlTypeSize)
Asks the given data stream for its TL type.
PEAK_C_API PEAK_DataStream_GetNumBuffersDelivered(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t *numBuffersDelivered)
Asks the given data stream for its number of delivered buffers.
PEAK_C_API PEAK_DataStream_Flush(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_DATA_STREAM_FLUSH_MODE flushMode)
Tells the given data stream to flush its queues using the given mode.
size_t NumBuffersAnnouncedMinRequired() const
Returns the minimum number of announced buffers required to start the acquisition.
Definition: peak_data_stream.hpp:715
PEAK_C_API PEAK_DataStream_StartAcquisition(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_ACQUISITION_START_MODE startMode, uint64_t numToAcquire)
Tells the given data stream to start the acquisition using the given mode and to acquire the given nu...
PEAK_C_API PEAK_DataStream_GetID(PEAK_DATA_STREAM_HANDLE dataStreamHandle, char *id, size_t *idSize)
Asks the given data stream for its ID.
PEAK_C_API PEAK_DataStream_GetKey(PEAK_DATA_STREAM_HANDLE dataStreamHandle, char *key, size_t *keySize)
Asks the given data stream for its key.
struct PEAK_BUFFER * PEAK_BUFFER_HANDLE
Definition: peak_backend.h:387
size_t BufferAlignment() const
Returns the buffer alignment.
Definition: peak_data_stream.hpp:773
AcquisitionStopMode
The enum holding the possible acquisition stop modes, for DataStream::StopAcquisition().
Definition: peak_data_stream.hpp:109
std::string ID() const
Returns the ID.
Definition: peak_data_stream.hpp:701
std::string TLType() const
Returns the TL (transport layer) type.
Definition: peak_data_stream.hpp:708
PEAK_C_API PEAK_DataStream_GetNumBuffersAwaitDelivery(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numBuffersAwaitDelivery)
Asks the given data stream for its number of buffers awaiting delivery.
PEAK_C_API PEAK_DataStream_GetNumBuffersAnnouncedMinRequired(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numBuffersAnnouncedMinRequired)
Asks the given data stream for its minimum required number of announced buffers.
PEAK_C_API PEAK_DataStream_StopAcquisition(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_ACQUISITION_STOP_MODE stopMode)
Tells the given data stream to stop the acquisition using the given mode.
Represents a timeout value in milliseconds.
Definition: peak_timeout.hpp:30
Represents a GenTL DataStream module.
Definition: peak_data_stream.hpp:181
PEAK_C_API PEAK_DataStream_GetInfo(PEAK_DATA_STREAM_HANDLE dataStreamHandle, int32_t infoCommand, int32_t *infoDataType, uint8_t *info, size_t *infoSize)
Asks the given data stream for an information based on a specific command.
The base class for all exceptions thrown by the library.
Definition: peak_exception.hpp:25
std::shared_ptr< Device > ParentDevice() const
Returns the parent device.
Definition: peak_data_stream.hpp:923
struct PEAK_DATA_STREAM * PEAK_DATA_STREAM_HANDLE
Definition: peak_backend.h:383
PEAK_C_API PEAK_DataStream_GetBufferAlignment(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *bufferAlignment)
Asks the given data stream for its buffer alignment.
void QueueBuffer(const std::shared_ptr< Buffer > &buffer)
Queues a given buffer.
Definition: peak_data_stream.hpp:840
#define PEAK_CALL_CONV
Definition: peak_dynamic_loader.h:29
#define PEAK_C_ABI_PREFIX
Definition: peak_dll_defines.h:16
PEAK_C_API PEAK_DataStream_GetPayloadSize(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *payloadSize)
Asks the given data stream for its payload size.
std::shared_ptr< Buffer > WaitForFinishedBuffer(Timeout timeout_ms)
Blocking wait for a finished Buffer.
Definition: peak_data_stream.hpp:876
bool IsGrabbing() const
Checks whether the data stream is grabbing.
Definition: peak_data_stream.hpp:794
PEAK_C_API PEAK_DataStream_GetNumChunksPerBufferMax(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *numChunksPerBufferMax)
Asks the given data stream for its maximum number of chunks per buffer.
void StartAcquisition(AcquisitionStartMode mode=AcquisitionStartMode::Default, uint64_t numToAcquire=INFINITE_NUMBER)
Starts the acquisition.
Definition: peak_data_stream.hpp:907
PEAK_C_API PEAK_DataStream_GetNumUnderruns(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t *numUnderruns)
Asks the given data stream for its number of underruns.
size_t NumBuffersAnnounced() const
Returns the number of announced buffers.
Definition: peak_data_stream.hpp:723
The struct returned by all raw information functions.
Definition: peak_common_structs.hpp:24
struct PEAK_MODULE * PEAK_MODULE_HANDLE
Definition: peak_backend.h:403
PEAK_C_API PEAK_DataStream_ToEventSupportingModule(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_EVENT_SUPPORTING_MODULE_HANDLE *eventSupportingModuleHandle)
Casts the given data stream to an event-supporting module.
RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition: peak_data_stream.hpp:693
The base class for all modules being able to raise events.
Definition: peak_event_supporting_module.hpp:33
PEAK_C_API PEAK_DataStream_GetDefinesPayloadSize(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BOOL8 *definesPayloadSize)
Asks the given data stream whether it defines the payload size.