IDS peak genericC++  v1.6.1
peak_buffer_part.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 
13 
16 #include <peak/dll_interface/peak_dll_interface_util.hpp>
17 
18 #include <cstddef>
19 #include <cstdint>
20 #include <memory>
21 
22 
23 namespace peak
24 {
25 namespace core
26 {
27 
33 enum class BufferPartType
34 {
35  Unknown,
36  Image2D,
40  Image3D,
45 
46  Custom = 1000
47 };
48 
49 class Buffer;
50 
57 {
58 public:
59  BufferPart() = delete;
60  ~BufferPart();
61  BufferPart(const BufferPart& other) = delete;
62  BufferPart& operator=(const BufferPart& other) = delete;
63  BufferPart(BufferPart&& other) = delete;
64  BufferPart& operator=(BufferPart&& other) = delete;
65 
67  RawInformation Info(int32_t infoCommand) const;
77  uint64_t SourceID() const;
87  void* BasePtr() const;
97  size_t Size() const;
107  BufferPartType Type() const;
117  uint64_t Format() const;
127  uint64_t FormatNamespace() const;
137  size_t Width() const;
147  size_t Height() const;
157  size_t XOffset() const;
167  size_t YOffset() const;
177  size_t XPadding() const;
187  size_t DeliveredImageHeight() const;
188 
198  std::shared_ptr<Buffer> ParentBuffer() const;
199 
200 private:
201  friend ClassCreator<BufferPart>;
202  BufferPart(PEAK_BUFFER_PART_HANDLE bufferPartHandle, const std::weak_ptr<Buffer>& parentBuffer);
203  PEAK_BUFFER_PART_HANDLE m_backendHandle;
204 
205  std::weak_ptr<Buffer> m_parentBuffer;
206 };
207 
208 } /* namespace core */
209 } /* namespace peak */
210 
211 /* Implementation */
212 namespace peak
213 {
214 namespace core
215 {
216 
217 inline std::string ToString(BufferPartType entry)
218 {
219  std::string entryString;
220 
221  if (entry == BufferPartType::Unknown)
222  {
223  entryString = "Unknown";
224  }
225  else if (entry == BufferPartType::Image2D)
226  {
227  entryString = "Image2D";
228  }
229  else if (entry == BufferPartType::PlaneBiPlanar2D)
230  {
231  entryString = "PlaneBiPlanar2D";
232  }
233  else if (entry == BufferPartType::PlaneTriPlanar2D)
234  {
235  entryString = "PlaneTriPlanar2D";
236  }
237  else if (entry == BufferPartType::PlaneQuadPlanar2D)
238  {
239  entryString = "PlaneQuadPlanar2D";
240  }
241  else if (entry == BufferPartType::Image3D)
242  {
243  entryString = "Image3D";
244  }
245  else if (entry == BufferPartType::PlaneBiPlanar3D)
246  {
247  entryString = "PlaneBiPlanar3D";
248  }
249  else if (entry == BufferPartType::PlaneTriPlanar3D)
250  {
251  entryString = "PlaneTriPlanar3D";
252  }
253  else if (entry == BufferPartType::PlaneQuadPlanar3D)
254  {
255  entryString = "PlaneQuadPlanar3D";
256  }
257  else if (entry == BufferPartType::ConfidenceMap)
258  {
259  entryString = "ConfidenceMap";
260  }
261  else if (entry >= BufferPartType::Custom)
262  {
263  entryString = "Custom";
264  }
265 
266  return entryString;
267 }
268 
269 inline BufferPart::BufferPart(PEAK_BUFFER_PART_HANDLE bufferPartHandle, const std::weak_ptr<Buffer>& parentBuffer)
270  : m_backendHandle(bufferPartHandle)
271  , m_parentBuffer(parentBuffer)
272 {}
273 
275 {
276  (void)PEAK_C_ABI_PREFIX PEAK_BufferPart_Destruct(m_backendHandle);
277 }
278 
279 inline RawInformation BufferPart::Info(int32_t infoCommand) const
280 {
281  return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
283  m_backendHandle, infoCommand, dataType, buffer, bufferSize);
284  });
285 }
286 
287 inline uint64_t BufferPart::SourceID() const
288 {
289  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* sourceId) {
290  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetSourceID(m_backendHandle, sourceId);
291  });
292 }
293 
294 inline void* BufferPart::BasePtr() const
295 {
296  return QueryNumericFromCInterfaceFunction<void*>(
297  [&](void** basePtr) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetBasePtr(m_backendHandle, basePtr); });
298 }
299 
300 inline size_t BufferPart::Size() const
301 {
302  return QueryNumericFromCInterfaceFunction<size_t>(
303  [&](size_t* size) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetSize(m_backendHandle, size); });
304 }
305 
307 {
308  return static_cast<BufferPartType>(
309  QueryNumericFromCInterfaceFunction<PEAK_BUFFER_PART_TYPE>([&](PEAK_BUFFER_PART_TYPE* type) {
310  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetType(m_backendHandle, type);
311  }));
312 }
313 
314 inline uint64_t BufferPart::Format() const
315 {
316  return QueryNumericFromCInterfaceFunction<uint64_t>(
317  [&](uint64_t* format) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetFormat(m_backendHandle, format); });
318 }
319 
320 inline uint64_t BufferPart::FormatNamespace() const
321 {
322  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* formatNamespace) {
323  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetFormatNamespace(m_backendHandle, formatNamespace);
324  });
325 }
326 
327 inline size_t BufferPart::Width() const
328 {
329  return QueryNumericFromCInterfaceFunction<size_t>(
330  [&](size_t* width) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetWidth(m_backendHandle, width); });
331 }
332 
333 inline size_t BufferPart::Height() const
334 {
335  return QueryNumericFromCInterfaceFunction<size_t>(
336  [&](size_t* height) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetWidth(m_backendHandle, height); });
337 }
338 
339 inline size_t BufferPart::XOffset() const
340 {
341  return QueryNumericFromCInterfaceFunction<size_t>(
342  [&](size_t* xOffset) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetXOffset(m_backendHandle, xOffset); });
343 }
344 
345 inline size_t BufferPart::YOffset() const
346 {
347  return QueryNumericFromCInterfaceFunction<size_t>(
348  [&](size_t* yOffset) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetYOffset(m_backendHandle, yOffset); });
349 }
350 
351 inline size_t BufferPart::XPadding() const
352 {
353  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* xPadding) {
354  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetXPadding(m_backendHandle, xPadding);
355  });
356 }
357 
358 inline size_t BufferPart::DeliveredImageHeight() const
359 {
360  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* deliveredImageHeight) {
361  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetDeliveredImageHeight(m_backendHandle, deliveredImageHeight);
362  });
363 }
364 
365 inline std::shared_ptr<Buffer> BufferPart::ParentBuffer() const
366 {
367  return LockOrThrow(m_parentBuffer);
368 }
369 
370 } /* namespace core */
371 } /* namespace peak */
RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition: peak_buffer_part.hpp:279
PEAK_C_API PEAK_BufferPart_GetYOffset(PEAK_BUFFER_PART_HANDLE bufferPartHandle, size_t *yOffset)
Asks the given buffer part for its Y offset.
uint64_t FormatNamespace() const
Returns the format namespace.
Definition: peak_buffer_part.hpp:320
uint64_t SourceID() const
Returns the source ID.
Definition: peak_buffer_part.hpp:287
PEAK_C_API PEAK_BufferPart_GetXOffset(PEAK_BUFFER_PART_HANDLE bufferPartHandle, size_t *xOffset)
Asks the given buffer part for its X offset.
Represents a buffer part.
Definition: peak_buffer_part.hpp:56
PEAK_C_API PEAK_BufferPart_Destruct(PEAK_BUFFER_PART_HANDLE bufferPartHandle)
Destroys the given buffer part.
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition: peak_dynamic_loader.h:32
std::string ToString(BufferPayloadType entry)
Definition: peak_buffer.hpp:472
void * BasePtr() const
Returns the base pointer.
Definition: peak_buffer_part.hpp:294
std::shared_ptr< Buffer > ParentBuffer() const
Returns the parent buffer.
Definition: peak_buffer_part.hpp:365
size_t DeliveredImageHeight() const
Returns the delivered image height.
Definition: peak_buffer_part.hpp:358
size_t XPadding() const
Returns the x padding.
Definition: peak_buffer_part.hpp:351
int32_t PEAK_BUFFER_PART_TYPE
Definition: peak_backend.h:63
BufferPartType Type() const
Returns the type.
Definition: peak_buffer_part.hpp:306
PEAK_C_API PEAK_BufferPart_GetFormatNamespace(PEAK_BUFFER_PART_HANDLE bufferPartHandle, uint64_t *formatNamespace)
Asks the given buffer part for its format namespace.
PEAK_C_API PEAK_BufferPart_GetDeliveredImageHeight(PEAK_BUFFER_PART_HANDLE bufferPartHandle, size_t *deliveredImageHeight)
Asks the given buffer part for its delivered image height.
size_t YOffset() const
Returns the y offset.
Definition: peak_buffer_part.hpp:345
BufferPartType
Data type of the buffer part.
Definition: peak_buffer_part.hpp:33
PEAK_C_API PEAK_BufferPart_GetSize(PEAK_BUFFER_PART_HANDLE bufferPartHandle, size_t *size)
Asks the given buffer part for its size.
Represents a GenTL buffer module.
Definition: peak_buffer.hpp:78
size_t Width() const
Returns the width.
Definition: peak_buffer_part.hpp:327
~BufferPart()
Definition: peak_buffer_part.hpp:274
size_t XOffset() const
Returns the x offset.
Definition: peak_buffer_part.hpp:339
PEAK_C_API PEAK_BufferPart_GetFormat(PEAK_BUFFER_PART_HANDLE bufferPartHandle, uint64_t *format)
Asks the given buffer part for its format.
size_t Size() const
Returns the size in bytes.
Definition: peak_buffer_part.hpp:300
#define PEAK_C_ABI_PREFIX
Definition: peak_dll_defines.h:16
PEAK_C_API PEAK_BufferPart_GetType(PEAK_BUFFER_PART_HANDLE bufferPartHandle, PEAK_BUFFER_PART_TYPE *type)
Asks the given buffer part for its type.
PEAK_C_API PEAK_BufferPart_GetBasePtr(PEAK_BUFFER_PART_HANDLE bufferPartHandle, void **basePtr)
Asks the given buffer part for its base pointer.
size_t Height() const
Returns the height.
Definition: peak_buffer_part.hpp:333
PEAK_C_API PEAK_BufferPart_GetInfo(PEAK_BUFFER_PART_HANDLE bufferPartHandle, int32_t infoCommand, int32_t *infoDataType, uint8_t *info, size_t *infoSize)
Asks the given buffer part for an information based on a specific command.
uint64_t Format() const
Returns the format.
Definition: peak_buffer_part.hpp:314
The struct returned by all raw information functions.
Definition: peak_common_structs.hpp:24
PEAK_C_API PEAK_BufferPart_GetSourceID(PEAK_BUFFER_PART_HANDLE bufferPartHandle, uint64_t *sourceId)
Asks the given buffer part for its source ID.
PEAK_C_API PEAK_BufferPart_GetWidth(PEAK_BUFFER_PART_HANDLE bufferPartHandle, size_t *width)
Asks the given buffer part for its width.
struct PEAK_BUFFER_PART * PEAK_BUFFER_PART_HANDLE
Definition: peak_backend.h:393
PEAK_C_API PEAK_BufferPart_GetXPadding(PEAK_BUFFER_PART_HANDLE bufferPartHandle, size_t *xPadding)
Asks the given buffer part for its X padding.