singe-npp 0.1.0-alpha.8

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

pub(crate) fn lookup_table_u8_c1(
    stream_context: &StreamContext,
    source: &ImageView<'_, u8, C1>,
    destination: &mut ImageViewMut<'_, u8, C1>,
    values: &DeviceMemory<i32>,
    levels: &DeviceMemory<i32>,
) -> Result<()> {
    validate_same_size(source.size(), destination.size())?;
    let level_count = validate_lookup_table(values.len(), levels.len())?;

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

pub(crate) fn lookup_table_u8_c1_in_place(
    stream_context: &StreamContext,
    image: &mut ImageViewMut<'_, u8, C1>,
    values: &DeviceMemory<i32>,
    levels: &DeviceMemory<i32>,
) -> Result<()> {
    let level_count = validate_lookup_table(values.len(), levels.len())?;

    unsafe {
        try_ffi!(sys::nppiLUT_8u_C1IR_Ctx(
            image.as_mut_ptr().cast(),
            image.step(),
            image.size().into(),
            values.as_ptr().cast(),
            levels.as_ptr().cast(),
            level_count,
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn lookup_table_u16_c1(
    stream_context: &StreamContext,
    source: &ImageView<'_, u16, C1>,
    destination: &mut ImageViewMut<'_, u16, C1>,
    values: &DeviceMemory<i32>,
    levels: &DeviceMemory<i32>,
) -> Result<()> {
    validate_same_size(source.size(), destination.size())?;
    let level_count = validate_lookup_table(values.len(), levels.len())?;

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

pub(crate) fn lookup_table_u16_c1_in_place(
    stream_context: &StreamContext,
    image: &mut ImageViewMut<'_, u16, C1>,
    values: &DeviceMemory<i32>,
    levels: &DeviceMemory<i32>,
) -> Result<()> {
    let level_count = validate_lookup_table(values.len(), levels.len())?;

    unsafe {
        try_ffi!(sys::nppiLUT_16u_C1IR_Ctx(
            image.as_mut_ptr().cast(),
            image.step(),
            image.size().into(),
            values.as_ptr().cast(),
            levels.as_ptr().cast(),
            level_count,
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn lookup_table_i16_c1(
    stream_context: &StreamContext,
    source: &ImageView<'_, i16, C1>,
    destination: &mut ImageViewMut<'_, i16, C1>,
    values: &DeviceMemory<i32>,
    levels: &DeviceMemory<i32>,
) -> Result<()> {
    validate_same_size(source.size(), destination.size())?;
    let level_count = validate_lookup_table(values.len(), levels.len())?;

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

pub(crate) fn lookup_table_i16_c1_in_place(
    stream_context: &StreamContext,
    image: &mut ImageViewMut<'_, i16, C1>,
    values: &DeviceMemory<i32>,
    levels: &DeviceMemory<i32>,
) -> Result<()> {
    let level_count = validate_lookup_table(values.len(), levels.len())?;

    unsafe {
        try_ffi!(sys::nppiLUT_16s_C1IR_Ctx(
            image.as_mut_ptr().cast(),
            image.step(),
            image.size().into(),
            values.as_ptr().cast(),
            levels.as_ptr().cast(),
            level_count,
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

pub(crate) fn lookup_table_f32_c1(
    stream_context: &StreamContext,
    source: &ImageView<'_, f32, C1>,
    destination: &mut ImageViewMut<'_, f32, C1>,
    values: &DeviceMemory<f32>,
    levels: &DeviceMemory<f32>,
) -> Result<()> {
    validate_same_size(source.size(), destination.size())?;
    let level_count = validate_lookup_table(values.len(), levels.len())?;

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

pub(crate) fn lookup_table_f32_c1_in_place(
    stream_context: &StreamContext,
    image: &mut ImageViewMut<'_, f32, C1>,
    values: &DeviceMemory<f32>,
    levels: &DeviceMemory<f32>,
) -> Result<()> {
    let level_count = validate_lookup_table(values.len(), levels.len())?;

    unsafe {
        try_ffi!(sys::nppiLUT_32f_C1IR_Ctx(
            image.as_mut_ptr().cast(),
            image.step(),
            image.size().into(),
            values.as_ptr().cast(),
            levels.as_ptr().cast(),
            level_count,
            stream_context.as_raw(),
        ))?;
    }
    Ok(())
}

impl_lookup_table_packed!(lookup_table_u8_c3, u8, C3, 3, nppiLUT_8u_C3R_Ctx);
impl_lookup_table_packed_in_place!(lookup_table_u8_c3_in_place, u8, C3, 3, nppiLUT_8u_C3IR_Ctx);
impl_lookup_table_packed!(lookup_table_u8_c4, u8, C4, 4, nppiLUT_8u_C4R_Ctx);
impl_lookup_table_packed_in_place!(lookup_table_u8_c4_in_place, u8, C4, 4, nppiLUT_8u_C4IR_Ctx);
impl_lookup_table_packed!(lookup_table_u8_ac4, u8, AC4, 3, nppiLUT_8u_AC4R_Ctx);
impl_lookup_table_packed_in_place!(
    lookup_table_u8_ac4_in_place,
    u8,
    AC4,
    3,
    nppiLUT_8u_AC4IR_Ctx
);
impl_lookup_table_packed!(lookup_table_u16_c3, u16, C3, 3, nppiLUT_16u_C3R_Ctx);
impl_lookup_table_packed_in_place!(
    lookup_table_u16_c3_in_place,
    u16,
    C3,
    3,
    nppiLUT_16u_C3IR_Ctx
);
impl_lookup_table_packed!(lookup_table_u16_c4, u16, C4, 4, nppiLUT_16u_C4R_Ctx);
impl_lookup_table_packed_in_place!(
    lookup_table_u16_c4_in_place,
    u16,
    C4,
    4,
    nppiLUT_16u_C4IR_Ctx
);
impl_lookup_table_packed!(lookup_table_u16_ac4, u16, AC4, 3, nppiLUT_16u_AC4R_Ctx);
impl_lookup_table_packed_in_place!(
    lookup_table_u16_ac4_in_place,
    u16,
    AC4,
    3,
    nppiLUT_16u_AC4IR_Ctx
);
impl_lookup_table_packed!(lookup_table_i16_c3, i16, C3, 3, nppiLUT_16s_C3R_Ctx);
impl_lookup_table_packed_in_place!(
    lookup_table_i16_c3_in_place,
    i16,
    C3,
    3,
    nppiLUT_16s_C3IR_Ctx
);
impl_lookup_table_packed!(lookup_table_i16_c4, i16, C4, 4, nppiLUT_16s_C4R_Ctx);
impl_lookup_table_packed_in_place!(
    lookup_table_i16_c4_in_place,
    i16,
    C4,
    4,
    nppiLUT_16s_C4IR_Ctx
);
impl_lookup_table_packed!(lookup_table_i16_ac4, i16, AC4, 3, nppiLUT_16s_AC4R_Ctx);
impl_lookup_table_packed_in_place!(
    lookup_table_i16_ac4_in_place,
    i16,
    AC4,
    3,
    nppiLUT_16s_AC4IR_Ctx
);
impl_lookup_table_packed_f32!(lookup_table_f32_c3, C3, 3, nppiLUT_32f_C3R_Ctx);
impl_lookup_table_packed_f32_in_place!(lookup_table_f32_c3_in_place, C3, 3, nppiLUT_32f_C3IR_Ctx);
impl_lookup_table_packed_f32!(lookup_table_f32_c4, C4, 4, nppiLUT_32f_C4R_Ctx);
impl_lookup_table_packed_f32_in_place!(lookup_table_f32_c4_in_place, C4, 4, nppiLUT_32f_C4IR_Ctx);
impl_lookup_table_packed_f32!(lookup_table_f32_ac4, AC4, 3, nppiLUT_32f_AC4R_Ctx);
impl_lookup_table_packed_f32_in_place!(
    lookup_table_f32_ac4_in_place,
    AC4,
    3,
    nppiLUT_32f_AC4IR_Ctx
);

impl_generic_lookup_table_c1!(LookupTableC1, lookup_table, lookup_table_c1, [
    u8, i32 => lookup_table_u8_c1,
    u16, i32 => lookup_table_u16_c1,
    i16, i32 => lookup_table_i16_c1,
    f32, f32 => lookup_table_f32_c1,
]);
impl_generic_lookup_table_c1_in_place!(
    LookupTableC1InPlace,
    lookup_table_in_place,
    lookup_table_c1_in_place,
    [
        u8, i32 => lookup_table_u8_c1_in_place,
        u16, i32 => lookup_table_u16_c1_in_place,
        i16, i32 => lookup_table_i16_c1_in_place,
        f32, f32 => lookup_table_f32_c1_in_place,
    ]
);
impl_generic_lookup_table_packed!(LookupTableC3, lookup_table, lookup_table_c3, C3, 3, [
    u8, i32 => lookup_table_u8_c3,
    u16, i32 => lookup_table_u16_c3,
    i16, i32 => lookup_table_i16_c3,
    f32, f32 => lookup_table_f32_c3,
]);
impl_generic_lookup_table_packed_in_place!(
    LookupTableC3InPlace,
    lookup_table_in_place,
    lookup_table_c3_in_place,
    C3,
    3,
    [
        u8, i32 => lookup_table_u8_c3_in_place,
        u16, i32 => lookup_table_u16_c3_in_place,
        i16, i32 => lookup_table_i16_c3_in_place,
        f32, f32 => lookup_table_f32_c3_in_place,
    ]
);
impl_generic_lookup_table_packed!(LookupTableC4, lookup_table, lookup_table_c4, C4, 4, [
    u8, i32 => lookup_table_u8_c4,
    u16, i32 => lookup_table_u16_c4,
    i16, i32 => lookup_table_i16_c4,
    f32, f32 => lookup_table_f32_c4,
]);
impl_generic_lookup_table_packed_in_place!(
    LookupTableC4InPlace,
    lookup_table_in_place,
    lookup_table_c4_in_place,
    C4,
    4,
    [
        u8, i32 => lookup_table_u8_c4_in_place,
        u16, i32 => lookup_table_u16_c4_in_place,
        i16, i32 => lookup_table_i16_c4_in_place,
        f32, f32 => lookup_table_f32_c4_in_place,
    ]
);
impl_generic_lookup_table_packed!(LookupTableAc4, lookup_table, lookup_table_ac4, AC4, 3, [
    u8, i32 => lookup_table_u8_ac4,
    u16, i32 => lookup_table_u16_ac4,
    i16, i32 => lookup_table_i16_ac4,
    f32, f32 => lookup_table_f32_ac4,
]);
impl_generic_lookup_table_packed_in_place!(
    LookupTableAc4InPlace,
    lookup_table_in_place,
    lookup_table_ac4_in_place,
    AC4,
    3,
    [
        u8, i32 => lookup_table_u8_ac4_in_place,
        u16, i32 => lookup_table_u16_ac4_in_place,
        i16, i32 => lookup_table_i16_ac4_in_place,
        f32, f32 => lookup_table_f32_ac4_in_place,
    ]
);