azure_kinect/
camera.rs

1use crate::*;
2use azure_kinect_sys::k4a::*;
3use std::ptr;
4
5pub struct Camera<'a> {
6    pub(crate) device: &'a Device<'a>,
7}
8
9impl<'a> Camera<'a> {
10    pub(crate) fn new(
11        device: &'a Device<'a>,
12        configuration: &DeviceConfiguration,
13    ) -> Result<Camera<'a>, Error> {
14        Error::from_k4a_result_t(unsafe {
15            (device.api.funcs.k4a_device_start_cameras)(device.handle, &configuration.value)
16        })
17        .to_result(())?;
18        Ok(Camera::<'a> { device })
19    }
20
21    /// Reads a sensor capture into cap.  Returns true if a capture was read, false if the read timed out.
22    pub fn get_capture(&self, timeout_in_ms: i32) -> Result<Capture, Error> {
23        let mut handle: k4a_capture_t = ptr::null_mut();
24        Error::from_k4a_wait_result_t(unsafe {
25            (self.device.api.funcs.k4a_device_get_capture)(
26                self.device.handle,
27                &mut handle,
28                timeout_in_ms,
29            )
30        })
31        .to_result_fn(|| Capture::from_handle(&self.device.api, handle))
32    }
33
34    /// Reads a sensor capture into cap.  Returns true if a capture was read, false if the read timed out.
35    pub fn get_capture_wait_infinite(&self) -> Result<Capture, Error> {
36        self.get_capture(K4A_WAIT_INFINITE)
37    }
38
39    /// Starts the K4A IMU
40    pub fn start_imu(&self) -> Result<Imu, Error> {
41        Imu::new(self.device)
42    }
43}
44
45impl Drop for Camera<'_> {
46    fn drop(&mut self) {
47        unsafe {
48            (self.device.api.funcs.k4a_device_stop_cameras)(self.device.handle);
49        }
50    }
51}