2026-05-24 21:45:38 +03:00
2026-05-19 00:28:00 +03:00
2026-05-24 21:45:38 +03:00
2026-05-19 00:28:00 +03:00
2026-05-24 21:28:11 +03:00
2026-05-24 21:28:11 +03:00
2026-05-19 14:56:13 +03:00
2026-05-18 00:03:06 +03:00
2026-05-19 14:56:13 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-24 21:28:11 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-24 21:23:35 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-24 21:28:11 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 00:03:06 +03:00
2026-05-18 01:26:21 +03:00
2026-05-18 01:26:21 +03:00

MXL Multiviewer

Small Vulkan/SDL3 multiviewer for test feeds and MXL SDK video flows.

Dependencies

Install:

  • CMake 3.20+
  • C++20 compiler
  • Vulkan loader and headers
  • Vulkan driver for the target GPU
  • SDL3 development package with pkg-config support
  • glslangValidator

On Ubuntu/Debian-like systems the packages are usually similar to:

sudo apt install cmake g++ pkg-config libvulkan-dev vulkan-tools glslang-tools libsdl3-dev

Check that the discrete GPU is visible:

vulkaninfo --summary

Build Without MXL SDK

This builds synthetic feeds, SMPTE bars, and no-signal mode:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

Run a synthetic v210 test grid:

./build/mxl_multiviewer --perf --grid 4x4 v210 v210 v210 v210 v210 v210 v210 v210 v210

Build With MXL SDK

Set MXL_SDK_ROOT to the SDK checkout/root that contains lib/include and build/Linux-Clang-Release/lib:

cmake -S . -B build-sdk \
  -DCMAKE_BUILD_TYPE=Release \
  -DMXL_MULTIVIEWER_ENABLE_MXL_SDK=ON \
  -DMXL_SDK_ROOT=/path/to/mxl-sdk

cmake --build build-sdk -j

Run with an existing feed config:

./build-sdk/mxl_multiviewer --perf --grid 4x4 --config /tmp/feeds_config.json

Each feed object can include an optional label field to override the tile UI text:

{
  "domain": "/tmp/mxl",
  "flow": "853a9cda-0f7a-4b48-b2df-b3f628440150",
  "label": "Camera 1"
}

Useful probe flags:

--v210-upload-worker
--adaptive-feed-texture
--v210-staging-memory default|cached|device-local

Example:

./build-sdk/mxl_multiviewer \
  --adaptive-feed-texture \
  --v210-upload-worker \
  --perf \
  --grid 4x4 \
  --config /tmp/feeds_config.json

Notes

  • Run from the repository root or keep the shaders/ directory next to the executable path expected by the app.
  • If SDL opens on the wrong GPU/session, try running from the desktop session attached to the discrete GPU and confirm with vulkaninfo --summary.
  • v210_test is a CPU-side conversion sanity check:
./build/v210_test
S
Description
No description provided
Readme 16 MiB
Languages
C++ 98.4%
CMake 1.2%
GLSL 0.4%