XnStatus MockMapGenerator::SetCropping(const XnCropping &Cropping) { XnStatus nRetVal = XN_STATUS_OK; if (xnOSMemCmp(&Cropping, &m_cropping, sizeof(Cropping)) != 0) { m_cropping = Cropping; nRetVal = m_croppingChangeEvent.Raise(); XN_IS_STATUS_OK(nRetVal); } return XN_STATUS_OK; }
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; }
XnStatus MockMapGenerator::SetMapOutputMode(const XnMapOutputMode& mode) { XnStatus nRetVal = XN_STATUS_OK; xnLogVerbose(XN_MASK_OPEN_NI, "%s: Setting map output mode to %ux%u, %u fps", m_strName, mode.nXRes, mode.nYRes, mode.nFPS); //TODO: Check if mode is in supported modes. If not, return error. if (xnOSMemCmp(&mode, &m_mapOutputMode, sizeof(mode)) != 0) { m_mapOutputMode = mode; nRetVal = m_outputModeChangeEvent.Raise(); XN_IS_STATUS_OK(nRetVal); } return XN_STATUS_OK; }
XnStatus LinkOniMapStream::SetVideoMode(OniVideoMode* pVideoMode) { XnStatus nRetVal = XN_STATUS_OK; OniVideoMode current; GetVideoMode(¤t); if (!xnOSMemCmp(¤t, pVideoMode, sizeof(OniVideoMode))) { // nothing to do here return (ONI_STATUS_OK); } // now look for the first mode that matches const xnl::Array<XnFwStreamVideoMode>& supportedModes = m_pInputStream->GetSupportedVideoModes(); XnInt32 selectedIndex = -1; for (XnUInt32 i = 0; i < supportedModes.GetSize(); ++i) { if (pVideoMode->resolutionX == (int)supportedModes[i].m_nXRes && pVideoMode->resolutionY == (int)supportedModes[i].m_nYRes && pVideoMode->fps == (int)supportedModes[i].m_nFPS) { selectedIndex = i; break; } } if (selectedIndex == -1) { xnLogError(XN_MASK_LINK, "Tried to set unsupported mode: %ux%u@%u fps", pVideoMode->resolutionX, pVideoMode->resolutionY, pVideoMode->fps); XN_ASSERT(FALSE); return XN_STATUS_BAD_PARAM; } nRetVal = m_pInputStream->SetVideoMode(supportedModes[selectedIndex]); XN_IS_STATUS_OK_LOG_ERROR("Set video mode", nRetVal); nRetVal = m_pInputStream->SetOutputFormat(pVideoMode->pixelFormat); XN_IS_STATUS_OK_LOG_ERROR("Set output format", nRetVal); return XN_STATUS_OK; }