25
25
*/
26
26
#pragma once
27
27
28
+ #include < memory>
28
29
#include " libfreenect.h"
29
30
#include < stdexcept>
30
31
#include < sstream>
@@ -44,7 +45,7 @@ namespace Freenect {
44
45
Noncopyable ( const Noncopyable& );
45
46
const Noncopyable& operator =( const Noncopyable& );
46
47
};
47
-
48
+
48
49
class FreenectTiltState {
49
50
friend class FreenectDevice ;
50
51
FreenectTiltState (freenect_raw_tilt_state *_state):
@@ -104,17 +105,19 @@ namespace Freenect {
104
105
}
105
106
void setVideoFormat (freenect_video_format requested_format, freenect_resolution requested_resolution = FREENECT_RESOLUTION_MEDIUM) {
106
107
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);
109
110
if (!mode.is_valid ) throw std::runtime_error (" Cannot set video format: invalid mode" );
110
111
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
+
113
113
m_video_format = requested_format;
114
114
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
+ }
118
121
}
119
122
}
120
123
freenect_video_format getVideoFormat () {
@@ -176,7 +179,7 @@ namespace Freenect {
176
179
freenect_depth_format m_depth_format;
177
180
freenect_resolution m_video_resolution;
178
181
freenect_resolution m_depth_resolution;
179
- uint8_t * m_rgb_buffer = 0 ;
182
+ std::unique_ptr< uint8_t []> m_rgb_buffer;
180
183
static void freenect_depth_callback (freenect_device *dev, void *depth, uint32_t timestamp) {
181
184
FreenectDevice* device = static_cast <FreenectDevice*>(freenect_get_user (dev));
182
185
device->DepthCallback (depth, timestamp);
@@ -249,7 +252,7 @@ namespace Freenect {
249
252
return NULL ;
250
253
}
251
254
protected:
252
- freenect_context *m_ctx;
255
+ freenect_context *m_ctx;
253
256
private:
254
257
volatile bool m_stop;
255
258
pthread_t m_thread;
0 commit comments