A Rust-based VLC video output plugin for Blackmagic DeckLink devices, specifically targeting the Intensity Pro 4K.
This plugin enables VLC media player to output video through Blackmagic DeckLink capture/playback cards. It's designed for professional video workflows requiring SDI or HDMI output to external monitors, broadcast equipment, or video routers.
- Primary Target: Blackmagic Design Intensity Pro 4K (PCIe)
- Other DeckLink Cards: Should work with other DeckLink devices that support video output
- Video Output: Send VLC video to DeckLink HDMI/SDI outputs
- Multiple Resolutions: Support for SD, HD, and 4K output modes
- Pixel Formats: UYVY 8-bit, v210 10-bit, ARGB, BGRA
- Scheduled Playback: Frame-accurate video output timing
- Frame Buffering: Configurable buffer pool for smooth playback
- Docker: All builds run inside Docker containers for reproducibility
- Blackmagic DeckLink SDK 15.3: Automatically downloaded during Docker build
- Make: For running build commands
Download the SDK from https://www.blackmagicdesign.com/developer/products/capture-and-playback/sdk-and-software into the root of this repository.
# Install release build (requires root)
sudo make install
# This copies the plugin to /usr/lib/vlc/plugins/video_output/
# and regenerates the VLC plugin cache┌─────────────────────────────────────────────────────────────┐
│ VLC Media Player │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ VLC Video Output Plugin API │
│ (vout_display_t) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ vlc-decklink Plugin │
│ ┌────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ plugin.rs │──│ display.rs │──│ Frame Scheduler │ │
│ │ (entry) │ │ (control) │ │ (timing/buffering) │ │
│ └────────────┘ └─────────────┘ └─────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ DeckLink Module │ │
│ │ device.rs │ output.rs │ frame.rs │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ FFI Layer (ffi/) │ │
│ │ C wrapper for DeckLink C++ SDK │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Blackmagic DeckLink SDK (C++) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Intensity Pro 4K Hardware │
│ (PCIe 42:00.0) │
└─────────────────────────────────────────────────────────────┘
- Rust Edition: 2021
- DeckLink SDK: 15.3 (Linux)
- VLC API: 3.0 plugin interface
- FFI: bindgen for Rust bindings, C++ wrapper for DeckLink COM API
This project is licensed under the LGPL-2.1-or-later license, compatible with VLC's licensing requirements.
- VLC media player team
- Blackmagic Design for the DeckLink SDK
- The Rust community