1#![deny(clippy::all)]
2#![deny(clippy::pedantic)]
3#![allow(clippy::module_name_repetitions)]
4
5pub use commucat_media_types::{
6 AudioCodec, AudioCodecDescriptor, CodecPriority, HardwareAcceleration, MediaCapabilities,
7 MediaSourceMode, VideoCodec, VideoCodecDescriptor, VideoResolution,
8};
9
10pub mod audio;
11#[cfg(feature = "audio-io")]
12pub mod capture;
13#[cfg(feature = "pipeline")]
14pub mod pipeline;
15#[cfg(feature = "video")]
16pub mod video;
17pub mod voice;
18
19use thiserror::Error;
20
21#[derive(Debug, Error)]
22pub enum MediaError {
23 #[error("invalid configuration: {0}")]
24 InvalidConfig(&'static str),
25 #[error("operation not supported")]
26 Unsupported,
27 #[error("buffer underrun")]
28 BufferUnderrun,
29 #[error("timeout waiting for media data")]
30 Timeout,
31 #[error("io error: {0}")]
32 Io(String),
33 #[error("codec error: {0}")]
34 Codec(String),
35}
36
37pub type MediaResult<T> = Result<T, MediaError>;
38
39#[cfg(feature = "audio")]
40impl From<audiopus::Error> for MediaError {
41 fn from(err: audiopus::Error) -> Self {
42 MediaError::Codec(err.to_string())
43 }
44}
45
46#[cfg(feature = "video")]
47impl From<env_libvpx_sys::vpx_codec_err_t> for MediaError {
48 fn from(err: env_libvpx_sys::vpx_codec_err_t) -> Self {
49 MediaError::Codec(format!("libvpx error code {err:?}"))
50 }
51}
52
53pub mod prelude {
54 pub use crate::audio::{
55 AudioLevel, VoiceDecoder, VoiceDecoderConfig, VoiceEncoder, VoiceEncoderConfig, VoiceFrame,
56 };
57 #[cfg(feature = "audio-io")]
58 pub use crate::capture::{AudioCapture, AudioCaptureConfig};
59 #[cfg(feature = "pipeline")]
60 pub use crate::pipeline::{CallMediaPipeline, PipelineConfig};
61 #[cfg(feature = "video")]
62 pub use crate::video::{
63 DecodedFrame, I420Borrowed, VideoDecoder, VideoEncoder, VideoEncoderConfig, VideoFrame,
64 };
65 pub use crate::voice::VoiceMessage;
66 pub use crate::{
67 AudioCodec, AudioCodecDescriptor, CodecPriority, HardwareAcceleration, MediaCapabilities,
68 MediaError, MediaResult, MediaSourceMode, VideoCodec, VideoCodecDescriptor,
69 VideoResolution,
70 };
71}