Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion wrappers/cpp/libfreenect.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ namespace Freenect {
}
virtual ~FreenectDevice() {
if(freenect_close_device(m_dev) < 0){} //FN_WARNING("Device did not shutdown in a clean fashion");
delete[] m_rgb_buffer;
}
void startVideo() {
if(freenect_start_video(m_dev) < 0) throw std::runtime_error("Cannot start RGB callback");
Expand Down Expand Up @@ -105,10 +106,21 @@ namespace Freenect {
freenect_frame_mode mode = freenect_find_video_mode(requested_resolution, requested_format);
if (!mode.is_valid) throw std::runtime_error("Cannot set video format: invalid mode");
if (freenect_set_video_mode(m_dev, mode) < 0) throw std::runtime_error("Cannot set video format");
if (wasRunning)
if (wasRunning) {
freenect_stop_video(m_dev);
m_video_format = requested_format;
m_video_resolution = requested_resolution;
if(m_rgb_buffer != 0) delete[] m_rgb_buffer;
m_rgb_buffer = new uint8_t[getVideoBufferSize()];
freenect_set_video_buffer(m_dev, m_rgb_buffer);
freenect_start_video(m_dev);
return;
}
m_video_format = requested_format;
m_video_resolution = requested_resolution;
if(m_rgb_buffer != 0) delete[] m_rgb_buffer;
m_rgb_buffer = new uint8_t[getVideoBufferSize()];
freenect_set_video_buffer(m_dev, m_rgb_buffer);
}
}
freenect_video_format getVideoFormat() {
Expand Down Expand Up @@ -170,6 +182,7 @@ namespace Freenect {
freenect_depth_format m_depth_format;
freenect_resolution m_video_resolution;
freenect_resolution m_depth_resolution;
uint8_t* m_rgb_buffer = 0;
static void freenect_depth_callback(freenect_device *dev, void *depth, uint32_t timestamp) {
FreenectDevice* device = static_cast<FreenectDevice*>(freenect_get_user(dev));
device->DepthCallback(depth, timestamp);
Expand Down