Skip to content

Commit

Permalink
fix(codecs): updated webp encoder to new api
Browse files Browse the repository at this point in the history
  • Loading branch information
SalOne22 committed Apr 11, 2024
1 parent fdfcbd9 commit ede4784
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 11 deletions.
29 changes: 25 additions & 4 deletions src/codecs/webp/encoder/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
use zune_core::{bit_depth::BitDepth, colorspace::ColorSpace};
use zune_core::{
bit_depth::BitDepth,
bytestream::{ZByteWriterTrait, ZWriter},
colorspace::ColorSpace,
};
use zune_image::{
codecs::ImageFormat,
errors::{ImageErrors, ImgEncodeErrors},
image::Image,
traits::EncoderTrait,
};

Expand Down Expand Up @@ -38,9 +43,15 @@ impl EncoderTrait for WebPEncoder {
"webp"
}

fn encode_inner(&mut self, image: &zune_image::image::Image) -> Result<Vec<u8>, ImageErrors> {
fn encode_inner<T: ZByteWriterTrait>(
&mut self,
image: &Image,
sink: T,
) -> Result<usize, ImageErrors> {
let (width, height) = image.dimensions();

let mut writer = ZWriter::new(sink);

if image.is_animated() {
let frames = image.flatten_to_u8();

Expand Down Expand Up @@ -74,7 +85,13 @@ impl EncoderTrait for WebPEncoder {
Ok(())
})?;

Ok(vec![])
let res = encoder.encode();

writer.write(&res).map_err(|e| {
ImageErrors::EncodeErrors(ImgEncodeErrors::ImageEncodeErrors(format!("{e:?}")))
})?;

Ok(writer.bytes_written())
} else {
let data = &image.flatten_to_u8()[0];

Expand All @@ -92,7 +109,11 @@ impl EncoderTrait for WebPEncoder {
ImgEncodeErrors::ImageEncodeErrors(format!("webp encoding failed: {e:?}"))
})?;

Ok(res.to_vec())
writer.write(&res).map_err(|e| {
ImageErrors::EncodeErrors(ImgEncodeErrors::ImageEncodeErrors(format!("{e:?}")))
})?;

Ok(writer.bytes_written())
}
}

Expand Down
30 changes: 23 additions & 7 deletions src/codecs/webp/encoder/tests.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::io::Cursor;

use zune_core::colorspace::ColorSpace;

use crate::test_utils::*;
Expand All @@ -19,7 +21,9 @@ fn encode_colorspaces_u8() {

let mut encoder = WebPEncoder::new();

let result = encoder.encode(&image);
let buf = Cursor::new(vec![]);

let result = encoder.encode(&image, buf);

if result.is_err() {
dbg!(&result);
Expand Down Expand Up @@ -50,7 +54,9 @@ fn encode_colorspaces_u16() {

let mut encoder = WebPEncoder::new();

let result = encoder.encode(&image);
let buf = Cursor::new(vec![]);

let result = encoder.encode(&image, buf);

if result.is_err() {
dbg!(&result);
Expand Down Expand Up @@ -81,7 +87,9 @@ fn encode_colorspaces_f32() {

let mut encoder = WebPEncoder::new();

let result = encoder.encode(&image);
let buf = Cursor::new(vec![]);

let result = encoder.encode(&image, buf);

if result.is_err() {
dbg!(&result);
Expand All @@ -102,7 +110,9 @@ fn encode_u8() {
let image = create_test_image_u8(200, 200, ColorSpace::RGB);
let mut encoder = WebPEncoder::new();

let result = encoder.encode(&image);
let buf = Cursor::new(vec![]);

let result = encoder.encode(&image, buf);
dbg!(&result);

assert!(result.is_ok());
Expand All @@ -113,7 +123,9 @@ fn encode_u16() {
let image = create_test_image_u16(200, 200, ColorSpace::RGB);
let mut encoder = WebPEncoder::new();

let result = encoder.encode(&image);
let buf = Cursor::new(vec![]);

let result = encoder.encode(&image, buf);
dbg!(&result);

assert!(result.is_ok());
Expand All @@ -124,7 +136,9 @@ fn encode_f32() {
let image = create_test_image_f32(200, 200, ColorSpace::RGB);
let mut encoder = WebPEncoder::new();

let result = encoder.encode(&image);
let buf = Cursor::new(vec![]);

let result = encoder.encode(&image, buf);
dbg!(&result);

assert!(result.is_ok());
Expand All @@ -135,7 +149,9 @@ fn encode_animated() {
let image = create_test_image_animated(200, 200, ColorSpace::RGB);
let mut encoder = WebPEncoder::new();

let result = encoder.encode(&image);
let buf = Cursor::new(vec![]);

let result = encoder.encode(&image, buf);
dbg!(&result);

assert!(result.is_ok());
Expand Down

0 comments on commit ede4784

Please sign in to comment.