XnStatus XnDeviceStream::Read(XnStreamData* pStreamOutput) { XnStatus nRetVal = XN_STATUS_OK; // check the size of the stream output object nRetVal = XnStreamDataCheckSize(pStreamOutput, GetRequiredDataSize()); XN_IS_STATUS_OK(nRetVal); // first mark old data as old pStreamOutput->bIsNew = FALSE; // now check if we have some new data if (m_bNewDataAvailable) { // copy data nRetVal = ReadImpl(pStreamOutput); XN_IS_STATUS_OK(nRetVal); xnOSEnterCriticalSection(&m_hCriticalSection); XnBool bMirror = IsMirrored(); xnOSLeaveCriticalSection(&m_hCriticalSection); // mirror it if needed if (bMirror) { nRetVal = Mirror(pStreamOutput); XN_IS_STATUS_OK(nRetVal); } // mark that data is new pStreamOutput->bIsNew = TRUE; // and that we don't have new info m_bNewDataAvailable = FALSE; } return (XN_STATUS_OK); }
XnStatus XnStreamReaderDevice::HandleStreamData(XnStreamData* pDataProps, XnCompressionFormats nCompression, XnUInt32 nCompressedSize) { XnStatus nRetVal = XN_STATUS_OK; // find the stream XnStreamDeviceStreamHolder* pStreamHolder; nRetVal = FindStream(pDataProps->StreamName, &pStreamHolder); XN_IS_STATUS_OK(nRetVal); XnStreamReaderStream* pStream = (XnStreamReaderStream*)pStreamHolder->GetStream(); XnStreamData* pStreamData = pStream->GetStreamData(); // check size nRetVal = XnStreamDataCheckSize(pStreamData, pStream->GetRequiredDataSize()); XN_IS_STATUS_OK(nRetVal); nRetVal = GetDataPacker()->ReadStreamData(pStreamData, pStreamHolder->GetCodec()); XN_IS_STATUS_OK(nRetVal); pStream->NewDataAvailable(pStreamData->nTimestamp, pStreamData->nFrameID); return (XN_STATUS_OK); }