OpenNI / OpenNI2

OpenNI2
Apache License 2.0
432 stars 892 forks source link

What driver properties does NiTE require? #25

Closed piedar closed 11 years ago

piedar commented 11 years ago

I am the developer of piedar/OpenNI2-FreenectDriver. The driver works fine with the OpenNI 2.2 samples, but running any of the NiTE 2.2 samples results in a segmentation fault in FreenectDriver::DepthStream::getProperty(int, void*, int*), called from oni::implementation::VideoStream::getProperty(int, void*, int*) (full backtrace at piedar/OpenNI2-FreenectDriver#22). Please tell me which properties NiTE requires so I can implement them.

tomoto commented 11 years ago

Hi Benn,

Hope you are doing fine.

I hit the similar issue when I created Kinect SDK bridge for OpenNI 1. As it appeared to be proprietary information, I ended up hacking getProperty call to find out what properties were required and what values were returned. You can see my implementation below. This may be a little bit of help to achieve your goal although it is a dirty hard-coded hack created for OpenNI/NiTE 1. https://code.google.com/p/kinect-mssdk-openni-bridge/source/browse/src/PrimeSenseProperties.h https://code.google.com/p/kinect-mssdk-openni-bridge/source/browse/src/PrimeSensePropertyDef/D2S.h https://code.google.com/p/kinect-mssdk-openni-bridge/source/browse/src/PrimeSensePropertyDef/S2D.h

The segmentation fault you got apparently happened when NiTE tried to get the shift-depth vector that would map to "D2S" or "S2D" property in the implementation above.

Best Regards, Tomoto

piedar commented 11 years ago

Hey Tomoto,

Thanks for the suggestion.

I do provide D2S and S2D in DepthStream.hpp. There could an issue with mismatched types, perhaps causing a buffer overflow when I std::copy. I will start my search there.

tomoto commented 11 years ago

Oh, you have already provided these properties. Then I agree you could check the data copy for D2S and S2D to solve the problem.

Happy Hacking, Tomoto

piedar commented 11 years ago

I solved the immediate problem by changing the type of the S2D array from uint16_t to unsigned char. However, UserViewer segfaults on exit and HandViewer dies with a failed assertion in malloc.c. I will report these as separate issues.

tomoto commented 11 years ago

While I am glad you solved the problem, I strongly feel "what driver properties NiTE requires" should be documented. I will post this suggestion on the community forum. Thanks!