13 #ifndef _DS3D_COMMON_IMPL_FRAMES__H
14 #define _DS3D_COMMON_IMPL_FRAMES__H
21 namespace ds3d {
namespace impl {
23 template <
typename DataTypeTP, FrameType ft,
class abiBase>
30 size_t bytes()
const override {
return _bytes; }
31 void*
base() const final {
return (
void*)(_data); }
33 int64_t
devId() const final {
return _devId; }
37 using Deleter = std::function<void(
void*)>;
60 _del = std::move(del);
67 _del(std::move(deleter))
76 return static_cast<EleT*
>(_data)[idx];
89 static constexpr
FrameType _frameType() {
return ft; }
92 void* _data =
nullptr;
96 Shape _shape = {0, {0}};
100 template <
typename DataTypeTP, FrameType ft>
103 template <
typename DataTypeTP, FrameType ft>
115 uint32_t
planes() const final {
return _planes.size(); }
118 if (idx > _planes.size()) {
150 template <
class EleT>
151 EleT&
at(
size_t row,
size_t column, uint32_t plane = 0)
154 DS_ASSERT(row < _planes[plane].height && column < _planes[plane].width);
156 (uint8_t*)this->
base() + _planes[plane].offset + row * _planes[plane].pitchInBytes;
157 return reinterpret_cast<EleT*
>(buf + _planes[plane].bytesPerPixel * column);
161 std::vector<Frame2DPlane> _planes;
173 template <
typename DataTypeTP, FrameType ft>
176 void* data,
size_t bytes,
const Shape& shape,
MemType memType, uint64_t devId,
177 std::function<
void(
void*)>&& deleter)
185 template <
typename DataTypeTP, FrameType ft>
188 void* data,
const std::vector<Frame2DPlane>& planes,
size_t bytes,
MemType memType,
189 uint64_t devId, std::function<
void(
void*)> deleter)
192 data, planes, bytes, memType, devId, std::move(deleter)));
197 template <
typename DataTypeTP>
200 void* data, uint32_t points,
MemType memType, uint64_t devId,
201 std::function<
void(
void*)>&& deleter)
203 Shape shape{2, {(int)points, 3}};
204 return WrapFrame<DataTypeTP, FrameType::kPointXYZ>(
205 data,
sizeof(DataTypeTP) *
ShapeSize(shape), shape, memType, devId, std::move(deleter));
208 template <
typename DataTypeTP>
211 void* data, uint32_t points,
MemType memType, uint64_t devId,
212 std::function<
void(
void*)>&& deleter)
214 Shape shape{2, {(int)points, 4}};
215 return WrapFrame<DataTypeTP, FrameType::kLidarXYZI>(
216 data,
sizeof(DataTypeTP) *
ShapeSize(shape), shape, memType, devId, std::move(deleter));
219 template <
typename DataTypeTP>
222 void* data, uint32_t points,
MemType memType, uint64_t devId,
223 std::function<
void(
void*)>&& deleter)
225 Shape shape{2U, {(int)points, 2}};
226 return WrapFrame<DataTypeTP, FrameType::kPointCoordUV>(
227 data,
sizeof(DataTypeTP) *
ShapeSize(shape), shape, memType, devId, std::move(deleter));
232 #endif // _DS3D_COMMON_IMPL_FRAMES__H