This repository has been archived on 2024-05-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2022-04-05 11:42:28 +03:00

73 lines
1.9 KiB
C++

#pragma once
#include <pangolin/pangolin.h>
#include <pangolin/video/video.h>
#include <pangolin/video/drivers/openni_common.h>
// Workaround poor OpenNI Platform test on Linux before including XnCppWrapper.h
// See https://github.com/dennishamester/OpenNI/commit/ca99f6181234c682bba42a6ba
#ifdef _LINUX_
#define linux 1
#endif // _LINUX_
// OpenNI generates SO MANY warnings, we'll just disable all for this header(!)
// GCC and clang will listen to this pramga.
#ifndef _MSVC_
#pragma GCC system_header
#endif
#include <XnCppWrapper.h>
namespace pangolin
{
//! Interface to video capture sources
struct PANGOLIN_EXPORT OpenNiVideo : public VideoInterface
{
public:
OpenNiVideo(OpenNiSensorType s1, OpenNiSensorType s2, ImageDim dim = ImageDim(640,480), int fps = 30);
~OpenNiVideo();
//! Implement VideoInput::Start()
void Start();
//! Implement VideoInput::Stop()
void Stop();
//! Implement VideoInput::SizeBytes()
size_t SizeBytes() const;
//! Implement VideoInput::Streams()
const std::vector<StreamInfo>& Streams() const;
//! Implement VideoInput::GrabNext()
bool GrabNext( unsigned char* image, bool wait = true );
//! Implement VideoInput::GrabNewest()
bool GrabNewest( unsigned char* image, bool wait = true );
void SetAutoExposure(bool enabled)
{
#if XN_MINOR_VERSION > 5 || (XN_MINOR_VERSION == 5 && XN_BUILD_VERSION >= 7)
if(imageNode.IsValid()) {
imageNode.GetAutoExposureCap().Set(enabled ? 1 : 0);
}
#else
throw pangolin::VideoException("SetAutoExposure Not supported for this version of OpenNI.");
#endif
}
protected:
std::vector<StreamInfo> streams;
OpenNiSensorType sensor_type[2];
xn::Context context;
xn::DepthGenerator depthNode;
xn::ImageGenerator imageNode;
xn::IRGenerator irNode;
size_t sizeBytes;
};
}