Skip to main content

ff_encode/video/codec_options/
mod.rs

1//! Per-codec encoding options for [`VideoEncoderBuilder`](super::builder::VideoEncoderBuilder).
2//!
3//! Pass a [`VideoCodecOptions`] value to
4//! `VideoEncoderBuilder::codec_options()` to control codec-specific behaviour.
5//! Options are applied via `av_opt_set` / direct field assignment **before**
6//! `avcodec_open2`.  Any option that the chosen encoder does not support is
7//! logged as a warning and skipped — it never causes `build()` to return an
8//! error.
9
10mod av1;
11mod dnxhd;
12mod h264;
13mod h265;
14mod prores;
15mod svt_av1;
16mod vp9;
17
18pub use av1::{Av1Options, Av1Usage};
19pub use dnxhd::{DnxhdOptions, DnxhdVariant};
20pub use h264::{H264Options, H264Preset, H264Profile, H264Tune};
21pub use h265::{H265Options, H265Profile, H265Tier};
22pub use prores::{ProResOptions, ProResProfile};
23pub use svt_av1::SvtAv1Options;
24pub use vp9::Vp9Options;
25
26/// Per-codec encoding options.
27///
28/// The variant must match the codec passed to
29/// `VideoEncoderBuilder::video_codec()`.  A mismatch is silently ignored
30/// (the options are not applied).
31///
32/// All variants are fully implemented.
33#[derive(Debug, Clone)]
34pub enum VideoCodecOptions {
35    /// H.264 (AVC) encoding options.
36    H264(H264Options),
37    /// H.265 (HEVC) encoding options.
38    H265(H265Options),
39    /// AV1 (libaom-av1) encoding options.
40    Av1(Av1Options),
41    /// AV1 (SVT-AV1 / libsvtav1) encoding options.
42    Av1Svt(SvtAv1Options),
43    /// VP9 encoding options (reserved for a future issue).
44    Vp9(Vp9Options),
45    /// Apple ProRes encoding options (reserved for a future issue).
46    ProRes(ProResOptions),
47    /// Avid DNxHD / DNxHR encoding options (reserved for a future issue).
48    Dnxhd(DnxhdOptions),
49}
50
51#[cfg(test)]
52mod tests {
53    use super::*;
54
55    #[test]
56    fn video_codec_options_enum_variants_are_accessible() {
57        let _h264 = VideoCodecOptions::H264(H264Options::default());
58        let _h265 = VideoCodecOptions::H265(H265Options::default());
59        let _av1 = VideoCodecOptions::Av1(Av1Options::default());
60        let _av1svt = VideoCodecOptions::Av1Svt(SvtAv1Options::default());
61        let _vp9 = VideoCodecOptions::Vp9(Vp9Options::default());
62        let _prores = VideoCodecOptions::ProRes(ProResOptions::default());
63        let _dnxhd = VideoCodecOptions::Dnxhd(DnxhdOptions::default());
64    }
65}