print_camera/
print_camera.rs1use ccap::{LogLevel, Provider, Result, Utils};
2
3fn find_camera_names() -> Result<Vec<String>> {
4 let provider = Provider::new()?;
6 let devices = provider.list_devices()?;
7
8 if !devices.is_empty() {
9 println!("## Found {} video capture device:", devices.len());
10 for (index, name) in devices.iter().enumerate() {
11 println!(" {}: {}", index, name);
12 }
13 } else {
14 eprintln!("Failed to find any video capture device.");
15 }
16
17 Ok(devices)
18}
19
20fn print_camera_info(device_name: &str) -> Result<()> {
21 Utils::set_log_level(LogLevel::Verbose);
22
23 let provider = match Provider::with_device_name(device_name) {
25 Ok(p) => p,
26 Err(e) => {
27 eprintln!(
28 "### Failed to create provider for device: {}, error: {}",
29 device_name, e
30 );
31 return Ok(());
32 }
33 };
34
35 match provider.device_info() {
36 Ok(device_info) => {
37 println!("===== Info for device: {} =======", device_name);
38
39 println!(" Supported resolutions:");
40 for resolution in &device_info.supported_resolutions {
41 println!(" {}x{}", resolution.width, resolution.height);
42 }
43
44 println!(" Supported pixel formats:");
45 for format in &device_info.supported_pixel_formats {
46 println!(" {}", format.as_str());
47 }
48
49 println!("===== Info end =======\n");
50 }
51 Err(e) => {
52 eprintln!(
53 "Failed to get device info for: {}, error: {}",
54 device_name, e
55 );
56 }
57 }
58
59 Ok(())
60}
61
62fn main() -> Result<()> {
63 Provider::set_error_callback(|error_code, description| {
65 eprintln!(
66 "Camera Error - Code: {}, Description: {}",
67 error_code, description
68 );
69 });
70
71 let device_names = find_camera_names()?;
72 if device_names.is_empty() {
73 return Ok(());
74 }
75
76 for name in &device_names {
77 if let Err(e) = print_camera_info(name) {
78 eprintln!("Error processing device {}: {}", name, e);
79 }
80 }
81
82 Ok(())
83}