IDS peak genericC++ v1.17.0
Loading...
Searching...
No Matches
peak_data_stream.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
10
15#include <peak/dll_interface/peak_dll_interface_util.hpp>
16
17#include <unordered_map>
18#include <algorithm>
19#include <cstddef>
20#include <cstdint>
21#include <functional>
22#include <iterator>
23#include <memory>
24#include <mutex>
25#include <string>
26#include <vector>
27
28
29namespace peak
30{
31namespace core
32{
33
82
89{
94
98 Custom = 1000
99};
100
107{
123
127 Custom = 1000
128};
129
130
131class Device;
132
180 : public EventSupportingModule
181 , public std::enable_shared_from_this<DataStream>
182{
183public:
185 using BufferRevocationCallback = std::function<void(void* buffer, void* userPtr)>;
187 static const uint64_t INFINITE_NUMBER = PEAK_INFINITE_NUMBER;
188
189 DataStream() = delete;
190 ~DataStream() override;
191 DataStream(const DataStream& other) = delete;
192 DataStream& operator=(const DataStream& other) = delete;
193 DataStream(DataStream&& other) = delete;
194 DataStream& operator=(DataStream&& other) = delete;
195
197 PEAK_COMMON_NO_DISCARD std::string Key() const;
198
200 PEAK_COMMON_NO_DISCARD RawInformation Info(int32_t infoCommand) const;
201
203 PEAK_COMMON_NO_DISCARD std::string ID() const;
204
206 PEAK_COMMON_NO_DISCARD std::string TLType() const;
207
221
234
248
260
275
291
312 PEAK_COMMON_NO_DISCARD uint64_t NumUnderruns() const;
313
324
335
345 PEAK_COMMON_NO_DISCARD size_t PayloadSize() const;
346
362
374
380
421 std::shared_ptr<Buffer> AnnounceBuffer(
422 void* buffer, size_t size, void* userPtr, const BufferRevocationCallback& revocationCallback);
423
453 std::shared_ptr<Buffer> AllocAndAnnounceBuffer(size_t size, void* userPtr);
454
468 void QueueBuffer(const std::shared_ptr<Buffer>& buffer);
469
492 void AddAcquisitionBuffers(size_t size, size_t count);
493
512 void RevokeBuffer(const std::shared_ptr<Buffer>& buffer);
513
524 void Flush(DataStreamFlushMode mode);
525
542
553 PEAK_COMMON_NO_DISCARD std::vector<std::shared_ptr<Buffer>> AnnouncedBuffers() const;
554
556
562
582 void StartAcquisition(
584
595
597
603
634 PEAK_COMMON_NO_DISCARD std::shared_ptr<Buffer> WaitForFinishedBuffer(Timeout timeout_ms);
635
657 void KillWait();
658
684
686
688 PEAK_COMMON_NO_DISCARD std::shared_ptr<Device> ParentDevice() const;
689
690private:
691 static void PEAK_CALL_CONV BufferRevocationCallbackCWrapper(void* buffer, void* userPtr, void* context);
692
695
696 PEAK_COMMON_NO_DISCARD std::shared_ptr<Buffer> GetAnnouncedBuffer(PEAK_BUFFER_HANDLE bufferHandle) const;
697 void AddAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer);
698 void RemoveAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer);
699 void RevokeAnnouncedBuffers();
700
701 void Shutdown();
702
703 friend ClassCreator<DataStream>;
704 DataStream(PEAK_DATA_STREAM_HANDLE dataStreamHandle, const std::weak_ptr<Device>& parentDevice);
705 PEAK_DATA_STREAM_HANDLE m_backendHandle;
706
707 std::weak_ptr<Device> m_parentDevice;
708
709 std::vector<std::shared_ptr<Buffer>> m_announcedBuffers;
710 std::unordered_map<PEAK_BUFFER_HANDLE, std::shared_ptr<Buffer>> m_announcedBuffersByHandle;
711 std::unordered_map<PEAK_BUFFER_HANDLE, std::unique_ptr<BufferRevocationCallback>>
712 m_bufferRevocationCallbacksByBufferHandle;
713
714 mutable std::mutex m_announcedBuffersMutex;
715 mutable std::mutex m_bufferRevocationCallbacksByBufferHandleMutex;
716
717 std::string m_key;
718};
719
720} /* namespace core */
721} /* namespace peak */
722
723/* Implementation */
724namespace peak
725{
726namespace core
727{
728
729inline std::string ToString(DataStreamFlushMode entry)
730{
731 std::string entryString;
732
734 {
735 entryString = "InputPoolToOutputQueue";
736 }
738 {
739 entryString = "DiscardOutputQueue";
740 }
741 else if (entry == DataStreamFlushMode::AllToInputPool)
742 {
743 entryString = "AllToInputPool";
744 }
746 {
747 entryString = "UnqueuedToInputPool";
748 }
749 else if (entry == DataStreamFlushMode::DiscardAll)
750 {
751 entryString = "DiscardAll";
752 }
753 else if (entry >= DataStreamFlushMode::Custom)
754 {
755 entryString = "Custom";
756 }
757
758 return entryString;
759}
760
761inline std::string ToString(AcquisitionStartMode entry)
762{
763 std::string entryString;
764
766 {
767 entryString = "Default";
768 }
769 else if (entry >= AcquisitionStartMode::Custom)
770 {
771 entryString = "Custom";
772 }
773
774 return entryString;
775}
776
777inline std::string ToString(AcquisitionStopMode entry)
778{
779 std::string entryString;
780
781 if (entry == AcquisitionStopMode::Default)
782 {
783 entryString = "Default";
784 }
785 else if (entry == AcquisitionStopMode::Kill)
786 {
787 entryString = "Kill";
788 }
789 else if (entry >= AcquisitionStopMode::Custom)
790 {
791 entryString = "Custom";
792 }
793
794 return entryString;
795}
796
797inline DataStream::DataStream(PEAK_DATA_STREAM_HANDLE dataStreamHandle, const std::weak_ptr<Device>& parentDevice)
798 : m_backendHandle(dataStreamHandle)
799 , m_parentDevice(parentDevice)
800 , m_announcedBuffers()
801 , m_announcedBuffersByHandle()
802 , m_announcedBuffersMutex()
803 , m_key(QueryStringFromCInterfaceFunction([&](char* key, size_t* keySize) {
804 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetKey(dataStreamHandle, key, keySize);
805 }))
806{}
807
809{
810 try
811 {
812 Shutdown();
813 }
814 catch (const Exception&)
815 {}
816
817 (void)PEAK_C_ABI_PREFIX PEAK_DataStream_Destruct(m_backendHandle);
818}
819
820inline std::string DataStream::Key() const
821{
822 return m_key;
823}
824
825inline RawInformation DataStream::Info(int32_t infoCommand) const
826{
827 return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
829 m_backendHandle, infoCommand, dataType, buffer, bufferSize);
830 });
831}
832
833inline std::string DataStream::ID() const
834{
835 return QueryStringFromCInterfaceFunction([&](char* id, size_t* idSize) {
836 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetID(m_backendHandle, id, idSize);
837 });
838}
839
840inline std::string DataStream::TLType() const
841{
842 return QueryStringFromCInterfaceFunction([&](char* tlType, size_t* tlTypeSize) {
843 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetTLType(m_backendHandle, tlType, tlTypeSize);
844 });
845}
846
848{
849 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAnnouncedMinRequired) {
851 m_backendHandle, numBuffersAnnouncedMinRequired);
852 });
853}
854
856{
857 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAnnounced) {
858 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersAnnounced(m_backendHandle, numBuffersAnnounced);
859 });
860}
861
862inline size_t DataStream::NumBuffersQueued() const
863{
864 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersQueued) {
865 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersQueued(m_backendHandle, numBuffersQueued);
866 });
867}
868
870{
871 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numBuffersAwaitDelivery) {
873 m_backendHandle, numBuffersAwaitDelivery);
874 });
875}
876
877inline uint64_t DataStream::NumBuffersDelivered() const
878{
879 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numBuffersDelivered) {
880 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersDelivered(m_backendHandle, numBuffersDelivered);
881 });
882}
883
884inline uint64_t DataStream::NumBuffersStarted() const
885{
886 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numBuffersStarted) {
887 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumBuffersStarted(m_backendHandle, numBuffersStarted);
888 });
889}
890
891inline uint64_t DataStream::NumUnderruns() const
892{
893 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numUnderruns) {
894 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumUnderruns(m_backendHandle, numUnderruns);
895 });
896}
897
899{
900 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numChunksPerBufferMax) {
901 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetNumChunksPerBufferMax(m_backendHandle, numChunksPerBufferMax);
902 });
903}
904
905inline size_t DataStream::BufferAlignment() const
906{
907 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* bufferAlignment) {
908 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetBufferAlignment(m_backendHandle, bufferAlignment);
909 });
910}
911
912inline size_t DataStream::PayloadSize() const
913{
914 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* payloadSize) {
915 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetPayloadSize(m_backendHandle, payloadSize);
916 });
917}
918
920{
921 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* definesPayloadSize) {
922 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetDefinesPayloadSize(m_backendHandle, definesPayloadSize);
923 }) > 0;
924}
925
926inline bool DataStream::IsGrabbing() const
927{
928 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isGrabbing) {
929 return PEAK_C_ABI_PREFIX PEAK_DataStream_GetIsGrabbing(m_backendHandle, isGrabbing);
930 }) > 0;
931}
932
933inline std::shared_ptr<Buffer> DataStream::AnnounceBuffer(
934 void* buffer, size_t size, void* userPtr, const DataStream::BufferRevocationCallback& revocationCallback)
935{
936 auto _callback = std::make_unique<BufferRevocationCallback>(revocationCallback);
937
938 auto callbackContext = _callback.get();
939
940 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
941 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
942 return PEAK_C_ABI_PREFIX PEAK_DataStream_AnnounceBuffer(m_backendHandle, buffer, size, userPtr,
943 BufferRevocationCallbackCWrapper, callbackContext, _bufferHandle);
944 });
945
946 auto _buffer = std::make_shared<ClassCreator<Buffer>>(bufferHandle, shared_from_this());
947 AddAnnouncedBuffer(_buffer);
948
949 {
950 std::lock_guard<std::mutex> lock(m_bufferRevocationCallbacksByBufferHandleMutex);
951
952 m_bufferRevocationCallbacksByBufferHandle.emplace(bufferHandle, std::move(_callback));
953 }
954
955 return _buffer;
956}
957
958inline std::shared_ptr<Buffer> DataStream::AllocAndAnnounceBuffer(size_t size, void* userPtr)
959{
960 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
961 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
963 m_backendHandle, size, userPtr, _bufferHandle);
964 });
965
966 auto buffer = std::make_shared<ClassCreator<Buffer>>(bufferHandle, shared_from_this());
967 AddAnnouncedBuffer(buffer);
968
969 return buffer;
970}
971
972inline void DataStream::QueueBuffer(const std::shared_ptr<Buffer>& buffer)
973{
974 if (buffer == nullptr)
975 {
976 throw InvalidArgumentException("The given buffer is a nullptr!");
977 }
978
979 auto bufferHandle = buffer->m_backendHandle;
980
981 CallAndCheckCInterfaceFunction(
982 [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_QueueBuffer(m_backendHandle, bufferHandle); });
983}
984
985inline void DataStream::AddAcquisitionBuffers(const size_t size, const size_t count)
986{
987 for (size_t i = 0; i < count; i++)
988 {
989 auto buffer = AllocAndAnnounceBuffer(size, nullptr);
990 QueueBuffer(buffer);
991 }
992}
993
994inline void DataStream::RevokeBuffer(const std::shared_ptr<Buffer>& buffer)
995{
996 if (buffer == nullptr)
997 {
998 throw InvalidArgumentException("The given buffer is a nullptr!");
999 }
1000
1001 auto bufferHandle = buffer->m_backendHandle;
1002
1003 CallAndCheckCInterfaceFunction(
1004 [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_RevokeBuffer(m_backendHandle, bufferHandle); });
1005
1006 RemoveAnnouncedBuffer(buffer);
1007
1008 {
1009 std::lock_guard<std::mutex> lock(m_bufferRevocationCallbacksByBufferHandleMutex);
1010
1011 m_bufferRevocationCallbacksByBufferHandle.erase(bufferHandle);
1012 }
1013
1014 buffer->Revoke();
1015}
1016
1017inline std::shared_ptr<Buffer> DataStream::WaitForFinishedBuffer(Timeout timeout_ms)
1018{
1019 auto bufferHandle = QueryNumericFromCInterfaceFunction<PEAK_BUFFER_HANDLE>(
1020 [&](PEAK_BUFFER_HANDLE* _bufferHandle) {
1022 m_backendHandle, timeout_ms, _bufferHandle);
1023 });
1024
1025 return GetAnnouncedBuffer(bufferHandle);
1026}
1027
1029{
1030 CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_KillWait(m_backendHandle); });
1031}
1032
1034{
1035 CallAndCheckCInterfaceFunction(
1036 [&] { return PEAK_C_ABI_PREFIX PEAK_DataStream_FlushPendingKillWaits(m_backendHandle); });
1037}
1038
1040{
1041 CallAndCheckCInterfaceFunction([&] {
1043 m_backendHandle, static_cast<PEAK_DATA_STREAM_FLUSH_MODE>(mode));
1044 });
1045}
1046
1048{
1050 RevokeAnnouncedBuffers();
1051}
1052
1053inline std::vector<std::shared_ptr<Buffer>> DataStream::AnnouncedBuffers() const
1054{
1055 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
1056
1057 return m_announcedBuffers;
1058}
1059
1060inline void DataStream::StartAcquisition(AcquisitionStartMode mode, uint64_t numToAcquire /*= INFINITE_NUMBER*/)
1061{
1062 CallAndCheckCInterfaceFunction([&] {
1064 m_backendHandle, static_cast<PEAK_ACQUISITION_START_MODE>(mode), numToAcquire);
1065 });
1066}
1067
1069{
1070 CallAndCheckCInterfaceFunction([&] {
1072 m_backendHandle, static_cast<PEAK_ACQUISITION_STOP_MODE>(mode));
1073 });
1074}
1075
1076inline std::shared_ptr<Device> DataStream::ParentDevice() const
1077{
1078 return LockOrThrow(m_parentDevice);
1079}
1080
1081inline void PEAK_CALL_CONV DataStream::BufferRevocationCallbackCWrapper(void* buffer, void* userPtr, void* context)
1082{
1083 auto callback = static_cast<DataStream::BufferRevocationCallback*>(context);
1084 if (*callback)
1085 {
1086 callback->operator()(buffer, userPtr);
1087 }
1088}
1089
1090inline PEAK_MODULE_HANDLE DataStream::ModuleHandle() const
1091{
1092 auto moduleHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_HANDLE>(
1093 [&](PEAK_MODULE_HANDLE* _moduleHandle) {
1094 return PEAK_C_ABI_PREFIX PEAK_DataStream_ToModule(m_backendHandle, _moduleHandle);
1095 });
1096
1097 return moduleHandle;
1098}
1099
1100inline PEAK_EVENT_SUPPORTING_MODULE_HANDLE DataStream::EventSupportingModuleHandle() const
1101{
1102 auto eventSupportingModuleHandle = QueryNumericFromCInterfaceFunction<PEAK_EVENT_SUPPORTING_MODULE_HANDLE>(
1103 [&](PEAK_EVENT_SUPPORTING_MODULE_HANDLE* _eventSupportingModuleHandle) {
1105 m_backendHandle, _eventSupportingModuleHandle);
1106 });
1107
1108 return eventSupportingModuleHandle;
1109}
1110
1111inline std::shared_ptr<Buffer> DataStream::GetAnnouncedBuffer(PEAK_BUFFER_HANDLE bufferHandle) const
1112{
1113 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
1114
1115 return m_announcedBuffersByHandle.at(bufferHandle);
1116}
1117
1118inline void DataStream::AddAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer)
1119{
1120 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
1121
1122 m_announcedBuffers.emplace_back(buffer);
1123 m_announcedBuffersByHandle.emplace(buffer->m_backendHandle, buffer);
1124}
1125
1126inline void DataStream::RemoveAnnouncedBuffer(const std::shared_ptr<Buffer>& buffer)
1127{
1128 std::lock_guard<std::mutex> lock(m_announcedBuffersMutex);
1129
1130 m_announcedBuffers.erase(std::remove(std::begin(m_announcedBuffers), std::end(m_announcedBuffers), buffer));
1131 m_announcedBuffersByHandle.erase(buffer->m_backendHandle);
1132}
1133
1134inline void DataStream::RevokeAnnouncedBuffers()
1135{
1136 for (const auto& buffer : AnnouncedBuffers())
1137 {
1138 RevokeBuffer(buffer);
1139 }
1140}
1141
1142inline void DataStream::Shutdown()
1143{
1144 if (IsGrabbing())
1145 {
1146 StopAcquisition(AcquisitionStopMode::Default);
1147 }
1148 FlushAndRevokeAllBuffers();
1149}
1150
1151} /* namespace core */
1152} /* namespace peak */
static const uint64_t INFINITE_NUMBER
Definition peak_data_stream.hpp:187
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:933
DataStream(DataStream &&other)=delete
PEAK_COMMON_NO_DISCARD RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition peak_data_stream.hpp:825
void RevokeBuffer(const std::shared_ptr< Buffer > &buffer)
Revokes a specified buffer.
Definition peak_data_stream.hpp:994
void FlushAndRevokeAllBuffers()
Flushes and revokes all buffers announced on the data stream.
Definition peak_data_stream.hpp:1047
PEAK_COMMON_NO_DISCARD bool DefinesPayloadSize() const
Checks whether the data stream defines the payload size.
Definition peak_data_stream.hpp:919
void StartAcquisition(AcquisitionStartMode mode=AcquisitionStartMode::Default, uint64_t numToAcquire=INFINITE_NUMBER)
Starts the acquisition.
Definition peak_data_stream.hpp:1060
DataStream & operator=(DataStream &&other)=delete
PEAK_COMMON_NO_DISCARD size_t BufferAlignment() const
Returns the buffer alignment.
Definition peak_data_stream.hpp:905
void QueueBuffer(const std::shared_ptr< Buffer > &buffer)
Queues a given buffer.
Definition peak_data_stream.hpp:972
PEAK_COMMON_NO_DISCARD std::shared_ptr< Device > ParentDevice() const
Returns the parent device.
Definition peak_data_stream.hpp:1076
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:958
PEAK_COMMON_NO_DISCARD size_t NumBuffersAnnounced() const
Retrieves the count of buffers announced via AnnounceBuffer or AllocAndAnnounceBuffer.
Definition peak_data_stream.hpp:855
~DataStream() override
Definition peak_data_stream.hpp:808
PEAK_COMMON_NO_DISCARD uint64_t NumBuffersDelivered() const
Retrieves the count of buffers delivered since the last acquisition start.
Definition peak_data_stream.hpp:877
PEAK_COMMON_NO_DISCARD std::string Key() const
Returns the unique key.
Definition peak_data_stream.hpp:820
PEAK_COMMON_NO_DISCARD std::string TLType() const
Returns the TL (transport layer) type.
Definition peak_data_stream.hpp:840
PEAK_COMMON_NO_DISCARD uint64_t NumUnderruns() const
Retrieves the count of underruns.
Definition peak_data_stream.hpp:891
PEAK_COMMON_NO_DISCARD uint64_t NumBuffersStarted() const
Returns the count of buffers that have been initiated.
Definition peak_data_stream.hpp:884
PEAK_COMMON_NO_DISCARD std::shared_ptr< Buffer > WaitForFinishedBuffer(Timeout timeout_ms)
Blocking wait for a finished Buffer.
Definition peak_data_stream.hpp:1017
PEAK_COMMON_NO_DISCARD size_t NumBuffersAnnouncedMinRequired() const
Returns the minimum number of buffers that must be announced before starting the acquisition with Sta...
Definition peak_data_stream.hpp:847
void KillWait()
Tells the data stream to kill one call to WaitForFinishedBuffer.
Definition peak_data_stream.hpp:1028
void Flush(DataStreamFlushMode mode)
Move buffers between the Input Buffer Pool, the Output Buffer Pool and the Announced Buffer Pool,...
Definition peak_data_stream.hpp:1039
PEAK_COMMON_NO_DISCARD size_t NumBuffersAwaitDelivery() const
Retrieves the count of buffers that are currently waiting to be delivered, i.e., the number of buffer...
Definition peak_data_stream.hpp:869
PEAK_COMMON_NO_DISCARD bool IsGrabbing() const
Checks whether the data stream is grabbing.
Definition peak_data_stream.hpp:926
PEAK_COMMON_NO_DISCARD size_t NumChunksPerBufferMax() const
Returns the maximum number of chunks per buffer.
Definition peak_data_stream.hpp:898
PEAK_COMMON_NO_DISCARD size_t PayloadSize() const
Returns the payload size in bytes, i.e. the size of the buffers.
Definition peak_data_stream.hpp:912
std::function< void(void *buffer, void *userPtr)> BufferRevocationCallback
Definition peak_data_stream.hpp:185
DataStream(const DataStream &other)=delete
PEAK_COMMON_NO_DISCARD std::vector< std::shared_ptr< Buffer > > AnnouncedBuffers() const
Retrieves the list of the currently announced buffers. The buffers' states are irrelevant,...
Definition peak_data_stream.hpp:1053
void StopAcquisition(AcquisitionStopMode mode=AcquisitionStopMode::Default)
Stops the acquisition.
Definition peak_data_stream.hpp:1068
PEAK_COMMON_NO_DISCARD std::string ID() const
Returns the ID.
Definition peak_data_stream.hpp:833
DataStream & operator=(const DataStream &other)=delete
PEAK_COMMON_NO_DISCARD size_t NumBuffersQueued() const
Retrieves the count of buffers that are currently queued, i.e., the number of buffers present in the ...
Definition peak_data_stream.hpp:862
void FlushPendingKillWaits()
Flushes the KillWait queue.
Definition peak_data_stream.hpp:1033
void AddAcquisitionBuffers(size_t size, size_t count)
Allocates, announces, and queues acquisition buffers on the data stream.
Definition peak_data_stream.hpp:985
virtual PEAK_EVENT_SUPPORTING_MODULE_HANDLE EventSupportingModuleHandle() const =0
The base class for all exceptions thrown by the library.
Definition peak_exception.hpp:24
The exception thrown for passing an invalid argument to a function.
Definition peak_exception.hpp:118
virtual PEAK_MODULE_HANDLE ModuleHandle() const =0
Represents a timeout value in milliseconds.
Definition peak_timeout.hpp:28
@ Custom
Definition peak_buffer.hpp:54
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:32
DataStreamFlushMode
Operation modes for DataStream::Flush() method.
Definition peak_data_stream.hpp:40
@ UnqueuedToInputPool
Definition peak_data_stream.hpp:67
@ DiscardOutputQueue
Definition peak_data_stream.hpp:54
@ Custom
Definition peak_data_stream.hpp:80
@ InputPoolToOutputQueue
Definition peak_data_stream.hpp:48
@ AllToInputPool
Definition peak_data_stream.hpp:61
@ DiscardAll
Definition peak_data_stream.hpp:75
std::string ToString(BufferPayloadType entry)
Definition peak_buffer.hpp:635
AcquisitionStartMode
The enum holding the possible acquisition start modes, for DataStream::StartAcquisition().
Definition peak_data_stream.hpp:89
@ Default
Definition peak_data_stream.hpp:93
@ Custom
Definition peak_data_stream.hpp:98
AcquisitionStopMode
The enum holding the possible acquisition stop modes, for DataStream::StopAcquisition().
Definition peak_data_stream.hpp:107
@ Kill
Definition peak_data_stream.hpp:122
@ Default
Definition peak_data_stream.hpp:113
@ Custom
Definition peak_data_stream.hpp:127
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_buffer.hpp:29
struct PEAK_DATA_STREAM * PEAK_DATA_STREAM_HANDLE
Definition peak_backend.h:399
PEAK_C_API PEAK_DataStream_KillWait(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Tells the data stream to kill one call to PEAK_DataStream_WaitForFinishedBuffer.
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.
struct PEAK_MODULE * PEAK_MODULE_HANDLE
Definition peak_backend.h:419
PEAK_C_API PEAK_DataStream_ToModule(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_MODULE_HANDLE *moduleHandle)
Casts the given data stream to a module.
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.
PEAK_C_API PEAK_DataStream_Destruct(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Destroys the given data stream.
PEAK_C_API PEAK_DataStream_GetNumUnderruns(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t *numUnderruns)
Asks the given data stream for its number of underruns.
PEAK_C_API PEAK_DataStream_GetBufferAlignment(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *bufferAlignment)
Asks the given data stream for its buffer alignment.
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.
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.
struct PEAK_BUFFER * PEAK_BUFFER_HANDLE
Definition peak_backend.h:403
struct PEAK_EVENT_SUPPORTING_MODULE * PEAK_EVENT_SUPPORTING_MODULE_HANDLE
Definition peak_backend.h:475
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.
PEAK_C_API PEAK_DataStream_GetPayloadSize(PEAK_DATA_STREAM_HANDLE dataStreamHandle, size_t *payloadSize)
Asks the given data stream for its payload size.
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.
PEAK_C_API PEAK_DataStream_GetKey(PEAK_DATA_STREAM_HANDLE dataStreamHandle, char *key, size_t *keySize)
Asks the given data stream for its key.
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.
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_FlushPendingKillWaits(PEAK_DATA_STREAM_HANDLE dataStreamHandle)
Flushes the KillWait queue.
PEAK_C_API PEAK_DataStream_WaitForFinishedBuffer(PEAK_DATA_STREAM_HANDLE dataStreamHandle, uint64_t timeout_ms, PEAK_BUFFER_HANDLE *bufferHandle)
Blocking wait for a finished Buffer.
PEAK_C_API PEAK_DataStream_GetIsGrabbing(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_BOOL8 *isGrabbing)
Asks the given data stream whether it is grabbing.
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.
int32_t PEAK_ACQUISITION_START_MODE
Definition peak_backend.h:50
int8_t PEAK_BOOL8
Definition peak_backend.h:41
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.
static const uint64_t PEAK_INFINITE_NUMBER
The constant defining an infinite number of buffers.
Definition peak_backend.h:356
int32_t PEAK_ACQUISITION_STOP_MODE
Definition peak_backend.h:60
int32_t PEAK_DATA_STREAM_FLUSH_MODE
Definition peak_backend.h:118
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_StopAcquisition(PEAK_DATA_STREAM_HANDLE dataStreamHandle, PEAK_ACQUISITION_STOP_MODE stopMode)
Tells the given data stream to stop the acquisition using the given mode.
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.
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_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.
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_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.
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.
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...
#define PEAK_COMMON_NO_DISCARD
Definition peak_common_defines.h:89
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:13
The struct returned by all raw information functions.
Definition peak_common_structs.hpp:21