1 /*M/////////////////////////////////////////////////////////////////////////////////////// 2 // 3 // This file is part of OpenCV project. 4 // It is subject to the license terms in the LICENSE file found in the top-level directory 5 // of this distribution and at http://opencv.org/license.html. 6 // 7 // Copyright (C) 2014, Itseez, Inc., all rights reserved. 8 // Third party copyrights are property of their respective owners. 9 // 10 //M*/ 11 12 #ifndef _CAP_INTELPERC_HPP_ 13 #define _CAP_INTELPERC_HPP_ 14 15 #include "precomp.hpp" 16 17 #ifdef HAVE_INTELPERC 18 19 #include "pxcsession.h" 20 #include "pxcsmartptr.h" 21 #include "pxccapture.h" 22 23 namespace cv 24 { 25 26 class IntelPerCStreamBase 27 { 28 public: 29 IntelPerCStreamBase(); 30 virtual ~IntelPerCStreamBase(); 31 32 bool isValid(); 33 bool grabFrame(); 34 int getProfileIDX() const; 35 public: 36 virtual bool initStream(PXCSession *session) = 0; 37 virtual double getProperty(int propIdx) const; 38 virtual bool setProperty(int propIdx, double propVal); 39 protected: 40 mutable PXCSmartPtr<PXCCapture::Device> m_device; 41 bool initDevice(PXCSession *session); 42 43 PXCSmartPtr<PXCCapture::VideoStream> m_stream; 44 void initStreamImpl(PXCImage::ImageType type); 45 protected: 46 std::vector<PXCCapture::VideoStream::ProfileInfo> m_profiles; 47 int m_profileIdx; 48 int m_frameIdx; 49 pxcU64 m_timeStampStartNS; 50 double m_timeStamp; 51 PXCSmartPtr<PXCImage> m_pxcImage; 52 53 virtual bool validProfile(const PXCCapture::VideoStream::ProfileInfo& /*pinfo*/); 54 void enumProfiles(); 55 }; 56 57 class IntelPerCStreamImage 58 : public IntelPerCStreamBase 59 { 60 public: 61 IntelPerCStreamImage(); 62 virtual ~IntelPerCStreamImage(); 63 64 virtual bool initStream(PXCSession *session); 65 virtual double getProperty(int propIdx) const; 66 virtual bool setProperty(int propIdx, double propVal); 67 public: 68 bool retrieveAsOutputArray(OutputArray image); 69 }; 70 71 class IntelPerCStreamDepth 72 : public IntelPerCStreamBase 73 { 74 public: 75 IntelPerCStreamDepth(); 76 virtual ~IntelPerCStreamDepth(); 77 78 virtual bool initStream(PXCSession *session); 79 virtual double getProperty(int propIdx) const; 80 virtual bool setProperty(int propIdx, double propVal); 81 public: 82 bool retrieveDepthAsOutputArray(OutputArray image); 83 bool retrieveIRAsOutputArray(OutputArray image); 84 bool retrieveUVAsOutputArray(OutputArray image); 85 protected: 86 virtual bool validProfile(const PXCCapture::VideoStream::ProfileInfo& pinfo); 87 protected: 88 bool retriveFrame(int type, int planeIdx, OutputArray frame); 89 }; 90 91 class VideoCapture_IntelPerC : public IVideoCapture 92 { 93 public: 94 VideoCapture_IntelPerC(); 95 virtual ~VideoCapture_IntelPerC(); 96 97 virtual double getProperty(int propIdx) const; 98 virtual bool setProperty(int propIdx, double propVal); 99 100 virtual bool grabFrame(); 101 virtual bool retrieveFrame(int outputType, OutputArray frame); 102 virtual int getCaptureDomain(); 103 virtual bool isOpened() const; 104 protected: 105 bool m_contextOpened; 106 107 PXCSmartPtr<PXCSession> m_session; 108 IntelPerCStreamImage m_imageStream; 109 IntelPerCStreamDepth m_depthStream; 110 }; 111 112 } 113 114 #endif //HAVE_INTELPERC 115 #endif //_CAP_INTELPERC_HPP_