singe-npp 0.1.0-alpha.8

Safe Rust wrappers for NVIDIA Performance Primitives library (NPP).
Documentation

singe-npp

Latest version Documentation License

Safe NVIDIA Performance Primitives wrappers for image and signal APIs.

This crate wraps NPP version queries, stream contexts, image and signal device memory, image processing pipelines, signal processing pipelines, typed image views, channel layouts, sizes, rectangles, and temporary workspaces.

Examples

Runnable examples are available under examples/.

Pipeline

use singe_cuda::context::Context;
use singe_npp::{
    C3, ImagePipeline, ImageView, StreamContext, Workspace,
    types::{ComparisonOperation, InterpolationMode, Size},
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let ctx = Context::create()?;
    let stream = ctx.create_stream()?;
    let stream_context = StreamContext::create(&stream)?;
    let mut workspace = Workspace::create();

    let device_memory = todo!();
    let size = Size::new(640, 480);
    let source = ImageView::<u8, C3>::from_memory(&device_memory, size)?;

    let output = ImagePipeline::from_view(&stream_context, &mut workspace, source)
        .resize(Size::new(256, 256), InterpolationMode::Lanczos)?
        .rgb_to_gray()?
        .threshold(128, ComparisonOperation::Less)?
        .filter_sharpen()?
        .finish()?;
    let image = output.copy_to_host_vec()?;

    println!("NPP version: {:?}", singe_npp::version()?);
    Ok(())
}