// Copyright 2018 Slightech Co., Ltd. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef MYNTEYE_DEVICE_H_ // NOLINT #define MYNTEYE_DEVICE_H_ #pragma once #include #include #include #include #include #include #include "mynteye/callbacks.h" #include "mynteye/mynteye.h" #include "mynteye/types.h" MYNTEYE_BEGIN_NAMESPACE namespace uvc { struct device; } // namespace uvc namespace tools { class DeviceWriter; } // namespace tools struct DeviceInfo; class API; class Channels; class Motions; class Streams; class MYNTEYE_API Device { public: using stream_callback_t = device::StreamCallback; using motion_callback_t = device::MotionCallback; using stream_callbacks_t = std::map; Device(const Model &model, std::shared_ptr device); virtual ~Device(); static std::shared_ptr Create( const std::string &name, std::shared_ptr device); Model GetModel() const { return model_; } bool Supports(const Stream &stream) const; bool Supports(const Capabilities &capability) const; bool Supports(const Option &option) const; bool Supports(const AddOns &addon) const; const std::vector &GetStreamRequests( const Capabilities &capability) const; void ConfigStreamRequest( const Capabilities &capability, const StreamRequest &request); std::shared_ptr GetInfo() const; std::string GetInfo(const Info &info) const; Intrinsics GetIntrinsics(const Stream &stream) const; Extrinsics GetExtrinsics(const Stream &from, const Stream &to) const; MotionIntrinsics GetMotionIntrinsics() const; Extrinsics GetMotionExtrinsics(const Stream &from) const; void SetIntrinsics(const Stream &stream, const Intrinsics &in); void SetExtrinsics( const Stream &from, const Stream &to, const Extrinsics &ex); void SetMotionIntrinsics(const MotionIntrinsics &in); void SetMotionExtrinsics(const Stream &from, const Extrinsics &ex); void LogOptionInfos() const; OptionInfo GetOptionInfo(const Option &option) const; std::int32_t GetOptionValue(const Option &option) const; void SetOptionValue(const Option &option, std::int32_t value); bool RunOptionAction(const Option &option) const; void SetStreamCallback(const Stream &stream, stream_callback_t callback); void SetMotionCallback(motion_callback_t callback); bool HasStreamCallback(const Stream &stream) const; bool HasMotionCallback() const; virtual void Start(const Source &source); virtual void Stop(const Source &source); void WaitForStreams(); std::vector GetStreamDatas(const Stream &stream); device::StreamData GetLatestStreamData(const Stream &stream); void EnableMotionDatas( std::size_t max_size = std::numeric_limits::max()); std::vector GetMotionDatas(); protected: std::shared_ptr device() const { return device_; } const StreamRequest &GetStreamRequest(const Capabilities &capability); virtual void StartVideoStreaming(); virtual void StopVideoStreaming(); virtual void StartMotionTracking(); virtual void StopMotionTracking(); virtual std::vector GetKeyStreams() const = 0; bool video_streaming_; bool motion_tracking_; private: Model model_; std::shared_ptr device_; std::shared_ptr device_info_; std::map stream_intrinsics_; std::map> stream_from_extrinsics_; std::shared_ptr motion_intrinsics_; std::map motion_from_extrinsics_; stream_callbacks_t stream_callbacks_; motion_callback_t motion_callback_; std::shared_ptr streams_; std::map stream_config_requests_; std::mutex mtx_streams_; std::shared_ptr channels_; std::shared_ptr motions_; void ReadAllInfos(); std::shared_ptr channels() { return channels_; } friend API; friend tools::DeviceWriter; }; MYNTEYE_END_NAMESPACE #endif // MYNTEYE_DEVICE_H_ NOLINT