Crates.io | nvfbc |
lib.rs | nvfbc |
version | 0.1.5 |
source | src |
created_at | 2022-06-23 18:31:36.56556 |
updated_at | 2024-01-08 10:58:21.637452 |
description | Safe bindings for NVFBC, an NVIDIA API for capturing the front buffer from NVIDIA GPUs. |
homepage | |
repository | https://github.com/hgaiser/nvfbc-rs |
max_upload_size | |
id | 612003 |
size | 41,362 |
This library contains a safe FFI for NVFBC from NVIDIA.
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.
Currently only CUDA and system (RAM) capture types are supported.
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(())
}
Support for configuration is currently limited, to keep the code simple and concise. Future releases will add more configuration options.
License: BSD-2-Clause