You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[PROPOSAL] The C-vs-Rust dual-build comparison from #2207 never runs; the C-only build drops 708 and HEVC captions #2398
#2207 added two builds so that "both must produce identical output on the sample platform; divergence means a Rust port introduced a behavioral difference". That comparison never got wired up: sample-platform#1122 pointed the platform at the "(with migrations)" builds only (mod_ci/controllers.py:264-268), and no workflow compares the two artifacts. In #2109 you mentioned Rust ports won't be merged until this kind of C-vs-Rust check exists.
I built both variants from master on macOS (same source, only -DDISABLE_RUST differs) and compared them on public samples from https://streams.videolan.org/streams/ts/ with 5 option sets each:
Sample
Result
Closed Caption EIA.ts
identical
atsc-cea-708-dtvcc-and-cea-608.ts (first 20 MB)
608 identical; the min-rust build writes no 708 file (Rust: 5 cues), both exit 0
CC/wabc-4pm-ota.clip1.ts (US broadcast)
608 identical (40 cues); the min-rust build writes no 708 file (Rust: 42 cues), both exit 0
CC/hevc_cc.ts
min-rust build writes nothing (exit 10) although it logs "Total caption blocks received: 762"; Rust extracts 608 + 708
I'd like to build the comparison:
A CI job that runs both Linux artifacts on a small public sample set and reports differences (non-blocking at first).
Triage each difference (fix the C path, or record it as expected).
Then use it as the check for Rust ports.
Two questions before I start:
Should this live in this repo's GitHub Actions, or in the sample platform?
Where should the samples come from (download from VideoLAN with caching, or the sample platform)?
Update: I found why the C-only (min-rust) build loses all 708 captions.
In #1738 the C code that sends 708 data to the C decoder was removed. Since then, with DISABLE_RUST, the data goes to the Rust decoder instead, which isn't running in that build, so the captions are silently dropped.
Fixing that showed two more problems in the C-only build:
the C writer printed every letter as 2 bytes, so the file wasn't readable text
--out=report crashed
I've opened a #2399 that fixes all three (the normal Rust build's output doesn't change). With it, the US broadcast sample gives identical output from both builds. Two differences remain: HEVC captions (only the Rust code handles them, #1852) and a 1 ms timing difference on one sample.
I also have the comparison job working locally. I'll wait for your answer on where it should live before opening it.
Activity
Deepak-negi11 commentedon Oct 18, 2026
Update: I found why the C-only (min-rust) build loses all 708 captions.
In #1738 the C code that sends 708 data to the C decoder was removed. Since then, with DISABLE_RUST, the data goes to the Rust decoder instead, which isn't running in that build, so the captions are silently dropped.
Fixing that showed two more problems in the C-only build:
I've opened a #2399 that fixes all three (the normal Rust build's output doesn't change). With it, the US broadcast sample gives identical output from both builds. Two differences remain: HEVC captions (only the Rust code handles them, #1852) and a 1 ms timing difference on one sample.
I also have the comparison job working locally. I'll wait for your answer on where it should live before opening it.