forked from avin2/SensorKinect
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathXnSensorDepthStream.h
More file actions
171 lines (148 loc) · 8.84 KB
/
XnSensorDepthStream.h
File metadata and controls
171 lines (148 loc) · 8.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/****************************************************************************
* *
* PrimeSense Sensor 5.x Alpha *
* Copyright (C) 2011 PrimeSense Ltd. *
* *
* This file is part of PrimeSense Sensor. *
* *
* PrimeSense Sensor is free software: you can redistribute it and/or modify*
* it under the terms of the GNU Lesser General Public License as published *
* by the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* PrimeSense Sensor is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with PrimeSense Sensor. If not, see <http://www.gnu.org/licenses/>.*
* *
****************************************************************************/
#ifndef __XN_SENSOR_DEPTH_STREAM_H__
#define __XN_SENSOR_DEPTH_STREAM_H__
//---------------------------------------------------------------------------
// Includes
//---------------------------------------------------------------------------
#include <XnDDK/XnDepthStream.h>
#include "XnDeviceSensorProtocol.h"
#include "Registration.h"
#include "XnSensorStreamHelper.h"
//---------------------------------------------------------------------------
// Defines
//---------------------------------------------------------------------------
#define XN_DEPTH_STREAM_DEFAULT_INPUT_FORMAT XN_IO_DEPTH_FORMAT_UNCOMPRESSED_11_BIT
// --avin mod--
#define XN_DEPTH_STREAM_DEFAULT_RESOLUTION XN_RESOLUTION_VGA
#define XN_DEPTH_STREAM_DEFAULT_FPS 30
#define XN_DEPTH_STREAM_DEFAULT_OUTPUT_FORMAT XN_OUTPUT_FORMAT_DEPTH_VALUES
#define XN_DEPTH_STREAM_DEFAULT_REGISTRATION FALSE
// --avin mod--
#define XN_DEPTH_STREAM_DEFAULT_REGISTRATION_TYPE XN_PROCESSING_SOFTWARE
#define XN_DEPTH_STREAM_DEFAULT_HOLE_FILLER TRUE
#define XN_DEPTH_STREAM_DEFAULT_WHITE_BALANCE TRUE
#define XN_DEPTH_STREAM_DEFAULT_GAIN_OLD 50
#define XN_DEPTH_STREAM_DEFAULT_GMC_MODE TRUE
#define XN_DEPTH_STREAM_DEFAULT_CLOSE_RANGE FALSE
#define XN_DEPTH_STREAM_DEFAULT_SHIFT_MAP_APPENDED TRUE
//---------------------------------------------------------------------------
// XnSensorDepthStream class
//---------------------------------------------------------------------------
class XnSensorDepthStream : public XnDepthStream, public IXnSensorStream
{
public:
XnSensorDepthStream(const XnChar* strName, XnSensorObjects* pObjects);
~XnSensorDepthStream() { Free(); }
//---------------------------------------------------------------------------
// Overridden Methods
//---------------------------------------------------------------------------
XnStatus Init();
XnStatus Free();
XnStatus BatchConfig(const XnActualPropertiesHash& props) { return m_Helper.BatchConfig(props); }
inline XnSensorStreamHelper* GetHelper() { return &m_Helper; }
friend class XnDepthProcessor;
protected:
inline XnSensorFirmwareParams* GetFirmwareParams() const { return m_Helper.GetFirmware()->GetParams(); }
//---------------------------------------------------------------------------
// Overridden Methods
//---------------------------------------------------------------------------
XnStatus Open() { return m_Helper.Open(); }
XnStatus Close() { return m_Helper.Close(); }
XnStatus PostProcessFrame(XnStreamData* pFrameData);
XnStatus CalcRequiredSize(XnUInt32* pnRequiredSize) const;
XnStatus ReallocTripleFrameBuffer();
XnStatus CropImpl(XnStreamData* pStreamOutput, const XnCropping* pCropping);
XnStatus Mirror(XnStreamData* pStreamOutput) const;
XnStatus ConfigureStreamImpl();
XnStatus OpenStreamImpl();
XnStatus CloseStreamImpl();
XnStatus CreateDataProcessor(XnDataProcessor** ppProcessor);
XnStatus MapPropertiesToFirmware();
void GetFirmwareStreamConfig(XnResolutions* pnRes, XnUInt32* pnFPS) { *pnRes = GetResolution(); *pnFPS = GetFPS(); }
XnStatus WriteImpl(XnStreamData* /*pStreamData*/) { return XN_STATUS_DEVICE_UNSUPPORTED_MODE; }
protected:
//---------------------------------------------------------------------------
// Setters
//---------------------------------------------------------------------------
XnStatus SetOutputFormat(XnOutputFormats nOutputFormat);
XnStatus SetMirror(XnBool bIsMirrored);
XnStatus SetResolution(XnResolutions nResolution);
XnStatus SetFPS(XnUInt32 nFPS);
virtual XnStatus SetInputFormat(XnIODepthFormats nInputFormat);
virtual XnStatus SetRegistration(XnBool bRegistration);
virtual XnStatus SetHoleFilter(XnBool bHoleFilter);
virtual XnStatus SetWhiteBalance(XnBool bWhiteBalance);
virtual XnStatus SetGain(XnUInt32 nGain);
virtual XnStatus SetRegistrationType(XnProcessingType type);
virtual XnStatus SetAGCBin(const XnDepthAGCBin* pBin);
virtual XnStatus GetAGCBin(XnDepthAGCBin* pBin);
XnStatus SetCropping(const XnCropping* pCropping);
XnStatus SetActualRead(XnBool bRead);
virtual XnStatus SetGMCMode(XnBool bGMCMode);
virtual XnStatus SetCloseRange(XnBool bCloseRange);
private:
XnUInt32 CalculateExpectedSize();
XnStatus DecideFirmwareRegistration(XnBool bRegistration, XnProcessingType registrationType, XnResolutions nRes);
XnStatus DecidePixelSizeFactor();
static XnStatus XN_CALLBACK_TYPE SetInputFormatCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetRegistrationCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetHoleFilterCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetWhiteBalanceCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetGainCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetRegistrationTypeCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetAGCBinCallback(XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetAGCBinCallback(const XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetActualReadCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE DecideFirmwareRegistrationCallback(const XnProperty* pSender, void* pCookie);
static XnStatus XN_CALLBACK_TYPE DecidePixelSizeFactorCallback(const XnProperty* pSender, void* pCookie);
static XnStatus XN_CALLBACK_TYPE ReadAGCBinsFromFile(XnGeneralProperty* pSender, const XnChar* csINIFile, const XnChar* csSection);
static XnStatus XN_CALLBACK_TYPE SetGMCModeCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetCloseRangeCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetShiftsMapCallback(const XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
//---------------------------------------------------------------------------
// Members
//---------------------------------------------------------------------------
XnSensorStreamHelper m_Helper;
XnActualIntProperty m_InputFormat;
XnActualIntProperty m_DepthRegistration;
XnActualIntProperty m_HoleFilter;
XnActualIntProperty m_WhiteBalance;
XnActualIntProperty m_Gain;
XnActualIntProperty m_RegistrationType;
XnGeneralProperty m_AGCBin;
XnActualIntProperty m_FirmwareMirror;
XnActualIntProperty m_FirmwareRegistration;
XnActualIntProperty m_FirmwareCropSizeX;
XnActualIntProperty m_FirmwareCropSizeY;
XnActualIntProperty m_FirmwareCropOffsetX;
XnActualIntProperty m_FirmwareCropOffsetY;
XnActualIntProperty m_FirmwareCropEnabled;
XnActualIntProperty m_ActualRead;
XnActualIntProperty m_GMCMode;
XnActualIntProperty m_CloseRange;
XnGeneralProperty m_ShiftsMap;
const XnUInt16* m_pLastFrameShiftsMap;
XnRegistration m_Registration;
XnCallbackHandle m_hReferenceSizeChangedCallback;
};
#endif //__XN_SENSOR_DEPTH_STREAM_H__