Skip to content

Commit 8cca127

Browse files
committed
OpenNI2-FreenectDriver: Move static and global symbols into Utility.hpp
OpenNI2-FreenectDriver: Print libfreenect version when driver is loaded OpenNI2-FreenectDriver: Use explicitly-sized integers for buffers OpenNI2-FreenectDriver: 0-initialize structs Signed-off-by: Benn Snyder <[email protected]>
1 parent 62f0a0d commit 8cca127

File tree

8 files changed

+104
-71
lines changed

8 files changed

+104
-71
lines changed

OpenNI2-FreenectDriver/CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22
# OpenNI2-FreenectDriver
33
######################################################################################
44

5+
file(GLOB HEADERS src/*.hpp src/*.h)
56
file(GLOB SOURCES src/*.cpp)
6-
add_library(FreenectDriver SHARED ${SOURCES})
7+
add_library(FreenectDriver SHARED ${HEADERS} ${SOURCES})
78

89
set(CMAKE_CXX_FLAGS "-Wno-gnu-static-float-init -Wno-unused-function")
910

1011
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib/OpenNI2-FreenectDriver)
11-
set_target_properties( FreenectDriver PROPERTIES
12+
set_target_properties(FreenectDriver PROPERTIES
1213
VERSION ${PROJECT_VER}
1314
SOVERSION ${PROJECT_APIVER}
1415
OUTPUT_NAME FreenectDriver)
1516

17+
add_definitions(-DPROJECT_VER="${PROJECT_VER}")
18+
1619
include_directories(extern/OpenNI-Linux-x64-2.2.0.33/Include)
1720
include_directories(${PROJECT_SOURCE_DIR}/wrappers/cpp)
1821

OpenNI2-FreenectDriver/src/ColorStream.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ void ColorStream::populateFrame(void* data, OniFrame* frame) const
5353
frame->stride = video_mode.resolutionX * 3;
5454
frame->cropOriginX = 0;
5555
frame->cropOriginY = 0;
56-
frame->croppingEnabled = FALSE;
56+
frame->croppingEnabled = false;
5757

5858
// copy stream buffer from freenect
5959
switch (video_mode.pixelFormat)
@@ -63,9 +63,9 @@ void ColorStream::populateFrame(void* data, OniFrame* frame) const
6363
return;
6464

6565
case ONI_PIXEL_FORMAT_RGB888:
66-
unsigned char* data_ptr = static_cast<unsigned char*>(data);
67-
unsigned char* frame_data = static_cast<unsigned char*>(frame->data);
68-
std::copy(data_ptr, data_ptr + frame->dataSize, frame_data);
66+
uint8_t* source = static_cast<uint8_t*>(data);
67+
uint8_t* target = static_cast<uint8_t*>(frame->data);
68+
std::copy(source, source + frame->dataSize, target);
6969
return;
7070
}
7171
}

OpenNI2-FreenectDriver/src/ColorStream.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace FreenectDriver
3636
{
3737
FreenectVideoModeMap supported_modes = getSupportedVideoModes();
3838
OniVideoMode* modes = new OniVideoMode[supported_modes.size()];
39-
std::transform(supported_modes.begin(), supported_modes.end(), modes, RetrieveKey());
39+
std::transform(supported_modes.begin(), supported_modes.end(), modes, ExtractKey());
4040
OniSensorInfo sensors = { sensor_type, static_cast<int>(supported_modes.size()), modes };
4141
return sensors;
4242
}

OpenNI2-FreenectDriver/src/DepthStream.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,26 @@ void DepthStream::populateFrame(void* data, OniFrame* frame) const
5757
frame->sensorType = sensor_type;
5858
frame->stride = video_mode.resolutionX * sizeof(uint16_t);
5959

60-
if (cropping.enabled) {
60+
if (cropping.enabled)
61+
{
6162
frame->height = cropping.height;
6263
frame->width = cropping.width;
6364
frame->cropOriginX = cropping.originX;
6465
frame->cropOriginY = cropping.originY;
6566
frame->croppingEnabled = true;
6667
}
67-
else {
68-
frame->cropOriginX = frame->cropOriginY = 0;
68+
else
69+
{
70+
frame->cropOriginX = 0;
71+
frame->cropOriginY = 0;
6972
frame->croppingEnabled = false;
7073
}
7174

7275

7376
// copy stream buffer from freenect
7477

75-
unsigned short* source = static_cast<unsigned short*>(data) + frame->cropOriginX + frame->cropOriginY * video_mode.resolutionX;
76-
unsigned short* target = static_cast<unsigned short*>(frame->data);
78+
uint16_t* source = static_cast<uint16_t*>(data) + frame->cropOriginX + frame->cropOriginY * video_mode.resolutionX;
79+
uint16_t* target = static_cast<uint16_t*>(frame->data);
7780
const unsigned int skipWidth = video_mode.resolutionX - frame->width;
7881

7982
if (mirroring)
@@ -84,8 +87,7 @@ void DepthStream::populateFrame(void* data, OniFrame* frame) const
8487
{
8588
for (int x = 0; x < frame->width; x++)
8689
{
87-
unsigned short value = *(source++);
88-
*(target--) = value < DepthStream::MAX_VALUE ? value : 0;
90+
*target-- = *source++;
8991
}
9092

9193
source += skipWidth;
@@ -98,8 +100,7 @@ void DepthStream::populateFrame(void* data, OniFrame* frame) const
98100
{
99101
for (int x = 0; x < frame->width; x++)
100102
{
101-
unsigned short value = *(source++);
102-
*(target++) = value < DepthStream::MAX_VALUE ? value : 0;
103+
*target++ = *source++;
103104
}
104105

105106
source += skipWidth;

OpenNI2-FreenectDriver/src/DepthStream.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ namespace FreenectDriver
4848
{
4949
FreenectDepthModeMap supported_modes = getSupportedVideoModes();
5050
OniVideoMode* modes = new OniVideoMode[supported_modes.size()];
51-
std::transform(supported_modes.begin(), supported_modes.end(), modes, RetrieveKey());
51+
std::transform(supported_modes.begin(), supported_modes.end(), modes, ExtractKey());
5252
OniSensorInfo sensors = { sensor_type, static_cast<int>(supported_modes.size()), modes };
5353
return sensors;
5454
}

OpenNI2-FreenectDriver/src/DeviceDriver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
#include "ColorStream.hpp"
2323

2424

25-
static bool operator<(const OniDeviceInfo& left, const OniDeviceInfo& right) { return (strcmp(left.uri, right.uri) < 0); } // for std::map
26-
2725
namespace FreenectDriver
2826
{
2927
class Device : public oni::driver::DeviceBase, public Freenect::FreenectDevice
@@ -217,6 +215,8 @@ namespace FreenectDriver
217215
public:
218216
Driver(OniDriverServices* pDriverServices) : DriverBase(pDriverServices)
219217
{
218+
WriteMessage("Using libfreenect v" + to_string(PROJECT_VER));
219+
220220
freenect_set_log_level(m_ctx, FREENECT_LOG_DEBUG);
221221
freenect_select_subdevices(m_ctx, FREENECT_DEVICE_CAMERA); // OpenNI2 doesn't use MOTOR or AUDIO
222222
DriverServices = &getServices();
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// This file contains symbols that may be used by any class or don't really go anywhere else.
2+
#pragma once
3+
4+
#include <iostream>
5+
#include "Driver/OniDriverAPI.h"
6+
7+
8+
// Oni helpers
9+
10+
static OniVideoMode makeOniVideoMode(OniPixelFormat pixel_format, int resolution_x, int resolution_y, int frames_per_second)
11+
{
12+
OniVideoMode mode;
13+
mode.pixelFormat = pixel_format;
14+
mode.resolutionX = resolution_x;
15+
mode.resolutionY = resolution_y;
16+
mode.fps = frames_per_second;
17+
return mode;
18+
}
19+
static bool operator==(const OniVideoMode& left, const OniVideoMode& right)
20+
{
21+
return (left.pixelFormat == right.pixelFormat && left.resolutionX == right.resolutionX
22+
&& left.resolutionY == right.resolutionY && left.fps == right.fps);
23+
}
24+
static bool operator<(const OniVideoMode& left, const OniVideoMode& right)
25+
{
26+
return (left.resolutionX * left.resolutionY < right.resolutionX * right.resolutionY);
27+
}
28+
29+
static bool operator<(const OniDeviceInfo& left, const OniDeviceInfo& right)
30+
{
31+
return (strcmp(left.uri, right.uri) < 0);
32+
}
33+
34+
35+
/// Extracts `first` from `pair`, for transforming a map into its keys.
36+
struct ExtractKey
37+
{
38+
template <typename T> typename T::first_type
39+
operator()(T pair) const
40+
{
41+
return pair.first;
42+
}
43+
};
44+
45+
46+
// holding out on C++11
47+
template <typename T>
48+
static std::string to_string(const T& n)
49+
{
50+
std::ostringstream oss;
51+
oss << n;
52+
return oss.str();
53+
}
54+
55+
56+
// global logging
57+
namespace FreenectDriver
58+
{
59+
static void WriteMessage(std::string info)
60+
{
61+
std::cout << "OpenNI2-FreenectDriver: " << info << std::endl;
62+
}
63+
64+
// DriverServices is set in DeviceDriver.cpp so all files can call errorLoggerAppend()
65+
static oni::driver::DriverServices* DriverServices;
66+
static void LogError(std::string error)
67+
{
68+
// errorLoggerAppend() doesn't seem to go anywhere, so WriteMessage also
69+
WriteMessage("(ERROR) " + error);
70+
71+
if (DriverServices != NULL)
72+
DriverServices->errorLoggerAppend(std::string("OpenNI2-FreenectDriver: " + error).c_str());
73+
}
74+
}

OpenNI2-FreenectDriver/src/VideoStream.hpp

Lines changed: 7 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,12 @@
11
#pragma once
22

3-
#include <iostream>
43
#include "libfreenect.hpp"
5-
#include "Driver/OniDriverAPI.h"
64
#include "PS1080.h"
5+
#include "Utility.hpp"
76

87

9-
struct RetrieveKey
10-
{
11-
template <typename T> typename T::first_type
12-
operator()(T pair) const {
13-
return pair.first;
14-
}
15-
};
16-
17-
// "extension constructor" for OniVideoMode struct
18-
static OniVideoMode makeOniVideoMode(OniPixelFormat pixel_format, int resolution_x, int resolution_y, int frames_per_second)
19-
{
20-
OniVideoMode mode;
21-
mode.pixelFormat = pixel_format;
22-
mode.resolutionX = resolution_x;
23-
mode.resolutionY = resolution_y;
24-
mode.fps = frames_per_second;
25-
return mode;
26-
}
27-
28-
static bool operator==(const OniVideoMode& left, const OniVideoMode& right)
29-
{
30-
return (left.pixelFormat == right.pixelFormat && left.resolutionX == right.resolutionX
31-
&& left.resolutionY == right.resolutionY && left.fps == right.fps);
32-
}
33-
static bool operator<(const OniVideoMode& left, const OniVideoMode& right) { return (left.resolutionX*left.resolutionY < right.resolutionX*right.resolutionY); }
34-
358
namespace FreenectDriver
369
{
37-
template < typename T > std::string to_string(const T& n)
38-
{
39-
std::ostringstream oss;
40-
oss << n;
41-
return oss.str();
42-
}
43-
44-
static void WriteMessage(std::string info)
45-
{
46-
std::cout << "OpenNI2-FreenectDriver: " << info << std::endl;
47-
}
48-
49-
// DriverServices is set in DeviceDriver.cpp so all files can call errorLoggerAppend()
50-
static oni::driver::DriverServices* DriverServices;
51-
static void LogError(std::string error)
52-
{
53-
// errorLoggerAppend() doesn't seem to go anywhere, so call WriteMessage also
54-
WriteMessage("(ERROR) " + error);
55-
56-
if (DriverServices != NULL)
57-
DriverServices->errorLoggerAppend(std::string("OpenNI2-FreenectDriver: " + error).c_str());
58-
}
59-
6010
class VideoStream : public oni::driver::StreamBase
6111
{
6212
private:
@@ -77,7 +27,12 @@ namespace FreenectDriver
7727
VideoStream(Freenect::FreenectDevice* device) :
7828
frame_id(1),
7929
device(device),
80-
mirroring(false) { }
30+
mirroring(false)
31+
{
32+
// joy of structs
33+
memset(&cropping, 0, sizeof(cropping));
34+
memset(&video_mode, 0, sizeof(video_mode));
35+
}
8136
//~VideoStream() { stop(); }
8237

8338
void buildFrame(void* data, uint32_t timestamp)

0 commit comments

Comments
 (0)