bayerlink™
Raw sensor data over an HDMI/DVI link.
FPGA boards rarely have camera connectors; nearly everything has HDMI. bayerlink treats a display link's active area as a byte container: packed raw Bayer samples, one camera line per display line, self-described by a 48-byte header — magic, V4L2 fourcc, geometry, frame counter, stripe and source identity for multi-link use, CRC. Real sensor data into any board with HDMI-in: no MIPI hardware, no deserialisers, no per-sensor bring-up.
sensor ──CSI-2──▶ Raspberry Pi (libcamera raw) ──HDMI──▶ FPGA, or a capture stick
One rule governs the link: full-range RGB, no
scaling, no overscan, 4:4:4. The test patterns exist to catch a
limited-range clamp on day one.
The protocol
PROTOCOL.md
The specification: header, CSI-2 packing rule, striping,
the fourcc registry. Conformance is producing the committed
vector bytes — say “speaks bayerlink v2” when you do.
GUIDE.md
The practical guide, routed by what is on your desk — Pi
source, FPGA receiver, $10-capture-stick bench, recording and
replay.
bayerlink
Reference codec (Python, numpy only) and the conformance
vectors.
The tools
picam2hdmi
A Raspberry Pi camera as the source — a sensor module
with an HDMI plug, controllable over HTTP. SETUP.md goes from
blank SD card to streaming instrument.
bayertap
The receiver’s toolbox on Linux: probe byte lanes, judge
a link, record and replay.
np2hw · bayerlink_in
A generated Verilog receiver — parallel video in, one
raw sample per clock out — held bit-exact against the
reference codec.