18 #ifndef _DS3D_COMMON_IMPL_FRAMES__H
19 #define _DS3D_COMMON_IMPL_FRAMES__H
21 #include <ds3d/common/abi_frame.h>
22 #include <ds3d/common/common.h>
23 #include <ds3d/common/func_utils.h>
24 #include <ds3d/common/hpp/frame.hpp>
26 namespace ds3d {
namespace impl {
28 template <
typename DataTypeTP, FrameType ft,
class abiBase>
35 size_t bytes()
const override {
return _bytes; }
36 void*
base() const final {
return (
void*)(_data); }
38 int64_t
devId() const final {
return _devId; }
42 using Deleter = std::function<void(
void*)>;
65 _del = std::move(del);
72 _del(std::move(deleter))
81 return static_cast<EleT*
>(_data)[idx];
94 static constexpr
FrameType _frameType() {
return ft; }
97 void* _data =
nullptr;
101 Shape _shape = {0, {0}};
105 template <
typename DataTypeTP, FrameType ft>
108 template <
typename DataTypeTP, FrameType ft>
120 uint32_t
planes() const final {
return _planes.size(); }
123 if (idx > _planes.size()) {
155 template <
class EleT>
156 EleT&
at(
size_t row,
size_t column, uint32_t plane = 0)
159 DS_ASSERT(row < _planes[plane].height && column < _planes[plane].width);
161 (uint8_t*)this->
base() + _planes[plane].offset + row * _planes[plane].pitchInBytes;
162 return reinterpret_cast<EleT*
>(buf + _planes[plane].bytesPerPixel * column);
166 std::vector<Frame2DPlane> _planes;
178 template <
typename DataTypeTP, FrameType ft>
181 void* data,
size_t bytes,
const Shape& shape,
MemType memType, uint64_t devId,
182 std::function<
void(
void*)>&& deleter)
190 template <
typename DataTypeTP, FrameType ft>
193 void* data,
const std::vector<Frame2DPlane>& planes,
size_t bytes,
MemType memType,
194 uint64_t devId, std::function<
void(
void*)> deleter)
197 data, planes, bytes, memType, devId, std::move(deleter)));
202 template <
typename DataTypeTP>
205 void* data, uint32_t points,
MemType memType, uint64_t devId,
206 std::function<
void(
void*)>&& deleter)
208 Shape shape{2, {(int)points, 3}};
209 return WrapFrame<DataTypeTP, FrameType::kPointXYZ>(
210 data,
sizeof(DataTypeTP) *
ShapeSize(shape), shape, memType, devId, std::move(deleter));
213 template <
typename DataTypeTP>
216 void* data, uint32_t points,
MemType memType, uint64_t devId,
217 std::function<
void(
void*)>&& deleter)
219 Shape shape{2, {(int)points, 4}};
220 return WrapFrame<DataTypeTP, FrameType::kLidarXYZI>(
221 data,
sizeof(DataTypeTP) *
ShapeSize(shape), shape, memType, devId, std::move(deleter));
224 template <
typename DataTypeTP>
227 void* data, uint32_t points,
MemType memType, uint64_t devId,
228 std::function<
void(
void*)>&& deleter)
230 Shape shape{2U, {(int)points, 2}};
231 return WrapFrame<DataTypeTP, FrameType::kPointCoordUV>(
232 data,
sizeof(DataTypeTP) *
ShapeSize(shape), shape, memType, devId, std::move(deleter));
237 #endif // _DS3D_COMMON_IMPL_FRAMES__H