void readFrame() { if (!g_Depth.IsValid() && !g_Image.IsValid() && !g_IR.IsValid() && !g_Audio.IsValid()) // @@@dded return; XnStatus rc = XN_STATUS_OK; if (g_pPrimary != NULL) { rc = g_Context.WaitOneUpdateAll(*g_pPrimary); } else { rc = g_Context.WaitAnyUpdateAll(); } if (rc != XN_STATUS_OK) { printf("Error: %s\n", xnGetStatusString(rc)); } if (g_Depth.IsValid()) { g_Depth.GetMetaData(g_DepthMD); } if (g_Image.IsValid()) { g_Image.GetMetaData(g_ImageMD); } if (g_IR.IsValid()) { g_IR.GetMetaData(g_irMD); } if (g_Audio.IsValid()) { g_Audio.GetMetaData(g_AudioMD); } }
void seekFrame(int nDiff) { XnStatus nRetVal = XN_STATUS_OK; if (isPlayerOn()) { const XnChar* strNodeName = NULL; if (g_pPrimary != NULL) { strNodeName = g_pPrimary->GetName(); } else if (g_Depth.IsValid()) { strNodeName = g_Depth.GetName(); } else if (g_Image.IsValid()) { strNodeName = g_Image.GetName(); } else if (g_IR.IsValid()) { strNodeName = g_IR.GetName(); } else if (g_Audio.IsValid()) { strNodeName = g_Audio.GetName(); } nRetVal = g_Player.SeekToFrame(strNodeName, nDiff, XN_PLAYER_SEEK_CUR); if (nRetVal != XN_STATUS_OK) { displayMessage("Failed to seek: %s", xnGetStatusString(nRetVal)); return; } XnUInt32 nFrame = 0; XnUInt32 nNumFrames = 0; nRetVal = g_Player.TellFrame(strNodeName, nFrame); if (nRetVal != XN_STATUS_OK) { displayMessage("Failed to tell frame: %s", xnGetStatusString(nRetVal)); return; } nRetVal = g_Player.GetNumFrames(strNodeName, nNumFrames); if (nRetVal != XN_STATUS_OK) { displayMessage("Failed to get number of frames: %s", xnGetStatusString(nRetVal)); return; } displayMessage("Seeked %s to frame %u/%u", strNodeName, nFrame, nNumFrames); } }
// Gets the colour and depth data from the Kinect sensor. bool GetColorAndDepthImages(ColorImage& colorImage, DepthImage& depthImage) { XnStatus rc = XN_STATUS_OK; // Read a new frame, blocking operation rc = deviceContext.WaitAnyUpdateAll(); if (rc != XN_STATUS_OK) { /*LOGE("Read failed: %s\n", xnGetStatusString(rc));*/ throw rc; } // Get handles to new data static ImageMetaData colorImageMetaData; static DepthMetaData depthImageMetaData; colorImageGenerator.GetMetaData(colorImageMetaData); depthImageGenerator.GetMetaData(depthImageMetaData); // Validate images if (!depthImageGenerator.IsValid() || !colorImageGenerator.IsValid()) { /*LOGE("Error: Color or depth image is invalid.");*/ throw 1; } if (colorImageMetaData.Timestamp() <= mostRecentRGB) return false; // Fetch pointers to data const XnRGB24Pixel* pColorImage = colorImageMetaData.RGB24Data(); //g_depth.GetRGB24ImageMap() const XnDepthPixel* pDepthImage = depthImageMetaData.Data();// g_depth.GetDepthMap(); // Copy data over to arrays memcpy(colorImage.data, pColorImage, sizeof(colorImage.data)); memcpy(depthImage.data, pDepthImage, sizeof(depthImage.data)); colorImage.rows = colorImage.maxRows; colorImage.cols = colorImage.maxCols; depthImage.rows = depthImage.maxRows; depthImage.cols = depthImage.maxCols; mostRecentRGB = colorImageMetaData.Timestamp(); return true; }
void changeRegistration(int nValue) { if (!g_Depth.IsValid() || !g_Depth.IsCapabilitySupported(XN_CAPABILITY_ALTERNATIVE_VIEW_POINT)) { return; } if (!nValue) { g_Depth.GetAlternativeViewPointCap().ResetViewPoint(); } else if (g_Image.IsValid()) { g_Depth.GetAlternativeViewPointCap().SetViewPoint(g_Image); } }
bool getImageCoordinatesForDepthPixel(int x, int y, int& imageX, int& imageY) { if (!g_Depth.IsValid()) return false; // no depth if (!g_Image.IsValid()) return false; // no image if (!g_Depth.IsCapabilitySupported(XN_CAPABILITY_ALTERNATIVE_VIEW_POINT)) return false; XnUInt32 altX; XnUInt32 altY; if (XN_STATUS_OK != g_Depth.GetAlternativeViewPointCap().GetPixelCoordinatesInViewPoint(g_Image, x, y, altX, altY)) return false; imageX = (int)altX; imageY = (int)altY; return true; }
const ImageMetaData* getImageMetaData() { return g_Image.IsValid() ? &g_ImageMD : NULL; }
ImageGenerator* getImageGenerator() { return g_Image.IsValid() ? &g_Image : NULL; }