pub struct Encoder { /* private fields */ }Expand description
An encoder for creating webp animation
Will take n frames as an input. WebP binary data is output at the end
(wrapped into WebPData which acts as a &[u8])
§Example without special configuration
use webp_animation::prelude::*;
// setup
let dimensions = (64, 32);
let bright_frame = [255, 255, 255, 255].repeat(64 * 32);
let dark_frame = [0, 0, 0, 255].repeat(64 * 32);
// init encoder
let mut encoder = Encoder::new(dimensions).unwrap();
// insert frames to specific (increasing) timestamps
for i in 0..5 {
let rgba_data = if i % 2 == 0 { &bright_frame } else { &dark_frame };
let frame_timestamp_ms = i * 170;
encoder.add_frame(rgba_data, frame_timestamp_ms).unwrap();
}
// get encoded webp data
let final_timestamp_ms = 1_000;
let webp_data = encoder.finalize(final_timestamp_ms).unwrap();
// std::fs::write("my_animation.webp", webp_data);§Example with configuration
See EncodingConfig and LossyEncodingConfig for per-field explanations.
use webp_animation::prelude::*;
let mut encoder = Encoder::new_with_options((640, 480), EncoderOptions {
kmin: 3,
kmax: 5,
encoding_config: Some(EncodingConfig {
quality: 75.,
encoding_type: EncodingType::Lossy(LossyEncodingConfig {
segments: 2,
alpha_compression: true,
..Default::default()
}),
..Default::default()
}),
..Default::default()
}).unwrap();§Example with per-frame configuration
use webp_animation::prelude::*;
let mut encoder = Encoder::new_with_options((640, 480), EncoderOptions {
kmin: 3,
kmax: 5,
..Default::default()
}).unwrap();
encoder.add_frame_with_config(&[0u8; 640 * 480 * 4], 0, &EncodingConfig {
quality: 75.,
encoding_type: EncodingType::Lossy(LossyEncodingConfig {
segments: 2,
alpha_compression: true,
..Default::default()
}),
..Default::default()
}).unwrap();Implementations§
Source§impl Encoder
impl Encoder
Sourcepub fn new(dimensions: (u32, u32)) -> Result<Self, Error>
pub fn new(dimensions: (u32, u32)) -> Result<Self, Error>
Construct a new encoder with default options for dimensions (width, height)
Sourcepub fn new_with_options(
dimensions: (u32, u32),
options: EncoderOptions,
) -> Result<Self, Error>
pub fn new_with_options( dimensions: (u32, u32), options: EncoderOptions, ) -> Result<Self, Error>
Construct a new encoder with custom options for dimensions (width, height)
Sourcepub fn add_frame(&mut self, data: &[u8], timestamp_ms: i32) -> Result<(), Error>
pub fn add_frame(&mut self, data: &[u8], timestamp_ms: i32) -> Result<(), Error>
Add a new frame to be encoded
Inputs
datais an array of pixels inColorModeformat set byEncoderOptions(ColorMode::Rgbaby default)timestamp_msof this frame in milliseconds. Duration of a frame would be calculated as “timestamp of next frame - timestamp of this frame”. Hence, timestamps should be in non-decreasing order.
Sourcepub fn add_frame_with_config(
&mut self,
data: &[u8],
timestamp_ms: i32,
config: &EncodingConfig,
) -> Result<(), Error>
pub fn add_frame_with_config( &mut self, data: &[u8], timestamp_ms: i32, config: &EncodingConfig, ) -> Result<(), Error>
Add a new frame to be encoded with special per-frame configuration (EncodingConfig)
See Encoder::add_frame for data and timestamp explanations
Sourcepub fn set_default_encoding_config(
&mut self,
config: EncodingConfig,
) -> Result<(), Error>
pub fn set_default_encoding_config( &mut self, config: EncodingConfig, ) -> Result<(), Error>
Sets the default encoding config
Usually set in [EncderOptions] at constructor (Encoder::new_with_options)
Auto Trait Implementations§
impl Freeze for Encoder
impl RefUnwindSafe for Encoder
impl !Send for Encoder
impl !Sync for Encoder
impl Unpin for Encoder
impl UnsafeUnpin for Encoder
impl UnwindSafe for Encoder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more