Skip to main content

media_pp/
error.rs

1use thiserror::Error;
2
3#[cfg(all(target_os = "windows", feature = "dxgi-capture"))]
4use crate::elements::DxgiCaptureSourceError;
5#[cfg(feature = "ort")]
6use crate::elements::OrtDetectorError;
7use crate::elements::RtspSinkError;
8#[cfg(all(target_os = "windows", feature = "wasapi-capture"))]
9use crate::elements::WasapiCaptureSourceError;
10#[cfg(all(target_os = "windows", feature = "wasapi-renderer"))]
11use crate::elements::WasapiRendererError;
12#[cfg(feature = "webrtc")]
13use crate::elements::WebRtcError;
14#[cfg(all(target_os = "windows", feature = "d3d11"))]
15use crate::elements::{
16    D3d11DownloadError, D3d11NvencEncoderError, D3d11RendererError, D3d11TextLayerError,
17    D3d11UploadError, D3d11VideoCompositorError, D3d11vaDecoderError,
18};
19#[cfg(all(target_os = "windows", feature = "d3d12"))]
20use crate::elements::{D3d12RendererError, D3d12UploadError, D3d12vaDecoderError};
21use crate::{
22    elements::{
23        AppSourceError, AudioMixerError, AudioResamplerError, AudioVolumeError, FileDemuxError,
24        HlsMuxerError, Mp4MuxerError, PacerError, RtspSourceError, ScalerError,
25        SwAudioEncoderError, SwDecoderError, SwEncoderError, TestAudioSourceError,
26        TestVideoSourceError, VideoCompositorError, VideoSynchronizerError,
27    },
28    graph::GraphError,
29    log::LogInitError,
30    queue::QueueError,
31};
32
33/// Crate-wide error. Each element defines its own `{Element}Error` (see
34/// [`FileDemuxError`], [`SwDecoderError`], [`QueueError`]) for its own
35/// domain-specific failures; this enum just aggregates them so trait
36/// methods (`Sink::consume`, `SourceElement::run`, ...) — which have to
37/// return one common error type to stay object-safe across arbitrary
38/// `Box<dyn Sink>` — can report any of them. `?` chains through
39/// automatically: an element's own function returns its own error type,
40/// and the moment that gets used with `?` inside a function returning
41/// this top-level `Result`, it's converted here via `#[from]`.
42#[derive(Debug, Error)]
43pub enum Error {
44    #[error(transparent)]
45    FileDemuxError(#[from] FileDemuxError),
46
47    #[error(transparent)]
48    AppSourceError(#[from] AppSourceError),
49
50    #[error(transparent)]
51    RtspSourceError(#[from] RtspSourceError),
52
53    #[error(transparent)]
54    TestVideoSourceError(#[from] TestVideoSourceError),
55
56    #[error(transparent)]
57    TestAudioSourceError(#[from] TestAudioSourceError),
58
59    #[error(transparent)]
60    SwDecoderError(#[from] SwDecoderError),
61
62    #[error(transparent)]
63    SwEncoderError(#[from] SwEncoderError),
64
65    #[error(transparent)]
66    PacerError(#[from] PacerError),
67
68    #[error(transparent)]
69    VideoSynchronizerError(#[from] VideoSynchronizerError),
70
71    #[error(transparent)]
72    SwAudioEncoderError(#[from] SwAudioEncoderError),
73
74    #[error(transparent)]
75    AudioResamplerError(#[from] AudioResamplerError),
76
77    #[error(transparent)]
78    AudioVolumeError(#[from] AudioVolumeError),
79
80    #[error(transparent)]
81    ScalerError(#[from] ScalerError),
82
83    #[error(transparent)]
84    QueueError(#[from] QueueError),
85
86    #[error(transparent)]
87    GraphError(#[from] GraphError),
88
89    #[error(transparent)]
90    LogInitError(#[from] LogInitError),
91
92    #[error(transparent)]
93    AudioMixerError(#[from] AudioMixerError),
94
95    #[error(transparent)]
96    VideoCompositorError(#[from] VideoCompositorError),
97
98    #[error(transparent)]
99    Mp4MuxerError(#[from] Mp4MuxerError),
100
101    #[error(transparent)]
102    HlsMuxerError(#[from] HlsMuxerError),
103
104    #[error(transparent)]
105    RtspSinkError(#[from] RtspSinkError),
106
107    #[cfg(all(target_os = "windows", feature = "d3d12"))]
108    #[error(transparent)]
109    D3d12RendererError(#[from] D3d12RendererError),
110
111    #[cfg(all(target_os = "windows", feature = "d3d12"))]
112    #[error(transparent)]
113    D3d12vaDecoderError(#[from] D3d12vaDecoderError),
114
115    #[cfg(all(target_os = "windows", feature = "d3d12"))]
116    #[error(transparent)]
117    D3d12UploadError(#[from] D3d12UploadError),
118
119    #[cfg(all(target_os = "windows", feature = "d3d11"))]
120    #[error(transparent)]
121    D3d11vaDecoderError(#[from] D3d11vaDecoderError),
122
123    #[cfg(all(target_os = "windows", feature = "d3d11"))]
124    #[error(transparent)]
125    D3d11UploadError(#[from] D3d11UploadError),
126
127    #[cfg(all(target_os = "windows", feature = "d3d11"))]
128    #[error(transparent)]
129    D3d11DownloadError(#[from] D3d11DownloadError),
130
131    #[cfg(all(target_os = "windows", feature = "d3d11"))]
132    #[error(transparent)]
133    D3d11NvencEncoderError(#[from] D3d11NvencEncoderError),
134
135    #[cfg(all(target_os = "windows", feature = "d3d11"))]
136    #[error(transparent)]
137    D3d11RendererError(#[from] D3d11RendererError),
138
139    #[cfg(all(target_os = "windows", feature = "d3d11"))]
140    #[error(transparent)]
141    D3d11VideoCompositorError(#[from] D3d11VideoCompositorError),
142
143    #[cfg(all(target_os = "windows", feature = "d3d11"))]
144    #[error(transparent)]
145    D3d11TextLayerError(#[from] D3d11TextLayerError),
146
147    #[cfg(all(target_os = "windows", feature = "dxgi-capture"))]
148    #[error(transparent)]
149    DxgiCaptureSourceError(#[from] DxgiCaptureSourceError),
150
151    #[cfg(all(target_os = "windows", feature = "wasapi-capture"))]
152    #[error(transparent)]
153    WasapiCaptureSourceError(#[from] WasapiCaptureSourceError),
154
155    #[cfg(all(target_os = "windows", feature = "wasapi-renderer"))]
156    #[error(transparent)]
157    WasapiRendererError(#[from] WasapiRendererError),
158
159    #[cfg(feature = "ort")]
160    #[error(transparent)]
161    OrtDetectorError(#[from] OrtDetectorError),
162
163    #[cfg(feature = "webrtc")]
164    #[error(transparent)]
165    WebRtcError(#[from] WebRtcError),
166
167    #[error("ffmpeg error: {0}")]
168    Ffmpeg(#[from] ffmpeg_next::Error),
169
170    #[error("{0}")]
171    Other(String),
172}
173
174pub type Result<T> = std::result::Result<T, Error>;