Skip to content

Commit d20b594

Browse files
committed
Use unique_ptr for buffer
Signed-off-by: Benn Snyder <[email protected]>
1 parent 3bf6576 commit d20b594

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

wrappers/cpp/libfreenect.hpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
*/
2626
#pragma once
2727

28+
#include <memory>
2829
#include "libfreenect.h"
2930
#include <stdexcept>
3031
#include <sstream>
@@ -44,7 +45,7 @@ namespace Freenect {
4445
Noncopyable( const Noncopyable& );
4546
const Noncopyable& operator=( const Noncopyable& );
4647
};
47-
48+
4849
class FreenectTiltState {
4950
friend class FreenectDevice;
5051
FreenectTiltState(freenect_raw_tilt_state *_state):
@@ -104,17 +105,19 @@ namespace Freenect {
104105
}
105106
void setVideoFormat(freenect_video_format requested_format, freenect_resolution requested_resolution = FREENECT_RESOLUTION_MEDIUM) {
106107
if (requested_format != m_video_format || requested_resolution != m_video_resolution) {
107-
bool wasRunning = (freenect_stop_video(m_dev) >= 0);
108-
freenect_frame_mode mode = freenect_find_video_mode(requested_resolution, requested_format);
108+
const bool wasRunning = (freenect_stop_video(m_dev) >= 0);
109+
const freenect_frame_mode mode = freenect_find_video_mode(requested_resolution, requested_format);
109110
if (!mode.is_valid) throw std::runtime_error("Cannot set video format: invalid mode");
110111
if (freenect_set_video_mode(m_dev, mode) < 0) throw std::runtime_error("Cannot set video format");
111-
if (wasRunning)
112-
freenect_start_video(m_dev);
112+
113113
m_video_format = requested_format;
114114
m_video_resolution = requested_resolution;
115-
if(m_rgb_buffer != 0) delete[] m_rgb_buffer;
116-
m_rgb_buffer = new uint8_t[getVideoBufferSize()];
117-
freenect_set_video_buffer(m_dev, m_rgb_buffer);
115+
m_rgb_buffer.reset(new uint8_t[mode.bytes]);
116+
freenect_set_video_buffer(m_dev, m_rgb_buffer.get());
117+
118+
if (wasRunning) {
119+
freenect_start_video(m_dev);
120+
}
118121
}
119122
}
120123
freenect_video_format getVideoFormat() {
@@ -176,7 +179,7 @@ namespace Freenect {
176179
freenect_depth_format m_depth_format;
177180
freenect_resolution m_video_resolution;
178181
freenect_resolution m_depth_resolution;
179-
uint8_t* m_rgb_buffer = 0;
182+
std::unique_ptr<uint8_t[]> m_rgb_buffer;
180183
static void freenect_depth_callback(freenect_device *dev, void *depth, uint32_t timestamp) {
181184
FreenectDevice* device = static_cast<FreenectDevice*>(freenect_get_user(dev));
182185
device->DepthCallback(depth, timestamp);
@@ -249,7 +252,7 @@ namespace Freenect {
249252
return NULL;
250253
}
251254
protected:
252-
freenect_context *m_ctx;
255+
freenect_context *m_ctx;
253256
private:
254257
volatile bool m_stop;
255258
pthread_t m_thread;

0 commit comments

Comments
 (0)