XnStatus PlayerNode::OpenStream() { XN_VALIDATE_INPUT_PTR(m_pInputStream); XnStatus nRetVal = m_pInputStream->Open(m_pStreamCookie); XN_IS_STATUS_OK(nRetVal); RecordingHeader header; XnUInt32 nBytesRead = 0; nRetVal = m_pInputStream->Read(m_pStreamCookie, &header, sizeof(header), &nBytesRead); XN_IS_STATUS_OK(nRetVal); if (nBytesRead < sizeof(header)) { XN_LOG_ERROR_RETURN(XN_STATUS_CORRUPT_FILE, XN_MASK_OPEN_NI, "Not enough bytes read"); } /* Check header */ if (xnOSMemCmp(header.headerMagic, DEFAULT_RECORDING_HEADER.headerMagic, sizeof(header.headerMagic)) != 0) { XN_LOG_ERROR_RETURN(XN_STATUS_CORRUPT_FILE, XN_MASK_OPEN_NI, "Invalid header magic"); } if ((xnVersionCompare(&header.version, &OLDEST_SUPPORTED_FILE_FORMAT_VERSION) < 0) || //File format is too old (xnVersionCompare(&header.version, &DEFAULT_RECORDING_HEADER.version) > 0)) //File format is too new { XN_LOG_ERROR_RETURN(XN_STATUS_UNSUPPORTED_VERSION, XN_MASK_OPEN_NI, "Unsupported file format version: %u.%u.%u.%u", header.version.nMajor, header.version.nMinor, header.version.nMaintenance, header.version.nBuild); } m_nGlobalMaxTimeStamp = header.nGlobalMaxTimeStamp; m_nMaxNodes = header.nMaxNodeID + 1; XN_ASSERT(m_nMaxNodes > 0); XN_DELETE_ARR(m_pNodeInfoMap); xnOSFree(m_aSeekTempArray); m_pNodeInfoMap = XN_NEW_ARR(PlayerNodeInfo, m_nMaxNodes); XN_VALIDATE_ALLOC_PTR(m_pNodeInfoMap); XN_VALIDATE_CALLOC(m_aSeekTempArray, DataIndexEntry*, m_nMaxNodes); m_bOpen = TRUE; nRetVal = ProcessUntilFirstData(); if (nRetVal != XN_STATUS_OK) { XN_DELETE_ARR(m_pNodeInfoMap); m_pNodeInfoMap = NULL; xnOSFree(m_aSeekTempArray); m_aSeekTempArray = NULL; return nRetVal; } return XN_STATUS_OK; }
XnBool XnSensorDepthGenerator::IsSensorImageNode(xn::ProductionNode& OtherNode) { xn::NodeInfo info = OtherNode.GetInfo(); XnVersion Version; Version.nMajor = XN_PS_MAJOR_VERSION; Version.nMinor = XN_PS_MINOR_VERSION; Version.nMaintenance = XN_PS_MAINTENANCE_VERSION; Version.nBuild = XN_PS_BUILD_VERSION; // check if this view point is image from this DLL if (info.GetDescription().Type != XN_NODE_TYPE_IMAGE || strcmp(info.GetDescription().strName, XN_DEVICE_NAME) != 0 || strcmp(info.GetDescription().strVendor, XN_VENDOR_PRIMESENSE) != 0 || xnVersionCompare(&info.GetDescription().Version, &Version) != 0) { return FALSE; } // check if it uses the same device xn::NodeInfoList needed = info.GetNeededNodes(); for (xn::NodeInfoList::Iterator it = needed.Begin(); it != needed.End(); ++it) { if ((*it).GetDescription().Type == XN_NODE_TYPE_DEVICE && strcmp((*it).GetCreationInfo(), m_device.GetInfo().GetCreationInfo()) == 0) { return TRUE; } } return FALSE; }
static XnBool xnIsInfoQueryMatch(const XnNodeQuery* pQuery, XnNodeInfo* pNodeInfo) { const XnProductionNodeDescription* pDescription = xnNodeInfoGetDescription(pNodeInfo); // vendor if (pQuery->strVendor[0] != '\0' && strcmp(pQuery->strVendor, pDescription->strVendor) != 0) { return (FALSE); } // name if (pQuery->strName[0] != '\0' && strcmp(pQuery->strName, pDescription->strName) != 0) { return (FALSE); } // min version if (xnVersionCompare(&pQuery->MinVersion, &pDescription->Version) > 0) { return (FALSE); } // max version if (xnVersionCompare(&pQuery->MaxVersion, &pDescription->Version) < 0) { return (FALSE); } // check needed nodes for (XnUInt i = 0; i < pQuery->nNeededNodes; ++i) { if (!xnIsInstanceInTree(pNodeInfo, pQuery->astrNeededNodes[i])) { return (FALSE); } } // Creation info if (pQuery->strCreationInfo[0] != '\0' && strcmp(pQuery->strCreationInfo, xnNodeInfoGetCreationInfo(pNodeInfo)) != 0) { return (FALSE); } return (TRUE); }