feat(imaging): default to pure-Rust codecs
Some checks failed
CI / rust-skia (Rust only) (push) Successful in 2m51s
CI / required (push) Failing after 3m23s

This commit is contained in:
2026-08-13 11:24:38 +00:00
parent e16ad04dbd
commit 25fdffbd3b
25 changed files with 124 additions and 103 deletions

View File

@@ -14,10 +14,10 @@ use libremetaverse::types::compat::CancellationToken;
use libremetaverse::types::{AssetType, FolderType, InventoryType, UUID};
use libremetaverse::{PermissionMask, Permissions};
use libremetaverse_imaging::{
J2kCodec, J2kCompression, J2kDecodeOptions, J2kEncodeOptions, ManagedImage,
ManagedImageImageChannels,
J2kCompression, J2kDecodeOptions, J2kEncodeOptions, ManagedImage, ManagedImageImageChannels,
RustJ2kCodec,
};
use libremetaverse_imaging_skia::SkiaTextureCodec;
use libremetaverse_imaging_skia::RustSkiaTextureCodec;
use std::collections::{HashMap, HashSet};
use std::fs::{self, File};
use std::io::{Cursor, Read, Write};
@@ -1465,14 +1465,14 @@ fn image_to_j2k(path: &Path) -> Result<Vec<u8>, String> {
.unwrap_or("")
.to_ascii_lowercase();
if matches!(extension.as_str(), "jp2" | "j2c" | "j2k") {
J2kCodec::decode_bytes(&bytes, J2kDecodeOptions::default())
RustJ2kCodec::decode_bytes(&bytes, J2kDecodeOptions::default())
.map_err(|_| "Invalid JPEG 2000 image".to_owned())?;
return Ok(bytes);
}
let mut image = if matches!(extension.as_str(), "tga" | "targa") {
decode_tga(&bytes)?
} else {
SkiaTextureCodec::new()
RustSkiaTextureCodec::new()
.map_err(|_| "Could not initialize the image decoder".to_owned())?
.decode(Box::new(Cursor::new(bytes)))
.map_err(|_| "Failed to decode image".to_owned())?
@@ -1491,7 +1491,7 @@ fn image_to_j2k(path: &Path) -> Result<Vec<u8>, String> {
.resize_bilinear(width.min(1024), height.min(1024))
.map_err(|_| "Failed to limit image dimensions".to_owned())?;
}
J2kCodec::encode(
RustJ2kCodec::encode(
&image,
J2kEncodeOptions::default().with_compression(J2kCompression::Lossy {
compression_ratio: 10.0,
@@ -1583,7 +1583,7 @@ async fn dump_outfit<B: Backend + ?Sized>(
.await?;
let jp2 = directory.join(format!("{texture_id}.jp2"));
write_bounded(&jp2, &bytes)?;
let image = J2kCodec::decode_bytes(&bytes, J2kDecodeOptions::default())
let image = RustJ2kCodec::decode_bytes(&bytes, J2kDecodeOptions::default())
.map_err(|_| format!("Failed to decode outfit texture {texture_id}"))?;
let tga = directory.join(format!("{texture_id}.tga"));
write_bounded(&tga, &encode_tga(&image)?)?;

View File

@@ -1466,7 +1466,7 @@ async fn download_texture<B: Backend + ?Sized>(
.as_str(),
)?;
write_bounded(&path, &data)?;
let dimensions = libremetaverse_imaging::J2kCodec::decode_bytes(
let dimensions = libremetaverse_imaging::RustJ2kCodec::decode_bytes(
&data,
libremetaverse_imaging::J2kDecodeOptions::default(),
)
@@ -1574,7 +1574,7 @@ async fn export<B: Backend + ?Sized>(
.await?;
let path = texture_directory.join(format!("{texture}.jp2"));
write_bounded(&path, &data)?;
let image = libremetaverse_imaging::J2kCodec::decode_bytes(
let image = libremetaverse_imaging::RustJ2kCodec::decode_bytes(
&data,
libremetaverse_imaging::J2kDecodeOptions::default(),
)