IDS peak genericC++  v1.4.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() = default;
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 
274 inline RawInformation BufferPart::Info(int32_t infoCommand) const
275 {
276  return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
278  m_backendHandle, infoCommand, dataType, buffer, bufferSize);
279  });
280 }
281 
282 inline uint64_t BufferPart::SourceID() const
283 {
284  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* sourceId) {
285  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetSourceID(m_backendHandle, sourceId);
286  });
287 }
288 
289 inline void* BufferPart::BasePtr() const
290 {
291  return QueryNumericFromCInterfaceFunction<void*>(
292  [&](void** basePtr) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetBasePtr(m_backendHandle, basePtr); });
293 }
294 
295 inline size_t BufferPart::Size() const
296 {
297  return QueryNumericFromCInterfaceFunction<size_t>(
298  [&](size_t* size) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetSize(m_backendHandle, size); });
299 }
300 
302 {
303  return static_cast<BufferPartType>(
304  QueryNumericFromCInterfaceFunction<PEAK_BUFFER_PART_TYPE>([&](PEAK_BUFFER_PART_TYPE* type) {
305  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetType(m_backendHandle, type);
306  }));
307 }
308 
309 inline uint64_t BufferPart::Format() const
310 {
311  return QueryNumericFromCInterfaceFunction<uint64_t>(
312  [&](uint64_t* format) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetFormat(m_backendHandle, format); });
313 }
314 
315 inline uint64_t BufferPart::FormatNamespace() const
316 {
317  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* formatNamespace) {
318  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetFormatNamespace(m_backendHandle, formatNamespace);
319  });
320 }
321 
322 inline size_t BufferPart::Width() const
323 {
324  return QueryNumericFromCInterfaceFunction<size_t>(
325  [&](size_t* width) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetWidth(m_backendHandle, width); });
326 }
327 
328 inline size_t BufferPart::Height() const
329 {
330  return QueryNumericFromCInterfaceFunction<size_t>(
331  [&](size_t* height) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetWidth(m_backendHandle, height); });
332 }
333 
334 inline size_t BufferPart::XOffset() const
335 {
336  return QueryNumericFromCInterfaceFunction<size_t>(
337  [&](size_t* xOffset) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetXOffset(m_backendHandle, xOffset); });
338 }
339 
340 inline size_t BufferPart::YOffset() const
341 {
342  return QueryNumericFromCInterfaceFunction<size_t>(
343  [&](size_t* yOffset) { return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetYOffset(m_backendHandle, yOffset); });
344 }
345 
346 inline size_t BufferPart::XPadding() const
347 {
348  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* xPadding) {
349  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetXPadding(m_backendHandle, xPadding);
350  });
351 }
352 
353 inline size_t BufferPart::DeliveredImageHeight() const
354 {
355  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* deliveredImageHeight) {
356  return PEAK_C_ABI_PREFIX PEAK_BufferPart_GetDeliveredImageHeight(m_backendHandle, deliveredImageHeight);
357  });
358 }
359 
360 inline std::shared_ptr<Buffer> BufferPart::ParentBuffer() const
361 {
362  return LockOrThrow(m_parentBuffer);
363 }
364 
365 } /* namespace core */
366 } /* namespace peak */
RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition: peak_buffer_part.hpp:274
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:315
uint64_t SourceID() const
Returns the source ID.
Definition: peak_buffer_part.hpp:282
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
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:289
std::shared_ptr< Buffer > ParentBuffer() const
Returns the parent buffer.
Definition: peak_buffer_part.hpp:360
size_t DeliveredImageHeight() const
Returns the delivered image height.
Definition: peak_buffer_part.hpp:353
size_t XPadding() const
Returns the x padding.
Definition: peak_buffer_part.hpp:346
int32_t PEAK_BUFFER_PART_TYPE
Definition: peak_backend.h:63
BufferPartType Type() const
Returns the type.
Definition: peak_buffer_part.hpp:301
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:340
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:322
size_t XOffset() const
Returns the x offset.
Definition: peak_buffer_part.hpp:334
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:295
#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:328
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:309
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.