XnStatus PlayerImpl::SetNodeGeneralProp(const XnChar* strNodeName, const XnChar* strPropName, XnUInt32 nBufferSize, const void* pBuffer) { 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 = xnSetGeneralProperty(playedNode.hNode, strPropName, nBufferSize, pBuffer); 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::OnNodeGeneralPropChangedImpl(void* pCookie, const XnChar* strNodeName, const XnChar* strPropName, XnUInt32 nBufferSize, const void* pBuffer) { return xnSetGeneralProperty((XnNodeHandle)pCookie, strPropName, nBufferSize, pBuffer); }