Skip to content

Commit ae4f9c0

Browse files
committed
fix memory issue
1 parent 5ad772c commit ae4f9c0

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

include/camera_extrinsics.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,6 @@ struct CameraCalibration
7272

7373
struct FrameInfo
7474
{
75-
int16_t* PointCloudData;
76-
7775
CameraCalibration Calibration{};
7876

7977
// Accelerometer reading for extrinsics calibration
@@ -87,6 +85,9 @@ struct FrameInfo
8785
std::vector<uint16_t> DepthImage;
8886
int DepthWidth = 0, DepthHeight = 0, DepthStride = 0;
8987

88+
// Point cloud data
89+
std::vector<int16_t> PointCloudData;
90+
9091
uint32_t CameraIndex;
9192
int FrameNumber;
9293
char *filename;

src/calib_k4a.cpp

+7-3
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,13 @@ static FrameInfo process_capture(recording_t *file)
156156
{
157157
cout << "Failed to compute point cloud image" << endl;
158158
}
159-
int16_t* point_cloud_image_data = (int16_t*)(void*)k4a_image_get_buffer(point_cloud_image);
160-
161-
frame.PointCloudData = point_cloud_image_data;
159+
160+
// Copy point cloud
161+
const size_t cloud_size = k4a_image_get_size(point_cloud_image);
162+
const int16_t* point_cloud_image_data = \
163+
reinterpret_cast<const int16_t*>( k4a_image_get_buffer(point_cloud_image) );
164+
frame.PointCloudData.resize(cloud_size);
165+
memcpy(frame.PointCloudData.data(), point_cloud_image_data, cloud_size );
162166

163167
k4a_image_release(transformed_depth_image);
164168
k4a_image_release(point_cloud_image);

src/camera_extrinsics.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bool ExtrinsicsCalibration::GenerateFullCloudFromFrames(
2222
FrameInfo frame)
2323
{
2424
const int idx = frame.CameraIndex;
25-
if (!frame.PointCloudData) {
25+
if (!frame.PointCloudData.data()) {
2626
return false;
2727
}
2828
cout <<"Generating Cloud From Frames"<< endl;
@@ -33,7 +33,7 @@ bool ExtrinsicsCalibration::GenerateFullCloudFromFrames(
3333
full_cloud[idx]->points_.reserve(count);
3434
full_cloud[idx]->colors_.reserve(count);
3535
for (int i = 0; i < count; i += coord_stride) {
36-
Eigen::Vector3d q(frame.PointCloudData[3 * i + 0] / 1000.0f, frame.PointCloudData[3 * i + 1] / 1000.0f, frame.PointCloudData[3 * i + 2] / 1000.0f);
36+
Eigen::Vector3d q(frame.PointCloudData.data()[3 * i + 0] / 1000.0f, frame.PointCloudData.data()[3 * i + 1] / 1000.0f, frame.PointCloudData.data()[3 * i + 2] / 1000.0f);
3737
if (q.z() == 0)
3838
{
3939
continue;

0 commit comments

Comments
 (0)