XnStatus XnSensorAudioStream::ConfigureStreamImpl() { XnStatus nRetVal = XN_STATUS_OK; xnUSBShutdownReadThread(GetHelper()->GetPrivateData()->pSpecificMiscUsb->pUsbConnection->UsbEp); nRetVal = SetActualRead(TRUE); XN_IS_STATUS_OK(nRetVal); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(SampleRateProperty())); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(NumberOfChannelsProperty())); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_LeftChannelVolume)); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_RightChannelVolume)); return (XN_STATUS_OK); }
XnStatus XnSensorDepthStream::ConfigureStreamImpl() { XnStatus nRetVal = XN_STATUS_OK; xnUSBShutdownReadThread(GetHelper()->GetPrivateData()->pSpecificDepthUsb->pUsbConnection->UsbEp); nRetVal = SetActualRead(TRUE); XN_IS_STATUS_OK(nRetVal); nRetVal = m_Helper.ConfigureFirmware(m_InputFormat); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(ResolutionProperty()); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(FPSProperty()); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(m_HoleFilter); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(m_Gain); XN_IS_STATUS_OK(nRetVal);; // we need to turn decimation on when resolution is QVGA, and FPS is different than 60 // NOTE: this is ugly as hell. This logic should be moved to firmware. XnBool bDecimation = (GetResolution() == XN_RESOLUTION_QVGA && GetFPS() != 60); nRetVal = GetFirmwareParams()->m_DepthDecimation.SetValue(bDecimation); XN_IS_STATUS_OK(nRetVal); nRetVal = m_Helper.ConfigureFirmware(m_FirmwareRegistration); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(m_FirmwareMirror); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(m_GMCMode); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(m_GMCDebug); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(m_WavelengthCorrection); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(m_WavelengthCorrectionDebug); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.ConfigureFirmware(m_WhiteBalance); XN_IS_STATUS_OK(nRetVal);; nRetVal = m_Helper.GetCmosInfo()->SetCmosConfig(XN_CMOS_TYPE_DEPTH, GetResolution(), GetFPS()); XN_IS_STATUS_OK(nRetVal); return XN_STATUS_OK; }
XnStatus XnSensorAudioStream::SetActualRead(XnBool bRead) { XnStatus nRetVal = XN_STATUS_OK; if (m_ActualRead.GetValue() != bRead) { if (bRead) { xnLogVerbose(XN_MASK_DEVICE_SENSOR, "Creating USB audio read thread..."); nRetVal = xnUSBInitReadThread(GetHelper()->GetPrivateData()->pSpecificMiscUsb->pUsbConnection->UsbEp, GetHelper()->GetPrivateData()->pSpecificMiscUsb->nChunkReadBytes, XN_SENSOR_USB_MISC_BUFFERS, XN_SENSOR_READ_THREAD_TIMEOUT, XnDeviceSensorProtocolUsbEpCb, GetHelper()->GetPrivateData()->pSpecificMiscUsb); XN_IS_STATUS_OK(nRetVal); } else { xnLogVerbose(XN_MASK_DEVICE_SENSOR, "Shutting down USB audio read thread..."); xnUSBShutdownReadThread(GetHelper()->GetPrivateData()->pSpecificMiscUsb->pUsbConnection->UsbEp); } nRetVal = m_ActualRead.UnsafeUpdateValue(bRead); XN_IS_STATUS_OK(nRetVal); } return (XN_STATUS_OK); }
XnStatus XnSensorDepthStream::ConfigureStreamImpl() { XnStatus nRetVal = XN_STATUS_OK; xnUSBShutdownReadThread(GetHelper()->GetPrivateData()->pSpecificDepthUsb->pUsbConnection->UsbEp); nRetVal = SetActualRead(TRUE); XN_IS_STATUS_OK(nRetVal); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_InputFormat)); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(ResolutionProperty())); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(FPSProperty())); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_HoleFilter)); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_Gain)); // we need to turn decimation on when resolution is QVGA, and FPS is different than 60 // NOTE: this is ugly as hell. This logic should be moved to firmware. XnBool bDecimation = (GetResolution() == XN_RESOLUTION_QVGA && GetFPS() != 60); nRetVal = GetFirmwareParams()->m_DepthDecimation.SetValue(bDecimation); XN_IS_STATUS_OK(nRetVal); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_FirmwareRegistration)); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_FirmwareMirror)); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_GMCMode)); XN_IS_STATUS_OK(m_Helper.ConfigureFirmware(m_WhiteBalance)); nRetVal = m_Helper.GetCmosInfo()->SetCmosConfig(XN_CMOS_TYPE_DEPTH, GetResolution(), GetFPS()); XN_IS_STATUS_OK(nRetVal); // --avin mod-- //Turn off the IR projector anti-cover thingy. I find it annoying and It's off on the XBox360 so it must be safe :-) //This is probably not the best way to do it, but adding it as a real param is too much work for me at the moment... XnHostProtocolSetParam(GetHelper()->GetPrivateData(), 0x105, 0); return XN_STATUS_OK; }
XnStatus XnSensorIO::CloseDevice() { XnStatus nRetVal; xnLogVerbose(XN_MASK_DEVICE_SENSOR, "Shutting down USB depth read thread..."); xnUSBShutdownReadThread(m_pSensorHandle->DepthConnection.UsbEp); if (m_pSensorHandle->DepthConnection.UsbEp != NULL) { nRetVal = xnUSBCloseEndPoint(m_pSensorHandle->DepthConnection.UsbEp); XN_IS_STATUS_OK(nRetVal); m_pSensorHandle->DepthConnection.UsbEp = NULL; } xnLogVerbose(XN_MASK_DEVICE_SENSOR, "Shutting down USB image read thread..."); xnUSBShutdownReadThread(m_pSensorHandle->ImageConnection.UsbEp); if (m_pSensorHandle->ImageConnection.UsbEp != NULL) { nRetVal = xnUSBCloseEndPoint(m_pSensorHandle->ImageConnection.UsbEp); XN_IS_STATUS_OK(nRetVal); m_pSensorHandle->ImageConnection.UsbEp = NULL; } if (m_pSensorHandle->MiscConnection.bIsOpen) { xnLogVerbose(XN_MASK_DEVICE_SENSOR, "Shutting down USB misc read thread..."); xnUSBShutdownReadThread(m_pSensorHandle->MiscConnection.UsbEp); if (m_pSensorHandle->MiscConnection.UsbEp != NULL) { nRetVal = xnUSBCloseEndPoint(m_pSensorHandle->MiscConnection.UsbEp); XN_IS_STATUS_OK(nRetVal); m_pSensorHandle->MiscConnection.UsbEp = NULL; } } if (m_pSensorHandle->ControlConnection.bIsBulk) { if (m_pSensorHandle->ControlConnection.ControlInConnectionEp != NULL) { nRetVal = xnUSBCloseEndPoint(m_pSensorHandle->ControlConnection.ControlInConnectionEp); XN_IS_STATUS_OK(nRetVal); m_pSensorHandle->ControlConnection.ControlInConnectionEp = NULL; } if (m_pSensorHandle->ControlConnection.ControlOutConnectionEp != NULL) { nRetVal = xnUSBCloseEndPoint(m_pSensorHandle->ControlConnection.ControlOutConnectionEp); XN_IS_STATUS_OK(nRetVal); m_pSensorHandle->ControlConnection.ControlOutConnectionEp = NULL; } } if (m_pSensorHandle->USBDevice != NULL) { nRetVal = xnUSBCloseDevice(m_pSensorHandle->USBDevice); XN_IS_STATUS_OK(nRetVal); m_pSensorHandle->USBDevice = NULL; } xnLogVerbose(XN_MASK_DEVICE_SENSOR, "Device closed successfully"); // All is good... return (XN_STATUS_OK); }