int kinectManager::init() {
XnStatus status;
status = _g_context.Init();
static xn::NodeInfoList node_info_list;
static xn::NodeInfoList depth_nodes;
static xn::NodeInfoList image_nodes;
status = _g_context.EnumerateProductionTrees (XN_NODE_TYPE_DEVICE, NULL, node_info_list);
if (status != XN_STATUS_OK && node_info_list.Begin () != node_info_list.End ()) {
printf ("Enumerating devices failed. Reason: %s", xnGetStatusString (status));
return -1;
}
else if (node_info_list.Begin () == node_info_list.End ()) {
printf("No devices found.\n");
return -1;
}
for (xn::NodeInfoList::Iterator nodeIt = node_info_list.Begin (); nodeIt != node_info_list.End (); ++nodeIt) {
_nKinects++;
}
status = _g_context.EnumerateProductionTrees (XN_NODE_TYPE_IMAGE, NULL, image_nodes, NULL);
if (status != XN_STATUS_OK && image_nodes.Begin () != image_nodes.End ()) {
printf ("Enumerating devices failed. Reason: %s", xnGetStatusString (status));
return -1;
}
else if (image_nodes.Begin () == image_nodes.End ()) {
printf("No devices found.\n");
return -1;
}
status = _g_context.EnumerateProductionTrees (XN_NODE_TYPE_DEPTH, NULL, depth_nodes, NULL);
if (status != XN_STATUS_OK && depth_nodes.Begin () != depth_nodes.End ()) {
printf ("Enumerating devices failed. Reason: %s", xnGetStatusString (status));
return -1;
}
else if (depth_nodes.Begin () == depth_nodes.End ()) {
printf("No devices found.\n");
return -1;
}
int i = 0;
for (xn::NodeInfoList::Iterator nodeIt =image_nodes.Begin(); nodeIt != image_nodes.End(); ++nodeIt, i++) {
xn::NodeInfo info = *nodeIt;
const XnProductionNodeDescription& description = info.GetDescription();
printf("image: vendor %s name %s, instance %s\n",description.strVendor, description.strName, info.GetInstanceName());
XnMapOutputMode mode;
mode.nXRes = 640;
mode.nYRes = 480;
mode.nFPS = 30;
status = _g_context.CreateProductionTree (info);
ImageGenerator* g_image = new ImageGenerator();
ImageMetaData* g_imageMD = new ImageMetaData();
status = info.GetInstance (*g_image);
g_image->SetMapOutputMode(mode);
g_image->GetMetaData(*g_imageMD);
g_image->StartGenerating();
_g_image.push_back(g_image);
_g_imageMD.push_back(g_imageMD);
}
i = 0;
for (xn::NodeInfoList::Iterator nodeIt =depth_nodes.Begin(); nodeIt != depth_nodes.End(); ++nodeIt, i++) {
xn::NodeInfo info = *nodeIt;
const XnProductionNodeDescription& description = info.GetDescription();
printf("image: vendor %s name %s, instance %s\n",description.strVendor, description.strName, info.GetInstanceName());
XnMapOutputMode mode;
mode.nXRes = 640;
mode.nYRes = 480;
mode.nFPS = 30;
status = _g_context.CreateProductionTree (info);
DepthGenerator* g_depth = new DepthGenerator();
DepthMetaData* g_depthMD = new DepthMetaData();
status = info.GetInstance (*g_depth);
g_depth->SetMapOutputMode(mode);
g_depth->GetMetaData(*g_depthMD);
g_depth->StartGenerating();
_g_depth.push_back(g_depth);
_g_depthMD.push_back(g_depthMD);
}
for (int i = 0; i < _nKinects; i++) {
_g_image[i]->GetMirrorCap().SetMirror(false);
_g_depth[i]->GetAlternativeViewPointCap().SetViewPoint(*_g_image[i]);
_g_depth[i]->GetMirrorCap().SetMirror(false);
}
status =_g_context.StartGeneratingAll();
return 1;
}