Skip to content
Snippets Groups Projects
stereovideo.hpp 1.42 KiB
Newer Older
Nicolas Pope's avatar
Nicolas Pope committed
#pragma once
#ifndef _FTL_RGBD_STEREOVIDEO_HPP_
#define _FTL_RGBD_STEREOVIDEO_HPP_

#include <ftl/rgbd/source.hpp>
Sebastian Hahta's avatar
Sebastian Hahta committed
#include <ftl/operators/operator.hpp>
Nicolas Pope's avatar
Nicolas Pope committed
#include <string>

namespace ftl {

namespace rgbd {
namespace detail {

Nicolas Pope's avatar
Nicolas Pope committed
class LocalSource;
class Calibrate;
class Disparity;

/**
 * RGBD source from either a stereo video file with left + right images, or
 * direct from two camera devices. A variety of algorithms are included for
 * calculating disparity, before converting to depth.  Calibration of the images
 * is also performed.
 */
class StereoVideoSource : public detail::Source {
Nicolas Pope's avatar
Nicolas Pope committed
	public:
	explicit StereoVideoSource(ftl::rgbd::Source*);
	StereoVideoSource(ftl::rgbd::Source*, const std::string &);
Nicolas Pope's avatar
Nicolas Pope committed
	~StereoVideoSource();

	void swap();
	bool capture(int64_t ts);
	bool retrieve();
	bool compute(int n, int b);
Nicolas Pope's avatar
Nicolas Pope committed
	bool isReady();
	Camera parameters(ftl::codecs::Channel chan);
Nicolas Pope's avatar
Nicolas Pope committed

	//const cv::Mat &getRight() const { return right_; }
Nicolas Pope's avatar
Nicolas Pope committed

	private:
	LocalSource *lsrc_;
	Calibrate *calib_;
	Disparity *disp_;
Sebastian Hahta's avatar
Sebastian Hahta committed

	ftl::operators::Graph *pipeline_;

Nicolas Pope's avatar
Nicolas Pope committed
	bool ready_;
	bool use_optflow_;
	
	cv::cuda::Stream stream_;
	cv::cuda::Stream stream2_;
	std::vector<Frame> frames_;

	cv::Mat mask_l_;
#ifdef HAVE_OPTFLOW
	// see comments in https://gitlab.utu.fi/nicolas.pope/ftl/issues/155
	cv::Ptr<cv::cuda::NvidiaOpticalFlow_1_0> nvof_;
	cv::cuda::GpuMat optflow_;
#endif

Nicolas Pope's avatar
Nicolas Pope committed
	void init(const std::string &);
Nicolas Pope's avatar
Nicolas Pope committed
};

Nicolas Pope's avatar
Nicolas Pope committed
}
}

#endif  // _FTL_RGBD_STEREOVIDEO_HPP_