pub struct ImageDecoder { /* private fields */ }Expand description
Reusable image decoder with internal scratch buffers.
Create one ImageDecoder at program initialisation and pass it to
ImageLoad::load_image in the hot loop.
The scratch buffers grow to the high-water mark and are reused across
calls — no per-frame allocations after the first few frames.
§Example
use edgefirst_codec::{ImageDecoder, ImageLoad, DecodeOptions};
use edgefirst_tensor::{Tensor, TensorTrait, TensorMemory, PixelFormat};
let mut decoder = ImageDecoder::new();
let mut tensor = Tensor::<u8>::image(1920, 1080, PixelFormat::Rgb, Some(TensorMemory::Mem))
.expect("alloc");
for _ in 0..100 {
let frame = std::fs::read("frame.jpg").unwrap();
let _info = tensor.load_image(&mut decoder, &frame, &DecodeOptions::default());
}Implementations§
Source§impl ImageDecoder
impl ImageDecoder
Sourcepub fn decode_into<T: ImagePixel>(
&mut self,
data: &[u8],
dst: &mut Tensor<T>,
opts: &DecodeOptions,
) -> Result<ImageInfo>
pub fn decode_into<T: ImagePixel>( &mut self, data: &[u8], dst: &mut Tensor<T>, opts: &DecodeOptions, ) -> Result<ImageInfo>
Decode image data into a typed tensor.
Detects the image format (JPEG or PNG) from magic bytes and decodes
into dst. The tensor must have sufficient capacity for the decoded
image dimensions.
§Errors
CodecError::InsufficientCapacityif image dimensions exceed tensorCodecError::UnsupportedDtypeifTis not a supported pixel typeCodecError::InvalidDataif the data is not a valid JPEG or PNG
Sourcepub fn decode_into_dyn(
&mut self,
data: &[u8],
dst: &mut TensorDyn,
opts: &DecodeOptions,
) -> Result<ImageInfo>
pub fn decode_into_dyn( &mut self, data: &[u8], dst: &mut TensorDyn, opts: &DecodeOptions, ) -> Result<ImageInfo>
Decode image data into a type-erased tensor.
Dispatches to the appropriate typed decode path based on the tensor’s
DType.
Sourcepub fn decode_from_reader<T: ImagePixel, R: Read>(
&mut self,
reader: R,
dst: &mut Tensor<T>,
opts: &DecodeOptions,
) -> Result<ImageInfo>
pub fn decode_from_reader<T: ImagePixel, R: Read>( &mut self, reader: R, dst: &mut Tensor<T>, opts: &DecodeOptions, ) -> Result<ImageInfo>
Read all bytes from a Read source into the internal input buffer,
then decode. The input buffer is reused across calls — no per-call
heap copy of the encoded bytes.
Sourcepub fn decode_from_reader_dyn<R: Read>(
&mut self,
reader: R,
dst: &mut TensorDyn,
opts: &DecodeOptions,
) -> Result<ImageInfo>
pub fn decode_from_reader_dyn<R: Read>( &mut self, reader: R, dst: &mut TensorDyn, opts: &DecodeOptions, ) -> Result<ImageInfo>
Read all bytes from a Read source into the internal input buffer,
then decode into a type-erased tensor.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ImageDecoder
impl RefUnwindSafe for ImageDecoder
impl Send for ImageDecoder
impl Sync for ImageDecoder
impl Unpin for ImageDecoder
impl UnsafeUnpin for ImageDecoder
impl UnwindSafe for ImageDecoder
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more