Background
open_htj2k_rtp_recv --smoke-test currently runs four unit-style
tests against individual components (UDP socket, RFC 9828 parser,
YCbCr→RGB helper, frame reassembler). None of them touch:
- The three-thread pipeline (receive / decode / render)
- The RTP-timestamp pacer
- The GL 3.3 core shader programs
- The AVX2 YCbCr path's end-to-end integration
- Shutdown sequencing (stop_flag propagation, thread join order)
Regressions in any of those surfaces are only caught by running the
binary against a live sender — which isn't practical in CI.
Proposal
Add a self-contained end-to-end smoke test that:
- Forks (or spawns via
std::thread) the existing Python loopback
helper — or reimplements the minimal RFC 9828 sender inline to
avoid the Python dependency in CI.
- Sends a handful of frames (e.g. 10) of a small known codestream
(conformance_data/ds0_ht_01_b11.j2k) into the threaded receiver
with --threading on, --frames 10, --no-render.
- Verifies: exit status 0, frames_decoded == 10, frames_failed == 0,
zero decode-slot / render-slot evictions, non-empty decode-time
stats.
- Repeats with
--color-path cpu to cover the AVX2 path end-to-end.
A headless CI runner won't have GL, so --no-render is the correct
default for this test. A separate --render smoke for GL paths can
be added later, gated on a display environment variable.
Acceptance
Background
open_htj2k_rtp_recv --smoke-testcurrently runs four unit-styletests against individual components (UDP socket, RFC 9828 parser,
YCbCr→RGB helper, frame reassembler). None of them touch:
Regressions in any of those surfaces are only caught by running the
binary against a live sender — which isn't practical in CI.
Proposal
Add a self-contained end-to-end smoke test that:
std::thread) the existing Python loopbackhelper — or reimplements the minimal RFC 9828 sender inline to
avoid the Python dependency in CI.
(
conformance_data/ds0_ht_01_b11.j2k) into the threaded receiverwith
--threading on,--frames 10,--no-render.zero decode-slot / render-slot evictions, non-empty decode-time
stats.
--color-path cputo cover the AVX2 path end-to-end.A headless CI runner won't have GL, so
--no-renderis the correctdefault for this test. A separate
--rendersmoke for GL paths canbe added later, gated on a display environment variable.
Acceptance
--smoke-testor a new--e2e-test--color-path shader(if GL available) and--color-path cpu