/**************************************************************************** * * * 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 .* * * ****************************************************************************/ #ifndef __XN_SENSOR_DEVICE_H__ #define __XN_SENSOR_DEVICE_H__ //--------------------------------------------------------------------------- // Includes //--------------------------------------------------------------------------- #include #include #include #include #include #include #include "XnDeviceFileReaderBC.h" #include "XnNiInputStream.h" #include "XnDeviceFile.h" #include #include //--------------------------------------------------------------------------- // Types //--------------------------------------------------------------------------- class XnFileDevice : virtual public xn::ModulePlayer { public: XnFileDevice(xn::Context& context, const XnChar* strInstanceName); virtual ~XnFileDevice(); XnStatus Init(); virtual XnBool IsCapabilitySupported(const XnChar* /*strCapabilityName*/) { return FALSE; } virtual const XnChar* GetSupportedFormat() { return "XNS"; } virtual XnStatus SetInputStream(void *pStreamCookie, XnPlayerInputStreamInterface *pStream); virtual XnStatus ReadNext(); virtual XnStatus SetNodeNotifications(void *pNodeNotificationsCookie, XnNodeNotifications *pNodeNotifications); virtual XnStatus SetRepeat(XnBool bRepeat); virtual XnStatus SeekToTimeStamp(XnInt64 nTimeOffset, XnPlayerSeekOrigin origin); virtual XnStatus SeekToFrame(const XnChar* strNodeName, XnInt32 nFrameOffset, XnPlayerSeekOrigin origin); virtual XnStatus TellTimestamp(XnUInt64& nTimestamp); virtual XnStatus TellFrame(const XnChar* strNodeName, XnUInt32 &nFrameOffset); virtual XnStatus GetNumFrames(const XnChar* strNodeName, XnUInt32& nFrames); virtual XnBool IsEOF(); virtual XnStatus RegisterToEndOfFileReached(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback); virtual void UnregisterFromEndOfFileReached(XnCallbackHandle hCallback); private: void Free(); XnStatus ReadFileVersion(); XnStatus ReadNextEventFromStream(XnPackedDataType* pnObjectType = NULL); XnStatus ReadInitialState(XnPropertySet* pSet); XnStatus SetInitialState(XnPropertySet* pSet); XnStatus ReadTillNextData(XnBool* pbWrapOccurred); XnStatus HandlePackedObject(XnPackedDataType nObjectType); XnStatus ReadNewStream(); XnStatus ReadStreamRemoved(); XnStatus ReadIntProperty(); XnStatus ReadRealProperty(); XnStatus ReadStringProperty(); XnStatus ReadGeneralProperty(); XnStatus ReadStreamData(); XnStatus HandleNewStream(const XnChar* strType, const XnChar* strName, const XnActualPropertiesHash* pInitialValues); XnStatus HandleStreamRemoved(const XnChar* strName); XnStatus HandleIntProperty(const XnChar* strModule, const XnChar* strName, XnUInt64 nValue); XnStatus HandleRealProperty(const XnChar* strModule, const XnChar* strName, XnDouble dValue); XnStatus HandleStringProperty(const XnChar* strModule, const XnChar* strName, const XnChar* strValue); XnStatus HandleGeneralProperty(const XnChar* strModule, const XnChar* strName, const XnGeneralBuffer& gbValue); XnStatus HandleStreamData(XnStreamData* pDataProps, XnCompressionFormats nCompression, XnUInt32 nCompressedSize); XnStatus HandleEndOfStream(); XnStatus Rewind(); XnStatus SeekTo(XnUInt64 nMinTimestamp, const XnChar* strNode, XnUInt32 nFrameID); XnStatus UpdateS2DTables(const xn::DepthGenerator& depth); XnStatus UpdateRWData(const xn::DepthGenerator& depth); XnStatus CreateCodec(xn::ProductionNode& node); XnStatus CheckIRCompatibility(xn::ProductionNode& node); XnNodeHandle GetSelfNodeHandle(); // Some BC functions XnStatus BCSeek(XnUInt64 nTimestamp); XnStatus BCSeekFrame(XnUInt32 nFrameID); XnStatus BCInit(); XnStatus BCCalculatePackedBufferSize(); XnStatus BCReadInitialState(XnPropertySet* pSet); XnStatus BCReadFrame(XnBool* pbRewind); XnStatus BCDestroy(); xn::Context m_context; XnInputStream* m_pInputStream; XnDataPacker* m_pDataPacker; XnNodeNotifications* m_pNotifications; void* m_pNotificationsCookie; typedef struct XnNodeInfo { xn::Codec codec; XnCodec* pXnCodec; XnUInt32 nCurrFrameID; XnBool bIRisRGB; } XnNodeInfo; typedef XnStringsHashT XnNodeInfoMap; XnNodeInfoMap m_nodeInfoMap; XnNodeInfoMap m_ignoreNewNodes; XnBool m_bHighresTimestamps; XnStreamData* m_pStreamData; XnBool m_bRepeat; XnUInt32 m_nFileVersion; XnBool m_bFileHasData; XnBool m_bNodeCollectionChanged; XnUInt64 m_nCurrTimestamp; typedef XnHashT XnUIntHash; XnUIntHash m_PositionsToIgnore; // used for seeking XnEventNoArgs m_eofEvent; XnBool m_bEOF; XnShiftToDepthTables m_ShiftToDepth; XnFileBCData* m_pBCData; const XnChar* m_strName; XnNodeHandle m_hSelf; }; #endif // __XN_SENSOR_DEVICE_H__