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.
The decoder always produces the source’s native format and configures the
destination tensor’s dimensions + pixel format accordingly (JPEG →
Nv12/Grey, PNG → Rgb/Rgba/Grey). It never colour-converts or
rotates; use ImageProcessor::convert() for that.
§Example
use edgefirst_codec::{ImageDecoder, ImageLoad};
use edgefirst_tensor::{Tensor, TensorTrait, TensorMemory, PixelFormat};
let mut decoder = ImageDecoder::new();
// Allocate a buffer large enough for the biggest expected image.
let mut tensor = Tensor::<u8>::image(1920, 1080, PixelFormat::Nv12, 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);
}Implementations§
Source§impl ImageDecoder
impl ImageDecoder
Sourcepub fn decode_into<T: ImagePixel>(
&mut self,
data: &[u8],
dst: &mut Tensor<T>,
) -> Result<ImageInfo>
pub fn decode_into<T: ImagePixel>( &mut self, data: &[u8], dst: &mut Tensor<T>, ) -> Result<ImageInfo>
Decode image data into a typed tensor, configuring its dimensions and pixel format to the decoded native format.
Detects the image format (JPEG or PNG) from magic bytes.
§Errors
CodecError::InsufficientCapacityif the image is larger than the tensor’s allocationCodecError::UnsupportedDtypeifTis not valid for the native format (JPEG NV12/GREY requireu8)CodecError::InvalidDataif the data is not a valid JPEG or PNG
Sourcepub fn decode_into_dyn(
&mut self,
data: &[u8],
dst: &mut TensorDyn,
) -> Result<ImageInfo>
pub fn decode_into_dyn( &mut self, data: &[u8], dst: &mut TensorDyn, ) -> Result<ImageInfo>
Decode image data into a type-erased tensor.
Sourcepub fn decode_from_reader<T: ImagePixel, R: Read>(
&mut self,
reader: R,
dst: &mut Tensor<T>,
) -> Result<ImageInfo>
pub fn decode_from_reader<T: ImagePixel, R: Read>( &mut self, reader: R, dst: &mut Tensor<T>, ) -> Result<ImageInfo>
Read all bytes from a Read source into the internal input buffer, then
decode. The input buffer is reused across calls.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for ImageDecoder
impl !Send for ImageDecoder
impl !Sync for ImageDecoder
impl !UnwindSafe for ImageDecoder
impl Freeze for ImageDecoder
impl Unpin for ImageDecoder
impl UnsafeUnpin 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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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