XN_C_API XnDepthMetaData* xnAllocateDepthMetaData() { XnDepthMetaData* pResult = (XnDepthMetaData*)xnOSCalloc(1, sizeof(XnDepthMetaData)); if (pResult == NULL) { return (NULL); } pResult->pMap = xnAllocateMapMetaData(); if (pResult->pMap == NULL) { xnFreeDepthMetaData(pResult); return (NULL); } return (pResult); }
int main() { XnStatus nRetVal = XN_STATUS_OK; XnContext* pContext; XnNodeHandle hScriptNode; XnEnumerationErrors* pErrors; XnNodeHandle hDepth; XnDepthMetaData* pDepthMD; const XnDepthPixel* pDepthMap; XnDepthPixel middlePoint; nRetVal = xnEnumerationErrorsAllocate(&pErrors); CHECK_RC(nRetVal, "Allocate errors object"); nRetVal = xnInitFromXmlFileEx(SAMPLE_XML_PATH, &pContext, pErrors, &hScriptNode); if (nRetVal == XN_STATUS_NO_NODE_PRESENT) { XnChar strError[1024]; xnEnumerationErrorsToString(pErrors, strError, 1024); printf("%s\n", strError); xnEnumerationErrorsFree(pErrors); return (nRetVal); } else if (nRetVal != XN_STATUS_OK) { printf("Open failed: %s\n", xnGetStatusString(nRetVal)); xnEnumerationErrorsFree(pErrors); return (nRetVal); } xnEnumerationErrorsFree(pErrors); nRetVal = xnFindExistingRefNodeByType(pContext, XN_NODE_TYPE_DEPTH, &hDepth); CHECK_RC(nRetVal, "Find depth generator"); pDepthMD = xnAllocateDepthMetaData(); while (!xnOSWasKeyboardHit()) { nRetVal = xnWaitOneUpdateAll(pContext, hDepth); if (nRetVal != XN_STATUS_OK) { printf("UpdateData failed: %s\n", xnGetStatusString(nRetVal)); continue; } xnGetDepthMetaData(hDepth, pDepthMD); pDepthMap = pDepthMD->pData; middlePoint = pDepthMap[pDepthMD->pMap->Res.X * pDepthMD->pMap->Res.Y/2 + pDepthMD->pMap->Res.X/2]; printf("Frame %d Middle point is: %u\n", pDepthMD->pMap->pOutput->nFrameID, middlePoint); } xnFreeDepthMetaData(pDepthMD); xnProductionNodeRelease(hDepth); xnProductionNodeRelease(hScriptNode); xnContextRelease(pContext); return 0; }