/* Copyright (c) 2019 Stéphane Lenclud * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. */ #pragma once #ifdef OTR_HAVE_OPENCV #include //#include "pt-api.hpp" #include "compat/timer.hpp" #include "video/camera.hpp" #include #include #include #include namespace Kinect { struct CamerasProvider : video::impl::camera_ { CamerasProvider(); std::vector camera_names() const override; std::unique_ptr make_camera(const QString& name) override; bool can_show_dialog(const QString& camera_name) override; bool show_dialog(const QString& camera_name) override; }; /// /// Implement our camera interface using Kinect V2 SDK IR Sensor. /// struct CameraKinectIr final : video::impl::camera { CameraKinectIr(); virtual ~CameraKinectIr(); [[nodiscard]] bool start(const info& args) override; void stop() override; bool is_open() override; std::tuple get_frame() override; [[nodiscard]] bool show_dialog() override; private: bool get_frame_(cv::Mat& frame); void WaitForFirstFrame(); private: // Current Kinect IKinectSensor* iKinectSensor = nullptr; // Infrared reader IInfraredFrameReader* iInfraredFrameReader = nullptr; // Frame needs to stay alive while we access the data buffer IInfraredFrame* iInfraredFrame = nullptr; video::frame iFrame; cv::Mat iMatFrame; }; } #endif