device: add a few capability-related methods
diff --git a/lib/examples/vicodec_test/device_api.rs b/lib/examples/vicodec_test/device_api.rs
index d2ce37c..d104eb2 100644
--- a/lib/examples/vicodec_test/device_api.rs
+++ b/lib/examples/vicodec_test/device_api.rs
@@ -27,7 +27,7 @@
mut save_output: F,
) {
let device = Device::open(device_path, DeviceConfig::new()).expect("Failed to open device");
- let caps = &device.capability;
+ let caps = device.caps();
println!(
"Opened device: {}\n\tdriver: {}\n\tbus: {}\n\tcapabilities: {}",
caps.card, caps.driver, caps.bus_info, caps.capabilities
diff --git a/lib/src/device.rs b/lib/src/device.rs
index f44924c..c69290d 100644
--- a/lib/src/device.rs
+++ b/lib/src/device.rs
@@ -52,7 +52,7 @@
/// An opened V4L2 device. `Queue` objects can be instantiated from it.
pub struct Device {
- pub capability: Capability,
+ capability: Capability,
fd: File,
used_queues: Mutex<BTreeSet<QueueType>>,
}
@@ -91,6 +91,11 @@
// Safe because we are constructing a file from Fd we just opened.
Ok(Device::new(unsafe { File::from_raw_fd(fd) })?)
}
+
+ /// Returns the capabilities of the device, i.e. the result of QUERYCAPS.
+ pub fn caps(&self) -> &Capability {
+ &self.capability
+ }
}
impl AsRawFd for Device {
diff --git a/lib/src/ioctl/querycap.rs b/lib/src/ioctl/querycap.rs
index f7b0dfd..1e6b164 100644
--- a/lib/src/ioctl/querycap.rs
+++ b/lib/src/ioctl/querycap.rs
@@ -85,6 +85,19 @@
pub device_caps: Option<Capabilities>,
}
+impl Capability {
+ /// Returns the set of capabilities of the hardware as a whole.
+ pub fn capabilities(&self) -> Capabilities {
+ self.capabilities
+ }
+
+ /// Returns the capabilities that apply to the currently opened V4L2 node.
+ pub fn device_caps(&self) -> Capabilities {
+ self.device_caps
+ .unwrap_or_else(|| self.capabilities.difference(Capabilities::DEVICE_CAPS))
+ }
+}
+
impl QueryCap for Capability {
fn from(qcap: bindings::v4l2_capability) -> Self {
Capability {