Skip to content

Commit 6e5872b

Browse files
authored
Merge branch 'CCExtractor:master' into feature/split-dvb-subs
2 parents 78f69b9 + d573548 commit 6e5872b

29 files changed

+872
-912
lines changed
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
name: Build Linux AppImage
2+
3+
on:
4+
# Build on releases
5+
release:
6+
types: [published]
7+
# Allow manual trigger
8+
workflow_dispatch:
9+
inputs:
10+
build_type:
11+
description: 'Build type (all, minimal, ocr, hardsubx)'
12+
required: false
13+
default: 'all'
14+
# Build on pushes to workflow file for testing
15+
push:
16+
paths:
17+
- '.github/workflows/build_appimage.yml'
18+
- 'linux/build_appimage.sh'
19+
20+
jobs:
21+
build-appimage:
22+
runs-on: ubuntu-22.04
23+
strategy:
24+
fail-fast: false
25+
matrix:
26+
build_type: [minimal, ocr, hardsubx]
27+
28+
steps:
29+
- name: Check if should build this variant
30+
id: should_build
31+
run: |
32+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
33+
INPUT_TYPE="${{ github.event.inputs.build_type }}"
34+
if [ "$INPUT_TYPE" = "all" ] || [ "$INPUT_TYPE" = "${{ matrix.build_type }}" ]; then
35+
echo "should_build=true" >> $GITHUB_OUTPUT
36+
else
37+
echo "should_build=false" >> $GITHUB_OUTPUT
38+
fi
39+
else
40+
echo "should_build=true" >> $GITHUB_OUTPUT
41+
fi
42+
43+
- name: Checkout repository
44+
if: steps.should_build.outputs.should_build == 'true'
45+
uses: actions/checkout@v4
46+
47+
- name: Install base dependencies
48+
if: steps.should_build.outputs.should_build == 'true'
49+
run: |
50+
sudo apt-get update
51+
sudo apt-get install -y --no-install-recommends \
52+
build-essential \
53+
cmake \
54+
pkg-config \
55+
wget \
56+
file \
57+
libfuse2 \
58+
zlib1g-dev \
59+
libpng-dev \
60+
libjpeg-dev \
61+
libfreetype-dev \
62+
libxml2-dev \
63+
libcurl4-gnutls-dev \
64+
libssl-dev \
65+
clang \
66+
libclang-dev
67+
68+
- name: Install OCR dependencies
69+
if: steps.should_build.outputs.should_build == 'true' && (matrix.build_type == 'ocr' || matrix.build_type == 'hardsubx')
70+
run: |
71+
sudo apt-get install -y --no-install-recommends \
72+
tesseract-ocr \
73+
libtesseract-dev \
74+
libleptonica-dev \
75+
tesseract-ocr-eng
76+
77+
- name: Install FFmpeg dependencies (HardSubX)
78+
if: steps.should_build.outputs.should_build == 'true' && matrix.build_type == 'hardsubx'
79+
run: |
80+
sudo apt-get install -y --no-install-recommends \
81+
libavcodec-dev \
82+
libavformat-dev \
83+
libavutil-dev \
84+
libswscale-dev \
85+
libswresample-dev \
86+
libavfilter-dev \
87+
libavdevice-dev
88+
89+
- name: Install Rust toolchain
90+
if: steps.should_build.outputs.should_build == 'true'
91+
uses: dtolnay/rust-toolchain@stable
92+
93+
- name: Cache GPAC build
94+
if: steps.should_build.outputs.should_build == 'true'
95+
id: cache-gpac
96+
uses: actions/cache@v4
97+
with:
98+
path: /usr/local/lib/libgpac*
99+
key: gpac-v2.4.0-ubuntu22
100+
101+
- name: Build and install GPAC
102+
if: steps.should_build.outputs.should_build == 'true' && steps.cache-gpac.outputs.cache-hit != 'true'
103+
run: |
104+
git clone -b v2.4.0 --depth 1 https://github.com/gpac/gpac
105+
cd gpac
106+
./configure
107+
make -j$(nproc) lib
108+
sudo make install-lib
109+
sudo ldconfig
110+
111+
- name: Update library cache
112+
if: steps.should_build.outputs.should_build == 'true'
113+
run: sudo ldconfig
114+
115+
- name: Build AppImage
116+
if: steps.should_build.outputs.should_build == 'true'
117+
run: |
118+
cd linux
119+
chmod +x build_appimage.sh
120+
BUILD_TYPE=${{ matrix.build_type }} ./build_appimage.sh
121+
122+
- name: Get AppImage name
123+
if: steps.should_build.outputs.should_build == 'true'
124+
id: appimage_name
125+
run: |
126+
case "${{ matrix.build_type }}" in
127+
minimal)
128+
echo "name=ccextractor-minimal-x86_64.AppImage" >> $GITHUB_OUTPUT
129+
;;
130+
ocr)
131+
echo "name=ccextractor-x86_64.AppImage" >> $GITHUB_OUTPUT
132+
;;
133+
hardsubx)
134+
echo "name=ccextractor-hardsubx-x86_64.AppImage" >> $GITHUB_OUTPUT
135+
;;
136+
esac
137+
138+
- name: Test AppImage
139+
if: steps.should_build.outputs.should_build == 'true'
140+
run: |
141+
chmod +x linux/${{ steps.appimage_name.outputs.name }}
142+
linux/${{ steps.appimage_name.outputs.name }} --version
143+
144+
- name: Upload AppImage artifact
145+
if: steps.should_build.outputs.should_build == 'true'
146+
uses: actions/upload-artifact@v4
147+
with:
148+
name: ${{ steps.appimage_name.outputs.name }}
149+
path: linux/${{ steps.appimage_name.outputs.name }}
150+
151+
- name: Upload to Release
152+
if: steps.should_build.outputs.should_build == 'true' && github.event_name == 'release'
153+
uses: softprops/action-gh-release@v1
154+
with:
155+
files: linux/${{ steps.appimage_name.outputs.name }}
156+
env:
157+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

CI_TRIAGE_DEC_2025.md

Lines changed: 0 additions & 26 deletions
This file was deleted.

OpenBSD/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ MAINTAINER = Marc Espie <[email protected]>
44
CATEGORIES = multimedia
55
COMMENT = closed caption subtitles extractor
66
HOMEPAGE = https://ccextractor.org
7-
V = 0.95
7+
V = 0.96
88
DISTFILES = ccextractor.${V:S/.//}-src.zip
99
MASTER_SITES = ${MASTER_SITE_SOURCEFORGE:=ccextractor/}
1010
DISTNAME = ccextractor-$V

docs/CHANGES.TXT

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
0.95 (2025-09-15)
1+
0.96 (2025-12-21)
22
-----------------
33
- New: Added --list-tracks (-L) option to list all tracks in media files without processing
44
- Fix: Garbled captions from HDHomeRun and I/P-only H.264 streams (#1109)
@@ -19,6 +19,35 @@
1919
- Fix --ocrlang to accept Tesseract language names (chi_tra, chi_sim, etc.)
2020
- Add case-insensitive matching for --dvblang parameter
2121
- FIX: Add HEVC/H.265 stream type recognition to prevent crashes on ATSC 3.0 streams
22+
- New: Add demuxer and file_functions module in lib_ccxr (#1662)
23+
- Fix: handle row_count decrease in CEA-708 C decoder
24+
- Fix: Bounds checks to prevent panic on malformed CEA-708 data
25+
- Fix: Multiprogram logic in is_decoder_processed_enough() causing false warnings
26+
- Fix: Write consistent 2-byte UTF-16BE encoding for CEA-708 captions (Japanese/Chinese)
27+
- New: Add --ttxtforcelatin option to force Latin G0 charset in Teletext
28+
- Fix: Add fallback for TS files without PAT/PMT tables
29+
- Fix: PTS jump handling to continue fts_now updates after jump
30+
- Fix: Null checks for unchecked memory allocations throughout codebase
31+
- Fix: Null checks and invalid UTF-8 handling in Rust FFI functions
32+
- Fix: Panics in timing code when processing multiple files
33+
- Fix: Caption start/end times to match FFmpeg timing in MP4/MPEG/TS
34+
- Fix: Correctly count and store multiple input files
35+
- Fix: Handle MP4 c608 tracks and improve garbage frame detection
36+
- Fix: Update fts_now for each frame in elementary streams
37+
- Fix: Preserve CR time during pop-on to roll-up transition
38+
- Fix: Defer min_pts until frame type is known
39+
- Fix: Skip leading non-I-frames when setting min_pts
40+
- Fix: Memory leaks in ts_tables_epg, ocr, and ccx_encoders_spupng
41+
- Fix: Buffer overruns in 708_output, mcc_encoder, utility, xds_decoder
42+
- Fix: Replace sprintf/strcpy with bounds-checked snprintf/strncpy in encoders
43+
- Fix: HHMMSSFFF format for ttxt output timestamps
44+
- Fix: Always emit position codes at start of SCC caption
45+
- Fix: Memory safety issues in ccx_decoders_common
46+
- Fix: Null checks after malloc calls in dvb_subtitle_decoder
47+
- Fix: Memory safety checks and memory leaks in Matroska parser
48+
49+
0.95 (2025-09-15)
50+
-----------------
2251
- Fix: ARM64/aarch64 build failure due to c_char type mismatch in nal.rs
2352
- Fix: HardSubX OCR on Rust
2453
- Removed the Share Module
@@ -30,7 +59,6 @@
3059
- Fix: Segmentation faults on XDS files
3160
- Fix: Clippy Errors Based on Rust 1.88
3261
- IMPROVEMENT: Refactor and optimize Dockerfile
33-
- New: Add demuxer and file_functions module in lib_ccxr (#1662)
3462
- Fix: Improved handling of IETF language tags in Matroska files (#1665)
3563
- New: Create unit test for rust code (#1615)
3664
- Breaking: Major argument flags revamp for CCExtractor (#1564 & #1619)
@@ -71,33 +99,8 @@
7199
- Fix: Resolve compile-time error about implicit declarations (#1646)
72100
- Fix: fatal out of memory error extracting from a VOB PS
73101
- Fix: Unit Test Rust failing due to changes in Rust Version 1.86.0
74-
- Fix: handle row_count decrease in CEA-708 C decoder
75102
- Fix: Support for MINGW-w64 cross compiling
76103
- Fix: Build with ENABLE_FFMPEG to support ffmpeg 5
77-
- Fix: Bounds checks to prevent panic on malformed CEA-708 data
78-
- Fix: Multiprogram logic in is_decoder_processed_enough() causing false warnings
79-
- Fix: Write consistent 2-byte UTF-16BE encoding for CEA-708 captions (Japanese/Chinese)
80-
- New: Add --ttxtforcelatin option to force Latin G0 charset in Teletext
81-
- Fix: Add fallback for TS files without PAT/PMT tables
82-
- Fix: PTS jump handling to continue fts_now updates after jump
83-
- Fix: Null checks for unchecked memory allocations throughout codebase
84-
- Fix: Null checks and invalid UTF-8 handling in Rust FFI functions
85-
- Fix: Panics in timing code when processing multiple files
86-
- Fix: Caption start/end times to match FFmpeg timing in MP4/MPEG/TS
87-
- Fix: Correctly count and store multiple input files
88-
- Fix: Handle MP4 c608 tracks and improve garbage frame detection
89-
- Fix: Update fts_now for each frame in elementary streams
90-
- Fix: Preserve CR time during pop-on to roll-up transition
91-
- Fix: Defer min_pts until frame type is known
92-
- Fix: Skip leading non-I-frames when setting min_pts
93-
- Fix: Memory leaks in ts_tables_epg, ocr, and ccx_encoders_spupng
94-
- Fix: Buffer overruns in 708_output, mcc_encoder, utility, xds_decoder
95-
- Fix: Replace sprintf/strcpy with bounds-checked snprintf/strncpy in encoders
96-
- Fix: HHMMSSFFF format for ttxt output timestamps
97-
- Fix: Always emit position codes at start of SCC caption
98-
- Fix: Memory safety issues in ccx_decoders_common
99-
- Fix: Null checks after malloc calls in dvb_subtitle_decoder
100-
- Fix: Memory safety checks and memory leaks in Matroska parser
101104

102105
0.94 (2021-12-14)
103106
-----------------

0 commit comments

Comments
 (0)