Release Notes for v0.1.0
Overview (Initial Release)
Application reads a video source file (e.g., MP4), decodes it using FFmpeg, and transmits uncompressed video frames over an IP network using the SMPTE ST 2110-20 standard. Multiple crop regions of the same source video can be transmitted simultaneously as independent RTP streams — enabling tiled LED wall configurations where each panel receives its own portion of the frame.
Features:
-
Video Input and Decode: Supports FFmpeg-based H.264/MP4 decode and raw .yuv/.raw zero-copy TX input, with EOF loop restart via av_seek_frame plus decoder flush and a 10,000-EAGAIN watchdog for malformed streams.
-
Frame Processing: Handles yuv422p10le, yuv420, yuv444p10le, and gbrp10le at 25/30/50/60 fps up to 1920x1080, with sws_scale format conversion and bounds-checked crop_yuv_frame tile extraction per session.
-
Transmission: Runs multiple simultaneous TX sessions with independent crop/network settings and CLOCK_MONOTONIC-based FPS pacing to prevent MTL ring overflow.
-
Threading Model: Uses one shared decode thread plus N TX threads coordinated by barrier_decoded/barrier_copied, a pthread_cond startup gate, and a shared _Atomic bool exit path that drains final barriers without deadlock.
-
Configuration: Includes a no-dependency JSON parser with escape/control-char checks, parses tx_sessions[] fields (udp_port/payload_type/crop_x/y/w/h) and pixel format strings via av_pix_fmt_desc_get, and validates IP, port (1-65535), FPS, and session-count bounds.
-
Logging: Provides thread-safe pthread_mutex logging with ERROR/WARN/INFO/DEBUG levels, ANSI-colored console plus file output, and 20 MB rotation to timestamped gzip archives.
-
Signal Handling: Implements async-signal-safe SIGINT/SIGTERM handling using only write() and volatile sig_atomic_t, with shutdown propagated by the main loop to avoid race conditions.
-
Security Controls: Enforces code-level safeguards including realpath-based log path restrictions (/var/log/ or CWD), crop bounds checks to prevent out-of-bounds frame reads, and JSON escape parsing that rejects bare control characters.
What's Changed
- Usage of FFmpeg APIs in transmitter application by @sunilnom
- Enable using config file in Transmitter application by @sunilnom
- Fix PR review comments of PR 8 by @sunilnom
- mtl patch for additonal color format support by @roshan-ku
- Transmitter logger by @AishaSamaanKhan
- Remove CLI args, and restrict pixel formats by @sunilnom
- Fix yuv420 pixel format mapping and add unit tests by @sunilnom
- fix: replace sudo install with dependency verification for self-hosted runner by @roshan-ku
- feat: MTL TX pipeline with modular FFmpeg/MTL split by @dmkarthi
- Workflows fixes and cpp scans by @roshan-ku in #4
- Fix thread safety, input validation, and error handling by @sunilnom in #6
- fix: address critical bugs and code quality issues by @sunilnom in #7
- SDLe fix: Github workflow vulnerabilities and migration to github runner by @dmkarthi in #8
- Bug: Cache fix by @dmkarthi in #10
- SDLe fix: refactor, remove drop_privileges() and capability management from main.c by @dmkarthi in #9
- fix: correct ossf/scorecard-action commit SHA for v2.4.1 by @sunilnom in #14
- ci: add Dependabot configuration for GitHub Actions updates by @sunilnom in #15
- build(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1 by @dependabot[bot] in #19
- build(deps): bump ossf/scorecard-action from 2.4.1 to 2.4.3 by @dependabot[bot] in #18
- build(deps): bump github/codeql-action from 3.28.18 to 4.36.0 by @dependabot[bot] in #17
- build(deps): bump actions/checkout from 4.2.2 to 6.0.2 by @dependabot[bot] in #16
- Openssf changes fuzzing changes by @sunilnom in #20
- Openssf changes by @sunilnom in #23
Contributors
@sunilnom
@roshan-ku
@dmkarthi
@AishaSamaanKhan
Full Changelog: https://github.com/OpenVisualCloud/directview-led-software-toolkit/commits/v0.1.0