MXL — Media Exchange Layer
MXL — Media Exchange Layer
Section titled “MXL — Media Exchange Layer”MXL moves raw frames zero-copy between processes like VDI, but every flow also carries NMOS-style descriptors — format URN, grain rate, colorimetry, components — so MXL streams have standards-grade identity other tooling can see.
- Library:
libplugin-mxl.so(+ runtimelibmxl*.so*) · Implementation: C++ wrapping the MXL C library - Addressing:
mxl://…
Configuration
Section titled “Configuration”The JSON passed to plugin_open is the flow descriptor:
{ "id": "5fbec3b1-1b0f-417d-9059-8b94a47197ef", "label": "MXL Test Flow, 1080p25", "format": "urn:x-nmos:format:video", "media_type": "video/v210", "grain_rate": { "numerator": 25, "denominator": 1 }, "frame_width": 1920, "frame_height": 1080, "interlace_mode": "progressive", "colorspace": "BT709", "components": [ { "name": "Y", "width": 1920, "height": 1080, "bit_depth": 10 }, { "name": "Cb", "width": 960, "height": 1080, "bit_depth": 10 }, { "name": "Cr", "width": 960, "height": 1080, "bit_depth": 10 } ]}MXL_DOMAIN (env, or a domain path in the host config) selects the
shared-memory domain (default /dev/shm/mxl_domain).
Build & notes
Section titled “Build & notes”Built by plugins/phrame-make.sh (CMake). Stages libplugin-mxl.so plus the
libmxl-common.so* / libmxl.so* runtime libraries — the symlink chain must
be preserved when copying into consumer images (the orchestrator uses
cp -P). Config is parsed with nlohmann::json, which throws on malformed
input, so keep config valid — exceptions at the C-ABI boundary are not safe.
Note plugin_read_timeout may not be implemented; check before relying on it.
