Expand description
§EZK Image
ezk-image is a crate to perform conversion between common pixel formats and color spaces.
It uses SIMD and multi threading to accelerate the conversion when available, though multi-threading must
be explicitly called with convert_multi_thread.
Any format can be converted to any other format.
§Supported Pixel formats
Bit depth of up to 16 bit per component is supported.
- I420
- I422
- I444
- I010, I012
- I210, I212
- I410, I412
- NV12
- YUYV
- RGBA, BGRA
- RGB, BGR
§Supported Color Primaries (color gamut)
- SMTPE ST 240
- BT.709 (SDR)
- BT.2020 (HDR)
§Supported Color Transfer Functions (opto-electronic transfer characteristics of samples)
- Linear
- Gamma of 2.2 and 2.8
- SRGB
- SDR (BT.601, BT.709 and BT.2020)
- BT.2100 perceptual quantization (PQ)
- BT.2100 hybrid log-gamma (HLG)
§Supported Color Spaces
- RGB
- YUV BT.601
- YUV BT.709
- YUV BT.2020
- ICtCp with perceptual quantization (PQ)
- ICtCp with hybrid log-gamma (HLG)
§Example
use ezk_image::*;
let (width, height) = (1920, 1080);
// Our source image, an RGB buffer
let rgb_image = vec![0u8; PixelFormat::RGB.buffer_size(width, height)];
// Create the image we're converting from
let source = Image::from_buffer(
PixelFormat::RGB,
&rgb_image[..], // RGB only has one plane
None, // No need to define strides if there's no padding between rows
width,
height,
ColorInfo::RGB(RgbColorInfo {
transfer: ColorTransfer::Linear,
primaries: ColorPrimaries::BT709,
}),
).unwrap();
// Create the image buffer we're converting to
let mut destination = Image::blank(
PixelFormat::NV12, // We're converting to NV12
width,
height,
ColorInfo::YUV(YuvColorInfo {
space: ColorSpace::BT709,
transfer: ColorTransfer::Linear,
primaries: ColorPrimaries::BT709,
full_range: false,
}),
);
// Now convert the image data
convert_multi_thread(
&source,
&mut destination,
).unwrap();Modules§
Structs§
- Cropped
- Wrapper around
ImageRef/ImageMutand aWindowcropping the wrapped image - Image
- Basic wrapper around any image, implementing the
ImageRefandImageMuttrait - Invalid
Number OfPlanes Error - RgbColor
Info - Window
- Rect used to mark the “cropping” window
- YuvColor
Info
Enums§
- Bounds
Check Error - Buffer
Kind - Color
Info - Color space of an image
- Color
Primaries - Color gamut of an image
- Color
Space - Color space used for RGB to YUV conversion
- Color
Transfer - Image opto-electronic transfer characteristics
- Convert
Error - Errors that may occur when trying to convert an image
- Crop
Error - Error indicating an invalid
Windowfor a given image - Image
Error - Everything that can go wrong when constructing an
Image - Pixel
Format - Supported pixel formats
Traits§
- AnySlice
- Helper trait implemented on &[T] and &mut [T]
- Image
Mut - Safety
- Image
Ref - Safety
- Image
RefExt ImageRefextension methods
Functions§
- convert
- Convert pixel-format and color from the src-image to the specified dst-image.
- convert_
multi_ thread - Parallelizes
convertusing as many threads as there are CPU cores. - infer
- Infer the planes for an image in the given format using the given dimensions and strides
- infer_
i01x - Infer the planes for a full I010 or I012 image using the given dimensions
- infer_
i21x - Infer the planes for a full I210 or I212 image using the given dimensions
- infer_
i41x - Infer the planes for a full I410 or I412 image using the given dimensions
- infer_
i420 - Infer the planes for a full I420 image using the given dimensions
- infer_
i422 - Infer the planes for a full I422 image using the given dimensions
- infer_
i444 - Infer the planes for a full I444 image using the given dimensions
- infer_
nv12 - Infer the planes for a full NV12 image using the given dimensions
- infer_
p01x - Infer the planes for a full P010 / P012 image using the given dimensions