Skip to content

Commit 867ca06

Browse files
committed
OpenNI2-FreenectDriver: Mirror ColorStream in hardware
Signed-off-by: Benn Snyder <[email protected]>
1 parent 4f4daa4 commit 867ca06

File tree

2 files changed

+15
-22
lines changed

2 files changed

+15
-22
lines changed

OpenNI2-FreenectDriver/src/ColorStream.cpp

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@ OniStatus ColorStream::setVideoMode(OniVideoMode requested_mode)
5050
void ColorStream::populateFrame(void* data, OniFrame* frame) const
5151
{
5252
frame->sensorType = sensor_type;
53-
frame->stride = video_mode.resolutionX*3;
54-
frame->cropOriginX = frame->cropOriginY = 0;
53+
frame->stride = video_mode.resolutionX * 3;
54+
frame->cropOriginX = 0;
55+
frame->cropOriginY = 0;
5556
frame->croppingEnabled = FALSE;
5657

5758
// copy stream buffer from freenect
@@ -64,26 +65,7 @@ void ColorStream::populateFrame(void* data, OniFrame* frame) const
6465
case ONI_PIXEL_FORMAT_RGB888:
6566
unsigned char* data_ptr = static_cast<unsigned char*>(data);
6667
unsigned char* frame_data = static_cast<unsigned char*>(frame->data);
67-
if (mirroring)
68-
{
69-
for (int i = 0; i < frame->dataSize; i += 3)
70-
{
71-
// find corresponding mirrored pixel
72-
unsigned int pixel = i / 3;
73-
unsigned int row = pixel / video_mode.resolutionX;
74-
unsigned int col = video_mode.resolutionX - (pixel % video_mode.resolutionX);
75-
unsigned int target = 3 * (row * video_mode.resolutionX + col);
76-
// copy it to this pixel
77-
frame_data[i] = data_ptr[target];
78-
frame_data[i+1] = data_ptr[target+1];
79-
frame_data[i+2] = data_ptr[target+2];
80-
}
81-
}
82-
else
83-
{
84-
std::copy(data_ptr, data_ptr+frame->dataSize, frame_data);
85-
}
86-
68+
std::copy(data_ptr, data_ptr + frame->dataSize, frame_data);
8769
return;
8870
}
8971
}

OpenNI2-FreenectDriver/src/ColorStream.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,17 @@ namespace FreenectDriver
139139
int ret = device->setFlag(FREENECT_AUTO_WHITE_BALANCE, auto_exposure);
140140
return (ret == 0) ? ONI_STATUS_OK : ONI_STATUS_ERROR;
141141
}
142+
case ONI_STREAM_PROPERTY_MIRRORING: // OniBool
143+
{
144+
if (dataSize != sizeof(OniBool))
145+
{
146+
LogError("Unexpected size for ONI_STREAM_PROPERTY_MIRRORING");
147+
return ONI_STATUS_ERROR;
148+
}
149+
mirroring = *(static_cast<const OniBool*>(data));
150+
int ret = device->setFlag(FREENECT_MIRROR_VIDEO, mirroring);
151+
return (ret == 0) ? ONI_STATUS_OK : ONI_STATUS_ERROR;
152+
}
142153
}
143154
}
144155
};

0 commit comments

Comments
 (0)