diff --git a/CI_TRIAGE_DEC_2025.md b/CI_TRIAGE_DEC_2025.md index 4dc3dc3e6..23a69aaa0 100644 --- a/CI_TRIAGE_DEC_2025.md +++ b/CI_TRIAGE_DEC_2025.md @@ -11,12 +11,16 @@ considers them regressions because the "ground truth" baseline is outdated. This 2. Systematically analyze each failing test 3. Determine whether to update ground truth or fix code -## Failing Tests to Triage +## Merged Fixes -Will be populated after CI run completes. +The following PRs have been merged and this run verifies their combined effect: + +- **PR #1847**: Hardsubx crash fix, memory leak fixes, rcwt exit code fix +- **PR #1848**: XDS empty content entries fix ## Status -- [ ] CI run triggered +- [x] PR #1847 merged +- [x] PR #1848 merged +- [ ] Verification CI run triggered - [ ] Results analyzed -- [ ] Triage decisions made diff --git a/src/ccextractor.c b/src/ccextractor.c index 2fa926024..da9d5c364 100644 --- a/src/ccextractor.c +++ b/src/ccextractor.c @@ -2,6 +2,8 @@ /* CCExtractor, originally by carlos at ccextractor.org, now a lot of people. Credits: See AUTHORS.TXT License: GPL 2.0 + +CI verification run: 2025-12-19T08:30 - Testing merged fixes from PRs #1847 and #1848 */ #include "ccextractor.h" #include diff --git a/src/lib_ccx/general_loop.c b/src/lib_ccx/general_loop.c index 4ea5fa34e..dfd8af583 100644 --- a/src/lib_ccx/general_loop.c +++ b/src/lib_ccx/general_loop.c @@ -1392,9 +1392,12 @@ int rcwt_loop(struct lib_ccx_ctx *ctx) dec_sub = &dec_ctx->dec_sub; telctx = dec_ctx->private_data; - /* Set minimum and current pts since rcwt has correct time */ + /* Set minimum and current pts since rcwt has correct time. + * Also set pts_set = 2 (MinPtsSet) so the Rust timing code knows + * that min_pts is valid and can calculate fts_now properly. */ dec_ctx->timing->min_pts = 0; dec_ctx->timing->current_pts = 0; + dec_ctx->timing->pts_set = 2; // 2 = min_pts set // Loop until no more data is found while (1) diff --git a/src/lib_ccx/wtv_functions.c b/src/lib_ccx/wtv_functions.c index 99094f849..2514350ee 100644 --- a/src/lib_ccx/wtv_functions.c +++ b/src/lib_ccx/wtv_functions.c @@ -436,8 +436,15 @@ LLONG get_data(struct lib_ccx_ctx *ctx, struct wtv_chunked_buffer *cb, struct de dbg_print(CCX_DMT_PARSE, "TIME: %ld\n", time); if (time != -1 && time != WTV_CC_TIMESTAMP_MAGIC) { // Ignore -1 timestamps - set_current_pts(dec_ctx->timing, time_to_pes_time(time)); - dec_ctx->timing->pts_set = 1; + LLONG pes_time = time_to_pes_time(time); + set_current_pts(dec_ctx->timing, pes_time); + // Set min_pts on first valid timestamp to enable fts_now calculation + if (dec_ctx->timing->min_pts == 0x01FFFFFFFF || pes_time < dec_ctx->timing->min_pts) + { + dec_ctx->timing->min_pts = pes_time; + } + // pts_set = 2 (MinPtsSet) is required for proper fts_now calculation + dec_ctx->timing->pts_set = 2; frames_since_ref_time = 0; set_fts(dec_ctx->timing); } diff --git a/src/rust/lib_ccxr/src/util/encoding.rs b/src/rust/lib_ccxr/src/util/encoding.rs index e8d4ff1d6..f111757a0 100644 --- a/src/rust/lib_ccxr/src/util/encoding.rs +++ b/src/rust/lib_ccxr/src/util/encoding.rs @@ -584,7 +584,7 @@ fn latin1_to_line21(c: Latin1Char) -> Line21Char { 0xbf => 0x83, // Inverted (open) question mark 0xa2 => 0x85, // Cents symbol 0xa3 => 0x86, // Pounds sterling - 0xb6 => 0x87, // Music note (pilcrow in Latin-1) + b'#' => 0x87, // Music note (# in Latin-1) 0xe0 => 0x88, // lowercase a, grave accent 0x20 => 0x89, // transparent space 0xe8 => 0x8a, // lowercase e, grave accent @@ -682,7 +682,7 @@ pub fn line21_to_latin1(c: Line21Char) -> Latin1Char { 0x84 => UNAVAILABLE_CHAR, // Trademark symbol (TM) - Does not exist in Latin 1 0x85 => 0xa2, // Cents symbol 0x86 => 0xa3, // Pounds sterling - 0x87 => 0xb6, // Music note - Not in latin 1, so we use 'pilcrow' + 0x87 => b'#', // Music note - Not in latin 1, so we use '#' 0x88 => 0xe0, // lowercase a, grave accent 0x89 => 0x20, // transparent space, we make it regular 0x8a => 0xe8, // lowercase e, grave accent