openni::Status openDevice(const char* uri, bool defaultRightColor) { openni::Status nRetVal = openni::OpenNI::initialize(); if (nRetVal != openni::STATUS_OK) { return nRetVal; } // Register to OpenNI events. static OpenNIDeviceListener deviceListener; openni::OpenNI::addDeviceDisconnectedListener(&deviceListener); openni::OpenNI::addDeviceStateChangedListener(&deviceListener); // Open the requested device. nRetVal = g_device.open(uri); if (nRetVal != openni::STATUS_OK) { return nRetVal; } g_pPlaybackControl = g_device.getPlaybackControl(); openCommon(g_device, defaultRightColor); return openni::STATUS_OK; }
int openCommon(openni::Device& device, DeviceConfig config) { g_pPlaybackControl = g_device.getPlaybackControl(); int ret; ret = openStream(device, "depth", openni::SENSOR_DEPTH, config.openDepth, g_depthStream, &g_depthSensorInfo, &g_bIsDepthOn); if (ret != 0) { return ret; } ret = openStream(device, "color", openni::SENSOR_COLOR, config.openColor, g_colorStream, &g_colorSensorInfo, &g_bIsColorOn); if (ret != 0) { return ret; } ret = openStream(device, "IR", openni::SENSOR_IR, config.openIR, g_irStream, &g_irSensorInfo, &g_bIsIROn); if (ret != 0) { return ret; } initConstants(); readFrame(); return 0; }
openni::Status openDeviceFromList(bool defaultRightColor) { openni::Status rc = openni::OpenNI::initialize(); if (rc != openni::STATUS_OK) { return rc; } openni::Array<openni::DeviceInfo> deviceList; openni::OpenNI::enumerateDevices(&deviceList); for (int i = 0; i < deviceList.getSize(); ++i) { printf("[%d] %s [%s] (%s)\n", i+1, deviceList[i].getName(), deviceList[i].getVendor(), deviceList[i].getUri()); } printf("\n"); int chosen = 1; do { printf("Choose device to open (1) [0 to exit]: "); int rc = scanf("%d", &chosen); if (rc <= 0 || chosen == 0) { return openni::STATUS_ERROR; } } while (chosen < 1 || chosen > deviceList.getSize()); g_device.open(deviceList[chosen-1].getUri()); if (rc != openni::STATUS_OK) { return rc; } g_pPlaybackControl = g_device.getPlaybackControl(); openCommon(g_device, defaultRightColor); return openni::STATUS_OK; }
void open(const char* uri) { if (device.open(uri) != openni::STATUS_OK) BOOST_THROW_EXCEPTION(GrabberException("Failed to open device") << GrabberException::ErrorInfo(openni::OpenNI::getExtendedError())); if (color_stream.create(device, openni::SENSOR_COLOR) != openni::STATUS_OK) BOOST_THROW_EXCEPTION(GrabberException("Failed to create color stream") << GrabberException::ErrorInfo(openni::OpenNI::getExtendedError())); openni::VideoMode color_mode; color_mode.setFps(30); color_mode.setResolution(color_image_resolution.width, color_image_resolution.height); color_mode.setPixelFormat(openni::PIXEL_FORMAT_RGB888); color_stream.setVideoMode(color_mode); color_image_size = color_image_resolution.width * color_image_resolution.height * 3; color_stream.setMirroringEnabled(false); if (color_stream.start() != openni::STATUS_OK) { color_stream.destroy(); BOOST_THROW_EXCEPTION(GrabberException("Failed to start color stream") << GrabberException::ErrorInfo(openni::OpenNI::getExtendedError())); } streams.push_back(&color_stream); auto control = device.getPlaybackControl(); if (control != nullptr) { // This is a file, make sure we get every frame control->setSpeed(-1.0f); control->setRepeatEnabled(false); num_frames = control->getNumberOfFrames(color_stream); is_file = true; if (num_frames == -1) BOOST_THROW_EXCEPTION(GrabberException("Unable to determine number of frames in ONI file")); } }