8#include "../../global.hpp"
9#include "../driver.hpp"
10#include "../stream_image.hpp"
30 static std::unique_ptr<ImageLayout> FromImage(
const Image &image);
32 static std::unique_ptr<ImageLayout> FromIMGHandle(
void *handle);
34 ImageLayout() noexcept = default;
35 ImageLayout(const ImageLayout &other) = delete;
36 ImageLayout &operator=(const ImageLayout &other) = delete;
37 ImageLayout(ImageLayout &&other) = delete;
38 ImageLayout &operator=(ImageLayout &&other) = delete;
40 virtual ~ImageLayout() = default;
42 virtual
void *CloneImage(const Image &image) const = 0;
44 void *CloneIMGHandle(
void *handle) const;
47 static std::unique_ptr<BufferImage> Create(const
DevicePtr &device, const ImageLayout &layout,
50 static std::unique_ptr<BufferImage> Create(const
DevicePtr &device,
double rawTimestamp);
52 BufferImage(HandleGuard<Image> &&guard, const
DevicePtr &device,
double rawTimestamp, PrivateTag) noexcept
53 : StreamImage(std::move(guard))
56 SetRawTimestamp(rawTimestamp);
60 class HandleImage :
public Image
63 explicit HandleImage(
void *handle) noexcept
64 : Image(HandleGuard<Image>(handle))
68 HandleImage(
const HandleImage &other) =
delete;
69 HandleImage &operator=(
const HandleImage &other) =
delete;
70 HandleImage(HandleImage &&other) =
delete;
71 HandleImage &operator=(HandleImage &&other) =
delete;
73 virtual ~HandleImage()
79 class LinearLayout :
public ImageLayout
88 std::uint8_t *BasePtr;
93 static std::unique_ptr<LinearLayout> TryCreate(
const Image &image)
noexcept;
95 void *CloneImage(
const Image &image)
const override;
97 LinearLayout(std::size_t memSize, std::intptr_t xInc, std::intptr_t yInc, std::intptr_t planeInc,
98 const std::vector<PlaneIndexPair> &planeBases, PrivateTag)
102 , planeInc_(planeInc)
104 std::vector<CExports::cvbval_t> planeOrder(planeBases.size());
105 for (
size_t i = 0; i < planeOrder.size(); ++i)
106 planeOrder[i] =
static_cast<CExports::cvbval_t
>(planeBases[i].PlaneIndex);
108 planeOrder.swap(planeOrder_);
112 std::size_t memSize_;
115 std::intptr_t planeInc_;
116 std::vector<CExports::cvbval_t> planeOrder_;
119 class NonLinearLayout :
public ImageLayout
123 void *MakeImageFromPlane(
const ImagePlane &plane)
const;
125 void *CloneImage(
const Image &image)
const override;
128 class ImageArrayGuard
131 explicit ImageArrayGuard(std::vector<CExports::IMG> &imageArray)
132 : imageArray_(imageArray)
136 ImageArrayGuard(
const ImageArrayGuard &other) =
delete;
137 ImageArrayGuard &operator=(
const ImageArrayGuard &other) =
delete;
138 ImageArrayGuard(ImageArrayGuard &&other) =
delete;
139 ImageArrayGuard &operator=(ImageArrayGuard &&other) =
delete;
143 for (
auto &img : imageArray_)
148 std::vector<CExports::IMG> &imageArray_;
157 using Driver::BufferImage;
Base class of all stream related images.
Definition stream_image.hpp:32
cvbbool_t ReleaseObject(OBJ &Object)
Namespace for driver or device related operations.
Definition decl_composite.hpp:28
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::shared_ptr< Device > DevicePtr
Convenience shared pointer for Device.
Definition global.hpp:98