Skip to main content

media_pp/elements/source/
mod.rs

1//! Elements that produce buffers.
2//!
3//! Three shapes live here. Readers pull from something that already exists —
4//! a container, an RTSP stream, a capture device, or the application itself
5//! through [`AppSource`]. Generators synthesize
6//! ([`TestVideoSource`], [`TestAudioSource`]). And fan-in elements
7//! ([`AudioMixer`] and the video compositors) are sources with inputs: they
8//! accept buffers from several upstream branches and emit one combined stream
9//! on their own schedule.
10//!
11//! [`Pipeline::new`](crate::pipeline::Pipeline::new) builds the common
12//! single-source case. [`PipelineBuilder`](crate::pipeline::PipelineBuilder)
13//! can register one or more of these in the same pipeline; each one's
14//! [`SourceElement::run`](crate::element::SourceElement::run) loop drives its
15//! own branches on a separate background thread.
16
17mod app_source;
18mod audio_mixer;
19mod capture;
20mod compositor;
21mod file_demuxer;
22mod pipeline_bridge;
23mod rtsp_source;
24mod test;
25
26#[cfg(all(
27    target_os = "linux",
28    any(
29        feature = "pipewire-audio-capture",
30        feature = "pipewire-audio-renderer"
31    )
32))]
33pub use crate::platform::linux::pipewire::{
34    PipeWireAudioDevice, PipeWireAudioDeviceKind, PipeWireDeviceError,
35};
36#[cfg(all(
37    target_os = "windows",
38    any(feature = "wasapi-capture", feature = "wasapi-renderer")
39))]
40pub use crate::platform::windows::wasapi::{WasapiDevice, WasapiDeviceKind};
41pub use app_source::{AppSource, AppSourceError, AppSourceHandle};
42pub use audio_mixer::{
43    AudioMixer, AudioMixerError, AudioMixerOptions, MixFormat, MixerHandle, MixerInputSink,
44};
45#[cfg(all(target_os = "windows", feature = "dxgi-capture"))]
46pub use capture::{
47    CaptureArea, CaptureMode, CaptureRect, DxgiCaptureOptions, DxgiCaptureSource,
48    DxgiCaptureSourceError,
49};
50#[cfg(all(target_os = "linux", feature = "pipewire-screen-capture"))]
51pub use capture::{
52    CaptureSourceKind, PipeWireScreenCaptureOptions, PipeWireScreenCaptureSource,
53    PipeWireScreenCaptureSourceError,
54};
55#[cfg(all(target_os = "windows", feature = "mf-capture"))]
56pub use capture::{MfCaptureOptions, MfCaptureSource, MfCaptureSourceError};
57#[cfg(all(target_os = "linux", feature = "pipewire-audio-capture"))]
58pub use capture::{
59    PipeWireAudioCaptureOptions, PipeWireAudioCaptureSource, PipeWireAudioCaptureSourceError,
60};
61#[cfg(all(target_os = "linux", feature = "v4l2-capture"))]
62pub use capture::{V4l2CaptureOptions, V4l2CaptureSource, V4l2CaptureSourceError};
63#[cfg(all(target_os = "windows", feature = "wasapi-capture"))]
64pub use capture::{WasapiCaptureOptions, WasapiCaptureSource, WasapiCaptureSourceError};
65#[cfg(all(target_os = "windows", feature = "wgc-capture"))]
66pub use capture::{WgcCaptureOptions, WgcCaptureSource, WgcCaptureSourceError};
67#[cfg(feature = "cuda")]
68pub use compositor::{
69    CudaTextLayerHandle, CudaVideoCompositor, CudaVideoCompositorError, CudaVideoCompositorHandle,
70    CudaVideoCompositorInput, CudaVideoCompositorInputSink, CudaVideoLayerHandle,
71};
72#[cfg(all(target_os = "windows", feature = "d3d11"))]
73pub use compositor::{
74    D3d11TextLayerError, D3d11TextLayerHandle, D3d11VideoCompositor, D3d11VideoCompositorError,
75    D3d11VideoCompositorHandle, D3d11VideoCompositorInput, D3d11VideoCompositorInputSink,
76    D3d11VideoLayerHandle,
77};
78pub use compositor::{
79    SwVideoCompositor, SwVideoCompositorError, SwVideoCompositorHandle, SwVideoCompositorInput,
80    SwVideoCompositorInputSink, SwVideoLayerHandle, TextLayer, VideoCompositorOptions, VideoFit,
81    VideoInputId, VideoLayer, VideoRect, VideoSourceRect,
82};
83pub use file_demuxer::{FileDemuxError, FileDemuxer, FileDemuxerHandle, StreamInfo};
84pub use pipeline_bridge::{
85    PipelineBridge, PipelineBridgeError, PipelineBridgeHandle, PipelineBridgeOptions,
86};
87pub use rtsp_source::{RtspOptions, RtspSource, RtspSourceError};
88pub use test::{
89    TestAudioOptions, TestAudioSource, TestAudioSourceError, TestVideoOptions, TestVideoSource,
90    TestVideoSourceError,
91};