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__
|