Skip to content

Commit a283a06

Browse files
gsxzarvox
authored andcommitted
wrappers/cpp/libfreenect.hpp: Trivial changes to allow the resolution parameters to be set.
Signed-off-by: Gabor Szarka <[email protected]>
1 parent 1a0ea42 commit a283a06

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

wrappers/cpp/libfreenect.hpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ namespace Freenect {
6161

6262
class FreenectDevice : Noncopyable {
6363
public:
64-
FreenectDevice(freenect_context *_ctx, int _index) {
64+
FreenectDevice(freenect_context *_ctx, int _index)
65+
: m_video_resolution(FREENECT_RESOLUTION_MEDIUM), m_depth_resolution(FREENECT_RESOLUTION_MEDIUM)
66+
{
6567
if(freenect_open_device(_ctx, &m_dev, _index) < 0) throw std::runtime_error("Cannot open Kinect");
6668
freenect_set_user(m_dev, this);
6769
freenect_set_video_mode(m_dev, freenect_find_video_mode(FREENECT_RESOLUTION_MEDIUM, FREENECT_VIDEO_RGB));
@@ -96,32 +98,40 @@ namespace Freenect {
9698
FreenectTiltState getState() const {
9799
return FreenectTiltState(freenect_get_tilt_state(m_dev));
98100
}
99-
void setVideoFormat(freenect_video_format requested_format) {
100-
if (requested_format != m_video_format) {
101+
void setVideoFormat(freenect_video_format requested_format, freenect_resolution requested_resolution = FREENECT_RESOLUTION_MEDIUM) {
102+
if (requested_format != m_video_format || requested_resolution != m_video_resolution) {
101103
freenect_stop_video(m_dev);
102-
freenect_frame_mode mode = freenect_find_video_mode(FREENECT_RESOLUTION_MEDIUM, requested_format);
104+
freenect_frame_mode mode = freenect_find_video_mode(requested_resolution, requested_format);
103105
if (!mode.is_valid) throw std::runtime_error("Cannot set video format: invalid mode");
104106
if (freenect_set_video_mode(m_dev, mode) < 0) throw std::runtime_error("Cannot set video format");
105107
freenect_start_video(m_dev);
106108
m_video_format = requested_format;
109+
m_video_resolution = requested_resolution;
107110
}
108111
}
109112
freenect_video_format getVideoFormat() {
110113
return m_video_format;
111114
}
112-
void setDepthFormat(freenect_depth_format requested_format) {
113-
if (requested_format != m_depth_format) {
115+
freenect_resolution getVideoResolution() {
116+
return m_video_resolution;
117+
}
118+
void setDepthFormat(freenect_depth_format requested_format, freenect_resolution requested_resolution = FREENECT_RESOLUTION_MEDIUM) {
119+
if (requested_format != m_depth_format || requested_resolution != m_depth_resolution) {
114120
freenect_stop_depth(m_dev);
115-
freenect_frame_mode mode = freenect_find_depth_mode(FREENECT_RESOLUTION_MEDIUM, requested_format);
121+
freenect_frame_mode mode = freenect_find_depth_mode(requested_resolution, requested_format);
116122
if (!mode.is_valid) throw std::runtime_error("Cannot set depth format: invalid mode");
117123
if (freenect_set_depth_mode(m_dev, mode) < 0) throw std::runtime_error("Cannot set depth format");
118124
freenect_start_depth(m_dev);
119125
m_depth_format = requested_format;
126+
m_depth_resolution = requested_resolution;
120127
}
121128
}
122129
freenect_depth_format getDepthFormat() {
123130
return m_depth_format;
124131
}
132+
freenect_resolution getDepthResolution() {
133+
return m_depth_resolution;
134+
}
125135
// Do not call directly even in child
126136
virtual void VideoCallback(void *video, uint32_t timestamp) = 0;
127137
// Do not call directly even in child
@@ -136,7 +146,7 @@ namespace Freenect {
136146
case FREENECT_VIDEO_IR_10BIT_PACKED:
137147
case FREENECT_VIDEO_YUV_RGB:
138148
case FREENECT_VIDEO_YUV_RAW:
139-
return freenect_find_video_mode(FREENECT_RESOLUTION_MEDIUM, m_video_format).bytes;
149+
return freenect_find_video_mode(m_video_resolution, m_video_format).bytes;
140150
default:
141151
return 0;
142152
}
@@ -148,6 +158,8 @@ namespace Freenect {
148158
freenect_device *m_dev;
149159
freenect_video_format m_video_format;
150160
freenect_depth_format m_depth_format;
161+
freenect_resolution m_video_resolution;
162+
freenect_resolution m_depth_resolution;
151163
static void freenect_depth_callback(freenect_device *dev, void *depth, uint32_t timestamp) {
152164
FreenectDevice* device = static_cast<FreenectDevice*>(freenect_get_user(dev));
153165
device->DepthCallback(depth, timestamp);

0 commit comments

Comments
 (0)