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
|
/*****************************************************************************
* *
* 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 _ONI_IMPL_DEVICE_H_
#define _ONI_IMPL_DEVICE_H_
#include "OniDriverHandler.h"
#include "OniFrameManager.h"
#include "OniSensor.h"
#include "OniCommon.h"
#include "XnList.h"
ONI_NAMESPACE_IMPLEMENTATION_BEGIN
class Context;
class VideoStream;
class Sensor;
class DeviceDriver;
class Device
{
public:
Device(DeviceDriver* pDeviceDriver, const DriverHandler& libraryHandler, FrameManager& frameManager, const OniDeviceInfo* pDeviceInfo, xnl::ErrorLogger& errorLogger);
~Device();
OniStatus open(const char* mode);
OniStatus close();
OniStatus getSensorInfoList(OniSensorInfo** pSensors, int& numSensors);
const OniDeviceInfo* getInfo() const;
VideoStream* createStream(OniSensorType sensorType);
OniStatus setProperty(int propertyId, const void* data, int dataSize);
OniStatus getProperty(int propertyId, void* data, int* pDataSize);
OniBool isPropertySupported(int propertId);
void notifyAllProperties();
OniStatus invoke(int commandId, void* data, int dataSize);
OniBool isCommandSupported(int commandId);
void* getHandle() const {return m_deviceHandle;}
DeviceDriver* getDeviceDriver() {return m_pDeviceDriver; }
OniBool isImageRegistrationModeSupported(OniImageRegistrationMode mode);
OniStatus tryManualTrigger();
void clearStream(VideoStream* pStream);
OniStatus enableDepthColorSync(Context* pContext);
void disableDepthColorSync();
OniBool isDepthColorSyncEnabled();
void refreshDepthColorSyncState();
private:
typedef struct
{
int frameId;
void* pStream;
} Seek;
Device(const Device& other);
Device& operator=(const Device& other);
static void ONI_CALLBACK_TYPE stream_PropertyChanged(void* deviceHandle, int propertyId, const void* data, int dataSize, void* pCookie);
const DriverHandler& m_driverHandler;
FrameManager& m_frameManager;
xnl::ErrorLogger& m_errorLogger;
OniDeviceInfo* m_pInfo;
bool m_active;
int m_openCount;
void* m_deviceHandle;
DeviceDriver* m_pDeviceDriver;
xnl::List<VideoStream*> m_streams;
xnl::CriticalSection m_cs;
OniFrameSyncHandle m_depthColorSyncHandle;
Context* m_pContext;
OniBool m_syncEnabled;
enum { MAX_SENSORS_PER_DEVICE = 10 };
Sensor* m_sensors[MAX_SENSORS_PER_DEVICE];
};
ONI_NAMESPACE_IMPLEMENTATION_END
#endif // _ONI_IMP_DEVICE_H_
|