Struct webp_animation::prelude::Encoder [−][src]
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 = i * 170; encoder.add_frame(rgba_data, frame_timestamp).unwrap(); } // get encoded webp data let final_timestamp = 1_000; let webp_data = encoder.finalize(final_timestamp).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
impl Encoder
[src]
pub fn new(dimensions: (u32, u32)) -> Result<Self, Error>
[src]
Construct a new encoder with default options for dimensions (width
, height
)
pub fn new_with_options(
dimensions: (u32, u32),
options: EncoderOptions
) -> Result<Self, Error>
[src]
dimensions: (u32, u32),
options: EncoderOptions
) -> Result<Self, Error>
Construct a new encoder with custom options for dimensions (width
, height
)
pub fn add_frame(&mut self, data: &[u8], timestamp: i32) -> Result<(), Error>
[src]
Add a new frame to be encoded
Inputs
data
is an array of pixels inColorMode
format set byEncoderOptions
(ColorMode::Rgba
by default)timestamp
of 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.
pub fn add_frame_with_config(
&mut self,
data: &[u8],
timestamp: i32,
config: &EncodingConfig
) -> Result<(), Error>
[src]
&mut self,
data: &[u8],
timestamp: 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
pub fn set_default_encoding_config(
&mut self,
config: EncodingConfig
) -> Result<(), Error>
[src]
&mut self,
config: EncodingConfig
) -> Result<(), Error>
Sets the default encoding config
Usually set in [EncderOptions
] at constructor (Encoder::new_with_options
)
pub fn finalize(self, timestamp: i32) -> Result<WebPData, Error>
[src]
Will encode the stream and return encoded bytes in a WebPData
upon success
timestamp
behaves as in Encoder::add_frame
Auto Trait Implementations
impl RefUnwindSafe for Encoder
impl !Send for Encoder
impl !Sync for Encoder
impl Unpin for Encoder
impl UnwindSafe for Encoder
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,