use crate::SizeError;
use archmage::incant;
mod scalar;
use scalar::*;
#[cfg(target_arch = "x86_64")]
mod avx2;
#[cfg(target_arch = "x86_64")]
use avx2::*;
#[cfg(target_arch = "aarch64")]
mod neon;
#[cfg(target_arch = "aarch64")]
use neon::*;
#[cfg(target_arch = "wasm32")]
mod wasm;
#[cfg(target_arch = "wasm32")]
use wasm::*;
#[cfg(feature = "experimental")]
mod packed;
#[cfg(feature = "experimental")]
pub use packed::*;
#[cfg(feature = "experimental")]
mod packed_1010102;
#[cfg(feature = "experimental")]
pub use packed_1010102::*;
#[cfg(test)]
mod tests;
#[inline]
fn check_inplace(len: usize, bpp: usize) -> Result<(), SizeError> {
if len == 0 || !len.is_multiple_of(bpp) {
Err(SizeError::NotPixelAligned)
} else {
Ok(())
}
}
#[inline]
fn check_copy(
src_len: usize,
src_bpp: usize,
dst_len: usize,
dst_bpp: usize,
) -> Result<(), SizeError> {
if src_len == 0 || !src_len.is_multiple_of(src_bpp) {
return Err(SizeError::NotPixelAligned);
}
if dst_len < (src_len / src_bpp) * dst_bpp {
return Err(SizeError::PixelCountMismatch);
}
Ok(())
}
#[inline]
fn check_strided(
len: usize,
width: usize,
height: usize,
stride: usize,
bpp: usize,
) -> Result<(), SizeError> {
if width == 0 || height == 0 {
return Err(SizeError::InvalidStride);
}
let row_bytes = width.checked_mul(bpp).ok_or(SizeError::InvalidStride)?;
if row_bytes > stride {
return Err(SizeError::InvalidStride);
}
if height > 0 {
let total = (height - 1)
.checked_mul(stride)
.ok_or(SizeError::InvalidStride)?
.checked_add(row_bytes)
.ok_or(SizeError::InvalidStride)?;
if len < total {
return Err(SizeError::InvalidStride);
}
}
Ok(())
}
#[inline(always)]
fn swap_br_u32(v: u32) -> u32 {
(v & 0xFF00_FF00) | (v.rotate_left(16) & 0x00FF_00FF)
}
pub fn rgba_to_bgra_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 4)?;
incant!(swap_br_impl(buf), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn rgba_to_bgra(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 4)?;
incant!(copy_swap_br_impl(src, dst), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn fill_alpha_rgba(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 4)?;
incant!(fill_alpha_impl(buf), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn fill_alpha_bgra(buf: &mut [u8]) -> Result<(), SizeError> {
fill_alpha_rgba(buf)
}
pub fn rgb_to_bgra(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 3, dst.len(), 4)?;
incant!(rgb_to_bgra_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn rgb_to_rgba(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 3, dst.len(), 4)?;
incant!(rgb_to_rgba_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn gray_to_rgba(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 1, dst.len(), 4)?;
incant!(gray_to_4bpp_impl(src, dst), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn gray_alpha_to_rgba(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 2, dst.len(), 4)?;
incant!(
gray_alpha_to_4bpp_impl(src, dst),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn rgba_to_bgra_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 4)?;
incant!(
swap_br_strided(buf, width, height, stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn rgba_to_bgra_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
copy_swap_br_strided(src, dst, width, height, src_stride, dst_stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn fill_alpha_rgba_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 4)?;
incant!(
fill_alpha_strided(buf, width, height, stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn fill_alpha_bgra_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
fill_alpha_rgba_strided(buf, width, height, stride)
}
pub fn rgb_to_bgra_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 3)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
rgb_to_bgra_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn rgb_to_rgba_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 3)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
rgb_to_rgba_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn gray_to_rgba_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 1)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
gray_to_4bpp_strided(src, dst, width, height, src_stride, dst_stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn gray_alpha_to_rgba_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 2)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
gray_alpha_to_4bpp_strided(src, dst, width, height, src_stride, dst_stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn rgb_to_bgr_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 3)?;
incant!(swap_bgr_impl(buf), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn rgb_to_bgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 3, dst.len(), 3)?;
incant!(copy_swap_bgr_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn rgba_to_rgb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 3)?;
incant!(rgba_to_rgb_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn bgra_to_rgb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 3)?;
incant!(bgra_to_rgb_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn rgb_to_bgr_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 3)?;
incant!(
swap_bgr_strided(buf, width, height, stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn rgb_to_bgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 3)?;
check_strided(dst.len(), width, height, dst_stride, 3)?;
incant!(
copy_swap_bgr_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn rgba_to_rgb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 3)?;
incant!(
rgba_to_rgb_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn bgra_to_rgb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 3)?;
incant!(
bgra_to_rgb_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn argb_to_rgba_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 4)?;
incant!(rotate_left_impl(buf), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn argb_to_rgba(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 4)?;
incant!(copy_rotate_left_impl(src, dst), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn rgba_to_argb_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 4)?;
incant!(rotate_right_impl(buf), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn rgba_to_argb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 4)?;
incant!(
copy_rotate_right_impl(src, dst),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn argb_to_bgra_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 4)?;
incant!(reverse_4bpp_impl(buf), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn argb_to_bgra(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 4)?;
incant!(
copy_reverse_4bpp_impl(src, dst),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn fill_alpha_argb(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 4)?;
incant!(fill_alpha_first_impl(buf), [v3, neon, wasm128, scalar]);
Ok(())
}
pub fn fill_alpha_xrgb(buf: &mut [u8]) -> Result<(), SizeError> {
fill_alpha_argb(buf)
}
pub fn rgb_to_argb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 3, dst.len(), 4)?;
incant!(rgb_to_argb_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn rgb_to_abgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 3, dst.len(), 4)?;
incant!(rgb_to_abgr_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn argb_to_rgb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 3)?;
incant!(argb_to_rgb_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn argb_to_bgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 3)?;
incant!(argb_to_bgr_impl(src, dst), [v3, wasm128, scalar]);
Ok(())
}
pub fn gray_to_argb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 1, dst.len(), 4)?;
incant!(
gray_to_4bpp_alpha_first_impl(src, dst),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn gray_alpha_to_argb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 2, dst.len(), 4)?;
incant!(
gray_alpha_to_4bpp_alpha_first_impl(src, dst),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn argb_to_rgba_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 4)?;
incant!(
rotate_left_strided(buf, width, height, stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn argb_to_rgba_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
copy_rotate_left_strided(src, dst, width, height, src_stride, dst_stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn rgba_to_argb_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 4)?;
incant!(
rotate_right_strided(buf, width, height, stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn rgba_to_argb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
copy_rotate_right_strided(src, dst, width, height, src_stride, dst_stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn argb_to_bgra_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 4)?;
incant!(
reverse_4bpp_strided(buf, width, height, stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn argb_to_bgra_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
copy_reverse_4bpp_strided(src, dst, width, height, src_stride, dst_stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn fill_alpha_argb_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 4)?;
incant!(
fill_alpha_first_strided(buf, width, height, stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn fill_alpha_xrgb_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
fill_alpha_argb_strided(buf, width, height, stride)
}
pub fn rgb_to_argb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 3)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
rgb_to_argb_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn rgb_to_abgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 3)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
rgb_to_abgr_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn argb_to_rgb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 3)?;
incant!(
argb_to_rgb_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn argb_to_bgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 3)?;
incant!(
argb_to_bgr_strided(src, dst, width, height, src_stride, dst_stride),
[v3, wasm128, scalar]
);
Ok(())
}
pub fn gray_to_argb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 1)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
gray_to_4bpp_alpha_first_strided(src, dst, width, height, src_stride, dst_stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
pub fn gray_alpha_to_argb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 2)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
gray_alpha_to_4bpp_alpha_first_strided(src, dst, width, height, src_stride, dst_stride),
[v3, neon, wasm128, scalar]
);
Ok(())
}
#[cfg(feature = "experimental")]
mod experimental_api {
use super::*;
use crate::SizeError;
use archmage::incant;
macro_rules! luma_api {
(
$matrix:ident, $r:expr, $g:expr, $b:expr,
$doc_matrix:expr
) => {
paste::paste! {
#[doc = concat!("RGB (3 bytes/px) → Gray (1 byte/px) using ", $doc_matrix, " luma weights [", stringify!($r), ", ", stringify!($g), ", ", stringify!($b), "].")]
pub fn [<rgb_to_gray_ $matrix>](src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 3, dst.len(), 1)?;
incant!([<rgb_to_gray_ $matrix _impl>](src, dst), [v3, scalar]);
Ok(())
}
#[doc = concat!("BGR (3 bytes/px) → Gray (1 byte/px) using ", $doc_matrix, " luma weights.")]
pub fn [<bgr_to_gray_ $matrix>](src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 3, dst.len(), 1)?;
incant!([<bgr_to_gray_ $matrix _impl>](src, dst), [v3, scalar]);
Ok(())
}
#[doc = concat!("RGBA (4 bytes/px) → Gray (1 byte/px) using ", $doc_matrix, " luma weights. Alpha ignored.")]
pub fn [<rgba_to_gray_ $matrix>](src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 1)?;
incant!([<rgba_to_gray_ $matrix _impl>](src, dst), [v3, scalar]);
Ok(())
}
#[doc = concat!("BGRA (4 bytes/px) → Gray (1 byte/px) using ", $doc_matrix, " luma weights. Alpha ignored.")]
pub fn [<bgra_to_gray_ $matrix>](src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 1)?;
incant!([<bgra_to_gray_ $matrix _impl>](src, dst), [v3, scalar]);
Ok(())
}
#[doc = concat!("RGB → Gray ", $doc_matrix, " between strided buffers.")]
pub fn [<rgb_to_gray_ $matrix _strided>](
src: &[u8], dst: &mut [u8], width: usize, height: usize, src_stride: usize, dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 3)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!([<rgb_to_gray_ $matrix _strided>](src, dst, width, height, src_stride, dst_stride), [v3, scalar]);
Ok(())
}
#[doc = concat!("BGR → Gray ", $doc_matrix, " between strided buffers.")]
pub fn [<bgr_to_gray_ $matrix _strided>](
src: &[u8], dst: &mut [u8], width: usize, height: usize, src_stride: usize, dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 3)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!([<bgr_to_gray_ $matrix _strided>](src, dst, width, height, src_stride, dst_stride), [v3, scalar]);
Ok(())
}
#[doc = concat!("RGBA → Gray ", $doc_matrix, " between strided buffers.")]
pub fn [<rgba_to_gray_ $matrix _strided>](
src: &[u8], dst: &mut [u8], width: usize, height: usize, src_stride: usize, dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!([<rgba_to_gray_ $matrix _strided>](src, dst, width, height, src_stride, dst_stride), [v3, scalar]);
Ok(())
}
#[doc = concat!("BGRA → Gray ", $doc_matrix, " between strided buffers.")]
pub fn [<bgra_to_gray_ $matrix _strided>](
src: &[u8], dst: &mut [u8], width: usize, height: usize, src_stride: usize, dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!([<bgra_to_gray_ $matrix _strided>](src, dst, width, height, src_stride, dst_stride), [v3, scalar]);
Ok(())
}
}
};
}
luma_api!(bt709, 54, 183, 19, "BT.709");
luma_api!(bt601, 77, 150, 29, "BT.601");
luma_api!(bt2020, 67, 174, 15, "BT.2020");
#[inline(always)]
pub fn rgb_to_gray(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgb_to_gray_bt709(src, dst)
}
#[inline(always)]
pub fn bgr_to_gray(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
bgr_to_gray_bt709(src, dst)
}
#[inline(always)]
pub fn rgba_to_gray(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgba_to_gray_bt709(src, dst)
}
#[inline(always)]
pub fn bgra_to_gray(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
bgra_to_gray_bt709(src, dst)
}
pub fn convert_u8_to_u16(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
if src.is_empty() {
return Err(SizeError::NotPixelAligned);
}
check_copy(src.len(), 1, dst.len(), 2)?;
incant!(convert_u8_to_u16_impl(src, dst), [v3, scalar]);
Ok(())
}
pub fn convert_u16_to_u8(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 2, dst.len(), 1)?;
incant!(convert_u16_to_u8_impl(src, dst), [v3, scalar]);
Ok(())
}
pub fn convert_u8_to_f32(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
if src.is_empty() {
return Err(SizeError::NotPixelAligned);
}
check_copy(src.len(), 1, dst.len(), 4)?;
incant!(convert_u8_to_f32_impl(src, dst), [v3, scalar]);
Ok(())
}
pub fn convert_f32_to_u8(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 1)?;
incant!(convert_f32_to_u8_impl(src, dst), [v3, scalar]);
Ok(())
}
pub fn convert_u16_to_f32(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 2, dst.len(), 4)?;
incant!(convert_u16_to_f32_impl(src, dst), [v3, scalar]);
Ok(())
}
pub fn convert_f32_to_u16(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 2)?;
incant!(convert_f32_to_u16_impl(src, dst), [v3, scalar]);
Ok(())
}
pub fn gray_to_rgb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
if src.is_empty() {
return Err(SizeError::NotPixelAligned);
}
check_copy(src.len(), 1, dst.len(), 3)?;
incant!(gray_to_rgb_impl(src, dst), [scalar]);
Ok(())
}
pub fn gray_alpha_to_rgb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 2, dst.len(), 3)?;
incant!(gray_alpha_to_rgb_impl(src, dst), [scalar]);
Ok(())
}
pub fn gray_to_gray_alpha(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
if src.is_empty() {
return Err(SizeError::NotPixelAligned);
}
check_copy(src.len(), 1, dst.len(), 2)?;
incant!(gray_to_gray_alpha_impl(src, dst), [scalar]);
Ok(())
}
pub fn gray_alpha_to_gray(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 2, dst.len(), 1)?;
incant!(gray_alpha_to_gray_impl(src, dst), [scalar]);
Ok(())
}
pub fn rgb_to_gray_identity(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 3, dst.len(), 1)?;
incant!(rgb_to_gray_identity_impl(src, dst), [scalar]);
Ok(())
}
pub fn rgba_to_gray_identity(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 1)?;
incant!(rgba_to_gray_identity_impl(src, dst), [scalar]);
Ok(())
}
#[inline(always)]
pub fn gray_to_bgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
gray_to_rgb(src, dst)
}
#[inline(always)]
pub fn gray_alpha_to_bgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
gray_alpha_to_rgb(src, dst)
}
#[inline(always)]
pub fn bgr_to_gray_identity(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgb_to_gray_identity(src, dst)
}
#[inline(always)]
pub fn bgra_to_gray_identity(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgba_to_gray_identity(src, dst)
}
pub fn gray_to_rgb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 1)?;
check_strided(dst.len(), width, height, dst_stride, 3)?;
incant!(
gray_to_rgb_strided(src, dst, width, height, src_stride, dst_stride),
[scalar]
);
Ok(())
}
pub fn gray_alpha_to_rgb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 2)?;
check_strided(dst.len(), width, height, dst_stride, 3)?;
incant!(
gray_alpha_to_rgb_strided(src, dst, width, height, src_stride, dst_stride),
[scalar]
);
Ok(())
}
pub fn gray_to_gray_alpha_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 1)?;
check_strided(dst.len(), width, height, dst_stride, 2)?;
incant!(
gray_to_gray_alpha_strided(src, dst, width, height, src_stride, dst_stride),
[scalar]
);
Ok(())
}
pub fn gray_alpha_to_gray_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 2)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!(
gray_alpha_to_gray_strided(src, dst, width, height, src_stride, dst_stride),
[scalar]
);
Ok(())
}
pub fn rgb_to_gray_identity_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 3)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!(
rgb_to_gray_identity_strided(src, dst, width, height, src_stride, dst_stride),
[scalar]
);
Ok(())
}
pub fn rgba_to_gray_identity_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!(
rgba_to_gray_identity_strided(src, dst, width, height, src_stride, dst_stride),
[scalar]
);
Ok(())
}
#[inline(always)]
pub fn gray_to_bgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
gray_to_rgb_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn gray_alpha_to_bgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
gray_alpha_to_rgb_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgr_to_gray_identity_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgb_to_gray_identity_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgra_to_gray_identity_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgba_to_gray_identity_strided(src, dst, width, height, src_stride, dst_stride)
}
pub fn convert_u8_to_u16_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 1)?;
check_strided(dst.len(), width, height, dst_stride, 2)?;
incant!(
convert_u8_to_u16_strided(src, dst, width, height, src_stride, dst_stride),
[v3, scalar]
);
Ok(())
}
pub fn convert_u16_to_u8_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 2)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!(
convert_u16_to_u8_strided(src, dst, width, height, src_stride, dst_stride),
[v3, scalar]
);
Ok(())
}
pub fn convert_u8_to_f32_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 1)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
convert_u8_to_f32_strided(src, dst, width, height, src_stride, dst_stride),
[v3, scalar]
);
Ok(())
}
pub fn convert_f32_to_u8_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 1)?;
incant!(
convert_f32_to_u8_strided(src, dst, width, height, src_stride, dst_stride),
[v3, scalar]
);
Ok(())
}
pub fn convert_u16_to_f32_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 2)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
incant!(
convert_u16_to_f32_strided(src, dst, width, height, src_stride, dst_stride),
[v3, scalar]
);
Ok(())
}
pub fn convert_f32_to_u16_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 2)?;
incant!(
convert_f32_to_u16_strided(src, dst, width, height, src_stride, dst_stride),
[v3, scalar]
);
Ok(())
}
pub fn premultiply_alpha_f32(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 16)?;
incant!(premul_f32_impl(buf), [v3, scalar]);
Ok(())
}
pub fn premultiply_alpha_f32_copy(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 16, dst.len(), 16)?;
incant!(premul_f32_copy_impl(src, dst), [v3, scalar]);
Ok(())
}
pub fn unpremultiply_alpha_f32(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 16)?;
incant!(unpremul_f32_impl(buf), [v3, scalar]);
Ok(())
}
pub fn unpremultiply_alpha_f32_copy(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 16, dst.len(), 16)?;
incant!(unpremul_f32_copy_impl(src, dst), [v3, scalar]);
Ok(())
}
#[inline(always)]
pub fn premultiply_alpha_rgba_f32(buf: &mut [u8]) -> Result<(), SizeError> {
premultiply_alpha_f32(buf)
}
#[inline(always)]
pub fn premultiply_alpha_rgba_f32_copy(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
premultiply_alpha_f32_copy(src, dst)
}
#[inline(always)]
pub fn unpremultiply_alpha_rgba_f32(buf: &mut [u8]) -> Result<(), SizeError> {
unpremultiply_alpha_f32(buf)
}
#[inline(always)]
pub fn unpremultiply_alpha_rgba_f32_copy(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
unpremultiply_alpha_f32_copy(src, dst)
}
pub fn premultiply_alpha_f32_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 16)?;
incant!(premul_f32_strided(buf, width, height, stride), [v3, scalar]);
Ok(())
}
pub fn premultiply_alpha_f32_copy_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 16)?;
check_strided(dst.len(), width, height, dst_stride, 16)?;
incant!(
premul_f32_copy_strided(src, dst, width, height, src_stride, dst_stride),
[v3, scalar]
);
Ok(())
}
pub fn unpremultiply_alpha_f32_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 16)?;
incant!(
unpremul_f32_strided(buf, width, height, stride),
[v3, scalar]
);
Ok(())
}
pub fn unpremultiply_alpha_f32_copy_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 16)?;
check_strided(dst.len(), width, height, dst_stride, 16)?;
incant!(
unpremul_f32_copy_strided(src, dst, width, height, src_stride, dst_stride),
[v3, scalar]
);
Ok(())
}
pub fn premultiply_alpha_rgba_u8(buf: &mut [u8]) -> Result<(), SizeError> {
check_inplace(buf.len(), 4)?;
premul_u8_impl(buf);
Ok(())
}
#[inline(always)]
pub fn premultiply_alpha_bgra_u8(buf: &mut [u8]) -> Result<(), SizeError> {
premultiply_alpha_rgba_u8(buf)
}
pub fn premultiply_alpha_rgba_u8_copy(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
check_copy(src.len(), 4, dst.len(), 4)?;
premul_u8_copy_impl(src, dst);
Ok(())
}
#[inline(always)]
pub fn premultiply_alpha_bgra_u8_copy(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
premultiply_alpha_rgba_u8_copy(src, dst)
}
pub fn premultiply_alpha_rgba_u8_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
check_strided(buf.len(), width, height, stride, 4)?;
premul_u8_strided_impl(buf, width, height, stride);
Ok(())
}
#[inline(always)]
pub fn premultiply_alpha_bgra_u8_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
premultiply_alpha_rgba_u8_strided(buf, width, height, stride)
}
pub fn premultiply_alpha_rgba_u8_copy_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
check_strided(src.len(), width, height, src_stride, 4)?;
check_strided(dst.len(), width, height, dst_stride, 4)?;
premul_u8_copy_strided_impl(src, dst, width, height, src_stride, dst_stride);
Ok(())
}
#[inline(always)]
pub fn premultiply_alpha_bgra_u8_copy_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
premultiply_alpha_rgba_u8_copy_strided(src, dst, width, height, src_stride, dst_stride)
}
} #[cfg(feature = "experimental")]
pub use experimental_api::*;
#[inline(always)]
pub fn bgra_to_rgba_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
rgba_to_bgra_inplace(buf)
}
#[inline(always)]
pub fn bgra_to_rgba(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgba_to_bgra(src, dst)
}
#[inline(always)]
pub fn bgr_to_rgb_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
rgb_to_bgr_inplace(buf)
}
#[inline(always)]
pub fn bgr_to_rgb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgb_to_bgr(src, dst)
}
#[inline(always)]
pub fn bgr_to_rgba(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgb_to_bgra(src, dst)
}
#[inline(always)]
pub fn bgr_to_bgra(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgb_to_rgba(src, dst)
}
#[inline(always)]
pub fn gray_to_bgra(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
gray_to_rgba(src, dst)
}
#[inline(always)]
pub fn gray_alpha_to_bgra(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
gray_alpha_to_rgba(src, dst)
}
#[inline(always)]
pub fn bgra_to_bgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgba_to_rgb(src, dst)
}
#[inline(always)]
pub fn rgba_to_bgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
bgra_to_rgb(src, dst)
}
#[inline(always)]
pub fn bgra_to_rgba_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
rgba_to_bgra_inplace_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn bgra_to_rgba_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgba_to_bgra_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgr_to_rgba_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgb_to_bgra_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgr_to_bgra_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgb_to_rgba_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn gray_to_bgra_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
gray_to_rgba_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn gray_alpha_to_bgra_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
gray_alpha_to_rgba_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgra_to_bgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgba_to_rgb_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn rgba_to_bgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
bgra_to_rgb_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgr_to_rgb_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
rgb_to_bgr_inplace_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn bgr_to_rgb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgb_to_bgr_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn abgr_to_bgra_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
argb_to_rgba_inplace(buf)
}
#[inline(always)]
pub fn abgr_to_bgra(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
argb_to_rgba(src, dst)
}
#[inline(always)]
pub fn bgra_to_abgr_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
rgba_to_argb_inplace(buf)
}
#[inline(always)]
pub fn bgra_to_abgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgba_to_argb(src, dst)
}
#[inline(always)]
pub fn bgra_to_argb_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
argb_to_bgra_inplace(buf)
}
#[inline(always)]
pub fn bgra_to_argb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
argb_to_bgra(src, dst)
}
#[inline(always)]
pub fn abgr_to_rgba_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
argb_to_bgra_inplace(buf)
}
#[inline(always)]
pub fn abgr_to_rgba(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
argb_to_bgra(src, dst)
}
#[inline(always)]
pub fn rgba_to_abgr_inplace(buf: &mut [u8]) -> Result<(), SizeError> {
argb_to_bgra_inplace(buf)
}
#[inline(always)]
pub fn rgba_to_abgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
argb_to_bgra(src, dst)
}
#[inline(always)]
pub fn fill_alpha_abgr(buf: &mut [u8]) -> Result<(), SizeError> {
fill_alpha_argb(buf)
}
#[inline(always)]
pub fn fill_alpha_xbgr(buf: &mut [u8]) -> Result<(), SizeError> {
fill_alpha_argb(buf)
}
#[inline(always)]
pub fn bgr_to_argb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgb_to_abgr(src, dst)
}
#[inline(always)]
pub fn bgr_to_abgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
rgb_to_argb(src, dst)
}
#[inline(always)]
pub fn abgr_to_bgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
argb_to_rgb(src, dst)
}
#[inline(always)]
pub fn abgr_to_rgb(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
argb_to_bgr(src, dst)
}
#[inline(always)]
pub fn gray_to_abgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
gray_to_argb(src, dst)
}
#[inline(always)]
pub fn gray_alpha_to_abgr(src: &[u8], dst: &mut [u8]) -> Result<(), SizeError> {
gray_alpha_to_argb(src, dst)
}
#[inline(always)]
pub fn abgr_to_bgra_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
argb_to_rgba_inplace_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn abgr_to_bgra_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
argb_to_rgba_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgra_to_abgr_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
rgba_to_argb_inplace_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn bgra_to_abgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgba_to_argb_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgra_to_argb_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
argb_to_bgra_inplace_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn bgra_to_argb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
argb_to_bgra_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn abgr_to_rgba_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
argb_to_bgra_inplace_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn abgr_to_rgba_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
argb_to_bgra_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn rgba_to_abgr_inplace_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
argb_to_bgra_inplace_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn rgba_to_abgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
argb_to_bgra_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn fill_alpha_abgr_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
fill_alpha_argb_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn fill_alpha_xbgr_strided(
buf: &mut [u8],
width: usize,
height: usize,
stride: usize,
) -> Result<(), SizeError> {
fill_alpha_argb_strided(buf, width, height, stride)
}
#[inline(always)]
pub fn bgr_to_argb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgb_to_abgr_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn bgr_to_abgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
rgb_to_argb_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn abgr_to_bgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
argb_to_rgb_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn abgr_to_rgb_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
argb_to_bgr_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn gray_to_abgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
gray_to_argb_strided(src, dst, width, height, src_stride, dst_stride)
}
#[inline(always)]
pub fn gray_alpha_to_abgr_strided(
src: &[u8],
dst: &mut [u8],
width: usize,
height: usize,
src_stride: usize,
dst_stride: usize,
) -> Result<(), SizeError> {
gray_alpha_to_argb_strided(src, dst, width, height, src_stride, dst_stride)
}