Skip to content

Commit de79349

Browse files
committed
wrappers/cpp: Do not start stopped streams when setting formats
Signed-off-by: Benn Snyder <[email protected]>
1 parent 26c2358 commit de79349

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

OpenNI2-FreenectDriver/src/ColorStream.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ ColorStream::ColorStream(Freenect::FreenectDevice* pDevice) : VideoStream(pDevic
88
{
99
video_mode = makeOniVideoMode(ONI_PIXEL_FORMAT_RGB888, 640, 480, 30);
1010
setVideoMode(video_mode);
11+
pDevice->startVideo();
1112
}
1213

1314
// Add video modes here as you implement them

OpenNI2-FreenectDriver/src/DepthStream.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ DepthStream::DepthStream(Freenect::FreenectDevice* pDevice) : VideoStream(pDevic
99
video_mode = makeOniVideoMode(ONI_PIXEL_FORMAT_DEPTH_1_MM, 640, 480, 30);
1010
image_registration_mode = ONI_IMAGE_REGISTRATION_OFF;
1111
setVideoMode(video_mode);
12+
pDevice->startDepth();
1213
}
1314

1415
// Add video modes here as you implement them

wrappers/cpp/libfreenect.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,12 @@ namespace Freenect {
101101
}
102102
void setVideoFormat(freenect_video_format requested_format, freenect_resolution requested_resolution = FREENECT_RESOLUTION_MEDIUM) {
103103
if (requested_format != m_video_format || requested_resolution != m_video_resolution) {
104-
freenect_stop_video(m_dev);
104+
bool wasRunning = (freenect_stop_video(m_dev) >= 0);
105105
freenect_frame_mode mode = freenect_find_video_mode(requested_resolution, requested_format);
106106
if (!mode.is_valid) throw std::runtime_error("Cannot set video format: invalid mode");
107107
if (freenect_set_video_mode(m_dev, mode) < 0) throw std::runtime_error("Cannot set video format");
108-
freenect_start_video(m_dev);
108+
if (wasRunning)
109+
freenect_start_video(m_dev);
109110
m_video_format = requested_format;
110111
m_video_resolution = requested_resolution;
111112
}
@@ -118,11 +119,12 @@ namespace Freenect {
118119
}
119120
void setDepthFormat(freenect_depth_format requested_format, freenect_resolution requested_resolution = FREENECT_RESOLUTION_MEDIUM) {
120121
if (requested_format != m_depth_format || requested_resolution != m_depth_resolution) {
121-
freenect_stop_depth(m_dev);
122+
bool wasRunning = (freenect_stop_depth(m_dev) >= 0);
122123
freenect_frame_mode mode = freenect_find_depth_mode(requested_resolution, requested_format);
123124
if (!mode.is_valid) throw std::runtime_error("Cannot set depth format: invalid mode");
124125
if (freenect_set_depth_mode(m_dev, mode) < 0) throw std::runtime_error("Cannot set depth format");
125-
freenect_start_depth(m_dev);
126+
if (wasRunning)
127+
freenect_start_depth(m_dev);
126128
m_depth_format = requested_format;
127129
m_depth_resolution = requested_resolution;
128130
}

0 commit comments

Comments
 (0)