File: XnSensorStreamHelper.h

package info (click to toggle)
openni2 2.2.0.33%2Bdfsg-15
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 22,232 kB
  • sloc: cpp: 111,183; ansic: 35,511; sh: 10,542; python: 1,313; java: 952; makefile: 575; xml: 12
file content (143 lines) | stat: -rw-r--r-- 6,301 bytes parent folder | download | duplicates (4)
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
/*****************************************************************************
*                                                                            *
*  OpenNI 2.x Alpha                                                          *
*  Copyright (C) 2012 PrimeSense Ltd.                                        *
*                                                                            *
*  This file is part of OpenNI.                                              *
*                                                                            *
*  Licensed under the Apache License, Version 2.0 (the "License");           *
*  you may not use this file except in compliance with the License.          *
*  You may obtain a copy of the License at                                   *
*                                                                            *
*      http://www.apache.org/licenses/LICENSE-2.0                            *
*                                                                            *
*  Unless required by applicable law or agreed to in writing, software       *
*  distributed under the License is distributed on an "AS IS" BASIS,         *
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
*  See the License for the specific language governing permissions and       *
*  limitations under the License.                                            *
*                                                                            *
*****************************************************************************/
#ifndef __XN_SENSOR_STREAM_HELPER_H__
#define __XN_SENSOR_STREAM_HELPER_H__

//---------------------------------------------------------------------------
// Includes
//---------------------------------------------------------------------------
#include "IXnSensorStream.h"
#include "XnSensorFirmware.h"
#include "XnSensorFixedParams.h"
#include <DDK/XnDeviceStream.h>
#include <DDK/XnDeviceModuleHolder.h>

//---------------------------------------------------------------------------
// Types
//---------------------------------------------------------------------------
class XnSensorStreamHelper
{
public:
	XnSensorStreamHelper(XnSensorObjects* pObjects);
	~XnSensorStreamHelper();

	XnStatus Init(IXnSensorStream* pSensorStream, XnDeviceStream* pStream);
	XnStatus Free();

	XnStatus Configure();
	XnStatus FinalOpen();
	XnStatus Open();
	XnStatus Close();

	/**
	* Registers a property which affects the data processor. When any of these properties
	* changes, the data processor will be recreated.
	*/
	XnStatus RegisterDataProcessorProperty(XnActualIntProperty& Property);

	typedef XnStatus (*ConvertCallback)(XnUInt64 nSource, XnUInt64* pnDest);

	/** 
	* Maps a stream property to a firmware property. Later on, such a property can be used
	* in calls to ConfigureFirmware or SetStreamFirmwareParam.
	*/
	XnStatus MapFirmwareProperty(XnActualIntProperty& Property, XnActualIntProperty& FirmwareProperty, XnBool bAllowChangeWhileOpen, ConvertCallback pStreamToFirmwareFunc = 0);

	/**
	* Configures the firmware according to the property. This can only be done for properties
	* which were previously attached via the MapFirmwareProperty function.
	*/
	XnStatus ConfigureFirmware(XnActualIntProperty& Property);

	XnStatus BeforeSettingFirmwareParam(XnActualIntProperty& Property, XnUInt16 nValue);
	XnStatus AfterSettingFirmwareParam(XnActualIntProperty& Property);

	XnStatus BeforeSettingDataProcessorProperty();
	XnStatus AfterSettingDataProcessorProperty();

	XnStatus SimpleSetFirmwareParam(XnActualIntProperty& Property, XnUInt16 nValue);

	XnStatus UpdateFromFirmware(XnActualIntProperty& Property);

	inline XnSensorFirmware* GetFirmware() const { return m_pObjects->pFirmware; }
	inline XnFWVer GetFirmwareVersion() const { return GetFirmware()->GetInfo()->nFWVer; }
	inline XnSensorFixedParams* GetFixedParams() const { return m_pObjects->pFirmware->GetFixedParams(); }
	inline XnDevicePrivateData* GetPrivateData() const { return m_pObjects->pDevicePrivateData; }
	inline XnSensorFPS* GetFPS() const { return m_pObjects->pFPS; }
	inline XnCmosInfo* GetCmosInfo() const { return m_pObjects->pCmosInfo; }
	inline IXnSensorStream* GetSensorStream() { return m_pSensorStream; }

	inline XnStatus StartFirmwareTransaction() { return GetFirmware()->GetParams()->StartTransaction(); }
	inline XnStatus CommitFirmwareTransaction() { return GetFirmware()->GetParams()->CommitTransaction(); }
	inline XnStatus CommitFirmwareTransactionAsBatch() { return GetFirmware()->GetParams()->CommitTransactionAsBatch(); }
	inline XnStatus RollbackFirmwareTransaction() { return GetFirmware()->GetParams()->RollbackTransaction(); }

	XnStatus BatchConfig(const XnActualPropertiesHash& props);

	XnFirmwareCroppingMode GetFirmwareCroppingMode(XnCroppingMode nValue, XnBool bEnabled);

private:
	IXnSensorStream* m_pSensorStream;
	XnDeviceStream* m_pStream;
	XnSensorObjects* m_pObjects;

	class XnSensorStreamHelperCookie
	{
	public:
		XnSensorStreamHelperCookie() {}
		XnSensorStreamHelperCookie(XnActualIntProperty* pStreamProp, XnActualIntProperty* pFirmwareProp, XnBool bAllowWhileOpen, XnSensorStreamHelper::ConvertCallback pStreamToFirmwareFunc) :
			pStreamProp(pStreamProp), pFirmwareProp(pFirmwareProp), bAllowWhileOpen(bAllowWhileOpen), pStreamToFirmwareFunc(pStreamToFirmwareFunc), bProcessorProp(FALSE)
		{}

		XnActualIntProperty* pStreamProp;
		XnActualIntProperty* pFirmwareProp;
		XnBool bAllowWhileOpen;
		XnSensorStreamHelper::ConvertCallback pStreamToFirmwareFunc;
		XnBool bProcessorProp;

		struct
		{
			XnBool bShouldOpen;
			XnBool bChooseProcessor;
		} CurrentTransaction;
	};

	typedef xnl::Hash<XnActualIntProperty*, XnSensorStreamHelperCookie> FirmareProperties;
	FirmareProperties m_FirmwareProperties;
};

class XnSensorStreamHolder : public XnDeviceModuleHolder
{
public:
	XnSensorStreamHolder(XnDeviceStream* pStream, XnSensorStreamHelper* pHelper) : 
		XnDeviceModuleHolder(pStream), m_pHelper(pHelper) 
	{}

	inline XnDeviceStream* GetStream() { return (XnDeviceStream*)GetModule(); }

	XnStatus Configure() { return m_pHelper->Configure(); }
	XnStatus FinalOpen() { return m_pHelper->FinalOpen(); }

private:
	XnSensorStreamHelper* m_pHelper;
};

#endif //__XN_SENSOR_STREAM_HELPER_H__