/* Copyright (c) 2019 Stanislaw Halik * * 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 #include "video/camera.hpp" #include #include #include namespace opencv_camera_impl { using namespace video::impl; struct cam; struct metadata : camera_ { metadata(); 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; }; struct cam final : camera { static constexpr int video_capture_backend = #ifdef _WIN32 cv::CAP_DSHOW; #elif !defined __APPLE__ cv::CAP_V4L2; #else cv::CAP_ANY; #endif cam(int idx); ~cam() override; bool start(info& args) override; void stop() override; bool is_open() override; std::tuple get_frame() override; bool show_dialog() override; bool get_frame_(); std::optional cap; cv::Mat mat; frame frame_; int idx = -1; }; } // ns opencv_camera_impl