ndi-sdk-sys 0.1.2

Rust bindings for the NDI SDK
Documentation
use std::time::Instant;

use ndi_sdk_sys::{
    four_cc::FourCCVideo, frame::video::VideoFrame, resolution::Resolution, sdk,
    sender::NDISenderBuilder,
};

fn main() {
    let v = sdk::version();

    println!("{}", v.unwrap_or("NDI SDK version unavailable"));

    sdk::initialize().unwrap();

    println!("NDI initialized successfully");

    let src = NDISenderBuilder::new()
        .name("My Test Source")
        .unwrap()
        .clock_video(true)
        .build()
        .unwrap();

    println!(
        "Discoverable as \"{}\"",
        src.get_source().name().to_str().unwrap()
    );

    let mut frame = VideoFrame::new();
    frame.set_resolution(Resolution::new(1920, 1080)).unwrap();
    frame.set_four_cc(FourCCVideo::RGBX).unwrap();

    frame.try_alloc().unwrap();

    let start = Instant::now();

    loop {
        let (buf, info) = frame.video_data_mut().unwrap();

        let b = (f32::sin(start.elapsed().as_secs_f32()) * 128.0 + 128.0) as u8;

        for x in 0..info.resolution.x {
            let r = (x * 0xff / info.resolution.x) as u8;
            for y in 0..info.resolution.y {
                let g = (y * 0xff / info.resolution.y) as u8;
                let a = 0xff;

                let offset = (y * info.resolution.x + x) * 4;
                buf[offset + 0] = r;
                buf[offset + 1] = g;
                buf[offset + 2] = b;
                buf[offset + 3] = a;
            }
        }

        src.send_video_sync(&frame).unwrap();
    }
}