print_camera/
print_camera.rs

1use ccap::{LogLevel, Provider, Result, Utils};
2
3fn find_camera_names() -> Result<Vec<String>> {
4    // Create a temporary provider to query devices
5    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    // Create provider with specific device name
24    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    // Set error callback to receive error notifications
64    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}