Skip to content

feat: integrate receiver application and build tooling - #71

Merged
dmkarthi merged 2 commits into
OpenVisualCloud:devfrom
roshan-ku:feat/receiver-app-integration
Oct 19, 2026
Merged

dmkarthi merged 2 commits into
OpenVisualCloud:devfrom
roshan-ku:feat/receiver-app-integration

Conversation

@roshan-ku

Copy link
Copy Markdown
Contributor

Description

Adds dvledrx, the ST 2110-20 receiver application, alongside the existing dvledtx transmitter, and restructures the repository so each application owns its own sources, configs, tests and fuzz harnesses under a single top-level Meson build.

Receiver application (dvledrx/)

  • Receives one or more ST 2110-20 sessions through MTL, converts the received frames and renders them on X11 outputs.
  • JSON-driven configuration: interfaces[] (up to 8 NICs), video (resolution / fps / pixel format), rx_sessions[] (NIC, UDP port, payload type, crop) and displays[] (per-output session placement with scaling, enabling mirrored and per-output layouts).
  • Supports 10-bit and 12-bit yuv422p / yuv444p / gbrp formats; fps values are mapped to the MTL st_fps enums so RTP timestamp cadence matches the sender.
  • Modules: config_reader, session_manager, frame_converter, x11_handler, logger, main.
  • Sample configs in dvledrx/config/ (Full HD, 2K, 4K, crop, multi-session, multi-NIC, per-output).

Repository layout

Before After
src/, include/ dvledtx/src/, dvledtx/include/
config/ dvledtx/config/
tests/ dvledtx/tests/
fuzz/ dvledtx/fuzz/
— dvledrx/{src,include,config,tests,fuzz}/

Transmitter sources are moved without content changes.

Build and test tooling

  • Root meson.build keeps the shared dependencies and pulls in subdir('dvledtx') and subdir('dvledrx'); each application defines its own executable and tests/ subdirectory.
  • Binaries are now produced at build/dvledtx/dvledtx and build/dvledrx/dvledrx.
  • scripts/build.sh builds and checks both binaries.
  • scripts/test.sh runs both suites from a single combined build in build-tests/ and reports gcovr coverage for dvledtx/src and dvledrx/src (excluding main.c). The standalone tests/meson.build is removed.
  • Receiver unit tests (cmocka) cover the config reader, frame converter, logger, session manager and X11 handler; MTL is replaced by a test fake (fake_mtl.c) and X11 tests run under xvfb-run.
  • .gitignore now ignores /build/ and /build-tests/.

CI

  • Build / smoke tests / checksec: build, validate and harden-check dvledrx alongside dvledtx and dvledtx-mtl; smoke test verifies dvledrx version X.Y.Z.
  • CodeQL / cppcheck: analyse both source trees.
  • AFL++ / libFuzzer: new receiver config-parser harnesses with seed corpus; daily fuzz job timeouts raised from 138 to 258 minutes to cover TX + RX, and artifact paths updated for both applications.
  • Environment: adds libxext-dev, libxrandr-dev, zlib1g-dev, xvfb, xauth; bumps the environment cache key so runners rebuild.

Dependency updates

  • MTL pinned to 9762c314ed24bd628d3f808b95a94c3aa8525723 (v26.09), previously 7bee24231c864d12da6db2c2ffbfd3986717af5a.
  • DPDK 25.11 → 26.07.

Documentation

README updated for the receiver build dependencies, the MTL v26.09 pin, new binary/config paths, and the combined test run.

Notes for reviewers

  • Path changes: anything referencing build/dvledtx, config/*.json, src/, tests/ or fuzz/ must move to the new dvledtx/... locations.
  • New build requirements: libx11-dev, libxext-dev, libxrandr-dev, libjson-c-dev and zlib1g-dev are now required to configure the project; xvfb / xauth are needed for the full receiver test suite.
  • MTL / FFmpeg rebuild: environments must rebuild MTL, and FFmpeg with the MTL plugin, at the new pin.

Checklist

Code Quality

  • Code follows project style guidelines
  • No unnecessary debug logs or commented-out code
  • No hardcoded values / secrets

Testing

  • Unit test added/modified accordingly
  • Perform manual basic sanity testing at system level

Review Readiness

  • PR title and description are clear and meaningful
  • Story/Task IDs are linked

Documentation

  • README or relevant docs updated (if applicable)

Security

  • No sensitive data exposed (keys, passwords, tokens)
  • Input validation added where needed

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Documentation content changes
  • Testing
  • Other... Please describe: CI, build tooling and dependency (MTL / DPDK) updates

Comment thread dvledrx/src/frame_converter.c Fixed
Comment thread dvledrx/src/logger.c Fixed
Comment thread dvledrx/tests/test_config_reader.c Fixed
Comment thread dvledrx/tests/test_config_reader.c Fixed
Comment thread dvledrx/tests/test_config_reader.c Fixed
Comment thread dvledrx/tests/test_config_reader.c Fixed
- frame_converter: compute the BGRA copy size in size_t so
  width * height * 4 cannot overflow 32-bit unsigned arithmetic.
- logger: remove the lstat()-then-rename() race during rotation. The
  rename now refuses to replace an existing <log>.rotating atomically
  (renameat2 RENAME_NOREPLACE, falling back to link()+unlink() on
  filesystems without it), and the ftell() fallback uses fstat() on the
  open descriptor instead of stat() on the path. The log stays open until
  the rename succeeds, so a failed rotation keeps appending as before.
- test_config_reader: build test JSON through a bounds-checked append
  helper instead of accumulating unchecked snprintf() return values.

@dmkarthi dmkarthi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@dmkarthi
dmkarthi merged commit 6abb13f into OpenVisualCloud:dev Oct 19, 2026
3 checks passed
@roshan-ku roshan-ku mentioned this pull request Oct 19, 2026
7 of 17 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants