From db160f87f34b406dff7db76fe55e24afa4c9b47a Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 10:41:20 +0900 Subject: [PATCH 01/29] there are lots of unimplemented features,but this can make --- .../Drivers/Libfreenect2/LF2DepthStream.cpp | 30 +++++++++ Source/Drivers/Libfreenect2/LF2DepthStream.h | 38 +++++++++++ Source/Drivers/Libfreenect2/LF2Device.cpp | 42 ++++++++++++ Source/Drivers/Libfreenect2/LF2Device.h | 43 ++++++++++++ Source/Drivers/Libfreenect2/LF2Driver.cpp | 65 +++++++++++++++++++ Source/Drivers/Libfreenect2/LF2Driver.h | 33 ++++++++++ Source/Drivers/Libfreenect2/LF2ImageStream.h | 35 ++++++++++ Source/Drivers/Libfreenect2/LF2IrStream.h | 35 ++++++++++ Source/Drivers/Libfreenect2/LF2Stream.cpp | 16 +++++ Source/Drivers/Libfreenect2/LF2Stream.h | 40 ++++++++++++ Source/Drivers/Libfreenect2/Makefile | 37 +++++++++++ 11 files changed, 414 insertions(+) create mode 100644 Source/Drivers/Libfreenect2/LF2DepthStream.cpp create mode 100644 Source/Drivers/Libfreenect2/LF2DepthStream.h create mode 100644 Source/Drivers/Libfreenect2/LF2Device.cpp create mode 100644 Source/Drivers/Libfreenect2/LF2Device.h create mode 100644 Source/Drivers/Libfreenect2/LF2Driver.cpp create mode 100644 Source/Drivers/Libfreenect2/LF2Driver.h create mode 100644 Source/Drivers/Libfreenect2/LF2ImageStream.h create mode 100644 Source/Drivers/Libfreenect2/LF2IrStream.h create mode 100644 Source/Drivers/Libfreenect2/LF2Stream.cpp create mode 100644 Source/Drivers/Libfreenect2/LF2Stream.h create mode 100644 Source/Drivers/Libfreenect2/Makefile diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp new file mode 100644 index 00000000..970dbd52 --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -0,0 +1,30 @@ +#include "LF2DepthStream.h" + +using namespace LF2; + +int +LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) +{ + frame_out->dataSize = frame_in->width * frame_in->height * frame_in->bytes_per_pixel; + frame_out->data = frame_in->data; + frame_out->frameIndex = frame_in->sequence; + frame_out->sensorType = ONI_SENSOR_DEPTH; + + frame_out->videoMode.pixelFormat = ONI_PIXEL_FORMAT_DEPTH_1_MM; + frame_out->videoMode.resolutionX = frame_in->width; + frame_out->videoMode.resolutionY = frame_in->height; + frame_out->videoMode.fps = 30; + + frame_out->width = frame_in->width; + frame_out->height = frame_in->height; + + frame_out->cropOriginX = frame_out->cropOriginY = 0; + frame_out->croppingEnabled = FALSE; + + frame_out->sensorType = ONI_SENSOR_DEPTH; + frame_out->stride = frame_in->width*sizeof(OniDepthPixel); + frame_out->timestamp = frame_in->sequence*33000; + + return 1; +} + diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.h b/Source/Drivers/Libfreenect2/LF2DepthStream.h new file mode 100644 index 00000000..96d219db --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.h @@ -0,0 +1,38 @@ +#ifndef LF2DEPTH_STREAM_H +#define LF2DEPTH_STREAM_H + +#include "LF2Stream.h" + +namespace LF2 { + class LF2DepthStream : + public LF2Stream + { + public: + LF2DepthStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev){} + + ~LF2DepthStream() + { + stop (); + } + + // function for OpenNI2 + OniStatus + start () + { + m_f2dev->setIrAndDepthFrameListener (this); + return ONI_STATUS_OK; + } + + void + stop () + { + m_f2dev->setIrAndDepthFrameListener (NULL); + } + + protected: + int + BuildFrame (libfreenect2::Frame*,OniFrame*); + }; +} + +#endif // LF2DEPTH_STREAM_H diff --git a/Source/Drivers/Libfreenect2/LF2Device.cpp b/Source/Drivers/Libfreenect2/LF2Device.cpp new file mode 100644 index 00000000..e05bb704 --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2Device.cpp @@ -0,0 +1,42 @@ +#include "XnLib.h" +#include "LF2Device.h" +#include "LF2DepthStream.h" +#include "LF2ImageStream.h" +#include "LF2IrStream.h" + +using namespace LF2; +using namespace oni::driver; + +StreamBase* +LF2Device::createStream (OniSensorType sensorType) +{ + if (sensorType == ONI_SENSOR_DEPTH) + { + LF2DepthStream* pDepth = XN_NEW(LF2DepthStream,m_f2dev); + return pDepth; + } + else + { + printf("This type of stream is not implemented yet\n"); + abort (); + } + // else if (sensorType == ONI_SENSOR_COLOR) + // { + // LF2ImageStream* pImage = XN_NEW(LF2ImageStream); + // return pImage; + // } + // else if (sensorType == ONI_SENSOR_IR) + // { + // LF2IrStream* pIr = XN_NEW(LF2IrStream); + // return pIr; + // } + + return NULL; +} + +void +LF2Device::destroyStream (StreamBase* pStream) +{ + XN_DELETE (pStream); +} + diff --git a/Source/Drivers/Libfreenect2/LF2Device.h b/Source/Drivers/Libfreenect2/LF2Device.h new file mode 100644 index 00000000..d8976a6b --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2Device.h @@ -0,0 +1,43 @@ +#ifndef LF2DEVICE_H +#define LF2DEVICE_H + +#include +#include "libfreenect2/libfreenect2.hpp" +#include "Driver/OniDriverAPI.h" +#include "LF2Driver.h" + + +namespace LF2 { + class LF2Driver; + class LF2Device : + public oni::driver::DeviceBase + { + public : + LF2Device(libfreenect2::Freenect2Device* f2dev,LF2Driver* driver) + { + m_f2dev = f2dev; + m_driver = driver; + } + + OniStatus + getSensorInfoList(OniSensorInfo**, int*) + { + return ONI_STATUS_NOT_IMPLEMENTED; + } + + oni::driver::StreamBase* + createStream (OniSensorType); + + void + destroyStream (oni::driver::StreamBase*); + protected: + libfreenect2::Freenect2Device* m_f2dev; + LF2Driver* m_driver; + }; +} + +#endif // LF2DEVICE_H + + + + diff --git a/Source/Drivers/Libfreenect2/LF2Driver.cpp b/Source/Drivers/Libfreenect2/LF2Driver.cpp new file mode 100644 index 00000000..38d68722 --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2Driver.cpp @@ -0,0 +1,65 @@ +#include "LF2Driver.h" +#include "LF2Device.h" + +using namespace LF2; +using namespace oni::driver; +using namespace libfreenect2; + +DeviceBase* +LF2Driver::deviceOpen(const char * uri, const char *) +{ + Freenect2Device * f2dev; + LF2Device* pDevice = NULL; + + // if device was already opened for this uri, return the previous one + if (m_devices.Get (uri,pDevice) == XN_STATUS_OK) + { + getServices().errorLoggerAppend("Device is already open."); + return NULL; + } + + f2dev = m_f2.openDevice (uri); + + if (f2dev == 0) + { + getServices().errorLoggerAppend("Could not open \"%s\"", uri); + return NULL; + } + + pDevice = XN_NEW(LF2Device, f2dev,this); + + // Add the device and return it. + m_devices[uri] = pDevice; + return pDevice; +} + +void +LF2Driver::deviceClose(DeviceBase* pDevice) +{ + for (xnl::StringsHash::Iterator iter = m_devices.Begin(); iter != m_devices.End(); ++iter) + { + if (iter->Value() == pDevice) + { + m_devices.Remove(iter); + XN_DELETE(pDevice); + return; + } + } + + // not our device?! + XN_ASSERT(FALSE); +} + + + +void +LF2Driver::shutdown () +{ + // delete devices + for (xnl::StringsHash::Iterator iter = m_devices.Begin(); iter != m_devices.End(); ++iter) + { + XN_DELETE(iter->Value ()); + } + + m_devices.Clear (); +} diff --git a/Source/Drivers/Libfreenect2/LF2Driver.h b/Source/Drivers/Libfreenect2/LF2Driver.h new file mode 100644 index 00000000..75027f44 --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2Driver.h @@ -0,0 +1,33 @@ +#ifndef LF2DRIVER_H +#define LF2DRIVER_H + +#include +#include "Driver/OniDriverAPI.h" +#include "LF2Device.h" +#include +#include + +namespace LF2 { + class LF2Device; + class LF2Driver : + public oni::driver::DriverBase + { + public: + //! @note mode is no supported now. + oni::driver::DeviceBase* + deviceOpen (const char*,const char*); + + void + deviceClose (oni::driver::DeviceBase*); + + void + shutdown (); + + protected: + libfreenect2::Freenect2 m_f2; + //uri -> LF2Device map + xnl::StringsHash m_devices; + }; +} + +#endif // LF2DRIVER_H diff --git a/Source/Drivers/Libfreenect2/LF2ImageStream.h b/Source/Drivers/Libfreenect2/LF2ImageStream.h new file mode 100644 index 00000000..966c8e33 --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2ImageStream.h @@ -0,0 +1,35 @@ +#ifndef LF2IMAGE_STREAM_H +#define LF2IMAGE_STREAM_H + +#include "LF2Stream.h" + +namespace LF2 { + class LF2ImageStream : + public LF2Stream + { + public: + LF2ImageStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) {} + + ~LF2ImageStream() + { + stop (); + } + + // function for OpenNI2 + OniStatus + start () + { + m_f2dev->setColorFrameListener (this); + return ONI_STATUS_OK; + } + + void + stop (); + + protected: + int + BuildFrame (libfreenect2::Frame*,OniFrame*); + }; +} + +#endif // LF2IMAGE_STREAM_H diff --git a/Source/Drivers/Libfreenect2/LF2IrStream.h b/Source/Drivers/Libfreenect2/LF2IrStream.h new file mode 100644 index 00000000..b2e458d0 --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2IrStream.h @@ -0,0 +1,35 @@ +#ifndef LF2IR_STREAM_H +#define LF2IR_STREAM_H + +#include "LF2Stream.h" + +namespace LF2 { + class LF2IrStream : + public LF2Stream + { + public: + LF2IrStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) {} + + ~LF2IrStream() + { + stop (); + } + + // function for OpenNI2 + OniStatus + start () + { + m_f2dev->setIrAndDepthFrameListener (this); + return ONI_STATUS_OK; + } + + void + stop (); + + protected: + int + BuildFrame (libfreenect2::Frame*,OniFrame*); + }; +} + +#endif // LF2IR_STREAM_H diff --git a/Source/Drivers/Libfreenect2/LF2Stream.cpp b/Source/Drivers/Libfreenect2/LF2Stream.cpp new file mode 100644 index 00000000..e15e650e --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2Stream.cpp @@ -0,0 +1,16 @@ +#include "LF2Stream.h" + +using namespace LF2; +using namespace oni::driver; +using namespace libfreenect2; + +bool +LF2Stream::onNewFrame (Frame::Type type,Frame* frame) +{ + OniFrame* pFrame = getServices ().acquireFrame (); + BuildFrame (frame,pFrame); + raiseNewFrame (pFrame); + getServices ().releaseFrame (pFrame); + return true; +} + diff --git a/Source/Drivers/Libfreenect2/LF2Stream.h b/Source/Drivers/Libfreenect2/LF2Stream.h new file mode 100644 index 00000000..11f11d42 --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2Stream.h @@ -0,0 +1,40 @@ +#ifndef LF2STREAM_H +#define LF2STREAM_H + +#include "Driver/OniDriverAPI.h" +#include +#include +#include + + +namespace LF2 { + class LF2Stream : + public oni::driver::StreamBase, + public libfreenect2::FrameListener + { + public: + LF2Stream (libfreenect2::Freenect2Device * f2dev) : oni::driver::StreamBase () + { + m_f2dev = f2dev; + } + + // function for libfreenect2 + bool + onNewFrame(libfreenect2::Frame::Type, libfreenect2::Frame*); + + // function for OpenNI2 + virtual OniStatus + start () = 0; + + virtual void + stop () = 0; + + protected: + virtual int + BuildFrame (libfreenect2::Frame*,OniFrame* pFrame) = 0; + + libfreenect2::Freenect2Device *m_f2dev; + }; +} + +#endif // LF2STREAM_H diff --git a/Source/Drivers/Libfreenect2/Makefile b/Source/Drivers/Libfreenect2/Makefile new file mode 100644 index 00000000..d9c073bd --- /dev/null +++ b/Source/Drivers/Libfreenect2/Makefile @@ -0,0 +1,37 @@ +include ../../../ThirdParty/PSCommon/BuildSystem/CommonDefs.mak + +BIN_DIR = ../../../Bin + +INC_DIRS = \ + . \ + ../../../Include \ + ../../../ThirdParty/PSCommon/XnLib/Include \ + ../../../ThirdParty/LibJPEG \ + Formats + +SRC_FILES = \ + *.cpp \ + Formats/*.cpp \ + XnLibExtensions/*.cpp \ + ../../../ThirdParty/LibJPEG/*.c + + +ifeq ("$(OSTYPE)","Darwin") + INC_DIRS += /opt/local/include + LIB_DIRS += /opt/local/lib +# LDFLAGS += -framework CoreFoundation -framework IOKit +endif + +LIB_NAME = Libfreenect2 + +LIB_DIRS = ../../../ThirdParty/PSCommon/XnLib/Bin/$(PLATFORM)-$(CFG) +USED_LIBS = XnLib pthread freenect2 +ifneq ("$(OSTYPE)","Darwin") + USED_LIBS += rt +endif + +CFLAGS += -Wall + +OUT_DIR := $(OUT_DIR)/OpenNI2/Drivers + +include ../../../ThirdParty/PSCommon/BuildSystem/CommonCppMakefile From 84efbf1028385cc6917a9003f3cb52089dfb34b5 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 11:05:46 +0900 Subject: [PATCH 02/29] This may work --- Source/Drivers/Libfreenect2/LF2DepthStream.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index 970dbd52..b38afd8b 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -6,7 +6,9 @@ int LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) { frame_out->dataSize = frame_in->width * frame_in->height * frame_in->bytes_per_pixel; - frame_out->data = frame_in->data; + + memcpy (frame_out->data,frame_in->data,frame_out->dataSize); + frame_out->frameIndex = frame_in->sequence; frame_out->sensorType = ONI_SENSOR_DEPTH; From e40fdeb4768e87f2e4bde65a799528ce8ba369a3 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 11:11:10 +0900 Subject: [PATCH 03/29] added libfreenect2 to Drivers --- Makefile | 7 ++++--- Source/Drivers/Libfreenect2/LF2Driver.cpp | 2 ++ Source/Drivers/Libfreenect2/LF2Driver.h | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 4c666529..36de4184 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,8 @@ ALL_DRIVERS = \ Source/Drivers/DummyDevice \ Source/Drivers/PS1080 \ Source/Drivers/PSLink \ - Source/Drivers/OniFile + Source/Drivers/OniFile \ + Source/Drivers/Libfreenect2 # list all wrappers ALL_WRAPPERS = \ @@ -48,7 +49,7 @@ ALL_WRAPPERS = \ ALL_TOOLS = \ Source/Drivers/PS1080/PS1080Console \ Source/Drivers/PSLink/PSLinkConsole - + # list all core projects ALL_CORE_PROJS = \ $(XNLIB) \ @@ -152,7 +153,7 @@ $(FINAL_DIR): doc: Source/Documentation/Runme.py rm -f Source/Documentation/html/*.md5 - + release: | all doc $(FINAL_DIR) Packaging/Harvest.py Packaging/$(PRODUCT_STRING) $(PLATFORM) cd Packaging; tar -cjf Final/$(PRODUCT_STRING).tar.bz2 $(PRODUCT_STRING) diff --git a/Source/Drivers/Libfreenect2/LF2Driver.cpp b/Source/Drivers/Libfreenect2/LF2Driver.cpp index 38d68722..d9cb5ce2 100644 --- a/Source/Drivers/Libfreenect2/LF2Driver.cpp +++ b/Source/Drivers/Libfreenect2/LF2Driver.cpp @@ -63,3 +63,5 @@ LF2Driver::shutdown () m_devices.Clear (); } + +ONI_EXPORT_DRIVER(LF2Driver); diff --git a/Source/Drivers/Libfreenect2/LF2Driver.h b/Source/Drivers/Libfreenect2/LF2Driver.h index 75027f44..63c37819 100644 --- a/Source/Drivers/Libfreenect2/LF2Driver.h +++ b/Source/Drivers/Libfreenect2/LF2Driver.h @@ -13,6 +13,8 @@ namespace LF2 { public oni::driver::DriverBase { public: + LF2Driver(OniDriverServices* pDriverServices) : DriverBase(pDriverServices) {} + //! @note mode is no supported now. oni::driver::DeviceBase* deviceOpen (const char*,const char*); From 4f58322f7f915cf7e4f06778450dfc0096ebc1da Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 11:23:11 +0900 Subject: [PATCH 04/29] added tryDevice to LF2Driver --- Source/Drivers/Libfreenect2/LF2Driver.cpp | 6 ++++++ Source/Drivers/Libfreenect2/LF2Driver.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/Source/Drivers/Libfreenect2/LF2Driver.cpp b/Source/Drivers/Libfreenect2/LF2Driver.cpp index d9cb5ce2..92835d33 100644 --- a/Source/Drivers/Libfreenect2/LF2Driver.cpp +++ b/Source/Drivers/Libfreenect2/LF2Driver.cpp @@ -65,3 +65,9 @@ LF2Driver::shutdown () } ONI_EXPORT_DRIVER(LF2Driver); + +OniStatus +LF2Driver::tryDevice (const char*) +{ + return ONI_STATUS_OK; +} diff --git a/Source/Drivers/Libfreenect2/LF2Driver.h b/Source/Drivers/Libfreenect2/LF2Driver.h index 63c37819..1486e853 100644 --- a/Source/Drivers/Libfreenect2/LF2Driver.h +++ b/Source/Drivers/Libfreenect2/LF2Driver.h @@ -22,6 +22,9 @@ namespace LF2 { void deviceClose (oni::driver::DeviceBase*); + virtual OniStatus + tryDevice(const char* uri); + void shutdown (); From 1ab0183c26b75032825abe7e65187f2e909e2831 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 12:05:03 +0900 Subject: [PATCH 05/29] added initialize and search devices --- Source/Drivers/Libfreenect2/LF2Driver.cpp | 41 ++++++++++++++++++++++- Source/Drivers/Libfreenect2/LF2Driver.h | 3 ++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2Driver.cpp b/Source/Drivers/Libfreenect2/LF2Driver.cpp index 92835d33..0628254e 100644 --- a/Source/Drivers/Libfreenect2/LF2Driver.cpp +++ b/Source/Drivers/Libfreenect2/LF2Driver.cpp @@ -1,5 +1,9 @@ #include "LF2Driver.h" #include "LF2Device.h" +#include + +static const char VENDOR_VAL[] = "Microsoft"; +static const char NAME_VAL[] = "Kinect v2"; using namespace LF2; using namespace oni::driver; @@ -64,10 +68,45 @@ LF2Driver::shutdown () m_devices.Clear (); } -ONI_EXPORT_DRIVER(LF2Driver); +OniStatus +LF2Driver::initialize (DeviceConnectedCallback connectedCallback, DeviceDisconnectedCallback disconnectedCallback, DeviceStateChangedCallback deviceStateChangedCallback, void* pCookie) +{ + DriverBase::initialize (connectedCallback,disconnectedCallback,deviceStateChangedCallback,pCookie); + int num_of_device = m_f2.enumerateDevices (); + + if (num_of_device == 0) + { + return ONI_STATUS_OK; + } + + // discover Kinects + for (int t = 0; t < num_of_device; ++t) + { + Freenect2Device* dev = m_f2.openDevice (t); + OniDeviceInfo* pInfo = XN_NEW (OniDeviceInfo); + std::string serial = dev->getSerialNumber (); + + xnOSStrCopy (pInfo->uri,serial.c_str (),ONI_MAX_STR); + xnOSStrCopy (pInfo->vendor,VENDOR_VAL,ONI_MAX_STR); + xnOSStrCopy (pInfo->name, NAME_VAL,ONI_MAX_STR); + deviceConnected (pInfo); + deviceStateChanged (pInfo,false); + + dev->close (); + } + return ONI_STATUS_OK; +} OniStatus LF2Driver::tryDevice (const char*) { return ONI_STATUS_OK; } + +ONI_EXPORT_DRIVER(LF2Driver); + + + + + + diff --git a/Source/Drivers/Libfreenect2/LF2Driver.h b/Source/Drivers/Libfreenect2/LF2Driver.h index 1486e853..8a742809 100644 --- a/Source/Drivers/Libfreenect2/LF2Driver.h +++ b/Source/Drivers/Libfreenect2/LF2Driver.h @@ -15,6 +15,9 @@ namespace LF2 { public: LF2Driver(OniDriverServices* pDriverServices) : DriverBase(pDriverServices) {} + virtual OniStatus + initialize(oni::driver::DeviceConnectedCallback, oni::driver::DeviceDisconnectedCallback, oni::driver::DeviceStateChangedCallback , void*); + //! @note mode is no supported now. oni::driver::DeviceBase* deviceOpen (const char*,const char*); From 4c3223ba4c065d60f1d7e08b4fecb2d02c49a8a4 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 12:21:56 +0900 Subject: [PATCH 06/29] added getSensorInfo implementation --- Source/Drivers/Libfreenect2/LF2Device.h | 41 +++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/Source/Drivers/Libfreenect2/LF2Device.h b/Source/Drivers/Libfreenect2/LF2Device.h index d8976a6b..af6cfb11 100644 --- a/Source/Drivers/Libfreenect2/LF2Device.h +++ b/Source/Drivers/Libfreenect2/LF2Device.h @@ -15,14 +15,49 @@ namespace LF2 { public : LF2Device(libfreenect2::Freenect2Device* f2dev,LF2Driver* driver) { + static const int DEFAULT_FPS = 30; m_f2dev = f2dev; m_driver = driver; + // this is actually 3. but now color and ir are not supprted yet. + m_numSensors = 1; + + m_sensors[0].sensorType = ONI_SENSOR_DEPTH; + m_sensors[0].numSupportedVideoModes = 1; + m_sensors[0].pSupportedVideoModes = XN_NEW_ARR(OniVideoMode, 1); + m_sensors[0].pSupportedVideoModes[0].pixelFormat = ONI_PIXEL_FORMAT_DEPTH_1_MM; + m_sensors[0].pSupportedVideoModes[0].fps = DEFAULT_FPS; + m_sensors[0].pSupportedVideoModes[0].resolutionX = 512; + m_sensors[0].pSupportedVideoModes[0].resolutionY = 424; + + // m_sensors[1].sensorType = ONI_SENSOR_COLOR; + // m_sensors[1].numSupportedVideoModes = 2; + // m_sensors[1].pSupportedVideoModes = XN_NEW_ARR(OniVideoMode, 2); + // m_sensors[1].pSupportedVideoModes[0].pixelFormat = ONI_PIXEL_FORMAT_RGB888; + // m_sensors[1].pSupportedVideoModes[0].fps = DEFAULT_FPS; + // m_sensors[1].pSupportedVideoModes[0].resolutionX = 960; + // m_sensors[1].pSupportedVideoModes[0].resolutionY = 540; + + // m_sensors[1].pSupportedVideoModes[1].pixelFormat = ONI_PIXEL_FORMAT_RGB888; + // m_sensors[1].pSupportedVideoModes[1].fps = DEFAULT_FPS; + // m_sensors[1].pSupportedVideoModes[1].resolutionX = 1920; + // m_sensors[1].pSupportedVideoModes[1].resolutionY = 1080; + + // m_sensors[2].sensorType = ONI_SENSOR_IR; + // m_sensors[2].numSupportedVideoModes = 1; + // m_sensors[2].pSupportedVideoModes = XN_NEW_ARR(OniVideoMode, 1); + // m_sensors[2].pSupportedVideoModes[0].pixelFormat = ONI_PIXEL_FORMAT_GRAY16; + // m_sensors[2].pSupportedVideoModes[0].fps = DEFAULT_FPS; + // m_sensors[2].pSupportedVideoModes[0].resolutionX = 512; + // m_sensors[2].pSupportedVideoModes[0].resolutionY = 424; + } OniStatus - getSensorInfoList(OniSensorInfo**, int*) + getSensorInfoList(OniSensorInfo** pSensors, int* numSensors) { - return ONI_STATUS_NOT_IMPLEMENTED; + *numSensors = m_numSensors; + *pSensors = m_sensors; + return ONI_STATUS_OK; } oni::driver::StreamBase* @@ -31,6 +66,8 @@ namespace LF2 { void destroyStream (oni::driver::StreamBase*); protected: + int m_numSensors; + OniSensorInfo * m_sensors; libfreenect2::Freenect2Device* m_f2dev; LF2Driver* m_driver; }; From 253d20c37b771b45bb701bbfe06b692cb1cd4d4e Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 12:24:37 +0900 Subject: [PATCH 07/29] fixed segv error and can open stream (but cannot get frame) --- Source/Drivers/Libfreenect2/LF2Device.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Source/Drivers/Libfreenect2/LF2Device.h b/Source/Drivers/Libfreenect2/LF2Device.h index af6cfb11..dd586fef 100644 --- a/Source/Drivers/Libfreenect2/LF2Device.h +++ b/Source/Drivers/Libfreenect2/LF2Device.h @@ -19,7 +19,6 @@ namespace LF2 { m_f2dev = f2dev; m_driver = driver; // this is actually 3. but now color and ir are not supprted yet. - m_numSensors = 1; m_sensors[0].sensorType = ONI_SENSOR_DEPTH; m_sensors[0].numSupportedVideoModes = 1; @@ -66,8 +65,8 @@ namespace LF2 { void destroyStream (oni::driver::StreamBase*); protected: - int m_numSensors; - OniSensorInfo * m_sensors; + static const int m_numSensors = 3; + OniSensorInfo m_sensors[m_numSensors]; libfreenect2::Freenect2Device* m_f2dev; LF2Driver* m_driver; }; From b638c51e415c99691fb74afa262adb2f1c27aa5c Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 12:31:44 +0900 Subject: [PATCH 08/29] modified to call libfreenect2Deivce::start in LF2DepthStream::start --- Source/Drivers/Libfreenect2/LF2DepthStream.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.h b/Source/Drivers/Libfreenect2/LF2DepthStream.h index 96d219db..933f096e 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.h +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.h @@ -20,6 +20,7 @@ namespace LF2 { start () { m_f2dev->setIrAndDepthFrameListener (this); + m_f2dev->start(); return ONI_STATUS_OK; } From 6588a5a226e7b895923f5491c4843e7fcde14282 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 15:30:07 +0900 Subject: [PATCH 09/29] modified to malloc before memcpy Frame --- Source/Drivers/Libfreenect2/LF2DepthStream.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index b38afd8b..50183c35 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -1,4 +1,6 @@ #include "LF2DepthStream.h" +#include + using namespace LF2; @@ -7,7 +9,8 @@ LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) { frame_out->dataSize = frame_in->width * frame_in->height * frame_in->bytes_per_pixel; - memcpy (frame_out->data,frame_in->data,frame_out->dataSize); + frame_out->data = xnOSMalloc (frame_out->dataSize); + xnOSMemCopy (frame_out->data,frame_in->data,frame_out->dataSize); frame_out->frameIndex = frame_in->sequence; frame_out->sensorType = ONI_SENSOR_DEPTH; From e31a5f5d3fd5e2cf31999565241dd24291937d13 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 17:11:25 +0900 Subject: [PATCH 10/29] added VideoModes from VideoStream --- .../Drivers/Libfreenect2/LF2DepthStream.cpp | 6 ++++ Source/Drivers/Libfreenect2/LF2DepthStream.h | 6 ++-- Source/Drivers/Libfreenect2/LF2Stream.cpp | 29 ++++++++++++++++++- Source/Drivers/Libfreenect2/LF2Stream.h | 12 ++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index 50183c35..cd272360 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -20,6 +20,12 @@ LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) frame_out->videoMode.resolutionY = frame_in->height; frame_out->videoMode.fps = 30; + m_videoMode.pixelFormat = ONI_PIXEL_FORMAT_DEPTH_1_MM; + m_videoMode.resolutionX = frame_in->width; + m_videoMode.resolutionY = frame_in->height; + m_videoMode.fps = 30; + + frame_out->width = frame_in->width; frame_out->height = frame_in->height; diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.h b/Source/Drivers/Libfreenect2/LF2DepthStream.h index 933f096e..6a48e428 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.h +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.h @@ -8,9 +8,9 @@ namespace LF2 { public LF2Stream { public: - LF2DepthStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev){} - - ~LF2DepthStream() + LF2DepthStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) { } + + ~LF2DepthStream () { stop (); } diff --git a/Source/Drivers/Libfreenect2/LF2Stream.cpp b/Source/Drivers/Libfreenect2/LF2Stream.cpp index e15e650e..baff8bf9 100644 --- a/Source/Drivers/Libfreenect2/LF2Stream.cpp +++ b/Source/Drivers/Libfreenect2/LF2Stream.cpp @@ -6,7 +6,7 @@ using namespace libfreenect2; bool LF2Stream::onNewFrame (Frame::Type type,Frame* frame) -{ +{ OniFrame* pFrame = getServices ().acquireFrame (); BuildFrame (frame,pFrame); raiseNewFrame (pFrame); @@ -14,3 +14,30 @@ LF2Stream::onNewFrame (Frame::Type type,Frame* frame) return true; } +OniStatus +LF2Stream::getProperty(int propertyId, void* data, int* pDataSize) +{ + OniStatus status = ONI_STATUS_NOT_SUPPORTED; + + switch (propertyId) + { + case ONI_STREAM_PROPERTY_VIDEO_MODE: + { + if (*pDataSize != sizeof(OniVideoMode)) + { + printf("Unexpected size: %d != %ld\n", *pDataSize, sizeof(OniVideoMode)); + status = ONI_STATUS_ERROR; + } + else + { + status = GetVideoMode((OniVideoMode*)data); + } + break; + } + default: + status = ONI_STATUS_NOT_SUPPORTED; + break; + } + + return status; +} diff --git a/Source/Drivers/Libfreenect2/LF2Stream.h b/Source/Drivers/Libfreenect2/LF2Stream.h index 11f11d42..dfa46033 100644 --- a/Source/Drivers/Libfreenect2/LF2Stream.h +++ b/Source/Drivers/Libfreenect2/LF2Stream.h @@ -29,11 +29,23 @@ namespace LF2 { virtual void stop () = 0; + virtual OniStatus + GetVideoMode (OniVideoMode* pVideoMode) + { + *pVideoMode = m_videoMode; + return ONI_STATUS_OK; + } + + virtual OniStatus + getProperty(int propertyId, void* data, int* pDataSize); + protected: virtual int BuildFrame (libfreenect2::Frame*,OniFrame* pFrame) = 0; libfreenect2::Freenect2Device *m_f2dev; + + OniVideoMode m_videoMode; }; } From 243c46382f31f5bec91123e15c86796453b312eb Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 18:33:17 +0900 Subject: [PATCH 11/29] modified timestamp microsec to milisec --- Source/Drivers/Libfreenect2/LF2DepthStream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index cd272360..027f1254 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -34,7 +34,7 @@ LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) frame_out->sensorType = ONI_SENSOR_DEPTH; frame_out->stride = frame_in->width*sizeof(OniDepthPixel); - frame_out->timestamp = frame_in->sequence*33000; + frame_out->timestamp = frame_in->sequence*33; return 1; } From 6e8639ba87e98d84678d6bd36551ec6d7d366969 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 20:29:30 +0900 Subject: [PATCH 12/29] modified libfreenect depth format float to uint16_t --- Source/Drivers/Libfreenect2/LF2DepthStream.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index 027f1254..602ea81e 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -7,10 +7,23 @@ using namespace LF2; int LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) { - frame_out->dataSize = frame_in->width * frame_in->height * frame_in->bytes_per_pixel; + // 1 DepthPixel is 2 byte + frame_out->dataSize = frame_in->width * frame_in->height * 2; frame_out->data = xnOSMalloc (frame_out->dataSize); - xnOSMemCopy (frame_out->data,frame_in->data,frame_out->dataSize); + + const float* const in_array = (float*) frame_in->data; + uint16_t* const out_array = (uint16_t*) frame_out->data; + unsigned int t = 0; + for (unsigned int y = 0; y < frame_in->height; y++) + { + for (unsigned int x = 0; x < frame_in->width; x++) + { + out_array[t] = in_array[t]; + ++t; + } + } + frame_out->frameIndex = frame_in->sequence; frame_out->sensorType = ONI_SENSOR_DEPTH; From 01c2a457d6d5244017d2e4c725a63c621dedab7f Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Sun, 1 Feb 2015 20:50:40 +0900 Subject: [PATCH 13/29] modified to raise callback only when type match --- Source/Drivers/Libfreenect2/LF2Stream.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Drivers/Libfreenect2/LF2Stream.cpp b/Source/Drivers/Libfreenect2/LF2Stream.cpp index baff8bf9..72c12165 100644 --- a/Source/Drivers/Libfreenect2/LF2Stream.cpp +++ b/Source/Drivers/Libfreenect2/LF2Stream.cpp @@ -7,6 +7,11 @@ using namespace libfreenect2; bool LF2Stream::onNewFrame (Frame::Type type,Frame* frame) { + if ((m_videoMode.pixelFormat == ONI_PIXEL_FORMAT_DEPTH_1_MM && type != Frame::Depth) || (m_videoMode.pixelFormat != ONI_PIXEL_FORMAT_DEPTH_1_MM && type != Frame::Ir)) + { + return false; + } + OniFrame* pFrame = getServices ().acquireFrame (); BuildFrame (frame,pFrame); raiseNewFrame (pFrame); From dfdf092f923dd8c58654274bdc45ac80efc8c133 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Mon, 2 Feb 2015 15:24:51 +0900 Subject: [PATCH 14/29] added max/min property of depth stream --- .../Drivers/Libfreenect2/LF2DepthStream.cpp | 29 +++++++++++++++++++ Source/Drivers/Libfreenect2/LF2DepthStream.h | 3 ++ 2 files changed, 32 insertions(+) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index 602ea81e..e7d65030 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -52,3 +52,32 @@ LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) return 1; } +OniStatus +LF2DepthStream::getProperty(int propertyId, void* data, int* pDataSize) +{ + OniStatus status = ONI_STATUS_NOT_SUPPORTED; + + switch (propertyId) + { + case ONI_STREAM_PROPERTY_MAX_VALUE: + if (*pDataSize != sizeof(int)) + { + return ONI_STATUS_BAD_PARAMETER; + } + + *(int*)data = 10000; + return ONI_STATUS_OK; + case ONI_STREAM_PROPERTY_MIN_VALUE: + if (*pDataSize != sizeof(int)) + { + return ONI_STATUS_BAD_PARAMETER; + } + + *(int*)data = 0; + return ONI_STATUS_OK; + default: + return LF2Stream::getProperty(propertyId, data, pDataSize); + } + + return status; +} diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.h b/Source/Drivers/Libfreenect2/LF2DepthStream.h index 6a48e428..af8b457d 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.h +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.h @@ -30,6 +30,9 @@ namespace LF2 { m_f2dev->setIrAndDepthFrameListener (NULL); } + OniStatus + getProperty(int propertyId, void* data, int* pDataSize); + protected: int BuildFrame (libfreenect2::Frame*,OniFrame*); From 3d85f89f84ba5daffb470a32a69ca11edfd70940 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Mon, 2 Feb 2015 17:10:17 +0900 Subject: [PATCH 15/29] added property of cropping --- Source/Drivers/Libfreenect2/LF2Stream.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Source/Drivers/Libfreenect2/LF2Stream.cpp b/Source/Drivers/Libfreenect2/LF2Stream.cpp index 72c12165..ea180f79 100644 --- a/Source/Drivers/Libfreenect2/LF2Stream.cpp +++ b/Source/Drivers/Libfreenect2/LF2Stream.cpp @@ -26,6 +26,21 @@ LF2Stream::getProperty(int propertyId, void* data, int* pDataSize) switch (propertyId) { + case ONI_STREAM_PROPERTY_CROPPING: + { + if (*pDataSize != sizeof(OniCropping)) + { + printf("Unexpected size: %d != %ld\n", *pDataSize, sizeof(OniCropping)); + status = ONI_STATUS_ERROR; + } + ((OniCropping*) data)->enabled = false; + ((OniCropping*) data)->originX = 0; + ((OniCropping*) data)->originY = 0; + ((OniCropping*) data)->width = m_videoMode.resolutionX; + ((OniCropping*) data)->height = m_videoMode.resolutionY; + status = ONI_STATUS_OK; + break; + } case ONI_STREAM_PROPERTY_VIDEO_MODE: { if (*pDataSize != sizeof(OniVideoMode)) From 47d1cf7053f3b8758f8fcb8f28f6bcebed37c6ce Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Mon, 2 Feb 2015 18:27:41 +0900 Subject: [PATCH 16/29] modified video mode of depth stream --- Source/Drivers/Libfreenect2/LF2DepthStream.cpp | 6 ------ Source/Drivers/Libfreenect2/LF2DepthStream.h | 7 ++++++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index e7d65030..79343fee 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -33,12 +33,6 @@ LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) frame_out->videoMode.resolutionY = frame_in->height; frame_out->videoMode.fps = 30; - m_videoMode.pixelFormat = ONI_PIXEL_FORMAT_DEPTH_1_MM; - m_videoMode.resolutionX = frame_in->width; - m_videoMode.resolutionY = frame_in->height; - m_videoMode.fps = 30; - - frame_out->width = frame_in->width; frame_out->height = frame_in->height; diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.h b/Source/Drivers/Libfreenect2/LF2DepthStream.h index af8b457d..c8e33eaa 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.h +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.h @@ -8,7 +8,12 @@ namespace LF2 { public LF2Stream { public: - LF2DepthStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) { } + LF2DepthStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) { + m_videoMode.pixelFormat = ONI_PIXEL_FORMAT_DEPTH_1_MM; + m_videoMode.resolutionX = 512; + m_videoMode.resolutionY = 424; + m_videoMode.fps = 30; + } ~LF2DepthStream () { From 95b069b59c9696b229a3e967c65909ee951ef1dd Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Mon, 2 Feb 2015 19:08:05 +0900 Subject: [PATCH 17/29] modified timestamp --- Source/Drivers/Libfreenect2/LF2DepthStream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index 79343fee..c7c19619 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -41,7 +41,7 @@ LF2DepthStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) frame_out->sensorType = ONI_SENSOR_DEPTH; frame_out->stride = frame_in->width*sizeof(OniDepthPixel); - frame_out->timestamp = frame_in->sequence*33; + frame_out->timestamp = frame_in->sequence*33369; return 1; } From d7302d324da0a6620042d5456610f160958f1b5e Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Tue, 3 Feb 2015 14:31:51 +0900 Subject: [PATCH 18/29] added FOV to LF2DepthStream's Property --- Source/Drivers/Libfreenect2/LF2Common.h | 7 +++++++ .../Drivers/Libfreenect2/LF2DepthStream.cpp | 21 ++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 Source/Drivers/Libfreenect2/LF2Common.h diff --git a/Source/Drivers/Libfreenect2/LF2Common.h b/Source/Drivers/Libfreenect2/LF2Common.h new file mode 100644 index 00000000..956948cc --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2Common.h @@ -0,0 +1,7 @@ +#ifndef LF2COMMON_H +#define LF2COMMON_H + +#define LF2_DEPTH_HORIZONTAL_FOV 70.6 +#define LF2_DEPTH_VERTICAL_FOV 60 + +#endif // LF2COMMON_H diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp index c7c19619..16e0bb1c 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.cpp @@ -1,6 +1,7 @@ #include "LF2DepthStream.h" #include - +#include "LF2Common.h" +#include using namespace LF2; @@ -53,6 +54,24 @@ LF2DepthStream::getProperty(int propertyId, void* data, int* pDataSize) switch (propertyId) { + case ONI_STREAM_PROPERTY_HORIZONTAL_FOV: + { + float* val = (float*)data; + XnDouble tmp; + tmp = LF2_DEPTH_HORIZONTAL_FOV * xnl::Math::DTR; + *val = (float)tmp; + status = ONI_STATUS_OK; + break; + } + case ONI_STREAM_PROPERTY_VERTICAL_FOV: + { + float* val = (float*)data; + XnDouble tmp; + tmp = LF2_DEPTH_VERTICAL_FOV * xnl::Math::DTR; + *val = (float)tmp; + status = ONI_STATUS_OK; + break; + } case ONI_STREAM_PROPERTY_MAX_VALUE: if (*pDataSize != sizeof(int)) { From ab5b3fa2a2cdaaab8d19f1e7eee5daf08328ab2e Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Wed, 4 Feb 2015 12:22:08 +0900 Subject: [PATCH 19/29] modified libfreenect2's depth config and enabled depth further than 4.5m --- Source/Drivers/Libfreenect2/LF2Driver.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2Driver.cpp b/Source/Drivers/Libfreenect2/LF2Driver.cpp index 0628254e..50ec0472 100644 --- a/Source/Drivers/Libfreenect2/LF2Driver.cpp +++ b/Source/Drivers/Libfreenect2/LF2Driver.cpp @@ -1,5 +1,7 @@ #include "LF2Driver.h" #include "LF2Device.h" +#include +#include #include static const char VENDOR_VAL[] = "Microsoft"; @@ -22,7 +24,11 @@ LF2Driver::deviceOpen(const char * uri, const char *) return NULL; } - f2dev = m_f2.openDevice (uri); + DepthPacketProcessor::Config config; + DefaultPacketPipeline* packetPipeline = new DefaultPacketPipeline (); + config.MaxDepth = 10000; + packetPipeline->getDepthPacketProcessor()->setConfiguration(config); + f2dev = m_f2.openDevice (uri,packetPipeline); if (f2dev == 0) { From e6d19d81c106d644fe002107d67ab6662e17930f Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Thu, 19 Feb 2015 00:13:59 +0900 Subject: [PATCH 20/29] added ir and image stream (not tested yet) --- Source/Drivers/Libfreenect2/LF2Common.h | 3 +++ Source/Drivers/Libfreenect2/LF2Device.cpp | 21 ++++++++------------ Source/Drivers/Libfreenect2/LF2ImageStream.h | 16 +++++++++++++-- Source/Drivers/Libfreenect2/LF2IrStream.h | 16 +++++++++++++-- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/Source/Drivers/Libfreenect2/LF2Common.h b/Source/Drivers/Libfreenect2/LF2Common.h index 956948cc..466ea215 100644 --- a/Source/Drivers/Libfreenect2/LF2Common.h +++ b/Source/Drivers/Libfreenect2/LF2Common.h @@ -4,4 +4,7 @@ #define LF2_DEPTH_HORIZONTAL_FOV 70.6 #define LF2_DEPTH_VERTICAL_FOV 60 +#define LF2_COLOR_HORIZONTAL_FOV 84.1 +#define LF2_COLOR_VERTICAL_FOV 53.8 + #endif // LF2COMMON_H diff --git a/Source/Drivers/Libfreenect2/LF2Device.cpp b/Source/Drivers/Libfreenect2/LF2Device.cpp index e05bb704..31fcd083 100644 --- a/Source/Drivers/Libfreenect2/LF2Device.cpp +++ b/Source/Drivers/Libfreenect2/LF2Device.cpp @@ -15,21 +15,16 @@ LF2Device::createStream (OniSensorType sensorType) LF2DepthStream* pDepth = XN_NEW(LF2DepthStream,m_f2dev); return pDepth; } - else + else if (sensorType == ONI_SENSOR_COLOR) { - printf("This type of stream is not implemented yet\n"); - abort (); + LF2ImageStream* pImage = XN_NEW(LF2ImageStream,m_f2dev); + return pImage; + } + else if (sensorType == ONI_SENSOR_IR) + { + LF2IrStream* pIr = XN_NEW(LF2IrStream,m_f2dev); + return pIr; } - // else if (sensorType == ONI_SENSOR_COLOR) - // { - // LF2ImageStream* pImage = XN_NEW(LF2ImageStream); - // return pImage; - // } - // else if (sensorType == ONI_SENSOR_IR) - // { - // LF2IrStream* pIr = XN_NEW(LF2IrStream); - // return pIr; - // } return NULL; } diff --git a/Source/Drivers/Libfreenect2/LF2ImageStream.h b/Source/Drivers/Libfreenect2/LF2ImageStream.h index 966c8e33..ccea5eb9 100644 --- a/Source/Drivers/Libfreenect2/LF2ImageStream.h +++ b/Source/Drivers/Libfreenect2/LF2ImageStream.h @@ -8,7 +8,12 @@ namespace LF2 { public LF2Stream { public: - LF2ImageStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) {} + LF2ImageStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) { + m_videoMode.pixelFormat = ONI_PIXEL_FORMAT_RGB888; + m_videoMode.resolutionX = 1920; + m_videoMode.resolutionY = 1080; + m_videoMode.fps = 30; + } ~LF2ImageStream() { @@ -20,11 +25,18 @@ namespace LF2 { start () { m_f2dev->setColorFrameListener (this); + m_f2dev->start (); return ONI_STATUS_OK; } void - stop (); + stop () + { + m_f2dev->setColorFrameListener (NULL); + } + + OniStatus + getProperty(int propertyId, void* data, int* pDataSize); protected: int diff --git a/Source/Drivers/Libfreenect2/LF2IrStream.h b/Source/Drivers/Libfreenect2/LF2IrStream.h index b2e458d0..90c2784e 100644 --- a/Source/Drivers/Libfreenect2/LF2IrStream.h +++ b/Source/Drivers/Libfreenect2/LF2IrStream.h @@ -8,7 +8,12 @@ namespace LF2 { public LF2Stream { public: - LF2IrStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) {} + LF2IrStream (libfreenect2::Freenect2Device * f2dev) : LF2Stream (f2dev) { + m_videoMode.pixelFormat = ONI_PIXEL_FORMAT_GRAY16; + m_videoMode.resolutionX = 512; + m_videoMode.resolutionY = 424; + m_videoMode.fps = 30; + } ~LF2IrStream() { @@ -20,11 +25,18 @@ namespace LF2 { start () { m_f2dev->setIrAndDepthFrameListener (this); + m_f2dev->start(); return ONI_STATUS_OK; } void - stop (); + stop () + { + m_f2dev->setIrAndDepthFrameListener (NULL); + } + + OniStatus + getProperty(int propertyId, void* data, int* pDataSize); protected: int From 420550973258c713bb4672fd64b6cf69917e5e25 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Thu, 19 Feb 2015 10:59:46 +0900 Subject: [PATCH 21/29] added image and ir streams --- .../Drivers/Libfreenect2/LF2ImageStream.cpp | 68 ++++++++++++++++ Source/Drivers/Libfreenect2/LF2IrStream.cpp | 80 +++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 Source/Drivers/Libfreenect2/LF2ImageStream.cpp create mode 100644 Source/Drivers/Libfreenect2/LF2IrStream.cpp diff --git a/Source/Drivers/Libfreenect2/LF2ImageStream.cpp b/Source/Drivers/Libfreenect2/LF2ImageStream.cpp new file mode 100644 index 00000000..33dc312c --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2ImageStream.cpp @@ -0,0 +1,68 @@ +#include "LF2ImageStream.h" +#include +#include "LF2Common.h" +#include + +using namespace LF2; + +int +LF2ImageStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) +{ + frame_out->dataSize = frame_in->width * frame_in->height * sizeof (OniRGB888Pixel); + + frame_out->data = xnOSMalloc (frame_out->dataSize); + + xnOSMemCopy (frame_out->data,frame_in->data,frame_out->dataSize); + + frame_out->frameIndex = frame_in->sequence; + frame_out->sensorType = ONI_SENSOR_COLOR; + + frame_out->videoMode.pixelFormat = ONI_PIXEL_FORMAT_RGB888; + frame_out->videoMode.resolutionX = frame_in->width; + frame_out->videoMode.resolutionY = frame_in->height; + frame_out->videoMode.fps = 30; + + frame_out->width = frame_in->width; + frame_out->height = frame_in->height; + + frame_out->cropOriginX = frame_out->cropOriginY = 0; + frame_out->croppingEnabled = FALSE; + + frame_out->sensorType = ONI_SENSOR_COLOR; + frame_out->stride = frame_in->width*sizeof(OniRGB888Pixel); + frame_out->timestamp = frame_in->sequence*33369; + + return 1; +} + +OniStatus +LF2ImageStream::getProperty(int propertyId, void* data, int* pDataSize) +{ + OniStatus status = ONI_STATUS_NOT_SUPPORTED; + + switch (propertyId) + { + case ONI_STREAM_PROPERTY_HORIZONTAL_FOV: + { + float* val = (float*)data; + XnDouble tmp; + tmp = LF2_COLOR_HORIZONTAL_FOV * xnl::Math::DTR; + *val = (float)tmp; + status = ONI_STATUS_OK; + break; + } + case ONI_STREAM_PROPERTY_VERTICAL_FOV: + { + float* val = (float*)data; + XnDouble tmp; + tmp = LF2_COLOR_VERTICAL_FOV * xnl::Math::DTR; + *val = (float)tmp; + status = ONI_STATUS_OK; + break; + } + default: + return LF2Stream::getProperty(propertyId, data, pDataSize); + } + + return status; +} diff --git a/Source/Drivers/Libfreenect2/LF2IrStream.cpp b/Source/Drivers/Libfreenect2/LF2IrStream.cpp new file mode 100644 index 00000000..dd96cfb9 --- /dev/null +++ b/Source/Drivers/Libfreenect2/LF2IrStream.cpp @@ -0,0 +1,80 @@ +#include "LF2IrStream.h" +#include +#include "LF2Common.h" +#include + +using namespace LF2; + +int +LF2IrStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) +{ + // 1 DepthPixel is 2 byte + frame_out->dataSize = frame_in->width * frame_in->height * sizeof (ONI_PIXEL_FORMAT_GRAY16); + + frame_out->data = xnOSMalloc (frame_out->dataSize); + + const float* const in_array = (float*) frame_in->data; + uint16_t* const out_array = (uint16_t*) frame_out->data; + unsigned int t = 0; + for (unsigned int y = 0; y < frame_in->height; y++) + { + for (unsigned int x = 0; x < frame_in->width; x++) + { + out_array[t] = in_array[t]; + ++t; + } + } + + + frame_out->frameIndex = frame_in->sequence; + frame_out->sensorType = ONI_SENSOR_IR; + + frame_out->videoMode.pixelFormat = ONI_PIXEL_FORMAT_GRAY16; + frame_out->videoMode.resolutionX = frame_in->width; + frame_out->videoMode.resolutionY = frame_in->height; + frame_out->videoMode.fps = 30; + + frame_out->width = frame_in->width; + frame_out->height = frame_in->height; + + frame_out->cropOriginX = frame_out->cropOriginY = 0; + frame_out->croppingEnabled = FALSE; + + frame_out->sensorType = ONI_SENSOR_IR; + frame_out->stride = frame_in->width*sizeof(ONI_PIXEL_FORMAT_GRAY16); + frame_out->timestamp = frame_in->sequence*33369; + + return 1; +} + +OniStatus +LF2IrStream::getProperty(int propertyId, void* data, int* pDataSize) +{ + OniStatus status = ONI_STATUS_NOT_SUPPORTED; + + switch (propertyId) + { + case ONI_STREAM_PROPERTY_HORIZONTAL_FOV: + { + float* val = (float*)data; + XnDouble tmp; + tmp = LF2_DEPTH_HORIZONTAL_FOV * xnl::Math::DTR; + *val = (float)tmp; + status = ONI_STATUS_OK; + break; + } + case ONI_STREAM_PROPERTY_VERTICAL_FOV: + { + float* val = (float*)data; + XnDouble tmp; + tmp = LF2_DEPTH_VERTICAL_FOV * xnl::Math::DTR; + *val = (float)tmp; + status = ONI_STATUS_OK; + break; + } + default: + return LF2Stream::getProperty(propertyId, data, pDataSize); + } + + return status; +} From 6f1d9ab7b96e1d2a04d6a82f58cf2d74cc2ac444 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Thu, 19 Feb 2015 11:04:45 +0900 Subject: [PATCH 22/29] modified image and ir stream info --- Source/Drivers/Libfreenect2/LF2Device.h | 35 +++++++++++-------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/Source/Drivers/Libfreenect2/LF2Device.h b/Source/Drivers/Libfreenect2/LF2Device.h index dd586fef..be1d9859 100644 --- a/Source/Drivers/Libfreenect2/LF2Device.h +++ b/Source/Drivers/Libfreenect2/LF2Device.h @@ -28,26 +28,21 @@ namespace LF2 { m_sensors[0].pSupportedVideoModes[0].resolutionX = 512; m_sensors[0].pSupportedVideoModes[0].resolutionY = 424; - // m_sensors[1].sensorType = ONI_SENSOR_COLOR; - // m_sensors[1].numSupportedVideoModes = 2; - // m_sensors[1].pSupportedVideoModes = XN_NEW_ARR(OniVideoMode, 2); - // m_sensors[1].pSupportedVideoModes[0].pixelFormat = ONI_PIXEL_FORMAT_RGB888; - // m_sensors[1].pSupportedVideoModes[0].fps = DEFAULT_FPS; - // m_sensors[1].pSupportedVideoModes[0].resolutionX = 960; - // m_sensors[1].pSupportedVideoModes[0].resolutionY = 540; - - // m_sensors[1].pSupportedVideoModes[1].pixelFormat = ONI_PIXEL_FORMAT_RGB888; - // m_sensors[1].pSupportedVideoModes[1].fps = DEFAULT_FPS; - // m_sensors[1].pSupportedVideoModes[1].resolutionX = 1920; - // m_sensors[1].pSupportedVideoModes[1].resolutionY = 1080; - - // m_sensors[2].sensorType = ONI_SENSOR_IR; - // m_sensors[2].numSupportedVideoModes = 1; - // m_sensors[2].pSupportedVideoModes = XN_NEW_ARR(OniVideoMode, 1); - // m_sensors[2].pSupportedVideoModes[0].pixelFormat = ONI_PIXEL_FORMAT_GRAY16; - // m_sensors[2].pSupportedVideoModes[0].fps = DEFAULT_FPS; - // m_sensors[2].pSupportedVideoModes[0].resolutionX = 512; - // m_sensors[2].pSupportedVideoModes[0].resolutionY = 424; + m_sensors[1].sensorType = ONI_SENSOR_COLOR; + m_sensors[1].numSupportedVideoModes = 2; + m_sensors[1].pSupportedVideoModes = XN_NEW_ARR(OniVideoMode, 1); + m_sensors[1].pSupportedVideoModes[0].pixelFormat = ONI_PIXEL_FORMAT_RGB888; + m_sensors[1].pSupportedVideoModes[0].fps = DEFAULT_FPS; + m_sensors[1].pSupportedVideoModes[0].resolutionX = 1920; + m_sensors[1].pSupportedVideoModes[0].resolutionY = 1080; + + m_sensors[2].sensorType = ONI_SENSOR_IR; + m_sensors[2].numSupportedVideoModes = 1; + m_sensors[2].pSupportedVideoModes = XN_NEW_ARR(OniVideoMode, 1); + m_sensors[2].pSupportedVideoModes[0].pixelFormat = ONI_PIXEL_FORMAT_GRAY16; + m_sensors[2].pSupportedVideoModes[0].fps = DEFAULT_FPS; + m_sensors[2].pSupportedVideoModes[0].resolutionX = 512; + m_sensors[2].pSupportedVideoModes[0].resolutionY = 424; } From aba6846440492be396d5f05f96f438df0a9c59d2 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Thu, 19 Feb 2015 11:12:35 +0900 Subject: [PATCH 23/29] fixed condition of stream refresh callback --- Source/Drivers/Libfreenect2/LF2DepthStream.h | 2 ++ Source/Drivers/Libfreenect2/LF2ImageStream.h | 2 ++ Source/Drivers/Libfreenect2/LF2IrStream.h | 2 ++ Source/Drivers/Libfreenect2/LF2Stream.cpp | 2 +- Source/Drivers/Libfreenect2/LF2Stream.h | 1 + 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2DepthStream.h b/Source/Drivers/Libfreenect2/LF2DepthStream.h index c8e33eaa..c0bf380f 100644 --- a/Source/Drivers/Libfreenect2/LF2DepthStream.h +++ b/Source/Drivers/Libfreenect2/LF2DepthStream.h @@ -13,6 +13,8 @@ namespace LF2 { m_videoMode.resolutionX = 512; m_videoMode.resolutionY = 424; m_videoMode.fps = 30; + + m_frameType = libfreenect2::Frame::Depth; } ~LF2DepthStream () diff --git a/Source/Drivers/Libfreenect2/LF2ImageStream.h b/Source/Drivers/Libfreenect2/LF2ImageStream.h index ccea5eb9..6be1b89a 100644 --- a/Source/Drivers/Libfreenect2/LF2ImageStream.h +++ b/Source/Drivers/Libfreenect2/LF2ImageStream.h @@ -13,6 +13,8 @@ namespace LF2 { m_videoMode.resolutionX = 1920; m_videoMode.resolutionY = 1080; m_videoMode.fps = 30; + + m_frameType = libfreenect2::Frame::Color; } ~LF2ImageStream() diff --git a/Source/Drivers/Libfreenect2/LF2IrStream.h b/Source/Drivers/Libfreenect2/LF2IrStream.h index 90c2784e..2105dcbb 100644 --- a/Source/Drivers/Libfreenect2/LF2IrStream.h +++ b/Source/Drivers/Libfreenect2/LF2IrStream.h @@ -13,6 +13,8 @@ namespace LF2 { m_videoMode.resolutionX = 512; m_videoMode.resolutionY = 424; m_videoMode.fps = 30; + + m_frameType = libfreenect2::Frame::Ir; } ~LF2IrStream() diff --git a/Source/Drivers/Libfreenect2/LF2Stream.cpp b/Source/Drivers/Libfreenect2/LF2Stream.cpp index ea180f79..2c1887a6 100644 --- a/Source/Drivers/Libfreenect2/LF2Stream.cpp +++ b/Source/Drivers/Libfreenect2/LF2Stream.cpp @@ -7,7 +7,7 @@ using namespace libfreenect2; bool LF2Stream::onNewFrame (Frame::Type type,Frame* frame) { - if ((m_videoMode.pixelFormat == ONI_PIXEL_FORMAT_DEPTH_1_MM && type != Frame::Depth) || (m_videoMode.pixelFormat != ONI_PIXEL_FORMAT_DEPTH_1_MM && type != Frame::Ir)) + if (m_frameType != type) { return false; } diff --git a/Source/Drivers/Libfreenect2/LF2Stream.h b/Source/Drivers/Libfreenect2/LF2Stream.h index dfa46033..6e351b56 100644 --- a/Source/Drivers/Libfreenect2/LF2Stream.h +++ b/Source/Drivers/Libfreenect2/LF2Stream.h @@ -46,6 +46,7 @@ namespace LF2 { libfreenect2::Freenect2Device *m_f2dev; OniVideoMode m_videoMode; + libfreenect2::Frame::Type m_frameType; }; } From 25ea7dd1f54db6dd71fa1015342d731b72fb07f1 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Thu, 19 Feb 2015 11:56:47 +0900 Subject: [PATCH 24/29] wrote readme --- Source/Drivers/Libfreenect2/README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Source/Drivers/Libfreenect2/README.md diff --git a/Source/Drivers/Libfreenect2/README.md b/Source/Drivers/Libfreenect2/README.md new file mode 100644 index 00000000..f115bdb4 --- /dev/null +++ b/Source/Drivers/Libfreenect2/README.md @@ -0,0 +1,26 @@ +Features +======== +* Depth,Image,Ir streams of Kinect v2 are available through OpenNI2 interface. +* Free from Kinect SDK, so you can use this even in Linux,Mac OSX, and so on. (I have tested on Ubuntu 14.10.) +* libfreenect2 is now experimental and this implementation is still more experimental. + +Requirement +=========== +* libfreenect2 +* libfreenect2's patched libusb-1.0 (You may already have libusb, but you need to config to be loaded patched libusb.) +* Powerfull GPU resource +* USB3.0 port + +Getting Started +=============== +1. You should try example of libfreenect2 first. +2. install libfreenect2 +3. configure to be loaded patched libusb +4. write code of OpenNI2 +5. build and run!! + +Known Issue +=========== +* Xtion Pro Live's color stream returns BGR but Kinect v2's one returns RGB. +* Color Record does not work well. + From 0f383933fa5c4d1f4ecd8afe740da3cec25df8da Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Thu, 19 Feb 2015 12:07:16 +0900 Subject: [PATCH 25/29] added libfreenect2 to packaging script --- Packaging/Harvest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Packaging/Harvest.py b/Packaging/Harvest.py index 4ce9ed26..0aa31309 100755 --- a/Packaging/Harvest.py +++ b/Packaging/Harvest.py @@ -92,6 +92,7 @@ def copyRedistFiles(self, targetDir): self.copySharedObject(binDriversDir, 'OniFile', targetDriversDir) self.copySharedObject(binDriversDir, 'PS1080', targetDriversDir) self.copySharedObject(binDriversDir, 'PSLink', targetDriversDir) + self.copySharedObject(binDriversDir, 'Libfreenect2', targetDriversDir) shutil.copy(os.path.join(self.rootDir, 'Config', 'OpenNI2', 'Drivers', 'PS1080.ini'), targetDriversDir) shutil.copy(os.path.join(self.rootDir, 'Config', 'OpenNI2', 'Drivers', 'PSLink.ini'), targetDriversDir) if self.osName == 'Windows': From efc6b329a9106f108b157c73fb601f23901dbc54 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Thu, 26 Feb 2015 12:17:17 +0900 Subject: [PATCH 26/29] added comment for libfreenect2 --- Source/Drivers/Libfreenect2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/README.md b/Source/Drivers/Libfreenect2/README.md index f115bdb4..e32338f6 100644 --- a/Source/Drivers/Libfreenect2/README.md +++ b/Source/Drivers/Libfreenect2/README.md @@ -6,7 +6,7 @@ Features Requirement =========== -* libfreenect2 +* libfreenect2 (https://github.com/MasWag/libfreenect2/commit/0d78c38c38be35af2b71e063e954203689f1fdbb is required.So don't use master but https://github.com/MasWag/libfreenect2/tree/sequence (branch sequence)) * libfreenect2's patched libusb-1.0 (You may already have libusb, but you need to config to be loaded patched libusb.) * Powerfull GPU resource * USB3.0 port From 5193c4525ec4e07917efadaae276d0bccab69ffc Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Fri, 27 Feb 2015 21:47:26 +0900 Subject: [PATCH 27/29] supported libfreenect2's change --- Source/Drivers/Libfreenect2/LF2Driver.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2Driver.cpp b/Source/Drivers/Libfreenect2/LF2Driver.cpp index 50ec0472..edafdd2d 100644 --- a/Source/Drivers/Libfreenect2/LF2Driver.cpp +++ b/Source/Drivers/Libfreenect2/LF2Driver.cpp @@ -11,6 +11,11 @@ using namespace LF2; using namespace oni::driver; using namespace libfreenect2; +namespace libfreenect2 { + extern PacketPipeline *createDefaultPacketPipeline(); +} + + DeviceBase* LF2Driver::deviceOpen(const char * uri, const char *) { @@ -25,7 +30,7 @@ LF2Driver::deviceOpen(const char * uri, const char *) } DepthPacketProcessor::Config config; - DefaultPacketPipeline* packetPipeline = new DefaultPacketPipeline (); + PacketPipeline* packetPipeline = createDefaultPacketPipeline(); config.MaxDepth = 10000; packetPipeline->getDepthPacketProcessor()->setConfiguration(config); f2dev = m_f2.openDevice (uri,packetPipeline); From e3ce1157f8eff41ffafc60827172a5533c2ea203 Mon Sep 17 00:00:00 2001 From: Masaki Waga Date: Fri, 10 Jul 2015 08:13:41 +0900 Subject: [PATCH 28/29] updated README --- Source/Drivers/Libfreenect2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/README.md b/Source/Drivers/Libfreenect2/README.md index e32338f6..08f795cf 100644 --- a/Source/Drivers/Libfreenect2/README.md +++ b/Source/Drivers/Libfreenect2/README.md @@ -6,7 +6,7 @@ Features Requirement =========== -* libfreenect2 (https://github.com/MasWag/libfreenect2/commit/0d78c38c38be35af2b71e063e954203689f1fdbb is required.So don't use master but https://github.com/MasWag/libfreenect2/tree/sequence (branch sequence)) +* libfreenect2 (master is OK now!!) * libfreenect2's patched libusb-1.0 (You may already have libusb, but you need to config to be loaded patched libusb.) * Powerfull GPU resource * USB3.0 port From 0c4a95e3e6e39251c53bc8627502e1311f19f51e Mon Sep 17 00:00:00 2001 From: Youssef Alj Date: Wed, 15 Jul 2015 16:11:24 +0200 Subject: [PATCH 29/29] handling 4 channels in color stream --- Source/Drivers/Libfreenect2/LF2ImageStream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Drivers/Libfreenect2/LF2ImageStream.cpp b/Source/Drivers/Libfreenect2/LF2ImageStream.cpp index 33dc312c..f5304a37 100644 --- a/Source/Drivers/Libfreenect2/LF2ImageStream.cpp +++ b/Source/Drivers/Libfreenect2/LF2ImageStream.cpp @@ -8,7 +8,7 @@ using namespace LF2; int LF2ImageStream::BuildFrame(libfreenect2::Frame* frame_in,OniFrame* frame_out) { - frame_out->dataSize = frame_in->width * frame_in->height * sizeof (OniRGB888Pixel); + frame_out->dataSize = frame_in->width * frame_in->height * (sizeof (OniRGB888Pixel) +1); frame_out->data = xnOSMalloc (frame_out->dataSize);