feat: replace GPAC with FFmpeg for MP4 demuxing #2170
feat: replace GPAC with FFmpeg for MP4 demuxing #2170DhanushVarma-2 wants to merge 3 commits intoCCExtractor:masterfrom
Conversation
006130e to
4039844
Compare
|
The 9 Windows test failures (autoprogram, spupng, startcreditstext) are unrelated to MP4 demuxing — they involve subtitle encoding and credits detection, not the MP4 code path. These same tests pass on the Linux CI run. The Windows build itself was also delayed by a Chocolatey 503 outage when installing GPAC. All 237 Linux tests pass, including the 3 MP4-specific tests. The Linux CI bot also notes this PR fixes 9 previously-broken tests that had never passed before. |
87f2178 to
9e95cd7
Compare
|
Before going deep into this. It would be a lot more readable to separate both implementations. Have process_mp4_ffmpeg and process_mp4_gpac functions, possibly in separate files, so we only need a few #ifdef guards. Minimize the changes in the existing code (which already is not super well organized)... Even (much better), do the ffmpeg part in rust. We don't want to add more C to the code - we really want to switch to rust. |
yeah sure. |
Replace GPAC with FFmpeg for MP4 demuxing via a Rust implementation using rsmpeg. Supports AVC/H.264, HEVC/H.265, CEA-608, CEA-708, and tx3g subtitle tracks. Includes chapter extraction via ccxr_dumpchapters. VobSub tracks are detected but not yet supported. Selected at compile time via ENABLE_FFMPEG_MP4 / enable_mp4_ffmpeg Cargo feature.
fd54002 to
513276d
Compare
- mp4_rust_bridge.c/.h: C-callable functions for AVC/HEVC/CC processing - ccx_gpac_types.h: compat defines for GF_4CC, GF_ISOM_SUBTYPE_C708, etc. - mp4.c: dispatch to Rust demuxer when ENABLE_FFMPEG_MP4 is set - ccextractor.c: iterate all input files in MP4 mode - Remove dead processmp4_ffmpeg/dumpchapters_ffmpeg declarations
- src/CMakeLists.txt: link swresample, re-add libs after ccx_rust for circular dependencies, --no-as-needed on Linux, ENABLE_HARDSUBX - lib_ccx/CMakeLists.txt: target_compile_definitions for ENABLE_HARDSUBX - rust/CMakeLists.txt: enable_mp4_ffmpeg Cargo feature
513276d to
aa75430
Compare
CCExtractor CI platform finished running the test files on linux. Below is a summary of the test results, when compared to test for commit 90128d8...:
Your PR breaks these cases:
NOTE: The following tests have been failing on the master branch as well as the PR:
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 e4bcade...:
NOTE: The following tests have been failing on the master branch as well as the PR:
Congratulations: Merging this PR would fix the following tests:
This PR does not introduce any new test failures. However, some tests are failing on both master and this PR (see above). Check the result page for more info. |
|
@cfsmp3 Addressed all review feedback. |

In raising this pull request, I confirm the following (please check boxes):
My familiarity with the project is as follows (check one):
Adds a Rust FFmpeg-based MP4 demuxer (rsmpeg) as a compile-time alternative to GPAC. Enabled with
cmake -DWITH_FFMPEG=ON.Supported: AVC/H.264, HEVC/H.265, CEA-608, CEA-708, tx3g, chapter extraction
Known gap: VobSub detected but not decoded
GPAC path: Unchanged, still the default
Note:
mp4_ffmpeg_exports.rsshows as binary in the diff due to null-terminated C string literals for FFI — the file is clean UTF-8.