#![warn(missing_docs)]
#![warn(clippy::all)]
#![warn(clippy::pedantic)]
pub mod analysis;
#[cfg(feature = "tokio")]
pub(crate) mod async_decoder;
pub mod audio;
pub mod error;
pub mod extract;
pub mod image;
mod shared;
pub mod video;
pub(crate) use shared::network;
pub use analysis::{
BlackFrameDetector, FrameHistogram, HistogramExtractor, KeyframeEnumerator, SceneDetector,
SilenceDetector, SilenceRange, WaveformAnalyzer, WaveformSample,
};
pub use audio::{AudioDecoder, AudioDecoderBuilder};
pub use error::DecodeError;
pub use extract::{FrameExtractor, ThumbnailSelector};
pub use ff_common::{FramePool, PooledBuffer};
pub use ff_format::ContainerInfo;
pub use image::{ImageDecoder, ImageDecoderBuilder};
pub use shared::{HardwareAccel, SeekMode};
pub use video::{VideoDecoder, VideoDecoderBuilder};
#[cfg(feature = "tokio")]
pub use audio::AsyncAudioDecoder;
#[cfg(feature = "tokio")]
pub use image::AsyncImageDecoder;
#[cfg(feature = "tokio")]
pub use video::AsyncVideoDecoder;
pub mod prelude {
#[cfg(feature = "tokio")]
pub use crate::{AsyncAudioDecoder, AsyncImageDecoder, AsyncVideoDecoder};
pub use crate::{
AudioDecoder, AudioDecoderBuilder, DecodeError, FramePool, HardwareAccel, ImageDecoder,
ImageDecoderBuilder, PooledBuffer, SeekMode, VideoDecoder, VideoDecoderBuilder,
};
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_decode_error_display() {
use std::path::PathBuf;
let error = DecodeError::FileNotFound {
path: PathBuf::from("/path/to/video.mp4"),
};
assert!(error.to_string().contains("File not found"));
let error = DecodeError::NoVideoStream {
path: PathBuf::from("/path/to/audio.mp3"),
};
assert!(error.to_string().contains("No video stream"));
let error = DecodeError::UnsupportedCodec {
codec: "unknown_codec".to_string(),
};
assert!(error.to_string().contains("Codec not supported"));
}
#[test]
fn test_prelude_imports() {
use crate::prelude::*;
let _mode: SeekMode = SeekMode::default();
let _accel: HardwareAccel = HardwareAccel::default();
let _video_builder: VideoDecoderBuilder = VideoDecoder::open("test.mp4");
let _audio_builder: AudioDecoderBuilder = AudioDecoder::open("test.mp3");
}
}