duvc-ctl 2.0.0
USB Video Class Camera Control Library
Loading...
Searching...
No Matches
bindings.cpp
Go to the documentation of this file.
1#include "duvc-ctl/core.h"
2#include <vector>
3#include <mutex>
4
5#ifdef _WIN32
6#define DUVCC_API __declspec(dllexport)
7#else
8#define DUVCC_API
9#endif
10
11extern "C" {
12
13// Thread-safe device management
14static std::mutex g_devices_mutex;
15static std::vector<duvc::Device> g_devices;
16
18 std::lock_guard<std::mutex> lock(g_devices_mutex);
20}
21
23 std::lock_guard<std::mutex> lock(g_devices_mutex);
24 if (g_devices.empty()) {
26 }
27 return static_cast<int>(g_devices.size());
28}
29
30DUVCC_API const wchar_t* duvc_get_device_name(int index) {
31 std::lock_guard<std::mutex> lock(g_devices_mutex);
32 if (g_devices.empty()) {
34 }
35 if (index < 0 || index >= static_cast<int>(g_devices.size())) return nullptr;
36 return g_devices[index].name.c_str();
37}
38
39DUVCC_API const wchar_t* duvc_get_device_path(int index) {
40 std::lock_guard<std::mutex> lock(g_devices_mutex);
41 if (g_devices.empty()) {
43 }
44 if (index < 0 || index >= static_cast<int>(g_devices.size())) return nullptr;
45 return g_devices[index].path.c_str();
46}
47
49 std::lock_guard<std::mutex> lock(g_devices_mutex);
50 if (g_devices.empty()) {
52 }
53 if (index < 0 || index >= static_cast<int>(g_devices.size())) return 0;
54 return duvc::is_device_connected(g_devices[index]) ? 1 : 0;
55}
56
60
61DUVCC_API int duvc_cam_get_range(int index, int camProp, int* outMin, int* outMax, int* outStep, int* outDef, int* outModeAuto) {
62 std::lock_guard<std::mutex> lock(g_devices_mutex);
63 if (g_devices.empty()) {
65 }
66 if (index < 0 || index >= static_cast<int>(g_devices.size())) return 0;
68 if (!duvc::get_range(g_devices[index], static_cast<duvc::CamProp>(camProp), r)) return 0;
69 if (outMin) *outMin = r.min;
70 if (outMax) *outMax = r.max;
71 if (outStep) *outStep = r.step;
72 if (outDef) *outDef = r.default_val;
73 if (outModeAuto) *outModeAuto = (r.default_mode == duvc::CamMode::Auto) ? 1 : 0;
74 return 1;
75}
76
77DUVCC_API int duvc_cam_get(int index, int camProp, int* outValue, int* outModeAuto) {
78 std::lock_guard<std::mutex> lock(g_devices_mutex);
79 if (g_devices.empty()) {
81 }
82 if (index < 0 || index >= static_cast<int>(g_devices.size())) return 0;
84 if (!duvc::get(g_devices[index], static_cast<duvc::CamProp>(camProp), s)) return 0;
85 if (outValue) *outValue = s.value;
86 if (outModeAuto) *outModeAuto = (s.mode == duvc::CamMode::Auto) ? 1 : 0;
87 return 1;
88}
89
90DUVCC_API int duvc_cam_set(int index, int camProp, int value, int modeAuto) {
91 std::lock_guard<std::mutex> lock(g_devices_mutex);
92 if (g_devices.empty()) {
94 }
95 if (index < 0 || index >= static_cast<int>(g_devices.size())) return 0;
97 return duvc::set(g_devices[index], static_cast<duvc::CamProp>(camProp), s) ? 1 : 0;
98}
99
100// VideoProcAmp domain
101DUVCC_API int duvc_vid_get_range(int index, int vidProp, int* outMin, int* outMax, int* outStep, int* outDef, int* outModeAuto) {
102 std::lock_guard<std::mutex> lock(g_devices_mutex);
103 if (g_devices.empty()) {
105 }
106 if (index < 0 || index >= static_cast<int>(g_devices.size())) return 0;
107 duvc::PropRange r{};
108 if (!duvc::get_range(g_devices[index], static_cast<duvc::VidProp>(vidProp), r)) return 0;
109 if (outMin) *outMin = r.min;
110 if (outMax) *outMax = r.max;
111 if (outStep) *outStep = r.step;
112 if (outDef) *outDef = r.default_val;
113 if (outModeAuto) *outModeAuto = (r.default_mode == duvc::CamMode::Auto) ? 1 : 0;
114 return 1;
115}
116
117DUVCC_API int duvc_vid_get(int index, int vidProp, int* outValue, int* outModeAuto) {
118 std::lock_guard<std::mutex> lock(g_devices_mutex);
119 if (g_devices.empty()) {
121 }
122 if (index < 0 || index >= static_cast<int>(g_devices.size())) return 0;
124 if (!duvc::get(g_devices[index], static_cast<duvc::VidProp>(vidProp), s)) return 0;
125 if (outValue) *outValue = s.value;
126 if (outModeAuto) *outModeAuto = (s.mode == duvc::CamMode::Auto) ? 1 : 0;
127 return 1;
128}
129
130DUVCC_API int duvc_vid_set(int index, int vidProp, int value, int modeAuto) {
131 std::lock_guard<std::mutex> lock(g_devices_mutex);
132 if (g_devices.empty()) {
134 }
135 if (index < 0 || index >= static_cast<int>(g_devices.size())) return 0;
137 return duvc::set(g_devices[index], static_cast<duvc::VidProp>(vidProp), s) ? 1 : 0;
138}
139
140} // extern "C"
int duvc_vid_set(int index, int vidProp, int value, int modeAuto)
Definition bindings.cpp:130
int duvc_cam_get(int index, int camProp, int *outValue, int *outModeAuto)
Definition bindings.cpp:77
int duvc_vid_get(int index, int vidProp, int *outValue, int *outModeAuto)
Definition bindings.cpp:117
void duvc_refresh_devices()
Definition bindings.cpp:17
const wchar_t * duvc_get_device_name(int index)
Definition bindings.cpp:30
int duvc_cam_set(int index, int camProp, int value, int modeAuto)
Definition bindings.cpp:90
int duvc_cam_get_range(int index, int camProp, int *outMin, int *outMax, int *outStep, int *outDef, int *outModeAuto)
Definition bindings.cpp:61
int duvc_get_device_count()
Definition bindings.cpp:22
const wchar_t * duvc_get_device_path(int index)
Definition bindings.cpp:39
static std::mutex g_devices_mutex
Definition bindings.cpp:14
void duvc_clear_cache()
Definition bindings.cpp:57
#define DUVCC_API
Definition bindings.cpp:6
static std::vector< duvc::Device > g_devices
Definition bindings.cpp:15
int duvc_is_device_connected(int index)
Definition bindings.cpp:48
int duvc_vid_get_range(int index, int vidProp, int *outMin, int *outMax, int *outStep, int *outDef, int *outModeAuto)
Definition bindings.cpp:101
bool get(const Device &, CamProp, PropSetting &)
Get a camera control property value.
Definition duvc.hpp:63
bool set(const Device &, CamProp, const PropSetting &)
Set a camera control property value.
Definition duvc.hpp:81
bool get_range(const Device &, CamProp, PropRange &)
Get the valid range for a camera control property.
Definition duvc.hpp:95
VidProp
Video processing properties (IAMVideoProcAmp interface)
Definition types.h:50
void clear_connection_cache()
Definition core.cpp:505
std::vector< Device > list_devices()
Enumerate all available video input devices.
Definition core.cpp:626
@ Auto
Automatic control by camera.
@ Manual
Manual control by application.
CamProp
Camera control properties (IAMCameraControl interface)
Definition types.h:18
bool is_device_connected(const Device &dev)
Check if a device is currently connected and accessible.
Definition core.cpp:549
Property range and default information.
Definition types.h:92
int min
Minimum supported value.
Definition types.h:93
Property setting with value and control mode.
Definition types.h:74
int value
Property value.
Definition types.h:75