ff_encode/video/builder/
video.rs1use super::VideoEncoderBuilder;
4use crate::{BitrateMode, HardwareEncoder, Preset, VideoCodec};
5
6impl VideoEncoderBuilder {
7 #[must_use]
9 pub fn video(mut self, width: u32, height: u32, fps: f64) -> Self {
10 self.video_width = Some(width);
11 self.video_height = Some(height);
12 self.video_fps = Some(fps);
13 self
14 }
15
16 #[must_use]
18 pub fn video_codec(mut self, codec: VideoCodec) -> Self {
19 self.video_codec = codec;
20 self.video_codec_explicit = true;
21 self
22 }
23
24 #[must_use]
26 pub fn bitrate_mode(mut self, mode: BitrateMode) -> Self {
27 self.video_bitrate_mode = Some(mode);
28 self
29 }
30
31 #[must_use]
33 pub fn preset(mut self, preset: Preset) -> Self {
34 self.preset = preset;
35 self
36 }
37
38 #[must_use]
40 pub fn hardware_encoder(mut self, hw: HardwareEncoder) -> Self {
41 self.hardware_encoder = hw;
42 self
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49 use std::path::PathBuf;
50
51 #[test]
52 fn builder_video_settings_should_be_stored() {
53 let builder = VideoEncoderBuilder::new(PathBuf::from("output.mp4"))
54 .video(1920, 1080, 30.0)
55 .video_codec(VideoCodec::H264)
56 .bitrate_mode(BitrateMode::Cbr(8_000_000));
57 assert_eq!(builder.video_width, Some(1920));
58 assert_eq!(builder.video_height, Some(1080));
59 assert_eq!(builder.video_fps, Some(30.0));
60 assert_eq!(builder.video_codec, VideoCodec::H264);
61 assert_eq!(
62 builder.video_bitrate_mode,
63 Some(BitrateMode::Cbr(8_000_000))
64 );
65 }
66
67 #[test]
68 fn builder_preset_should_be_stored() {
69 let builder = VideoEncoderBuilder::new(PathBuf::from("output.mp4"))
70 .video(1920, 1080, 30.0)
71 .preset(Preset::Fast);
72 assert_eq!(builder.preset, Preset::Fast);
73 }
74
75 #[test]
76 fn builder_hardware_encoder_should_be_stored() {
77 let builder = VideoEncoderBuilder::new(PathBuf::from("output.mp4"))
78 .video(1920, 1080, 30.0)
79 .hardware_encoder(HardwareEncoder::Nvenc);
80 assert_eq!(builder.hardware_encoder, HardwareEncoder::Nvenc);
81 }
82}