OniStatus LinkOniMapStream::getProperty(int propertyId, void* data, int* pDataSize) { XnStatus nRetVal = XN_STATUS_ERROR; switch(propertyId) { case ONI_STREAM_PROPERTY_VIDEO_MODE: EXACT_PROP_SIZE(*pDataSize, OniVideoMode); nRetVal = GetVideoMode((OniVideoMode*)data); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; case ONI_STREAM_PROPERTY_MIRRORING: EXACT_PROP_SIZE(*pDataSize, OniBool); nRetVal = GetMirror((OniBool*)data); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; case ONI_STREAM_PROPERTY_CROPPING: EXACT_PROP_SIZE(*pDataSize, OniCropping); nRetVal = GetCropping(*(OniCropping*)data); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); break; case LINK_PROP_PIXEL_FORMAT: ENSURE_PROP_SIZE(*pDataSize, XnLinkPixelFormat); ASSIGN_PROP_VALUE_INT(data, *pDataSize, m_pInputStream->GetVideoMode().m_nPixelFormat); break; case LINK_PROP_COMPRESSION: ENSURE_PROP_SIZE(*pDataSize, XnLinkCompressionType); ASSIGN_PROP_VALUE_INT(data, *pDataSize, m_pInputStream->GetVideoMode().m_nCompression); break; case PS_PROPERTY_GAIN: { ENSURE_PROP_SIZE(*pDataSize, XnUInt16); XnUInt16 gain; nRetVal = m_pInputStream->GetGain(gain); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); ASSIGN_PROP_VALUE_INT(data, *pDataSize, gain); } break; default: { return LinkOniStream::getProperty(propertyId, data, pDataSize); } } return ONI_STATUS_OK; }
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; } default: return LinkOniStream::setProperty(propertyId, data, dataSize); } return ONI_STATUS_OK; }
OniStatus XnOniStream::start() { XnStatus nRetVal = ONI_STATUS_OK; if (!m_started) { // first lock the stream (so that IsOpen() and Open() will be an atomic action) xnl::AutoCSLocker locker(*m_pDeviceStream->GetOpenLock()); if (m_pDeviceStream->IsOpen()) { m_pDeviceStream->OpenAddRef(); } else { nRetVal = m_pDeviceStream->Open(); XN_IS_STATUS_OK_RET(nRetVal, ONI_STATUS_ERROR); } m_started = TRUE; } return ONI_STATUS_OK; }