singe-npp 0.1.0-alpha.8

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

pub(crate) fn copy_u8_c3_to_p3(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C3>,
    destination: &mut PlanarImageViewMut<'_, u8, 3>,
) -> Result<()> {
    validate_same_size(source.size(), destination.planes()[0].size())?;

    let destination_planes = destination
        .planes_mut()
        .each_mut()
        .map(ImageViewMut::as_mut_ptr);

    unsafe {
        try_ffi!(sys::nppiCopy_8u_C3P3R_Ctx(
            source.as_ptr().cast(),
            source.step(),
            destination_planes.as_ptr().cast(),
            destination.planes()[0].step(),
            source.size().into(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn copy_u8_c4_to_p4(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C4>,
    destination: &mut PlanarImageViewMut<'_, u8, 4>,
) -> Result<()> {
    validate_same_size(source.size(), destination.planes()[0].size())?;

    let destination_planes = destination
        .planes_mut()
        .each_mut()
        .map(ImageViewMut::as_mut_ptr);

    unsafe {
        try_ffi!(sys::nppiCopy_8u_C4P4R_Ctx(
            source.as_ptr().cast(),
            source.step(),
            destination_planes.as_ptr().cast(),
            destination.planes()[0].step(),
            source.size().into(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn copy_u8_p3_to_c3(
    stream_context: &StreamContext,
    source: &PlanarImageView<'_, u8, 3>,
    destination: &mut ImageViewMut<'_, u8, C3>,
) -> Result<()> {
    validate_same_size(source.planes()[0].size(), destination.size())?;

    let source_planes = source.planes().map(|plane| plane.as_ptr());

    unsafe {
        try_ffi!(sys::nppiCopy_8u_P3C3R_Ctx(
            source_planes.as_ptr().cast(),
            source.planes()[0].step(),
            destination.as_mut_ptr().cast(),
            destination.step(),
            destination.size().into(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn copy_u8_p4_to_c4(
    stream_context: &StreamContext,
    source: &PlanarImageView<'_, u8, 4>,
    destination: &mut ImageViewMut<'_, u8, C4>,
) -> Result<()> {
    validate_same_size(source.planes()[0].size(), destination.size())?;

    let source_planes = source.planes().map(|plane| plane.as_ptr());

    unsafe {
        try_ffi!(sys::nppiCopy_8u_P4C4R_Ctx(
            source_planes.as_ptr().cast(),
            source.planes()[0].step(),
            destination.as_mut_ptr().cast(),
            destination.step(),
            destination.size().into(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

impl_copy_packed_to_planar!(copy_u16_c3_to_p3, u16, C3, 3, nppiCopy_16u_C3P3R_Ctx);
impl_copy_packed_to_planar!(copy_u16_c4_to_p4, u16, C4, 4, nppiCopy_16u_C4P4R_Ctx);
impl_copy_packed_to_planar!(copy_i16_c3_to_p3, i16, C3, 3, nppiCopy_16s_C3P3R_Ctx);
impl_copy_packed_to_planar!(copy_i16_c4_to_p4, i16, C4, 4, nppiCopy_16s_C4P4R_Ctx);
impl_copy_packed_to_planar!(copy_i32_c3_to_p3, i32, C3, 3, nppiCopy_32s_C3P3R_Ctx);
impl_copy_packed_to_planar!(copy_i32_c4_to_p4, i32, C4, 4, nppiCopy_32s_C4P4R_Ctx);
impl_copy_packed_to_planar!(copy_f32_c3_to_p3, f32, C3, 3, nppiCopy_32f_C3P3R_Ctx);
impl_copy_packed_to_planar!(copy_f32_c4_to_p4, f32, C4, 4, nppiCopy_32f_C4P4R_Ctx);
impl_copy_planar_to_packed!(copy_u16_p3_to_c3, u16, C3, 3, nppiCopy_16u_P3C3R_Ctx);
impl_copy_planar_to_packed!(copy_u16_p4_to_c4, u16, C4, 4, nppiCopy_16u_P4C4R_Ctx);
impl_copy_planar_to_packed!(copy_i16_p3_to_c3, i16, C3, 3, nppiCopy_16s_P3C3R_Ctx);
impl_copy_planar_to_packed!(copy_i16_p4_to_c4, i16, C4, 4, nppiCopy_16s_P4C4R_Ctx);
impl_copy_planar_to_packed!(copy_i32_p3_to_c3, i32, C3, 3, nppiCopy_32s_P3C3R_Ctx);
impl_copy_planar_to_packed!(copy_i32_p4_to_c4, i32, C4, 4, nppiCopy_32s_P4C4R_Ctx);
impl_copy_planar_to_packed!(copy_f32_p3_to_c3, f32, C3, 3, nppiCopy_32f_P3C3R_Ctx);
impl_copy_planar_to_packed!(copy_f32_p4_to_c4, f32, C4, 4, nppiCopy_32f_P4C4R_Ctx);
impl_generic_copy_packed_to_planar_operation!(
    CopyC3ToP3,
    copy_c3_to_p3,
    C3,
    3,
    [
        u8 => copy_u8_c3_to_p3,
        u16 => copy_u16_c3_to_p3,
        i16 => copy_i16_c3_to_p3,
        i32 => copy_i32_c3_to_p3,
        f32 => copy_f32_c3_to_p3,
    ]
);
impl_generic_copy_packed_to_planar_operation!(
    CopyC4ToP4,
    copy_c4_to_p4,
    C4,
    4,
    [
        u8 => copy_u8_c4_to_p4,
        u16 => copy_u16_c4_to_p4,
        i16 => copy_i16_c4_to_p4,
        i32 => copy_i32_c4_to_p4,
        f32 => copy_f32_c4_to_p4,
    ]
);
impl_generic_copy_planar_to_packed_operation!(
    CopyP3ToC3,
    copy_p3_to_c3,
    C3,
    3,
    [
        u8 => copy_u8_p3_to_c3,
        u16 => copy_u16_p3_to_c3,
        i16 => copy_i16_p3_to_c3,
        i32 => copy_i32_p3_to_c3,
        f32 => copy_f32_p3_to_c3,
    ]
);
impl_generic_copy_planar_to_packed_operation!(
    CopyP4ToC4,
    copy_p4_to_c4,
    C4,
    4,
    [
        u8 => copy_u8_p4_to_c4,
        u16 => copy_u16_p4_to_c4,
        i16 => copy_i16_p4_to_c4,
        i32 => copy_i32_p4_to_c4,
        f32 => copy_f32_p4_to_c4,
    ]
);