kinect_v2/
lib.rs

1pub mod audio_capture;
2pub mod body_capture;
3pub mod body_index_capture;
4pub mod color_capture;
5pub mod depth_capture;
6pub mod infrared_capture;
7pub mod multi_source_capture;
8
9pub use kinect_v2_sys::bindings::Activity;
10pub use kinect_v2_sys::bindings::Appearance;
11pub use kinect_v2_sys::bindings::AudioBeamMode;
12pub use kinect_v2_sys::bindings::ColorImageFormat;
13pub use kinect_v2_sys::bindings::DetectionResult;
14pub use kinect_v2_sys::bindings::Expression;
15pub use kinect_v2_sys::bindings::FrameCapturedStatus;
16pub use kinect_v2_sys::bindings::FrameEdges;
17pub use kinect_v2_sys::bindings::FrameSourceTypes;
18pub use kinect_v2_sys::bindings::HandState;
19pub use kinect_v2_sys::bindings::HandType;
20pub use kinect_v2_sys::bindings::JointType;
21pub use kinect_v2_sys::bindings::KinectAudioCalibrationState;
22pub use kinect_v2_sys::bindings::KinectCapabilities;
23pub use kinect_v2_sys::bindings::KinectEngagementMode;
24pub use kinect_v2_sys::bindings::KinectGestureSettings;
25pub use kinect_v2_sys::bindings::KinectHoldingState;
26pub use kinect_v2_sys::bindings::KinectInteractionMode;
27pub use kinect_v2_sys::bindings::PointerDeviceType;
28pub use kinect_v2_sys::bindings::TrackingConfidence;
29pub use kinect_v2_sys::bindings::TrackingState;
30
31use kinect_v2_sys::kinect::KinectSensor;
32use windows::core::Error;
33
34#[derive(Debug, Clone)]
35pub struct Kinect {
36    sensor: KinectSensor,
37    opened: bool,
38}
39
40impl Kinect {
41    /// Create and open the default Kinect sensor. Returns an error if no sensor is present or opening fails.
42    pub fn new() -> Result<Self, Error> {
43        let sensor = kinect_v2_sys::kinect::get_default_kinect_sensor()?;
44        // try to open immediately so new() returns a ready-to-use instance
45        sensor.open()?;
46        Ok(Kinect {
47            sensor,
48            opened: true,
49        })
50    }
51
52    /// Query sensor availability.
53    pub fn is_available(&self) -> Result<bool, Error> {
54        self.sensor.is_available()
55    }
56
57    /// Close the sensor explicitly. Returns any error encountered.
58    pub fn close(&mut self) -> Result<(), Error> {
59        if self.opened {
60            self.sensor.close()?;
61            self.opened = false;
62        }
63        Ok(())
64    }
65}
66
67impl Drop for Kinect {
68    fn drop(&mut self) {
69        log::trace!("Kinect sensor is being closed");
70        // best-effort cleanup; ignore errors in Drop
71        let _ = self.sensor.close();
72    }
73}
74
75#[cfg(test)]
76mod tests {
77    // TODO: Add tests for the kinect-v2 module
78}