1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/// Retrieves a list of available video input devices (e.g., cameras) on the system.
///
/// This function attempts to query the available video devices that can be used as input,
/// similar to the command `ffmpeg -list_devices`. The function behavior is dependent on the
/// operating system being used:
///
/// - **macOS**: Uses AVFoundation to gather information on available video devices.
/// The AVFoundation framework allows direct access to multimedia devices,
/// and the function specifically filters for "vide" devices, which represent video input sources.
/// - **Other Operating Systems**: Calls a general `avdevice` function to obtain a list of
/// video input devices using FFmpeg's device capabilities.
///
/// # Returns
///
/// A `Result` containing a `Vec<String>` with the names of available video input devices.
/// If successful, the vector contains the names of devices such as "FaceTime HD Camera".
/// If an error occurs, it returns a custom error type defined in `crate::error`.
///
/// # Example
///
/// ```rust,ignore
/// let video_devices = get_input_video_devices()?;
/// for device in video_devices {
/// println!("Available video device: {}", device);
/// }
/// ```
///
/// # Errors
///
/// This function returns an error if the device query process fails on any platform.
/// Retrieves a list of available audio input devices (e.g., microphones) on the system.
///
/// This function attempts to query the available audio devices that can be used as input,
/// similar to the command `ffmpeg -list_devices`. The function behavior depends on the
/// operating system being used:
///
/// - **macOS**: Uses AVFoundation to gather information on available audio devices.
/// The AVFoundation framework allows direct access to multimedia devices,
/// and the function specifically filters for "soun" devices, which represent audio input sources.
/// - **Other Operating Systems**: Calls a general `avdevice` function to obtain a list of
/// audio input devices using FFmpeg's device capabilities.
///
/// # Returns
///
/// A `Result` containing a `Vec<String>` with the names of available audio input devices.
/// If successful, the vector contains the names of devices such as "Built-in Microphone".
/// If an error occurs, it returns a custom error type defined in `crate::error`.
///
/// # Example
///
/// ```rust,ignore
/// let audio_devices = get_input_audio_devices()?;
/// for device in audio_devices {
/// println!("Available audio device: {}", device);
/// }
/// ```
///
/// # Errors
///
/// This function returns an error if the device query process fails on any platform.