Commit Graph

3292 Commits

Author SHA1 Message Date
Carlos Fernandez Sanz
52b5385c2a ci: add dual build artifacts for Windows (min-rust vs migrations) (#2208)
Add $(ExtraDefines) to PreprocessorDefinitions in all 4 configurations
of the vcxproj. This allows passing /p:ExtraDefines=DISABLE_RUST from
the MSBuild command line to use C code paths for switchable modules.

The Windows CI now produces two Release artifacts per architecture:
- "CCExtractor Windows x64 Release build" — min Rust (DISABLE_RUST)
- "CCExtractor Windows x64 Release build (with migrations)" — max Rust

The migrations build uses /t:Rebuild to do a clean rebuild without
DISABLE_RUST after the min-rust build completes.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 08:48:02 -07:00
Carlos Fernandez Sanz
92389cff84 ci: add dual build artifacts to compare C vs Rust code paths (#2207)
* fix: flush pending EIT sections in EPG_free() before freeing buffers

* ci: add dual build artifacts to compare C vs Rust code paths

Add -min-rust flag to linux/build that passes -DDISABLE_RUST to gcc,
causing switchable modules (DTVCC, demuxer, AVC, networking, hex utils)
to use their C implementations instead of Rust. The Rust library still
compiles since many modules are Rust-only.

The Linux CI now produces two artifacts:
- "CCExtractor Linux build" — min Rust (C paths where available)
- "CCExtractor Linux build (with migrations)" — max Rust

Both should produce identical output on the sample platform. If they
diverge, it means a Rust port introduced a behavioral difference.

The sample platform will need a corresponding update to recognize and
test the new "with migrations" artifact.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Varadraj75 <agrawalvaradraj2007@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 21:47:59 -07:00
Abhijith
578abcaf3b [FIX] Fix ownership of default Matroska track language (#2193)
* Fix ownership of default Matroska track language

* matroska: restore lang_ietf preference in filename gen and lang matching

Restore the working IETF language preference that was accidentally
removed in the previous commit:

- generate_filename_from_track(): use lang_ietf ? lang_ietf : lang
  for buffer sizing and both snprintf calls
- save_vobsub_track(): same lang_tag pattern for base filename
- matroska_save_all(): check lang_ietf first (BCP-47), fall back to
  lang (ISO-639-2) when --mkvlang filter is active; remove now-unused
  char *match variable

The strdup NULL check and broken switch-case removal from the prior
commit are unchanged.

* matroska: fix clang-format style

* matroska: fix filename underscores, LLD macro, braces, param name
2026-03-15 20:09:52 -07:00
Dhanush
5c87a33a8a fix: add link_directories for tesseract/leptonica on macOS (#2186)
pkg_check_modules provides library names without paths.
Without link_directories, the linker cannot find tesseract
and leptonica on systems where they are not in default
search paths (e.g. Homebrew on macOS arm64).

Co-authored-by: Dhanush Varma <your@email.com>
2026-03-15 11:05:57 -07:00
Carlos Fernandez Sanz
6281a481d0 chore: update PR template to set clearer expectations (#2203)
Require repro instructions and samples, discourage AI-generated PRs
for theoretical issues, clarify changelog and C code policies.
2026-03-14 12:58:41 -07:00
Chandragupt Singh
ed7f544e10 [FEATURE] Add guarded ASS/SSA \pos positioning for CEA-608 captions (#1885)
* feat(ssa): add guarded ASS \pos positioning for CEA-608 captions

* fix(ssa): correct ASS positioning anchor, validate row adjacency, and clean up variable placement

* fix(ssa): adjust top margin to prevent clipping of top-positioned CEA-608 captions

* ssa: map CEA-608 row+col to ASS coords using FFmpeg safe-area formula and fix \an2→\an7 anchor
2026-03-14 10:13:40 -07:00
Apoorv Darshan
538e39db67 Fix null pointer dereference in Matroska parser on file open failure (#2171)
create_file() returns the result of fopen() which can be NULL if the
file cannot be opened. matroska_loop() never checked this, passing
the NULL pointer into matroska_parse() where it is immediately used
in feof(), causing a crash.

Add a NULL check that calls fatal(EXIT_READ_ERROR, ...) on failure,
consistent with other file-open error handling in the codebase.
2026-03-14 10:03:39 -07:00
Arun
af53968611 Fix: Heap OOB buffer over-read in MP4 atom parsing (#2179) (#2180)
* Fix: Heap OOB buffer over-read in MP4 atom parsing (#2179)

* formatting

---------

Co-authored-by: Arun kumar <arunkumar@Aruns-MacBook-Air.local>
2026-03-12 20:54:28 -07:00
Carlos Fernandez Sanz
0f41b70a6e style: add missing braces to if blocks in lib_ccx.c (#2147 follow-up) (#2197)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-12 18:56:52 -07:00
Atul Chahar
58a8ded621 Fix MSVC cross-CRT invalid free on output_filename (#2147) 2026-03-12 18:54:47 -07:00
Carlos Fernandez Sanz
ee57fb46f3 chore: clean up #2168 merge — drop internal CHANGES.TXT entry, fix whitespace (#2196)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-12 18:49:44 -07:00
Varad Raj Agrawal
dc1d8d9592 fix: move VBI_DEBUG to CMake opt-in, fix MSVC empty struct error (#2168)
- Remove unconditional #define VBI_DEBUG from ccx_decoders_vbi.h
- Add CMake option VBI_DEBUG (OFF by default) in src/CMakeLists.txt
- Use #ifdef VBI_DEBUG / #else for debug_file_name vs reserved member,
  preventing MSVC C2016 empty struct error in non-debug builds
- Add changelog entry in docs/CHANGES.TXT under 0.96.7 unreleased

Fixes #2167
2026-03-12 18:47:43 -07:00
dependabot[bot]
d0c73362ed chore(deps): bump docker/build-push-action from 6 to 7 (#2181)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-08 13:28:04 -07:00
dependabot[bot]
80ed678f98 chore(deps): bump docker/setup-buildx-action from 3 to 4 (#2178)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-07 23:16:15 -08:00
Varad Raj Agrawal
90128d8c28 fix: memory leaks and invalid CSS in WebVTT encoder (#2164)
* fix: memory leaks and invalid CSS in WebVTT encoder

- Remove 6 unnecessary strdup() calls on string literals in
  write_cc_buffer_as_webvtt() — literals are passed directly to
  write_wrapped() which takes void*, no heap allocation needed.
  This runs in a per-character inner loop and leaked on every
  styled subtitle in a broadcast.
- Fix invalid CSS: rgba(0, 256, 0, 0.5) -> rgba(0, 255, 0, 0.5)
  CSS color channels are 0-255; 256 is out of range.
- Fix missing free(unescaped) on write-error path in
  write_stringz_as_webvtt() — matched the existing pattern on
  the adjacent error path which correctly freed both el and unescaped.

Fixes #2154

* fix: move WebVTT changelog entry to unreleased 0.96.7 section
2026-03-07 00:37:12 -08:00
Pranav Sharma
b2c1babf90 Feat(rust): Implement WebVTT-specific timestamp format and layout anchor (#2135)
* Feat(rust): Implement WebVTT-specific timestamp format and layout anchor

* style: apply rustfmt to g608.rs

* fix(rust): use WebVTT-spec dot separator for milliseconds in timestamp line
2026-03-07 00:26:55 -08:00
Anayo Anyafulu
a44db9f617 Port hex_string_to_int from C to Rust and support uppercase hex (#2141) 2026-03-06 23:55:33 -08:00
rhythmcache
e4bcade799 Fix potential out-of-bounds access in write_stringz_as_srt_to_output (#2128)
* Fix loop condition for reading unescaped string

* Fix condition to check for newline escape sequence

* Fix formatting
2026-03-06 23:44:40 -08:00
cheron2000
f377be9578 cmake: guard Unix-only linker flags on non-Windows platforms (#2156) 2026-03-01 12:05:37 -08:00
Carlos Fernandez Sanz
8de778af32 fix(report): NULL guard and deduplicate call in teletext JSON report (#2155)
Follow-up to #2137:
- Add NULL check on private_data in tlt_print_seen_pages_json
- Remove duplicate get_sib_stream_by_type call in print_file_report_json

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 15:56:36 -08:00
Carlos Fernandez Sanz
c3c5d9c0a0 Merge pull request #2045 from pranavshar223/docs-userdata-debug-log
docs/debug: add verbose log when user data is skipped
2026-02-28 15:48:43 -08:00
Gaurav karmakar
02c524f693 [FIX]Fix panic when using --mp4/--mkv without explicit input format (#2107)
* Fix panic when using --mp4/--mkv without explicit input format

* Restored Autodetection Logic &Fixed TCP Input Regressio

* style: apply cargo fmt

* ix(parser): add --mp4/--mkv handling and remove unwrap panic

Properly handle mp4/mkv flags in set_input_format()
and replace args.input.unwrap() with unwrap_or().

* resolve the formatting issue

---------

Co-authored-by: GAURAV KARMAKAR <gaurav.k@graeon.ai>
2026-02-28 15:35:56 -08:00
Carlos Fernandez Sanz
9614f58187 Merge pull request #2137 from ananyaaa66/master
Add teletext pages and PID type tagging to JSON report output (#1399)
2026-02-28 14:25:22 -08:00
Carlos Fernandez Sanz
5de265d64f Merge pull request #2152 from Varadraj75/feat/mkv-mpeg2-cc-extraction
FEATURE: Add V_MPEG2 track support in MKV demuxer for CC extraction
2026-02-28 14:02:09 -08:00
Carlos Fernandez Sanz
d80bf92820 test(dtvcc): add lazy decoder allocation lifecycle test 2026-02-28 13:52:00 -08:00
Carlos Fernandez
6ee370cafe style: cargo fmt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:18:40 -08:00
Carlos Fernandez
e9a84ac2aa test(dtvcc): add lazy decoder allocation lifecycle test
Verify that CEA-708 service decoders are not allocated at startup
and are only created on first use when data arrives for that service.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:14:25 -08:00
Carlos Fernandez Sanz
ffb380601a Merge pull request #2151 from x15sr71/fix/x86-decoder-alloc-panic
Fix: Lazy CEA-708 service decoder allocation to prevent OOM panic on x86 (32-bit Windows)
2026-02-28 13:08:11 -08:00
Carlos Fernandez
36711b9d3b Merge origin/master into fix/x86-decoder-alloc-panic
Resolve CHANGES.TXT conflict: keep both entries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:07:54 -08:00
Carlos Fernandez Sanz
c919dafd4a Merge pull request #2150 from Varadraj75/fix/scc-framerate-help-and-23.98-alias
[FEATURE] :  Add 23.98fps alias for --scc-framerate and clarify help text
2026-02-28 12:59:17 -08:00
Carlos Fernandez Sanz
af57a0c425 Merge pull request #2148 from CCExtractor/dependabot/github_actions/actions/upload-artifact-7
chore(deps): bump actions/upload-artifact from 6 to 7
2026-02-28 12:55:15 -08:00
Carlos Fernandez Sanz
f457348a43 Merge pull request #2138 from x15sr71/fix/rust-timing-unwrap-panic
FIX(rust): prevent panic when formatting out-of-range timestamps in timing.rs and c_functions.rs
2026-02-28 10:30:05 -08:00
Varadraj75
a87ad2bec7 style: remove BOM from matroska.c 2026-02-28 22:57:58 +05:30
Varadraj75
0cf5abfa9c style: apply clang-format to matroska.c 2026-02-28 22:51:39 +05:30
Varadraj75
934398fc86 feat: support V_MPEG2 tracks in MKV demuxer for CC extraction
MKV files with MPEG-2 video (common in DVD sources) were silently skipped.
Add V_MPEG2 track detection and processing using the existing process_m2v()
infrastructure, matching how mp4.c handles MPEG-2 streams.

Fixes #2149
2026-02-28 21:43:42 +05:30
Varadraj75
1189433c06 fix: address Copilot review comments on PR #2150
- Fix mapping comments: 4=23.976 (aka 23.98) in ccx_encoders_scc.c
- Update help text to document 23.976 and 29 as accepted aliases
- Add test_scc_framerate_23_976 unit test for the 23.976 alias
2026-02-28 18:04:24 +05:30
Chandragupt Singh
7047583cdf Merge branch 'master' into fix/x86-decoder-alloc-panic 2026-02-28 17:52:49 +05:30
Chandragupt Singh
3af7a6a336 chore: add changelog entry and update test comment for lazy allocation 2026-02-28 17:38:38 +05:30
Varadraj75
f7bdb86504 feat: add 23.98fps as valid --scc-framerate value and fix help text
- Add case 4 (23.976f) to both get_scc_fps() and get_scc_fps_internal()
  in ccx_encoders_scc.c so --scc-framerate 23.98 produces correct output
- Add "23.98" | "23.976" match arm in parser.rs mapping to value 4
- Add test_scc_framerate_23_98() unit test in parser.rs
- Update --scc-framerate help text to clarify it affects both input
  parsing AND output encoding (not input only)
- Add 23.98 to the listed valid values in the help text

Follows up on discussion in #2145 and #2146.
2026-02-28 16:58:58 +05:30
dependabot[bot]
738d482ea7 chore(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 18:02:42 +00:00
Chandragupt Singh
801a5446bf debug: revert artifact freshness sentinel string
TIMING_PATCH_ACTIVE was a temporary diagnostic string added to
verify that GitHub Actions was building fresh artifacts from the
correct branch commit, and not serving a stale cached binary.
Build freshness was confirmed. Reverted back to INVALID.
2026-02-27 20:32:40 +05:30
Chandragupt Singh
f5cede7c58 debug: add a small sentinel string to check if the artifact is fresh 2026-02-27 18:35:21 +05:30
Chandragupt Singh
76e37ba64e fix(rust): lazily allocate CEA-708 service decoders to avoid x86 startup OOM 2026-02-27 10:43:08 +05:30
Carlos Fernandez Sanz
733ed89feb Merge pull request #2134 from x15sr71/fix/spupng-indexing-and-path
[Fix]: SPUPNG indexing, EOD counter advance, and header path determinism
2026-02-25 14:19:30 -08:00
Carlos Fernandez Sanz
6da2b7f8e1 Merge pull request #2136 from apoorvdarshan/fix/config-file-parser-bugs
Fix configuration file parsing bugs and typos
2026-02-25 14:17:24 -08:00
Carlos Fernandez Sanz
85aa833e01 Merge pull request #2130 from pranavshar223/fix-scte20-syntax-check
Fix: Add missing SCTE-20 marker bit syntax check (resolves TODO)
2026-02-25 14:04:23 -08:00
Chandragupt Singh
17d1c14c99 fix(rust): replace alloc panic with handle_alloc_error and add null guard to prevent UB on x86 2026-02-26 00:13:45 +05:30
Chandragupt Singh
9039c80d19 fix(rust): replace unwrap in print_mstime_static to avoid panic on out-of-range timestamps 2026-02-24 18:08:15 +05:30
Chandragupt Singh
10c612f90c docs: add changelog entry 2026-02-24 02:31:16 +05:30
Chandragupt Singh
ef33eb8c13 fix(rust): prevent panic in timing.rs when formatting invalid timestamps 2026-02-24 01:00:54 +05:30