Discover ready-to-open camera configurations without starting capture.
58{
59#ifdef MAYAFLUX_PLATFORM_MACOS
60 return enumerate_macos_cameras();
61#else
62 std::vector<CameraConfig> configs;
63
64 avdevice_register_all();
65 const AVInputFormat*
format = av_find_input_format(std::string(CAMERA_FORMAT).c_str());
66 AVDeviceInfoList* list = nullptr;
67 if (!
format || avdevice_list_input_sources(
format,
nullptr,
nullptr, &list) < 0)
68 return configs;
69
70 for (int i = 0; i < list->nb_devices; ++i) {
71 const AVDeviceInfo& info = *list->devices[i];
72 if (!provides_video(info))
73 continue;
74
75 CameraConfig config;
76 config.device_name = info.device_name;
77 config.display_name = info.device_description ? info.device_description : "";
78#ifdef MAYAFLUX_PLATFORM_WINDOWS
79 config.device_name.insert(0, "video=");
80#endif
81#ifdef MAYAFLUX_PLATFORM_LINUX
82 if (!can_capture(config.device_name))
83 continue;
84#endif
85 configs.push_back(std::move(config));
86 }
87 avdevice_free_list_devices(&list);
88
90 return configs;
91#endif
92}
std::string device_name
Platform device string.