OniStatus LinkOniMapStream::setProperty(int propertyId, const void* data, int dataSize) { XnStatus nRetVal = XN_STATUS_ERROR; switch(propertyId) { case ONI_STREAM_PROPERTY_VIDEO_MODE: EXACT_PROP_SIZE(dataSize, OniVideoMode); nRetVal = SetVideoMode((OniVideoMode*)data); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; case ONI_STREAM_PROPERTY_MIRRORING: EXACT_PROP_SIZE(dataSize, OniBool); nRetVal = SetMirror(*(OniBool*)data); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; case ONI_STREAM_PROPERTY_CROPPING: EXACT_PROP_SIZE(dataSize, OniCropping); nRetVal = SetCropping(*(OniCropping*)data); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; case LINK_PROP_PIXEL_FORMAT: { ENSURE_PROP_SIZE(dataSize, XnLinkPixelFormat); XnFwStreamVideoMode mode = m_pInputStream->GetVideoMode(); mode.m_nPixelFormat = *(XnFwPixelFormat*)data; nRetVal = m_pInputStream->SetVideoMode(mode); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; } case LINK_PROP_COMPRESSION: { ENSURE_PROP_SIZE(dataSize, XnLinkCompressionType); XnFwStreamVideoMode mode = m_pInputStream->GetVideoMode(); mode.m_nCompression = *(XnFwCompressionType*)data; nRetVal = m_pInputStream->SetVideoMode(mode); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; } case PS_PROPERTY_GAIN: { ENSURE_PROP_SIZE(dataSize, XnUInt16); nRetVal = m_pInputStream->SetGain(*(XnUInt16*)data); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; } default: return LinkOniStream::setProperty(propertyId, data, dataSize); } return ONI_STATUS_OK; }
XnStatus XnSensorIRStream::OnIsMirroredChanged() { XnStatus nRetVal = XN_STATUS_OK; // if cropping is on, we need to flip it OniCropping cropping = *GetCropping(); if (cropping.enabled) { nRetVal = SetCropping(&cropping); XN_IS_STATUS_OK(nRetVal); } return (XN_STATUS_OK); }
XnStatus XnPixelStream::FixCropping() { XnStatus nRetVal = XN_STATUS_OK; XnCropping cropping = *GetCropping(); if (cropping.nXOffset > GetXRes() || cropping.nYOffset > GetYRes() || XnUInt32(cropping.nXOffset + cropping.nXSize) > GetXRes() || XnUInt32(cropping.nYOffset + cropping.nYSize) > GetYRes()) { // disable it cropping.bEnabled = FALSE; nRetVal = SetCropping(&cropping); XN_IS_STATUS_OK(nRetVal); } return (XN_STATUS_OK); }
XnStatus XnPixelStream::FixCropping() { XnStatus nRetVal = XN_STATUS_OK; OniCropping cropping = *GetCropping(); if (cropping.originX > (int)GetXRes() || cropping.originY > (int)GetYRes() || (cropping.originX + cropping.width) > (int)GetXRes() || (cropping.originY + cropping.height) > (int)GetYRes()) { // disable it cropping.enabled = FALSE; nRetVal = SetCropping(&cropping); XN_IS_STATUS_OK(nRetVal); } return (XN_STATUS_OK); }
XnStatus MockMapGenerator::SetGeneralProperty(const XnChar* strName, XnUInt32 nBufferSize, const void* pBuffer) { XN_VALIDATE_INPUT_PTR(strName); XN_VALIDATE_INPUT_PTR(pBuffer); XnStatus nRetVal = XN_STATUS_OK; if (strcmp(strName, XN_PROP_MAP_OUTPUT_MODE) == 0) { if (nBufferSize != sizeof(m_mapOutputMode)) { XN_LOG_ERROR_RETURN(XN_STATUS_INVALID_BUFFER_SIZE, XN_MASK_OPEN_NI, "Cannot set XN_PROP_MAP_OUTPUT_MODE - buffer size is incorrect"); } const XnMapOutputMode* pOutputMode = (const XnMapOutputMode*)pBuffer; nRetVal = SetMapOutputMode(*pOutputMode); XN_IS_STATUS_OK(nRetVal); } else if (strcmp(strName, XN_PROP_SUPPORTED_MAP_OUTPUT_MODES) == 0) { if (m_bSupportedMapOutputModesCountReceived) { m_bSupportedMapOutputModesCountReceived = FALSE; //For next time if (nBufferSize != m_nSupportedMapOutputModesCount * sizeof(XnMapOutputMode)) { XN_LOG_ERROR_RETURN(XN_STATUS_INVALID_BUFFER_SIZE, XN_MASK_OPEN_NI, "Cannot set XN_PROP_SUPPORTED_MAP_OUTPUT_MODES - buffer size is incorrect"); } XN_DELETE_ARR(m_pSupportedMapOutputModes); m_pSupportedMapOutputModes = XN_NEW_ARR(XnMapOutputMode, m_nSupportedMapOutputModesCount); XN_VALIDATE_ALLOC_PTR(m_pSupportedMapOutputModes); xnOSMemCopy(m_pSupportedMapOutputModes, pBuffer, nBufferSize); } else { XN_ASSERT(FALSE); XN_LOG_ERROR_RETURN(XN_STATUS_CORRUPT_FILE, XN_MASK_OPEN_NI, "Got XN_PROP_SUPPORTED_MAP_OUTPUT_MODES without XN_PROP_SUPPORTED_MAP_OUTPUT_MODES_COUNT before it"); } } else if (strcmp(strName, XN_PROP_CROPPING) == 0) { if (nBufferSize != sizeof(m_cropping)) { XN_LOG_ERROR_RETURN(XN_STATUS_INVALID_BUFFER_SIZE, XN_MASK_OPEN_NI, "Cannot set XN_PROP_CROPPING - buffer size is incorrect"); } const XnCropping* pCropping = (const XnCropping*)pBuffer; nRetVal = SetCropping(*pCropping); XN_IS_STATUS_OK(nRetVal); } else if (strcmp(strName, XN_PROP_NEWDATA) == 0) { XnUInt32 nExpectedSize = GetExpectedBufferSize(); if (nBufferSize != nExpectedSize) { xnLogWarning(XN_MASK_OPEN_NI, "%s: Got new data with illegal buffer size (%u) - ignoring.", m_strName, nBufferSize); } else { //Send it to be handled by our base class nRetVal = MockGenerator::SetGeneralProperty(strName, nBufferSize, pBuffer); XN_IS_STATUS_OK(nRetVal); } } else { nRetVal = MockGenerator::SetGeneralProperty(strName, nBufferSize, pBuffer); XN_IS_STATUS_OK(nRetVal); } return XN_STATUS_OK; }