IDS peak genericC++  v1.7.0
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;
68 
78  uint64_t SourceID() const;
79 
89  void* BasePtr() const;
90 
100  size_t Size() const;
101 
111  BufferPartType Type() const;
112 
122  uint64_t Format() const;
123 
133  uint64_t FormatNamespace() const;
134 
144  size_t Width() const;
145 
155  size_t Height() const;
156 
166  size_t XOffset() const;
167 
177  size_t YOffset() const;
178 
188  size_t XPadding() const;
189 
199  size_t DeliveredImageHeight() const;
200 
210  std::shared_ptr<Buffer> ParentBuffer() const;
211 
212 private:
213  friend ClassCreator<BufferPart>;
214  BufferPart(PEAK_BUFFER_PART_HANDLE bufferPartHandle, const std::weak_ptr<Buffer>& parentBuffer);
215  PEAK_BUFFER_PART_HANDLE m_backendHandle;
216 
217  std::weak_ptr<Buffer> m_parentBuffer;
218 };
219 
220 } /* namespace core */
221 } /* namespace peak */
222 
223 /* Implementation */
224 namespace peak
225 {
226 namespace core
227 {
228 
229 inline std::string ToString(BufferPartType entry)
230 {
231  std::string entryString;
232 
233  if (entry == BufferPartType::Unknown)
234  {
235  entryString = "Unknown";
236  }
237  else if (entry == BufferPartType::Image2D)
238  {
239  entryString = "Image2D";
240  }
241  else if (entry == BufferPartType::PlaneBiPlanar2D)
242  {
243  entryString = "PlaneBiPlanar2D";
244  }
245  else if (entry == BufferPartType::PlaneTriPlanar2D)
246  {
247  entryString = "PlaneTriPlanar2D";
248  }
249  else if (entry == BufferPartType::PlaneQuadPlanar2D)
250  {
251  entryString = "PlaneQuadPlanar2D";
252  }
253  else if (entry == BufferPartType::Image3D)
254  {
255  entryString = "Image3D";
256  }
257  else if (entry == BufferPartType::PlaneBiPlanar3D)
258  {
259  entryString = "PlaneBiPlanar3D";
260  }
261  else if (entry == BufferPartType::PlaneTriPlanar3D)
262  {
263  entryString = "PlaneTriPlanar3D";
264  }
265  else if (entry == BufferPartType::PlaneQuadPlanar3D)
266  {
267  entryString = "PlaneQuadPlanar3D";
268  }
269  else if (entry == BufferPartType::ConfidenceMap)
270  {
271  entryString = "ConfidenceMap";
272  }
273  else if (entry >= BufferPartType::Custom)
274  {
275  entryString = "Custom";
276  }
277 
278  return entryString;
279 }
280 
281 inline BufferPart::BufferPart(PEAK_BUFFER_PART_HANDLE bufferPartHandle, const std::weak_ptr<Buffer>& parentBuffer)
282  : m_backendHandle(bufferPartHandle)
283  , m_parentBuffer(parentBuffer)
284 {}
285 
287 {
288  (void)PEAK_C_ABI_PREFIX PEAK_BufferPart_Destruct(m_backendHandle);
289 }
290 
291 inline RawInformation BufferPart::Info(int32_t infoCommand) const
292 {
293  return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
295  m_backendHandle, infoCommand, dataType, buffer, bufferSize);
296  });
297 }
298 
299 inline uint64_t BufferPart::SourceID() const
300 {
301  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* sourceId) {
302  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetSourceID(m_backendHandle, sourceId);
303  });
304 }
305 
306 inline void* BufferPart::BasePtr() const
307 {
308  return QueryNumericFromCInterfaceFunction<void*>(
309  [&](void** basePtr) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetBasePtr(m_backendHandle, basePtr); });
310 }
311 
312 inline size_t BufferPart::Size() const
313 {
314  return QueryNumericFromCInterfaceFunction<size_t>(
315  [&](size_t* size) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetSize(m_backendHandle, size); });
316 }
317 
319 {
320  return static_cast<BufferPartType>(
321  QueryNumericFromCInterfaceFunction<PEAK_BUFFER_PART_TYPE>([&](PEAK_BUFFER_PART_TYPE* type) {
322  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetType(m_backendHandle, type);
323  }));
324 }
325 
326 inline uint64_t BufferPart::Format() const
327 {
328  return QueryNumericFromCInterfaceFunction<uint64_t>(
329  [&](uint64_t* format) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetFormat(m_backendHandle, format); });
330 }
331 
332 inline uint64_t BufferPart::FormatNamespace() const
333 {
334  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* formatNamespace) {
335  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetFormatNamespace(m_backendHandle, formatNamespace);
336  });
337 }
338 
339 inline size_t BufferPart::Width() const
340 {
341  return QueryNumericFromCInterfaceFunction<size_t>(
342  [&](size_t* width) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetWidth(m_backendHandle, width); });
343 }
344 
345 inline size_t BufferPart::Height() const
346 {
347  return QueryNumericFromCInterfaceFunction<size_t>(
348  [&](size_t* height) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetWidth(m_backendHandle, height); });
349 }
350 
351 inline size_t BufferPart::XOffset() const
352 {
353  return QueryNumericFromCInterfaceFunction<size_t>(
354  [&](size_t* xOffset) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetXOffset(m_backendHandle, xOffset); });
355 }
356 
357 inline size_t BufferPart::YOffset() const
358 {
359  return QueryNumericFromCInterfaceFunction<size_t>(
360  [&](size_t* yOffset) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetYOffset(m_backendHandle, yOffset); });
361 }
362 
363 inline size_t BufferPart::XPadding() const
364 {
365  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* xPadding) {
366  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetXPadding(m_backendHandle, xPadding);
367  });
368 }
369 
370 inline size_t BufferPart::DeliveredImageHeight() const
371 {
372  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* deliveredImageHeight) {
373  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetDeliveredImageHeight(m_backendHandle, deliveredImageHeight);
374  });
375 }
376 
377 inline std::shared_ptr<Buffer> BufferPart::ParentBuffer() const
378 {
379  return LockOrThrow(m_parentBuffer);
380 }
381 
382 } /* namespace core */
383 } /* namespace peak */
RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition: peak_buffer_part.hpp:291
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:332
uint64_t SourceID() const
Returns the source ID.
Definition: peak_buffer_part.hpp:299
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:505
void * BasePtr() const
Returns the base pointer.
Definition: peak_buffer_part.hpp:306
std::shared_ptr< Buffer > ParentBuffer() const
Returns the parent buffer.
Definition: peak_buffer_part.hpp:377
size_t DeliveredImageHeight() const
Returns the delivered image height.
Definition: peak_buffer_part.hpp:370
size_t XPadding() const
Returns the x padding.
Definition: peak_buffer_part.hpp:363
int32_t PEAK_BUFFER_PART_TYPE
Definition: peak_backend.h:63
BufferPartType Type() const
Returns the type.
Definition: peak_buffer_part.hpp:318
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:357
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:339
~BufferPart()
Definition: peak_buffer_part.hpp:286
size_t XOffset() const
Returns the x offset.
Definition: peak_buffer_part.hpp:351
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:312
#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:345
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:326
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:395
PEAK_C_API PEAK_BufferPart_GetXPadding(PEAK_BUFFER_PART_HANDLE bufferPartHandle, size_t *xPadding)
Asks the given buffer part for its X padding.