singe-npp 0.1.0-alpha.8

Safe Rust wrappers for NVIDIA Performance Primitives library (NPP).
Documentation
use super::*;

pub(crate) fn copy_constant_border_u8_c1(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C1>,
    destination: &mut ImageViewMut<'_, u8, C1>,
    top: usize,
    left: usize,
    value: u8,
) -> Result<()> {
    let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;

    unsafe {
        try_ffi!(sys::nppiCopyConstBorder_8u_C1R_Ctx(
            source.as_ptr().cast(),
            source.step(),
            source.size().into(),
            destination.as_mut_ptr().cast(),
            destination.step(),
            destination.size().into(),
            top,
            left,
            value,
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn copy_constant_border_u8_c3(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C3>,
    destination: &mut ImageViewMut<'_, u8, C3>,
    top: usize,
    left: usize,
    value: [u8; 3],
) -> Result<()> {
    let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;

    unsafe {
        try_ffi!(sys::nppiCopyConstBorder_8u_C3R_Ctx(
            source.as_ptr().cast(),
            source.step(),
            source.size().into(),
            destination.as_mut_ptr().cast(),
            destination.step(),
            destination.size().into(),
            top,
            left,
            value.as_ptr().cast(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn copy_constant_border_u8_c4(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C4>,
    destination: &mut ImageViewMut<'_, u8, C4>,
    top: usize,
    left: usize,
    value: [u8; 4],
) -> Result<()> {
    let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;

    unsafe {
        try_ffi!(sys::nppiCopyConstBorder_8u_C4R_Ctx(
            source.as_ptr().cast(),
            source.step(),
            source.size().into(),
            destination.as_mut_ptr().cast(),
            destination.step(),
            destination.size().into(),
            top,
            left,
            value.as_ptr().cast(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn copy_constant_border_u8_ac4(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, AC4>,
    destination: &mut ImageViewMut<'_, u8, AC4>,
    top: usize,
    left: usize,
    value: [u8; 3],
) -> Result<()> {
    let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;

    unsafe {
        try_ffi!(sys::nppiCopyConstBorder_8u_AC4R_Ctx(
            source.as_ptr().cast(),
            source.step(),
            source.size().into(),
            destination.as_mut_ptr().cast(),
            destination.step(),
            destination.size().into(),
            top,
            left,
            value.as_ptr().cast(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

impl_copy_constant_border_scalar!(
    copy_constant_border_u16_c1,
    u16,
    nppiCopyConstBorder_16u_C1R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_u16_c3,
    u16,
    C3,
    [u16; 3],
    nppiCopyConstBorder_16u_C3R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_u16_c4,
    u16,
    C4,
    [u16; 4],
    nppiCopyConstBorder_16u_C4R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_u16_ac4,
    u16,
    AC4,
    [u16; 3],
    nppiCopyConstBorder_16u_AC4R_Ctx
);
impl_copy_constant_border_scalar!(
    copy_constant_border_i16_c1,
    i16,
    nppiCopyConstBorder_16s_C1R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_i16_c3,
    i16,
    C3,
    [i16; 3],
    nppiCopyConstBorder_16s_C3R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_i16_c4,
    i16,
    C4,
    [i16; 4],
    nppiCopyConstBorder_16s_C4R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_i16_ac4,
    i16,
    AC4,
    [i16; 3],
    nppiCopyConstBorder_16s_AC4R_Ctx
);
impl_copy_constant_border_scalar!(
    copy_constant_border_i32_c1,
    i32,
    nppiCopyConstBorder_32s_C1R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_i32_c3,
    i32,
    C3,
    [i32; 3],
    nppiCopyConstBorder_32s_C3R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_i32_c4,
    i32,
    C4,
    [i32; 4],
    nppiCopyConstBorder_32s_C4R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_i32_ac4,
    i32,
    AC4,
    [i32; 3],
    nppiCopyConstBorder_32s_AC4R_Ctx
);
impl_copy_constant_border_scalar!(
    copy_constant_border_f32_c1,
    f32,
    nppiCopyConstBorder_32f_C1R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_f32_c3,
    f32,
    C3,
    [f32; 3],
    nppiCopyConstBorder_32f_C3R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_f32_c4,
    f32,
    C4,
    [f32; 4],
    nppiCopyConstBorder_32f_C4R_Ctx
);
impl_copy_constant_border_packed!(
    copy_constant_border_f32_ac4,
    f32,
    AC4,
    [f32; 3],
    nppiCopyConstBorder_32f_AC4R_Ctx
);
impl_generic_copy_constant_border_operation!(
    CopyConstantBorderC1,
    copy_constant_border_c1,
    C1,
    [
        u8 => (u8, copy_constant_border_u8_c1),
        u16 => (u16, copy_constant_border_u16_c1),
        i16 => (i16, copy_constant_border_i16_c1),
        i32 => (i32, copy_constant_border_i32_c1),
        f32 => (f32, copy_constant_border_f32_c1),
    ]
);
impl_generic_copy_constant_border_operation!(
    CopyConstantBorderC3,
    copy_constant_border_c3,
    C3,
    [
        u8 => ([u8; 3], copy_constant_border_u8_c3),
        u16 => ([u16; 3], copy_constant_border_u16_c3),
        i16 => ([i16; 3], copy_constant_border_i16_c3),
        i32 => ([i32; 3], copy_constant_border_i32_c3),
        f32 => ([f32; 3], copy_constant_border_f32_c3),
    ]
);
impl_generic_copy_constant_border_operation!(
    CopyConstantBorderC4,
    copy_constant_border_c4,
    C4,
    [
        u8 => ([u8; 4], copy_constant_border_u8_c4),
        u16 => ([u16; 4], copy_constant_border_u16_c4),
        i16 => ([i16; 4], copy_constant_border_i16_c4),
        i32 => ([i32; 4], copy_constant_border_i32_c4),
        f32 => ([f32; 4], copy_constant_border_f32_c4),
    ]
);
impl_generic_copy_constant_border_operation!(
    CopyConstantBorderAC4,
    copy_constant_border_ac4,
    AC4,
    [
        u8 => ([u8; 3], copy_constant_border_u8_ac4),
        u16 => ([u16; 3], copy_constant_border_u16_ac4),
        i16 => ([i16; 3], copy_constant_border_i16_ac4),
        i32 => ([i32; 3], copy_constant_border_i32_ac4),
        f32 => ([f32; 3], copy_constant_border_f32_ac4),
    ]
);