#ifndef __DEVICEDISCOVERY_H__ #define __DEVICEDISCOVERY_H__ #include <memory> #include <string> #include <system_error> #include <vector> #ifdef WIN32 #include <mfidl.h> #include <mfreadwrite.h> #endif class DeviceDiscovery { constexpr static int32_t OtaSpecificWidth = 96; public: constexpr static auto DeviceName = "UVC Camera"; struct Device { ~Device(); #ifdef WIN32 Device(IMFMediaSource *source); IMFMediaSource *source = nullptr; IMFSourceReader *reader = nullptr; #else std::string name; #endif }; using Resolution = std::pair<int32_t, int32_t>; using Resolutions = std::vector<Resolution>; DeviceDiscovery(); std::shared_ptr<Device> find(const std::string &deviceName, std::error_code &error); void enterOtaMode(const std::shared_ptr<Device> &device, std::error_code &error); std::vector<std::string> devices(); protected: Resolutions deviceResolutions(const std::shared_ptr<Device> &source); }; #endif // __DEVICEDISCOVERY_H__