commucat_media/
lib.rs

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}