#gpu #nvfbc

nvfbc

Safe bindings for NVFBC, an NVIDIA API for capturing the front buffer from NVIDIA GPUs

7 releases

0.2.0 Mar 16, 2025
0.1.5 Jan 8, 2024
0.1.3 Nov 18, 2023
0.1.2 Jun 23, 2022

#126 in Video

Download history 7/week @ 2025-02-04 8/week @ 2025-02-11 6/week @ 2025-02-18 12/week @ 2025-02-25 8/week @ 2025-03-04 116/week @ 2025-03-11 45/week @ 2025-03-18 4/week @ 2025-03-25 5/week @ 2025-04-08

122 downloads per month

BSD-2-Clause

155KB
4K SLoC

nvfbc

This library contains a safe FFI for NVFBC from NVIDIA.

Supported GPUs

As this uses a proprietary NVIDIA API, the supported devices are limited to NVIDIA GPUs. Officially the NVFBC API is only supported on GRID, Tesla, or Quadro X2000+ GPUs. Unofficial support is provided for GeForce GPUs by setting magic private data, similar to https://github.com/keylase/nvidia-patch/blob/master/win/nvfbcwrp/nvfbcwrp_main.cpp.

Supported capture types

Currently only CUDA and system (RAM) capture types are supported.

Example: Saving an image.

use nvfbc::{SystemCapturer, BufferFormat};
use nvfbc::system::CaptureMethod;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut capturer = SystemCapturer::new()?;

    let status = capturer.status()?;
    println!("{:#?}", capturer.status()?);
    if !status.can_create_now {
        panic!("Can't create a system capture session.");
    }

    capturer.start(BufferFormat::Rgb, 30)?;

    let frame_info = capturer.next_frame(CaptureMethod::Blocking)?;
    println!("{:#?}", frame_info);

    let image = image::ImageBuffer::<image::Rgb<u8>, &[u8]>::from_raw(
        frame_info.width,
        frame_info.height,
        frame_info.buffer,
    ).unwrap();
    image.save("frame.png")?;
    println!("Saved frame to 'frame.png'.");

    capturer.stop()?;

    Ok(())
}

Future work

Support for configuration is currently limited, to keep the code simple and concise. Future releases will add more configuration options.

License: BSD-2-Clause

Dependencies