17const PropertyCapability DeviceCapabilities::empty_capability_ = {};
20 : device_(device), device_accessible_(
false) {
22 if (device_accessible_) {
27void DeviceCapabilities::scan_capabilities() {
28 camera_capabilities_.clear();
29 video_capabilities_.clear();
35 device_accessible_ =
false;
42 PropertyCapability capability;
45 auto range_result = camera.get_range(prop);
46 if (range_result.is_ok()) {
47 capability.supported =
true;
48 capability.range = range_result.
value();
51 auto current_result = camera.get(prop);
52 if (current_result.is_ok()) {
53 capability.current = current_result.
value();
59 camera_capabilities_[prop] = capability;
66 PropertyCapability capability;
69 auto range_result = camera.get_range(prop);
70 if (range_result.is_ok()) {
71 capability.supported =
true;
72 capability.range = range_result.value();
75 auto current_result = camera.get(prop);
76 if (current_result.is_ok()) {
77 capability.current = current_result.value();
83 video_capabilities_[prop] = capability;
88const PropertyCapability &
90 auto it = camera_capabilities_.find(
prop);
91 return it != camera_capabilities_.end() ?
it->second : empty_capability_;
96 auto it = video_capabilities_.find(
prop);
97 return it != video_capabilities_.end() ?
it->second : empty_capability_;
109 std::vector<CamProp>
props;
110 for (
const auto &pair : camera_capabilities_) {
111 if (pair.second.supported) {
112 props.push_back(pair.first);
119 std::vector<VidProp>
props;
120 for (
const auto &pair : video_capabilities_) {
121 if (pair.second.supported) {
122 props.push_back(pair.first);
130 if (!device_accessible_) {
134 camera_capabilities_.clear();
135 video_capabilities_.clear();
159 "Device has corrupted string data (null pointer with non-zero size)");
164 if (!device.
name.empty()) {
167 if (!device.
path.empty()) {
171 }
catch (
const std::exception&
e) {
173 std::string(
"Device object has corrupted memory: ") +
e.what());
176 "Device object has corrupted memory (unknown exception)");
185 return Ok(std::move(capabilities));
192 "Invalid device index");
#define DUVC_LOG_WARNING(msg)
RAII camera handle for simplified device management.
Device capability detection and snapshots using Camera API.
RAII camera handle for simplified device management.
Complete device capability snapshot.
const PropertyCapability & get_video_capability(VidProp prop) const
Get video property capability.
DeviceCapabilities(const Device &device)
Create capabilities snapshot for device.
std::vector< CamProp > supported_camera_properties() const
Get list of supported camera properties.
bool supports_video_property(VidProp prop) const
Check if video property is supported.
Result< void > refresh()
Refresh capability snapshot.
bool supports_camera_property(CamProp prop) const
Check if camera property is supported.
std::vector< VidProp > supported_video_properties() const
Get list of supported video properties.
const PropertyCapability & get_camera_capability(CamProp prop) const
Get camera property capability.
bool is_device_accessible() const
Check if device is connected and accessible.
Result type that can contain either a value or an error.
const T & value() const &
Get the value (assumes success)
Device enumeration and management functions.
Structured logging interface for duvc-ctl.
VidProp
Video processing properties (IAMVideoProcAmp interface)
@ InvalidArgument
Invalid function argument.
@ DeviceNotFound
Device not found or disconnected.
Result< DeviceCapabilities > get_device_capabilities(const Device &device)
Create device capability snapshot.
std::vector< Device > list_devices()
Enumerate all available video input devices.
const char * to_string(CamProp)
Convert camera property enum to string.
CamProp
Camera control properties (IAMCameraControl interface)
@ Lamp
Camera lamp/flash control.
bool is_device_connected(const Device &dev)
Check if a device is currently connected and accessible.
Result< void > Ok()
Helper to create successful void Result.
Result/Error type system for duvc-ctl.
String conversion utilities for enums and types.
Represents a camera device.
std::wstring path
Unique device path/identifier.
std::wstring name
Human-readable device name.
bool is_valid() const
Check if device has valid identifying information.
Property capability information.