screencapturekit/cm/mod.rs
1//! Core Media types and wrappers
2//!
3//! This module provides Rust wrappers for Core Media framework types used in
4//! screen capture operations.
5//!
6//! ## Main Types
7//!
8//! - [`CMSampleBuffer`] - Container for media samples (audio/video frames)
9//! - [`CMTime`] - Time value with rational timescale for precise timing
10//! - [`IOSurface`] - Hardware-accelerated surface for zero-copy GPU access
11//! - [`CMBlockBuffer`] - Block of contiguous data (audio/compressed video)
12//! - [`AudioBuffer`] - Audio data buffer with sample data
13//! - [`AudioBufferList`] - Collection of audio buffers for multi-channel audio
14//! - [`SCFrameStatus`] - Status of a captured frame (complete, idle, dropped, etc.)
15//!
16//! ## Example
17//!
18//! ```rust,no_run
19//! use screencapturekit::cm::{CMSampleBuffer, CMTime, SCFrameStatus};
20//!
21//! fn process_frame(sample: CMSampleBuffer) {
22//! // Check frame status
23//! if sample.frame_status() == Some(SCFrameStatus::Complete) {
24//! // Get timestamp
25//! let pts = sample.presentation_timestamp();
26//! println!("Frame at {:?}", pts);
27//!
28//! // Access pixel buffer for CPU processing
29//! if let Some(pixel_buffer) = sample.image_buffer() {
30//! // Access IOSurface for GPU processing
31//! if let Some(surface) = pixel_buffer.io_surface() {
32//! println!("Surface: {}x{}", surface.width(), surface.height());
33//! }
34//! }
35//! }
36//! }
37//! ```
38
39mod audio;
40mod block_buffer;
41pub mod ffi;
42mod format_description;
43mod frame_status;
44pub mod iosurface;
45mod sample_buffer;
46mod time;
47
48// Re-export all public types
49pub use audio::{
50 AudioBuffer, AudioBufferList, AudioBufferListIter, AudioBufferListRaw, AudioBufferRef,
51};
52pub use block_buffer::CMBlockBuffer;
53pub use format_description::CMFormatDescription;
54pub use frame_status::SCFrameStatus;
55pub use iosurface::{IOSurface, IOSurfaceLockGuard, IOSurfaceLockOptions, PlaneProperties};
56pub use sample_buffer::CMSampleBuffer;
57pub use time::{CMClock, CMSampleTimingInfo, CMTime};
58
59// Re-export codec and media type modules from format_description
60pub use format_description::codec_types;
61pub use format_description::media_types;