singe-npp 0.1.0-alpha.8

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

pub(crate) fn swap_channels_u8_c3(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C3>,
    destination: &mut ImageViewMut<'_, u8, C3>,
    order: [i32; 3],
) -> Result<()> {
    validate_same_size(source.size(), destination.size())?;
    validate_channel_order(&order, 3)?;

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

pub(crate) fn swap_channels_u8_c3_in_place(
    stream_context: &StreamContext,
    image: &mut ImageViewMut<'_, u8, C3>,
    order: [i32; 3],
) -> Result<()> {
    validate_channel_order(&order, 3)?;

    unsafe {
        try_ffi!(sys::nppiSwapChannels_8u_C3IR_Ctx(
            image.as_mut_ptr().cast(),
            image.step(),
            image.size().into(),
            order.as_ptr().cast(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn swap_channels_u8_c4(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C4>,
    destination: &mut ImageViewMut<'_, u8, C4>,
    order: [i32; 4],
) -> Result<()> {
    validate_same_size(source.size(), destination.size())?;
    validate_channel_order(&order, 4)?;

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

pub(crate) fn swap_channels_u8_c4_in_place(
    stream_context: &StreamContext,
    image: &mut ImageViewMut<'_, u8, C4>,
    order: [i32; 4],
) -> Result<()> {
    validate_channel_order(&order, 4)?;

    unsafe {
        try_ffi!(sys::nppiSwapChannels_8u_C4IR_Ctx(
            image.as_mut_ptr().cast(),
            image.step(),
            image.size().into(),
            order.as_ptr().cast(),
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

impl_swap_channels_c4_to_c3!(swap_channels_u8_c4_to_c3, u8, nppiSwapChannels_8u_C4C3R_Ctx);
impl_swap_channels_c3_to_c4!(swap_channels_u8_c3_to_c4, u8, nppiSwapChannels_8u_C3C4R_Ctx);
impl_swap_channels_ac4!(swap_channels_u8_ac4, u8, nppiSwapChannels_8u_AC4R_Ctx);
impl_swap_channels!(
    swap_channels_u16_c3,
    u16,
    C3,
    3,
    nppiSwapChannels_16u_C3R_Ctx
);
impl_swap_channels_in_place!(
    swap_channels_u16_c3_in_place,
    u16,
    C3,
    3,
    nppiSwapChannels_16u_C3IR_Ctx
);
impl_swap_channels!(
    swap_channels_u16_c4,
    u16,
    C4,
    4,
    nppiSwapChannels_16u_C4R_Ctx
);
impl_swap_channels_in_place!(
    swap_channels_u16_c4_in_place,
    u16,
    C4,
    4,
    nppiSwapChannels_16u_C4IR_Ctx
);
impl_swap_channels!(
    swap_channels_i16_c3,
    i16,
    C3,
    3,
    nppiSwapChannels_16s_C3R_Ctx
);
impl_swap_channels_in_place!(
    swap_channels_i16_c3_in_place,
    i16,
    C3,
    3,
    nppiSwapChannels_16s_C3IR_Ctx
);
impl_swap_channels!(
    swap_channels_i16_c4,
    i16,
    C4,
    4,
    nppiSwapChannels_16s_C4R_Ctx
);
impl_swap_channels_in_place!(
    swap_channels_i16_c4_in_place,
    i16,
    C4,
    4,
    nppiSwapChannels_16s_C4IR_Ctx
);
impl_swap_channels!(
    swap_channels_i32_c3,
    i32,
    C3,
    3,
    nppiSwapChannels_32s_C3R_Ctx
);
impl_swap_channels_in_place!(
    swap_channels_i32_c3_in_place,
    i32,
    C3,
    3,
    nppiSwapChannels_32s_C3IR_Ctx
);
impl_swap_channels!(
    swap_channels_i32_c4,
    i32,
    C4,
    4,
    nppiSwapChannels_32s_C4R_Ctx
);
impl_swap_channels_in_place!(
    swap_channels_i32_c4_in_place,
    i32,
    C4,
    4,
    nppiSwapChannels_32s_C4IR_Ctx
);
impl_swap_channels!(
    swap_channels_f32_c3,
    f32,
    C3,
    3,
    nppiSwapChannels_32f_C3R_Ctx
);
impl_swap_channels_in_place!(
    swap_channels_f32_c3_in_place,
    f32,
    C3,
    3,
    nppiSwapChannels_32f_C3IR_Ctx
);
impl_swap_channels!(
    swap_channels_f32_c4,
    f32,
    C4,
    4,
    nppiSwapChannels_32f_C4R_Ctx
);
impl_swap_channels_in_place!(
    swap_channels_f32_c4_in_place,
    f32,
    C4,
    4,
    nppiSwapChannels_32f_C4IR_Ctx
);
impl_swap_channels_c4_to_c3!(
    swap_channels_u16_c4_to_c3,
    u16,
    nppiSwapChannels_16u_C4C3R_Ctx
);
impl_swap_channels_c3_to_c4!(
    swap_channels_u16_c3_to_c4,
    u16,
    nppiSwapChannels_16u_C3C4R_Ctx
);
impl_swap_channels_ac4!(swap_channels_u16_ac4, u16, nppiSwapChannels_16u_AC4R_Ctx);
impl_swap_channels_c4_to_c3!(
    swap_channels_i16_c4_to_c3,
    i16,
    nppiSwapChannels_16s_C4C3R_Ctx
);
impl_swap_channels_c3_to_c4!(
    swap_channels_i16_c3_to_c4,
    i16,
    nppiSwapChannels_16s_C3C4R_Ctx
);
impl_swap_channels_ac4!(swap_channels_i16_ac4, i16, nppiSwapChannels_16s_AC4R_Ctx);
impl_swap_channels_c4_to_c3!(
    swap_channels_i32_c4_to_c3,
    i32,
    nppiSwapChannels_32s_C4C3R_Ctx
);
impl_swap_channels_c3_to_c4!(
    swap_channels_i32_c3_to_c4,
    i32,
    nppiSwapChannels_32s_C3C4R_Ctx
);
impl_swap_channels_ac4!(swap_channels_i32_ac4, i32, nppiSwapChannels_32s_AC4R_Ctx);
impl_swap_channels_c4_to_c3!(
    swap_channels_f32_c4_to_c3,
    f32,
    nppiSwapChannels_32f_C4C3R_Ctx
);
impl_swap_channels_c3_to_c4!(
    swap_channels_f32_c3_to_c4,
    f32,
    nppiSwapChannels_32f_C3C4R_Ctx
);
impl_swap_channels_ac4!(swap_channels_f32_ac4, f32, nppiSwapChannels_32f_AC4R_Ctx);
impl_generic_swap_channels_operation!(
    SwapChannelsC3,
    swap_channels_c3,
    C3,
    3,
    [
        u8 => swap_channels_u8_c3,
        u16 => swap_channels_u16_c3,
        i16 => swap_channels_i16_c3,
        i32 => swap_channels_i32_c3,
        f32 => swap_channels_f32_c3,
    ]
);
impl_generic_swap_channels_in_place_operation!(
    SwapChannelsC3InPlace,
    swap_channels_c3_in_place,
    C3,
    3,
    [
        u8 => swap_channels_u8_c3_in_place,
        u16 => swap_channels_u16_c3_in_place,
        i16 => swap_channels_i16_c3_in_place,
        i32 => swap_channels_i32_c3_in_place,
        f32 => swap_channels_f32_c3_in_place,
    ]
);
impl_generic_swap_channels_operation!(
    SwapChannelsC4,
    swap_channels_c4,
    C4,
    4,
    [
        u8 => swap_channels_u8_c4,
        u16 => swap_channels_u16_c4,
        i16 => swap_channels_i16_c4,
        i32 => swap_channels_i32_c4,
        f32 => swap_channels_f32_c4,
    ]
);
impl_generic_swap_channels_in_place_operation!(
    SwapChannelsC4InPlace,
    swap_channels_c4_in_place,
    C4,
    4,
    [
        u8 => swap_channels_u8_c4_in_place,
        u16 => swap_channels_u16_c4_in_place,
        i16 => swap_channels_i16_c4_in_place,
        i32 => swap_channels_i32_c4_in_place,
        f32 => swap_channels_f32_c4_in_place,
    ]
);
impl_generic_swap_channels_c4_to_c3_operation!(
    SwapChannelsC4ToC3,
    swap_channels_c4_to_c3,
    [
        u8 => swap_channels_u8_c4_to_c3,
        u16 => swap_channels_u16_c4_to_c3,
        i16 => swap_channels_i16_c4_to_c3,
        i32 => swap_channels_i32_c4_to_c3,
        f32 => swap_channels_f32_c4_to_c3,
    ]
);
impl_generic_swap_channels_c3_to_c4_operation!(
    SwapChannelsC3ToC4,
    swap_channels_c3_to_c4,
    [
        u8 => swap_channels_u8_c3_to_c4,
        u16 => swap_channels_u16_c3_to_c4,
        i16 => swap_channels_i16_c3_to_c4,
        i32 => swap_channels_i32_c3_to_c4,
        f32 => swap_channels_f32_c3_to_c4,
    ]
);
impl_generic_swap_channels_operation!(
    SwapChannelsAC4,
    swap_channels_ac4,
    AC4,
    3,
    [
        u8 => swap_channels_u8_ac4,
        u16 => swap_channels_u16_ac4,
        i16 => swap_channels_i16_ac4,
        i32 => swap_channels_i32_ac4,
        f32 => swap_channels_f32_ac4,
    ]
);