bayertap
A passive conformance tap for bayerlink links.
In a streaming netlist, a tap is a sink that observes a stream without stalling it. This is that concept as bench equipment: point it at any V4L2 capture device carrying a bayerlink source and it tells you whether the bytes survive — judged with the same published codec the source encoded with, so the two ends cannot disagree about what conformance means.
bayertap probe # which byte-lane permutation is this rig?
bayertap --lane-map 2,1,0 check --pattern counting # every sample, judged
bayertap --via tunnel check --pattern counting # through a cheap dongle
bayertap --from-file frame.npy check # no hardware at all
Capture tiers
| Tier | Hardware | Path | Fidelity |
|---|---|---|---|
| Trusted | TC358743 HDMI→CSI-2 bridge (~$25, the PiKVM part) on any Pi or Jetson | --via direct, RGB888 |
byte-exact |
| Cheap | MS2130S / MS2131S USB3 stick (~$15) on any Linux box | --via direct, RGB24 |
byte-exact if the stick's pipeline is transparent — check answers that in minutes |
| Drawer | MS2109-class USB2 stick | --via tunnel, YUYV |
bit-exact at 1/6 capacity, via the luma tunnel — run the source with --luma-tunnel |
| Rejected | any USB2 stick, direct | MJPEG / starved YUYV | physics: USB2 cannot carry uncompressed 1080p, and MJPEG is lossy. Refused in code, not just here |
The drawer tier deserves its sentence: a $10 dongle you already own becomes a working conformance receiver today, because bayerlink's luma tunnel carries the unchanged container as grey levels with a pilot line the decoder learns the channel from. Slow, and completely sufficient for proving bytes.
The two bring-up commands
probe resolves the byte-lane permutation — which captured channel holds
container byte k — by trying all six against the header's magic and CRC. Its
output is directly the lane_map for this tool's check and for the
FPGA-side receiver (np2hw.bayerlink_in). One command instead of a scope.
check --pattern X regenerates the pattern locally (patterns are pure
functions — nothing travels out of band) and compares every sample,
watches frame_seq for gaps, tolerates scanout repeats (protocol-legal),
and exits nonzero on any discrepancy. Point CI at it if you like.
For the TC358743 tier, remember the bridge needs an EDID loaded
(v4l2-ctl --set-edid) before it captures — and that EDID is leverage: it
is what the source reads, so advertise only RGB 4:4:4 at your one mode and
the source is steered into the only format the protocol accepts.
Status
Everything except the ioctl layer is proven off-target: struct sizes pinned against the kernel uapi, both decode paths (direct with lane maps, tunnel with pilot learning) tested end-to-end from files. First runs against real capture silicon are the bench session; the known-good device table starts there.
Licence
MIT.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bayertap-0.2.0.tar.gz.
File metadata
- Download URL: bayertap-0.2.0.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a9f6ccfd6a08bd4d75e2548362da8082bd17cb5dddcfc7f4f660009d002224e
|
|
| MD5 |
763ab38ba8385cbbfa457d707ba22730
|
|
| BLAKE2b-256 |
a5a782af24ee287c6c8578984a26994a5c379e067acbe32f391ef2ed4c3c086e
|
Provenance
The following attestation bundles were made for bayertap-0.2.0.tar.gz:
Publisher:
publish.yml on bayerlink/bayertap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bayertap-0.2.0.tar.gz -
Subject digest:
7a9f6ccfd6a08bd4d75e2548362da8082bd17cb5dddcfc7f4f660009d002224e - Sigstore transparency entry: 2398119400
- Sigstore integration time:
-
Permalink:
bayerlink/bayertap@aa90d710f5bccd09efa0e7b97e11324104744fb3 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/bayerlink
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@aa90d710f5bccd09efa0e7b97e11324104744fb3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file bayertap-0.2.0-py3-none-any.whl.
File metadata
- Download URL: bayertap-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5783ee3259709f2878adc4c579ecead99cb51ddf07caca4bc0da1a59f6a99f14
|
|
| MD5 |
6c9c3f36c4e164cc8364acbdcf184407
|
|
| BLAKE2b-256 |
85bf7f27c42a4f91e3a0bef85141d0490616e42e24acb32da7ebdb4f1afd9302
|
Provenance
The following attestation bundles were made for bayertap-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on bayerlink/bayertap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bayertap-0.2.0-py3-none-any.whl -
Subject digest:
5783ee3259709f2878adc4c579ecead99cb51ddf07caca4bc0da1a59f6a99f14 - Sigstore transparency entry: 2398119803
- Sigstore integration time:
-
Permalink:
bayerlink/bayertap@aa90d710f5bccd09efa0e7b97e11324104744fb3 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/bayerlink
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@aa90d710f5bccd09efa0e7b97e11324104744fb3 -
Trigger Event:
release
-
Statement type: