Conversation
|
Please note :
|
CCExtractor CI platform finished running the test files on linux. Below is a summary of the test results, when compared to test for commit dd29311...:
Your PR breaks these cases:
Congratulations: Merging this PR would fix the following tests:
It seems that not all tests were passed completely. This is an indication that the output of some files is not as expected (but might be according to you). Check the result page for more info. |
CCExtractor CI platform finished running the test files on windows. Below is a summary of the test results, when compared to test for commit dd29311...:
Your PR breaks these cases:
Congratulations: Merging this PR would fix the following tests:
It seems that not all tests were passed completely. This is an indication that the output of some files is not as expected (but might be according to you). Check the result page for more info. |
cfsmp3
left a comment
There was a problem hiding this comment.
Review: ISDB Rust Port
Nice work on this port. The code is well-organized across the 4 modules (types/leaf/mid/high), the C-to-Rust mapping tables in each module are very helpful, and the test suite is comprehensive.
I tested against the first sample stream you linked (the ~60min Brazilian broadcast) and the Rust output is 99.95% identical to the C version across 6300+ lines of subtitles — the few minor differences are actually slightly better output from the Rust side (less fragmented text in the rollup deduplication path).
Bug: Operator precedence in parse_caption_management_data (leaf.rs:205)
if ctx.dmf == 0x0C || ctx.dmf == 0x0D || ctx.dmf == 0x0E && pos < buf.len() {
ctx.dc = buf[pos];In Rust, && binds tighter than ||, so this parses as:
ctx.dmf == 0x0C || ctx.dmf == 0x0D || (ctx.dmf == 0x0E && pos < buf.len())The pos < buf.len() bounds check only protects the 0x0E case. If dmf is 0x0C or 0x0D and the buffer happens to end right after the dmf byte, buf[pos] will panic (index out of bounds). Fix:
if (ctx.dmf == 0x0C || ctx.dmf == 0x0D || ctx.dmf == 0x0E) && pos < buf.len() {Minor: Wrong bytes in debug log (leaf.rs:210)
debug!("CC MGMT DATA: languages: {:?}", &buf[pos - 3..pos]);At this point pos has been incremented by 1 past the dmf byte, so buf[pos - 3..pos] reads 3 bytes before the current position (unrelated data). The C code reads buf[0], buf[1], buf[2] at the current pointer position. The Rust equivalent should be &buf[pos..pos + 3]. This is just a log issue, not a functional bug.
Note on Rust port merging timeline
Independently of this diff — we're currently working on improving our CI to include proper regression testing for Rust ports (comparing C vs Rust output against reference streams). Until that infrastructure is in place, we won't be merging Rust ports, because we lack confidence that we can catch regressions going forward. This is not a reflection of the quality of your work (which is solid), just a process/tooling gap on our side. We'll revisit once CI is ready.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
In raising this pull request, I confirm the following (please check boxes):
My familiarity with the project is as follows (check one):
This pull request migrates
src/lib_ccx/ccx_decoders_isdb.c, ccx_decoders_isdb.hto/src/rust/src/isdbrust module.types.rs- ISDB-specific types, enums, and constants etc.leaf.rs. - Low-level helper functions; independent of functions inmid/high/mod.rsmid.rs- Mid-level processing functionshigh.rs- High-level parser functionsmod.rs- ffi from rust sideTested against streams :