24 #include "OniPlatform.h"
25 #include "OniProperties.h"
29 #include "OniCProperties.h"
30 #include "OniCTypes.h"
108 operator const char*()
const {
return NULL; }
124 Array() : m_data(NULL), m_count(0), m_owner(
false) {}
133 Array(
const T* data,
int count) : m_owner(
false) { _setData(data, count); }
147 int getSize()
const {
return m_count; }
164 void _setData(
const T* data,
int count,
bool isOwner =
false)
175 m_data =
new T[count];
176 memcpy((
void*)m_data, data, count*
sizeof(T));
181 Array(
const Array<T>&);
182 Array<T>& operator=(
const Array<T>&);
186 if (m_owner && m_data != NULL)
204 class CameraSettings;
205 class PlaybackControl;
221 class VideoMode :
private OniVideoMode
251 setResolution(other.getResolutionX(), other.getResolutionY());
261 PixelFormat
getPixelFormat()
const {
return (PixelFormat)pixelFormat; }
279 int getFps()
const {
return fps; }
287 void setPixelFormat(PixelFormat format) { this->pixelFormat = (OniPixelFormat)format; }
298 this->resolutionX = resolutionX;
299 this->resolutionY = resolutionY;
308 void setFps(
int fps) { this->fps = fps; }
310 friend class SensorInfo;
311 friend class VideoStream;
312 friend class VideoFrameRef;
339 SensorType
getSensorType()
const {
return (SensorType)m_pInfo->sensorType; }
354 SensorInfo() : m_pInfo(NULL), m_videoModes(NULL, 0) {}
356 SensorInfo(
const OniSensorInfo* pInfo) : m_pInfo(NULL), m_videoModes(NULL, 0)
361 void _setInternal(
const OniSensorInfo* pInfo)
366 m_videoModes._setData(NULL, 0);
370 m_videoModes._setData(
static_cast<VideoMode*
>(pInfo->pSupportedVideoModes), pInfo->numSupportedVideoModes);
374 const OniSensorInfo* m_pInfo;
375 Array<VideoMode> m_videoModes;
377 friend class VideoStream;
390 class DeviceInfo :
private OniDeviceInfo
397 const char*
getUri()
const {
return uri; }
399 const char*
getVendor()
const {
return vendor; }
401 const char*
getName()
const {
return name; }
451 _setFrame(other.m_pFrame);
461 _setFrame(other.m_pFrame);
472 return m_pFrame->dataSize;
480 inline const void*
getData()
const
482 return m_pFrame->data;
493 return (SensorType)m_pFrame->sensorType;
505 return static_cast<const VideoMode&
>(m_pFrame->videoMode);
517 return m_pFrame->timestamp;
532 return m_pFrame->frameIndex;
543 return m_pFrame->width;
553 return m_pFrame->height;
562 return m_pFrame->croppingEnabled == TRUE;
571 return m_pFrame->cropOriginX;
580 return m_pFrame->cropOriginY;
590 return m_pFrame->stride;
598 return m_pFrame != NULL;
607 if (m_pFrame != NULL)
609 oniFrameRelease(m_pFrame);
615 void _setFrame(OniFrame* pFrame)
617 setReference(pFrame);
620 oniFrameAddRef(pFrame);
625 OniFrame* _getFrame()
631 friend class VideoStream;
632 inline void setReference(OniFrame* pFrame)
673 class NewFrameListener
695 static void ONI_CALLBACK_TYPE callback(OniStreamHandle streamHandle,
void* pCookie)
699 stream._setHandle(streamHandle);
700 pListener->onNewFrame(stream);
701 stream._setHandle(NULL);
703 OniCallbackHandle m_callbackHandle;
709 virtual ~FrameAllocator() {}
710 virtual void* allocateFrameBuffer(
int size) = 0;
711 virtual void freeFrameBuffer(
void* data) = 0;
714 friend class VideoStream;
716 static void* ONI_CALLBACK_TYPE allocateFrameBufferCallback(
int size,
void* pCookie)
718 FrameAllocator* pThis = (FrameAllocator*)pCookie;
719 return pThis->allocateFrameBuffer(size);
722 static void ONI_CALLBACK_TYPE freeFrameBufferCallback(
void* data,
void* pCookie)
724 FrameAllocator* pThis = (FrameAllocator*)pCookie;
725 pThis->freeFrameBuffer(data);
733 VideoStream() : m_stream(NULL), m_sensorInfo(), m_pCameraSettings(NULL), m_isOwner(true)
740 explicit VideoStream(OniStreamHandle handle) : m_stream(NULL), m_sensorInfo(), m_pCameraSettings(NULL), m_isOwner(false)
760 return m_stream != NULL;
772 inline Status
create(
const Device& device, SensorType sensorType);
794 ParamsRegistrationMode getSoftwareRegistratorMode(){
796 ParamsRegistrationMode mode;
797 Status rc =
getProperty(STREAM_PROPERTY_SOFTWARE_REGISTRATION, &mode);
800 return PARAMS_REGISTRATION_OFF;
805 void setSoftwareRegistrator(ParamsRegistrationMode mode){
806 setProperty(STREAM_PROPERTY_SOFTWARE_REGISTRATION, (
int)mode);
819 return (Status)oniStreamStart(m_stream);
832 oniStreamStop(m_stream);
853 Status rc = (Status)oniStreamReadFrame(m_stream, &pOniFrame);
855 pFrame->setReference(pOniFrame);
873 return (Status)oniStreamRegisterNewFrameCallback(m_stream, pListener->callback, pListener, &pListener->m_callbackHandle);
887 oniStreamUnregisterNewFrameCallback(m_stream, pListener->m_callbackHandle);
888 pListener->m_callbackHandle = NULL;
903 if (pAllocator == NULL)
905 return (Status)oniStreamSetFrameBuffersAllocator(m_stream, NULL, NULL, NULL);
909 return (Status)oniStreamSetFrameBuffersAllocator(m_stream, pAllocator->allocateFrameBufferCallback, pAllocator->freeFrameBufferCallback, pAllocator);
917 OniStreamHandle _getHandle()
const
938 Status
getProperty(
int propertyId,
void* data,
int* dataSize)
const
945 return (Status)oniStreamGetProperty(m_stream, propertyId, data, dataSize);
958 Status
setProperty(
int propertyId,
const void* data,
int dataSize)
965 return (Status)oniStreamSetProperty(m_stream, propertyId, data, dataSize);
977 getProperty<OniVideoMode>(STREAM_PROPERTY_VIDEO_MODE,
static_cast<OniVideoMode*
>(&videoMode));
991 return setProperty<OniVideoMode>(STREAM_PROPERTY_VIDEO_MODE,
static_cast<const OniVideoMode&
>(videoMode));
1002 Status rc = getProperty<int>(STREAM_PROPERTY_MAX_VALUE, &maxValue);
1003 if (rc != STATUS_OK)
1018 Status rc = getProperty<int>(STREAM_PROPERTY_MIN_VALUE, &minValue);
1019 if (rc != STATUS_OK)
1043 bool getCropping(
int* pOriginX,
int* pOriginY,
int* pWidth,
int* pHeight)
const
1045 OniCropping cropping;
1046 bool enabled =
false;
1048 Status rc = getProperty<OniCropping>(STREAM_PROPERTY_CROPPING, &cropping);
1050 if (rc == STATUS_OK)
1052 *pOriginX = cropping.originX;
1053 *pOriginY = cropping.originY;
1054 *pWidth = cropping.width;
1055 *pHeight = cropping.height;
1056 enabled = (cropping.enabled == TRUE);
1071 Status
setCropping(
int originX,
int originY,
int width,
int height)
1073 OniCropping cropping;
1074 cropping.enabled =
true;
1075 cropping.originX = originX;
1076 cropping.originY = originY;
1077 cropping.width = width;
1078 cropping.height = height;
1079 return setProperty<OniCropping>(STREAM_PROPERTY_CROPPING, cropping);
1088 OniCropping cropping;
1089 cropping.enabled =
false;
1090 return setProperty<OniCropping>(STREAM_PROPERTY_CROPPING, cropping);
1100 Status rc = getProperty<OniBool>(STREAM_PROPERTY_MIRRORING, &enabled);
1101 if (rc != STATUS_OK)
1105 return enabled == TRUE;
1115 return setProperty<OniBool>(STREAM_PROPERTY_MIRRORING, isEnabled ? TRUE : FALSE);
1124 float horizontal = 0;
1125 getProperty<float>(STREAM_PROPERTY_HORIZONTAL_FOV, &horizontal);
1136 getProperty<float>(STREAM_PROPERTY_VERTICAL_FOV, &vertical);
1150 Status
setProperty(
int propertyId,
const T& value)
1165 Status
getProperty(
int propertyId, T* value)
const
1167 int size =
sizeof(T);
1183 return oniStreamIsPropertySupported(m_stream, propertyId) == TRUE;
1195 Status
invoke(
int commandId,
void* data,
int dataSize)
1199 return STATUS_ERROR;
1202 return (Status)oniStreamInvoke(m_stream, commandId, data, dataSize);
1215 Status
invoke(
int commandId, T& value)
1217 return invoke(commandId, &value,
sizeof(T));
1232 return (Status)oniStreamIsCommandSupported(m_stream, commandId) == TRUE;
1235 void filterSpeckles(
void* buf,
int newVal,
int maxSpeckleSize,
int maxDiff){
1236 oniStreamfilter(m_stream, buf, newVal, maxSpeckleSize, maxDiff);
1242 void _setHandle(OniStreamHandle stream)
1244 m_sensorInfo._setInternal(NULL);
1249 m_sensorInfo._setInternal(oniStreamGetSensorInfo(m_stream));
1257 OniStreamHandle m_stream;
1258 SensorInfo m_sensorInfo;
1259 CameraSettings* m_pCameraSettings;
1286 Device() : m_pPlaybackControl(NULL), m_device(NULL), m_isOwner(true)
1295 explicit Device(OniDeviceHandle handle) : m_pPlaybackControl(NULL), m_device(NULL), m_isOwner(false)
1306 if (m_device != NULL)
1341 inline Status
open(
const char* uri);
1348 inline void close();
1361 return m_deviceInfo;
1374 for (i = 0; (i < ONI_MAX_SENSORS) && (m_aSensorInfo[i].m_pInfo != NULL); ++i)
1376 if (m_aSensorInfo[i].getSensorType() == sensorType)
1382 if (i == ONI_MAX_SENSORS)
1387 const OniSensorInfo* pInfo = oniDeviceGetSensorInfo(m_device, (OniSensorType)sensorType);
1394 m_aSensorInfo[i]._setInternal(pInfo);
1409 for (i = 0; (i < ONI_MAX_SENSORS) && (m_aSensorInfo[i].m_pInfo != NULL); ++i)
1411 if (m_aSensorInfo[i].getSensorType() == sensorType)
1413 return &m_aSensorInfo[i];
1418 if (i == ONI_MAX_SENSORS)
1423 const OniSensorInfo* pInfo = oniDeviceGetSensorInfo(m_device, (OniSensorType)sensorType);
1429 m_aSensorInfo[i]._setInternal(pInfo);
1430 return &m_aSensorInfo[i];
1437 OniDeviceHandle _getHandle()
const
1459 Status
getProperty(
int propertyId,
void* data,
int* dataSize)
const
1461 return (Status)oniDeviceGetProperty(m_device, propertyId, data, dataSize);
1475 Status
setProperty(
int propertyId,
const void* data,
int dataSize)
1477 return (Status)oniDeviceSetProperty(m_device, propertyId, data, dataSize);
1480 void setGain(
int gain) {
1481 oniDeviceSetProperty(m_device, OBEXTENSION_ID_IR_GAIN, &gain,
sizeof(gain));
1486 int size =
sizeof(value);
1487 oniDeviceGetProperty(m_device, openni::OBEXTENSION_ID_IR_GAIN, (uint16_t *)&value, &size);
1499 return (oniDeviceIsImageRegistrationModeSupported(m_device, (OniImageRegistrationMode)mode) == TRUE);
1511 ImageRegistrationMode mode;
1512 Status rc = getProperty<ImageRegistrationMode>(DEVICE_PROPERTY_IMAGE_REGISTRATION, &mode);
1513 if (rc != STATUS_OK)
1515 return IMAGE_REGISTRATION_OFF;
1535 return setProperty<ImageRegistrationMode>(DEVICE_PROPERTY_IMAGE_REGISTRATION, mode);
1544 return m_device != NULL;
1568 Status rc = STATUS_OK;
1572 rc = (Status)oniDeviceEnableDepthColorSync(m_device);
1576 oniDeviceDisableDepthColorSync(m_device);
1582 bool getDepthColorSyncEnabled()
1584 return oniDeviceGetDepthColorSyncEnabled(m_device) == TRUE;
1598 Status
setProperty(
int propertyId,
const T& value)
1600 return setProperty(propertyId, &value,
sizeof(T));
1613 Status
getProperty(
int propertyId, T* value)
const
1615 int size =
sizeof(T);
1626 return oniDeviceIsPropertySupported(m_device, propertyId) == TRUE;
1638 Status
invoke(
int commandId,
void* data,
int dataSize)
1640 return (Status)oniDeviceInvoke(m_device, commandId, data, dataSize);
1653 Status
invoke(
int propertyId, T& value)
1655 return invoke(propertyId, &value,
sizeof(T));
1665 return oniDeviceIsCommandSupported(m_device, commandId) == TRUE;
1669 inline Status _openEx(
const char* uri,
const char* mode);
1677 for (
int i = 0; i < ONI_MAX_SENSORS; ++i)
1679 m_aSensorInfo[i]._setInternal(NULL);
1683 inline Status _setHandle(OniDeviceHandle deviceHandle);
1688 OniDeviceHandle m_device;
1749 Status rc = m_pDevice->
getProperty<
float>(DEVICE_PROPERTY_PLAYBACK_SPEED, &speed);
1750 if (rc != STATUS_OK)
1767 return STATUS_NO_DEVICE;
1769 return m_pDevice->
setProperty<
float>(DEVICE_PROPERTY_PLAYBACK_SPEED, speed);
1785 Status rc = m_pDevice->
getProperty<OniBool>(DEVICE_PROPERTY_PLAYBACK_REPEAT_ENABLED, &repeat);
1786 if (rc != STATUS_OK)
1791 return repeat == TRUE;
1806 return STATUS_NO_DEVICE;
1809 return m_pDevice->
setProperty<OniBool>(DEVICE_PROPERTY_PLAYBACK_REPEAT_ENABLED, repeat ? TRUE : FALSE);
1822 Status
seek(
const VideoStream& stream,
int frameIndex)
1826 return STATUS_NO_DEVICE;
1829 seek.frameIndex = frameIndex;
1830 seek.stream = stream._getHandle();
1831 return m_pDevice->
invoke(DEVICE_COMMAND_SEEK,
seek);
1844 int numOfFrames = -1;
1845 Status rc = stream.getProperty<
int>(STREAM_PROPERTY_NUMBER_OF_FRAMES, &numOfFrames);
1846 if (rc != STATUS_OK)
1853 bool isValid()
const
1855 return m_pDevice != NULL;
1858 Status attach(Device* device)
1860 if (!device->isValid() || !device->isFile())
1862 return STATUS_ERROR;
1875 friend class Device;
1876 PlaybackControl(Device* pDevice) : m_pDevice(NULL)
1878 if (pDevice != NULL)
1887 class CameraSettings
1891 Status setAutoExposureEnabled(
bool enabled)
1893 return setProperty(STREAM_PROPERTY_AUTO_EXPOSURE, enabled ? TRUE : FALSE);
1895 Status setAutoWhiteBalanceEnabled(
bool enabled)
1897 return setProperty(STREAM_PROPERTY_AUTO_WHITE_BALANCE, enabled ? TRUE : FALSE);
1900 bool getAutoExposureEnabled()
const
1902 OniBool enabled = FALSE;
1904 Status rc = getProperty(STREAM_PROPERTY_AUTO_EXPOSURE, &enabled);
1905 return rc == STATUS_OK && enabled == TRUE;
1907 bool getAutoWhiteBalanceEnabled()
const
1909 OniBool enabled = FALSE;
1911 Status rc = getProperty(STREAM_PROPERTY_AUTO_WHITE_BALANCE, &enabled);
1912 return rc == STATUS_OK && enabled == TRUE;
1915 Status setGain(
int gain)
1917 return setProperty(STREAM_PROPERTY_GAIN, gain);
1919 Status setExposure(
int exposure)
1921 return setProperty(STREAM_PROPERTY_EXPOSURE, exposure);
1926 Status rc = getProperty(STREAM_PROPERTY_GAIN, &gain);
1927 if (rc != STATUS_OK)
1936 Status rc = getProperty(STREAM_PROPERTY_EXPOSURE, &exposure);
1937 if (rc != STATUS_OK)
1944 bool isValid()
const {
return m_pStream != NULL;}
1947 Status getProperty(
int propertyId, T* value)
const
1949 if (!isValid())
return STATUS_NOT_SUPPORTED;
1951 return m_pStream->
getProperty<T>(propertyId, value);
1954 Status setProperty(
int propertyId,
const T& value)
1956 if (!isValid())
return STATUS_NOT_SUPPORTED;
1958 return m_pStream->
setProperty<T>(propertyId, value);
1961 friend class VideoStream;
1962 CameraSettings(VideoStream* pStream)
1964 m_pStream = pStream;
1967 VideoStream* m_pStream;
2007 m_deviceConnectedCallbacks.deviceConnected = deviceConnectedCallback;
2008 m_deviceConnectedCallbacks.deviceDisconnected = NULL;
2009 m_deviceConnectedCallbacks.deviceStateChanged = NULL;
2010 m_deviceConnectedCallbacksHandle = NULL;
2030 static void ONI_CALLBACK_TYPE deviceConnectedCallback(
const OniDeviceInfo* pInfo,
void* pCookie)
2037 OniDeviceCallbacks m_deviceConnectedCallbacks;
2038 OniCallbackHandle m_deviceConnectedCallbacksHandle;
2057 class DeviceDisconnectedListener
2060 DeviceDisconnectedListener()
2062 m_deviceDisconnectedCallbacks.deviceConnected = NULL;
2063 m_deviceDisconnectedCallbacks.deviceDisconnected = deviceDisconnectedCallback;
2064 m_deviceDisconnectedCallbacks.deviceStateChanged = NULL;
2065 m_deviceDisconnectedCallbacksHandle = NULL;
2068 virtual ~DeviceDisconnectedListener()
2082 static void ONI_CALLBACK_TYPE deviceDisconnectedCallback(
const OniDeviceInfo* pInfo,
void* pCookie)
2084 DeviceDisconnectedListener* pListener = (DeviceDisconnectedListener*)pCookie;
2085 pListener->onDeviceDisconnected(
static_cast<const DeviceInfo*
>(pInfo));
2088 friend class OpenNI;
2089 OniDeviceCallbacks m_deviceDisconnectedCallbacks;
2090 OniCallbackHandle m_deviceDisconnectedCallbacksHandle;
2105 class DeviceStateChangedListener
2108 DeviceStateChangedListener()
2110 m_deviceStateChangedCallbacks.deviceConnected = NULL;
2111 m_deviceStateChangedCallbacks.deviceDisconnected = NULL;
2112 m_deviceStateChangedCallbacks.deviceStateChanged = deviceStateChangedCallback;
2113 m_deviceStateChangedCallbacksHandle = NULL;
2116 virtual ~DeviceStateChangedListener()
2128 static void ONI_CALLBACK_TYPE deviceStateChangedCallback(
const OniDeviceInfo* pInfo, OniDeviceState state,
void* pCookie)
2130 DeviceStateChangedListener* pListener = (DeviceStateChangedListener*)pCookie;
2131 pListener->onDeviceStateChanged(
static_cast<const DeviceInfo*
>(pInfo), DeviceState(state));
2134 friend class OpenNI;
2135 OniDeviceCallbacks m_deviceStateChangedCallbacks;
2136 OniCallbackHandle m_deviceStateChangedCallbacksHandle;
2146 return (Status)oniInitialize(ONI_API_VERSION);
2163 OniVersion oniVersion = oniGetVersion();
2165 version.
major = oniVersion.major;
2166 version.
minor = oniVersion.minor;
2168 version.
build = oniVersion.build;
2181 return oniGetExtendedError();
2190 OniDeviceInfo* m_pDeviceInfos;
2191 int m_deviceInfoCount;
2192 oniGetDeviceList(&m_pDeviceInfos, &m_deviceInfoCount);
2193 deviceInfoList->_setData((
DeviceInfo*)m_pDeviceInfos, m_deviceInfoCount,
true);
2194 oniReleaseDeviceList(m_pDeviceInfos);
2205 static Status
waitForAnyStream(VideoStream** pStreams,
int streamCount,
int* pReadyStreamIndex,
int timeout = TIMEOUT_FOREVER)
2207 static const int ONI_MAX_STREAMS = 50;
2208 OniStreamHandle streams[ONI_MAX_STREAMS];
2210 if (streamCount > ONI_MAX_STREAMS)
2212 printf(
"Too many streams for wait: %d > %d\n", streamCount, ONI_MAX_STREAMS);
2213 return STATUS_BAD_PARAMETER;
2216 *pReadyStreamIndex = -1;
2217 for (
int i = 0; i < streamCount; ++i)
2219 if (pStreams[i] != NULL)
2221 streams[i] = pStreams[i]->_getHandle();
2228 Status rc = (Status)oniWaitForAnyStream(streams, streamCount, pReadyStreamIndex, timeout);
2242 if (pListener->m_deviceConnectedCallbacksHandle != NULL)
2244 return STATUS_ERROR;
2246 return (Status)oniRegisterDeviceCallbacks(&pListener->m_deviceConnectedCallbacks, pListener, &pListener->m_deviceConnectedCallbacksHandle);
2257 if (pListener->m_deviceDisconnectedCallbacksHandle != NULL)
2259 return STATUS_ERROR;
2261 return (Status)oniRegisterDeviceCallbacks(&pListener->m_deviceDisconnectedCallbacks, pListener, &pListener->m_deviceDisconnectedCallbacksHandle);
2272 if (pListener->m_deviceStateChangedCallbacksHandle != NULL)
2274 return STATUS_ERROR;
2276 return (Status)oniRegisterDeviceCallbacks(&pListener->m_deviceStateChangedCallbacks, pListener, &pListener->m_deviceStateChangedCallbacksHandle);
2287 oniUnregisterDeviceCallbacks(pListener->m_deviceConnectedCallbacksHandle);
2288 pListener->m_deviceConnectedCallbacksHandle = NULL;
2299 oniUnregisterDeviceCallbacks(pListener->m_deviceDisconnectedCallbacksHandle);
2300 pListener->m_deviceDisconnectedCallbacksHandle = NULL;
2311 oniUnregisterDeviceCallbacks(pListener->m_deviceStateChangedCallbacksHandle);
2312 pListener->m_deviceStateChangedCallbacksHandle = NULL;
2325 return (Status)oniSetLogOutputFolder(strLogOutputFolder);
2339 return (Status)oniGetLogFileName(strFileName, nBufferSize);
2352 return(Status) oniSetLogMinSeverity(nMinSeverity);
2365 return (Status)oniSetLogConsoleOutput(bConsoleOutput);
2378 return (Status)oniSetLogFileOutput(bFileOutput);
2381 #if ONI_PLATFORM == ONI_PLATFORM_ANDROID_ARM
2393 return (Status)oniSetLogAndroidOutput(bAndroidOutput);
2438 class CoordinateConverter
2451 static Status
convertWorldToDepth(
const VideoStream& depthStream,
float worldX,
float worldY,
float worldZ,
int* pDepthX,
int* pDepthY,
DepthPixel* pDepthZ)
2453 float depthX, depthY, depthZ;
2454 Status rc = (Status)oniCoordinateConverterWorldToDepth(depthStream._getHandle(), worldX, worldY, worldZ, &depthX, &depthY, &depthZ);
2455 *pDepthX = (int)depthX;
2456 *pDepthY = (int)depthY;
2471 static Status
convertWorldToDepth(
const VideoStream& depthStream,
float worldX,
float worldY,
float worldZ,
float* pDepthX,
float* pDepthY,
float* pDepthZ)
2473 return (Status)oniCoordinateConverterWorldToDepth(depthStream._getHandle(), worldX, worldY, worldZ, pDepthX, pDepthY, pDepthZ);
2486 static Status
convertDepthToWorld(
const VideoStream& depthStream,
int depthX,
int depthY,
DepthPixel depthZ,
float* pWorldX,
float* pWorldY,
float* pWorldZ)
2488 return (Status)oniCoordinateConverterDepthToWorld(depthStream._getHandle(),
float(depthX),
float(depthY),
float(depthZ), pWorldX, pWorldY, pWorldZ);
2501 static Status
convertDepthToWorld(
const VideoStream& depthStream,
float depthX,
float depthY,
float depthZ,
float* pWorldX,
float* pWorldY,
float* pWorldZ)
2503 return (Status)oniCoordinateConverterDepthToWorld(depthStream._getHandle(), depthX, depthY, depthZ, pWorldX, pWorldY, pWorldZ);
2519 return (Status)oniCoordinateConverterDepthToColor(depthStream._getHandle(), colorStream._getHandle(), depthX, depthY, depthZ, pColorX, pColorY);
2522 static Status convertC2DCoordinateByIntrinsic(
const VideoStream& depthStream,
int colorX,
int colorY,
DepthPixel depthZ,
int* pDepthX,
int* pDepthY)
2524 return (Status)oniCoordinateConverterC2D(depthStream._getHandle(), colorX, colorY, depthZ, pDepthX, pDepthY);
2526 static Status convertD2CCoordinateByIntrinsic(
const VideoStream& depthStream,
int depthX,
int depthY,
DepthPixel depthZ,
int* pColorX,
int* pColorY)
2528 return (Status)oniCoordinateConverterD2C(depthStream._getHandle(), depthX, depthY, depthZ, pColorX, pColorY);
2576 Status
create(
const char* fileName)
2580 return (Status)oniCreateRecorder(fileName, &m_recorder);
2582 return STATUS_ERROR;
2593 return NULL != getHandle();
2608 if (!
isValid() || !stream.isValid())
2610 return STATUS_ERROR;
2612 return (Status)oniRecorderAttachStream(
2614 stream._getHandle(),
2615 allowLossyCompression);
2628 return STATUS_ERROR;
2630 return (Status)oniRecorderStart(m_recorder);
2640 oniRecorderStop(m_recorder);
2651 oniRecorderDestroy(&m_recorder);
2662 OniRecorderHandle getHandle()
const
2668 OniRecorderHandle m_recorder;
2674 OniStreamHandle streamHandle;
2675 Status rc = (Status)oniDeviceCreateStream(device._getHandle(), (OniSensorType)sensorType, &streamHandle);
2676 if (rc != STATUS_OK)
2682 _setHandle(streamHandle);
2686 m_pCameraSettings =
new CameraSettings(
this);
2699 if (m_pCameraSettings != NULL)
2701 delete m_pCameraSettings;
2702 m_pCameraSettings = NULL;
2705 if (m_stream != NULL)
2708 oniStreamDestroy(m_stream);
2721 return STATUS_OUT_OF_FLOW;
2725 OniDeviceHandle deviceHandle;
2726 Status rc = (Status)oniDeviceOpen(uri, &deviceHandle);
2727 if (rc != STATUS_OK)
2732 _setHandle(deviceHandle);
2737 Status Device::_openEx(
const char* uri,
const char* mode)
2745 return STATUS_OUT_OF_FLOW;
2749 OniDeviceHandle deviceHandle;
2750 Status rc = (Status)oniDeviceOpenEx(uri, mode, &deviceHandle);
2751 if (rc != STATUS_OK)
2756 _setHandle(deviceHandle);
2761 Status Device::_setHandle(OniDeviceHandle deviceHandle)
2763 if (m_device == NULL)
2765 m_device = deviceHandle;
2769 oniDeviceGetInfo(m_device, &m_deviceInfo);
2773 m_pPlaybackControl =
new PlaybackControl(
this);
2780 return STATUS_OUT_OF_FLOW;
2785 if (m_pPlaybackControl != NULL)
2787 delete m_pPlaybackControl;
2788 m_pPlaybackControl = NULL;
2791 if (m_device != NULL)
2795 oniDeviceClose(m_device);