Expand description
Image codec for decoding JPEG/PNG into pre-allocated EdgeFirst tensors.
This crate provides the ImageDecoder struct and ImageLoad extension
trait for decoding image files directly into existing tensor buffers —
including DMA-BUF tensors with GPU-aligned pitch padding. The core design
goal is allocate once, decode many: users create a tensor at the maximum
expected image size during program initialisation, then call
ImageLoad::load_image in the hot loop with zero per-frame allocations.
§Quick Start
use edgefirst_codec::{ImageDecoder, ImageLoad};
use edgefirst_tensor::{CpuAccess, Tensor, TensorTrait, TensorMemory, PixelFormat};
// Allocate once (at init), sized for the largest expected image. The
// decoder CPU-writes the pixels: declare `CpuAccess::Write`.
let mut tensor = Tensor::<u8>::image(1920, 1080, PixelFormat::Nv12, Some(TensorMemory::Mem),
CpuAccess::Write)
.expect("allocation");
let mut decoder = ImageDecoder::new();
// Decode many (in hot loop). The decoder sets the tensor's dimensions and
// native format (JPEG → Nv12/Grey); call `convert()` for RGB.
let jpeg_bytes = std::fs::read("frame.jpg").unwrap();
let info = tensor.load_image(&mut decoder, &jpeg_bytes).expect("decode");
assert!(info.width <= 1920);
assert!(info.height <= 1080);§Performance
For best performance, allocate tensors via
ImageProcessor::create_image()
which selects the optimal memory backend (DMA → PBO → Mem) with
GPU-aligned pitch. Free-standing tensors work but cannot use PBO
and may not have aligned pitch.
§Strided Buffers
The decoder respects effective_row_stride() on the destination tensor.
When a DMA tensor has GPU-aligned pitch padding, decoded pixel rows are
written at the correct stride offsets — no intermediate contiguous buffer
is exposed to the caller.
Structs§
- Image
Decoder - Reusable image decoder with internal scratch buffers.
- Image
Info - Metadata returned after a successful image decode.
Enums§
- Codec
Error - Errors that can occur during image decoding.
- Unsupported
Feature - A specific image-format feature that the codec does not implement.
Traits§
- Image
Load - Extension trait for loading images into pre-allocated tensors.
- Image
Pixel - Marker trait for pixel element types supported by image decoding.
Functions§
- nvjpeg_
available - Returns
truewhen the nvJPEG GPU JPEG decoder is available at runtime — Linux with CUDA + libnvjpeg loaded and opted in viaEDGEFIRST_ENABLE_NVJPEG(off by default, so it never silently contends with CUDA inference). Whentruethe codec prefers it over the V4L2/CPU backends for CUDA-backed destinations. Alwaysfalseon other platforms or when thenvjpegfeature is disabled. Useful for benchmarks and consumers that branch on backend availability. - peek_
info - Parse image headers and return the native dimensions, format, and EXIF orientation without decoding pixels.
Type Aliases§
- Result
- Result type for codec operations.