singe-npp 0.1.0-alpha.8

Safe Rust wrappers for NVIDIA Performance Primitives library (NPP).
Documentation
use crate::{
    error::Result,
    image::{geometry, view::C1},
    pipeline::{ImageAllocator, Workspace},
    workspace::ScratchBuffer,
};

use super::{ImageBacking, ImagePipeline, ResizeSqrPixelAdvanced};

impl<'a> ImagePipeline<'a, u8, C1>
where
    Workspace: ImageAllocator<u8, C1>,
{
    pub fn resize_sqr_pixel_advanced_buffer_size(resize: &ResizeSqrPixelAdvanced) -> Result<usize> {
        geometry::resize_sqr_pixel_c1_advanced_buffer_size::<u8>(resize)
    }

    pub fn resize_sqr_pixel_advanced_with_scratch(
        self,
        resize: ResizeSqrPixelAdvanced,
        scratch: &mut ScratchBuffer,
    ) -> Result<Self> {
        let mut destination = self
            .workspace
            .image::<u8, C1>(resize.destination_roi.size())?;

        {
            let source = self.view()?;
            let mut destination_view = destination.view_mut()?;
            geometry::resize_sqr_pixel_c1_advanced_with_scratch(
                self.stream_context,
                &resize,
                &source,
                &mut destination_view,
                scratch,
            )?;
        }

        Ok(Self {
            stream_context: self.stream_context,
            workspace: self.workspace,
            backing: ImageBacking::Owned(destination),
        })
    }
}