Enable MJPEG thumbnail encoding and refresh bundled FFmpeg during Windows builds

This commit is contained in:
evgeny committed 2026-10-28 15:56:18 +01:00
1 parent 19cece789e
commit 26edd84bb9
3 files changed
+25 -2

No files matched your search

+6
View File
@@ -50,6 +50,12 @@ fi
source "$SRC_DIR/compiler_runtime.sh"
if [ "${MSYSTEM:-}" = UCRT64 ]; then
chatgui_refresh_compiler_runtime "$BUILD_DIR" "$RUNTIME_PREFIX/bin" 2>&1 | tee -a "$LOG_FILE"
if [ -f "$SRC_DIR/ffmpeg/ffmpeg_build/install/lib/pkgconfig/libavcodec.pc" ]; then
log "Checking bundled FFmpeg profile (including MJPEG video previews)..."
bash "$SRC_DIR/ffmpeg/build_ffmpeg.sh" 2>&1 | tee -a "$LOG_FILE" || {
log " ERROR: bundled FFmpeg profile update failed"; exit 1;
}
fi
log "Preparing bundled rlottie..."
cmake -S "$SRC_DIR/rlottie_src" -B "$SRC_DIR/rlottie_build" -G Ninja \
-DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON 2>&1 | tee -a "$LOG_FILE" || {
+4 -2
View File
@@ -7,7 +7,7 @@ SRC_DIR="$BUILD_DIR/src"
INSTALL_DIR="$BUILD_DIR/install"
JOBS=$(nproc 2>/dev/null || echo 4)
AMF_HEADERS_VERSION="${AMF_HEADERS_VERSION:-1.5.3}"
FFMPEG_PROFILE_MARKER="$INSTALL_DIR/share/utun-chatgui-ffmpeg-minimal-v6"
FFMPEG_PROFILE_MARKER="$INSTALL_DIR/share/utun-chatgui-ffmpeg-minimal-v7"
case "$(uname -s)" in
Linux) PLATFORM=linux ;;
@@ -264,7 +264,7 @@ fi
DECODERS=(h264 hevc av1 vp8 vp9 mpeg4 mpeg2video mpeg1video mjpeg h263 msmpeg4v3 wmv1 wmv2 vc1
aac mp3 opus vorbis flac ac3 eac3 alac wmav1 wmav2 pcm_s16le pcm_s24le pcm_s32le pcm_u8 pcm_f32le)
ENCODERS=(libx264 libx265 libvpx_vp9 libaom_av1 h264_nvenc hevc_nvenc av1_nvenc
ENCODERS=(mjpeg libx264 libx265 libvpx_vp9 libaom_av1 h264_nvenc hevc_nvenc av1_nvenc
h264_qsv hevc_qsv vp9_qsv av1_qsv)
for decoder in "${DECODERS[@]}"; do CONFIGURE_ARGS+=("--enable-decoder=$decoder"); done
@@ -291,6 +291,8 @@ fi
grep -Eq '^#define CONFIG_CBS_H265 1$' config.h || die "FFmpeg configure did not enable the HEVC header parser"
grep -Eq '^#define CONFIG_TRACE_HEADERS_BSF 1$' config_components.h || die "FFmpeg configure did not enable trace_headers"
grep -Eq '^#define CONFIG_MJPEG_ENCODER 1$' config_components.h || die "FFmpeg configure did not enable MJPEG encoder required for video previews"
log "MJPEG encoder enabled for first-frame JPEG previews"
if [ "$PLATFORM" = "windows" ]; then
grep -Eq '^#define CONFIG_H264_D3D11VA_HWACCEL 1$' config_components.h || die "H.264 D3D11VA implementation object unavailable"
grep -Eq '^#define CONFIG_HEVC_D3D11VA_HWACCEL 1$' config_components.h || die "HEVC D3D11VA implementation object unavailable"
@@ -223,6 +223,14 @@ printf '%s\\n' "$*" >> "$CMAKE_CALLS"
original_exe += f'DLL Name: {name}\n'
write(build / 'vibechat.exe', original_exe)
calls = root / 'cmake-calls.log'
ffmpeg_calls = root / 'ffmpeg-calls.log'
write(gui / 'ffmpeg/ffmpeg_build/install/lib/pkgconfig/libavcodec.pc', 'fixture FFmpeg\n')
write(gui / 'ffmpeg/build_ffmpeg.sh', '''#!/bin/bash
set -eu
printf 'profile update\\n' >> "$FFMPEG_CALLS"
if [[ ${FFMPEG_FAIL:-0} = 1 ]]; then exit 1; fi
''')
environment['FFMPEG_CALLS'] = str(ffmpeg_calls)
(build / 'wintun.dll').unlink()
built = subprocess.run(['bash', str(gui / 'build.sh'), '--installer', '-j2'], cwd=gui,
env={**environment, 'CMAKE_CALLS': str(calls)}, text=True, capture_output=True)
@@ -230,6 +238,13 @@ printf '%s\\n' "$*" >> "$CMAKE_CALLS"
assert '-DCMAKE_BUILD_TYPE=Release' in calls.read_text()
assert 'installer created:' in built.stdout and 'Build SUCCESS' in built.stdout
assert (build / 'wintun.dll').read_bytes() == (case / 'lib/wintun.dll').read_bytes()
assert ffmpeg_calls.read_text().splitlines() == ['profile update']
cmake_before_failure = calls.read_text()
codec_failed = subprocess.run(['bash', str(gui / 'build.sh'), '--installer', '-j2'], cwd=gui,
env={**environment, 'CMAKE_CALLS': str(calls), 'FFMPEG_FAIL': '1'}, text=True, capture_output=True)
assert codec_failed.returncode != 0 and 'bundled FFmpeg profile update failed' in codec_failed.stdout
assert calls.read_text() == cmake_before_failure, 'CMake ran after a failed FFmpeg profile update'
print('PASS: Windows GUI build updates bundled FFmpeg before CMake and stops on update failure')
failed = subprocess.run(['bash', str(gui / 'build.sh'), '--installer'], cwd=gui,
env={**environment, 'CMAKE_CALLS': str(calls), 'COMPILER_FAIL': '1'}, text=True, capture_output=True)
assert failed.returncode != 0 and 'Build SUCCESS' not in failed.stdout