XnStatus PlayerImpl::SetNodeStateReady(const XnChar* strNodeName) { XnStatus nRetVal = XN_STATUS_OK; PlayedNodeInfo playedNode; nRetVal = m_playedNodes.Get(strNodeName, playedNode); XN_IS_STATUS_OK(nRetVal); nRetVal = xnLockedNodeStartChanges(playedNode.hNode, playedNode.hLock); XN_IS_STATUS_OK(nRetVal); nRetVal = xnSetIntProperty(playedNode.hNode, XN_PROP_STATE_READY, 1); if (nRetVal != XN_STATUS_OK) { xnLockedNodeEndChanges(playedNode.hNode, playedNode.hLock); return (nRetVal); } nRetVal = xnLockedNodeEndChanges(playedNode.hNode, playedNode.hLock); XN_IS_STATUS_OK(nRetVal); //TODO: When we move the codec handling to PlayerImpl this notification will be more useful for PlayerImpl. return (XN_STATUS_OK); }
XnStatus xnConfigureProperty(XnNodeHandle hNode, const TiXmlElement* pOpcode) { XnStatus nRetVal = XN_STATUS_OK; const XnChar* strName; nRetVal = xnXmlReadStringAttribute(pOpcode, "name", &strName); XN_IS_STATUS_OK(nRetVal); const XnChar* strType; nRetVal = xnXmlReadStringAttribute(pOpcode, "type", &strType); XN_IS_STATUS_OK(nRetVal); if (strcmp(strType, "int") == 0) { XnInt nValue; nRetVal = xnXmlReadIntAttribute(pOpcode, "value", &nValue); XN_IS_STATUS_OK(nRetVal); nRetVal = xnSetIntProperty(hNode, strName, nValue); if (nRetVal != XN_STATUS_OK) { xnLogError(XN_MASK_OPEN_NI, "Failed to set property '%s' from xml: %s", strName, xnGetStatusString(nRetVal)); return nRetVal; } } else if (strcmp(strType, "real") == 0) { XnDouble dValue; nRetVal = xnXmlReadRealAttribute(pOpcode, "value", &dValue); XN_IS_STATUS_OK(nRetVal); nRetVal = xnSetRealProperty(hNode, strName, dValue); if (nRetVal != XN_STATUS_OK) { xnLogError(XN_MASK_OPEN_NI, "Failed to set property '%s' from xml: %s", strName, xnGetStatusString(nRetVal)); return nRetVal; } } else if (strcmp(strType, "string") == 0) { const XnChar* strValue; nRetVal = xnXmlReadStringAttribute(pOpcode, "value", &strValue); XN_IS_STATUS_OK(nRetVal); nRetVal = xnSetStringProperty(hNode, strName, strValue); if (nRetVal != XN_STATUS_OK) { xnLogError(XN_MASK_OPEN_NI, "Failed to set property '%s' from xml: %s", strName, xnGetStatusString(nRetVal)); return nRetVal; } } else { XN_LOG_ERROR_RETURN(XN_STATUS_CORRUPT_FILE, XN_MASK_OPEN_NI, "Invalid property type: %s", strType); } return (XN_STATUS_OK); }
XnStatus PlayerImpl::SetNodeIntProp(const XnChar* strNodeName, const XnChar* strPropName, XnUInt64 nValue) { XnStatus nRetVal = XN_STATUS_OK; PlayedNodeInfo playedNode; nRetVal = m_playedNodes.Get(strNodeName, playedNode); XN_IS_STATUS_OK(nRetVal); nRetVal = xnLockedNodeStartChanges(playedNode.hNode, playedNode.hLock); XN_IS_STATUS_OK(nRetVal); nRetVal = xnSetIntProperty(playedNode.hNode, strPropName, nValue); if (nRetVal != XN_STATUS_OK) { xnLockedNodeEndChanges(playedNode.hNode, playedNode.hLock); return (nRetVal); } nRetVal = xnLockedNodeEndChanges(playedNode.hNode, playedNode.hLock); XN_IS_STATUS_OK(nRetVal); return XN_STATUS_OK; }
XnStatus PlayerImpl::SetNodeNewData(const XnChar* strNodeName, XnUInt64 nTimeStamp, XnUInt32 nFrame, const void* pData, XnUInt32 nSize) { XnStatus nRetVal = XN_STATUS_OK; XnUInt64 nNow; xnOSGetHighResTimeStamp(&nNow); if (!m_bHasTimeReference) { m_nStartTimestamp = nTimeStamp; m_nStartTime = nNow; m_bHasTimeReference = TRUE; } if (m_dPlaybackSpeed != XN_PLAYBACK_SPEED_FASTEST) { // check this data timestamp compared to when we started XnInt64 nTimestampDiff = nTimeStamp - m_nStartTimestamp; XnInt64 nTimeDiff = nNow - m_nStartTime; // check if we need to wait some time XnInt64 nRequestedTimeDiff = (XnInt64)(nTimestampDiff / m_dPlaybackSpeed); if (nTimeDiff < nRequestedTimeDiff) { xnOSSleep(XnUInt32((nRequestedTimeDiff - nTimeDiff)/1000)); } // update reference to current frame (this will handle cases in which application // stopped reading frames and continued after a while) m_nStartTimestamp = nTimeStamp; xnOSGetHighResTimeStamp(&m_nStartTime); } PlayedNodeInfo playedNode; nRetVal = m_playedNodes.Get(strNodeName, playedNode); XN_IS_STATUS_OK(nRetVal); nRetVal = xnLockedNodeStartChanges(playedNode.hNode, playedNode.hLock); XN_IS_STATUS_OK(nRetVal); nRetVal = xnSetIntProperty(playedNode.hNode, XN_PROP_TIMESTAMP, nTimeStamp); if (nRetVal != XN_STATUS_OK) { xnLockedNodeEndChanges(playedNode.hNode, playedNode.hLock); return (nRetVal); } nRetVal = xnSetIntProperty(playedNode.hNode, XN_PROP_FRAME_ID, nFrame); if (nRetVal != XN_STATUS_OK) { xnLockedNodeEndChanges(playedNode.hNode, playedNode.hLock); return (nRetVal); } nRetVal = xnSetGeneralProperty(playedNode.hNode, XN_PROP_NEWDATA, nSize, pData); if (nRetVal != XN_STATUS_OK) { xnLockedNodeEndChanges(playedNode.hNode, playedNode.hLock); return (nRetVal); } nRetVal = xnLockedNodeEndChanges(playedNode.hNode, playedNode.hLock); XN_IS_STATUS_OK(nRetVal); return XN_STATUS_OK; }
XnStatus MockNotifier::OnNodeStateReadyImpl(void* pCookie, const XnChar* strNodeName) { return xnSetIntProperty((XnNodeHandle)pCookie, XN_PROP_STATE_READY, 1); }
XnStatus MockNotifier::OnNodeIntPropChangedImpl(void* pCookie, const XnChar* strNodeName, const XnChar* strPropName, XnUInt64 nValue) { return xnSetIntProperty((XnNodeHandle)pCookie, strPropName, nValue); }