From 46582ed8bd39546211ceeac251b0fdf269d38bcf Mon Sep 17 00:00:00 2001 From: BoatingCloud <1759888028@qq.com> Date: Sat, 29 Aug 2026 13:32:57 +0800 Subject: [PATCH] build: add FFmpeg-Harmony prefix switch --- DOCS/MPV_BUILD_REPORT.md | 17 +++++++++++++++++ DOCS/PHASE4_STATUS.md | 3 +++ scripts/build-mpv-ohos-ffmpeg-harmony.sh | 15 +++++++++++++++ scripts/build-mpv-ohos.sh | 20 ++++++++++++++++++-- scripts/pkg-config-ohos.sh | 7 ++++++- 5 files changed, 59 insertions(+), 3 deletions(-) create mode 100755 scripts/build-mpv-ohos-ffmpeg-harmony.sh diff --git a/DOCS/MPV_BUILD_REPORT.md b/DOCS/MPV_BUILD_REPORT.md index 06ca5088a7..485345cd17 100644 --- a/DOCS/MPV_BUILD_REPORT.md +++ b/DOCS/MPV_BUILD_REPORT.md @@ -58,3 +58,20 @@ Disabled:mpv CLI、tests、fuzzers、Lua/JavaScript、libcurl、桌面音视 ## Phase 2 Entry Condition 已具备 XComponent + OHNativeWindow + EGL + libmpv OpenGL Render API 真机首帧测试的编译侧条件:SDK API 可用、libmpv 可链接、OpenGL Render API symbols 齐全。尚不代表首帧已经成功;Phase 2 必须在真机建立窗口和 EGL context 后验证。 + +## FFmpeg-Harmony export prefix + +Phase 4.5 的 FFmpeg fork 独立维护于 +`https://git.leee.xin/leeexin/Velix-FFmpeg-Harmony.git`,分支 +`harmony-ohcodec-export`,当前接入 commit `f1cc09cde1`。MPV 不包含 FFmpeg +源码,也不读取其私有头文件;需要切换时执行: + +```sh +./scripts/build-mpv-ohos-ffmpeg-harmony.sh +``` + +脚本默认消费 `../Velix-FFmpeg-Harmony/build/ohos-arm64/prefix`,也可用 +`FFMPEG_PREFIX=/path/to/prefix MPV_BUILD_ROOT=/path/to/mpv-build` 覆盖。默认 +`build-mpv-ohos.sh` 与 `build-mpv-ohos-software.sh` 的原有前缀和 +`harmony-ohcodec-gl=disabled` 行为不变。本次切换构建已通过 AArch64 ELF、符号 +和动态依赖校验,但没有进入 GPU mapper 或设备硬解验证。 diff --git a/DOCS/PHASE4_STATUS.md b/DOCS/PHASE4_STATUS.md index 003c10c469..65716cee85 100644 --- a/DOCS/PHASE4_STATUS.md +++ b/DOCS/PHASE4_STATUS.md @@ -36,6 +36,9 @@ direct-surface 实验接入、软件回退、诊断和构建矩阵。当前没 `LICENSE_AUDIT.md`。 - 当前 blocker、NativeBuffer 生命周期、EGL/fence/crop/stride 待验证项见 `DOCS/OHCODEC_GPU_INTEROP_DESIGN.md` 与 `DOCS/HDR_PIPELINE_NOTES.md`。 +- Phase 4.5 FFmpeg export contract 独立维护于 + `../Velix-FFmpeg-Harmony`;MPV 只提供 + `scripts/build-mpv-ohos-ffmpeg-harmony.sh` 前缀切换,未接入 mapper。 ## 下一阶段最大风险 diff --git a/scripts/build-mpv-ohos-ffmpeg-harmony.sh b/scripts/build-mpv-ohos-ffmpeg-harmony.sh new file mode 100755 index 0000000000..aa24ba328e --- /dev/null +++ b/scripts/build-mpv-ohos-ffmpeg-harmony.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -eu + +PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +FFMPEG_PREFIX=${FFMPEG_PREFIX:-$PROJECT_ROOT/../Velix-FFmpeg-Harmony/build/ohos-arm64/prefix} +MPV_BUILD_ROOT=${MPV_BUILD_ROOT:-$PROJECT_ROOT/build/ohos-arm64/build/mpv-ffmpeg-harmony} + +test -d "$FFMPEG_PREFIX" || { + printf 'Missing FFmpeg-Harmony prefix: %s\n' "$FFMPEG_PREFIX" >&2 + exit 1 +} + +FFMPEG_PREFIX="$FFMPEG_PREFIX" MPV_BUILD_ROOT="$MPV_BUILD_ROOT" \ + "$PROJECT_ROOT/scripts/build-mpv-ohos.sh" diff --git a/scripts/build-mpv-ohos.sh b/scripts/build-mpv-ohos.sh index d85e34b58a..733cbe3c48 100755 --- a/scripts/build-mpv-ohos.sh +++ b/scripts/build-mpv-ohos.sh @@ -3,11 +3,27 @@ set -eu . "$(dirname -- "$0")/setup-ohos-env.sh" -BUILD=$OHOS_BUILD_ROOT/build/mpv +FFMPEG_PREFIX=${FFMPEG_PREFIX:-$PREFIX} +BUILD=${MPV_BUILD_ROOT:-$OHOS_BUILD_ROOT/build/mpv} LOG=$OHOS_BUILD_ROOT/logs/mpv.log mkdir -p "$OHOS_BUILD_ROOT/logs" -test -f "$PREFIX/lib/libavcodec.a" || "$PROJECT_ROOT/scripts/build-ffmpeg-ohos.sh" +if test "$FFMPEG_PREFIX" = "$PREFIX"; then + test -f "$PREFIX/lib/libavcodec.a" || "$PROJECT_ROOT/scripts/build-ffmpeg-ohos.sh" +else + for library in libavcodec libavfilter libavformat libavutil libswresample libswscale; do + test -f "$FFMPEG_PREFIX/lib/$library.a" || { + printf 'Missing FFmpeg-Harmony archive: %s/lib/%s.a\n' "$FFMPEG_PREFIX" "$library" >&2 + exit 1 + } + done + test -f "$FFMPEG_PREFIX/include/libavcodec/avcodec.h" || { + printf 'Missing FFmpeg-Harmony headers: %s/include\n' "$FFMPEG_PREFIX" >&2 + exit 1 + } + PKG_CONFIG_EXTRA_LIBDIR="$FFMPEG_PREFIX/lib/pkgconfig:$FFMPEG_PREFIX/share/pkgconfig" + export PKG_CONFIG_EXTRA_LIBDIR +fi test -f "$PREFIX/lib/libass.a" || "$PROJECT_ROOT/scripts/build-font-stack-ohos.sh" test -f "$PREFIX/lib/libplacebo.a" || "$PROJECT_ROOT/scripts/build-libplacebo-ohos.sh" diff --git a/scripts/pkg-config-ohos.sh b/scripts/pkg-config-ohos.sh index 95dd119ce4..25e5075b88 100755 --- a/scripts/pkg-config-ohos.sh +++ b/scripts/pkg-config-ohos.sh @@ -8,8 +8,13 @@ PKGCONF=$PROJECT_ROOT/build/host-tools/pkgconf/bin/pkgconf test -x "$PKGCONF" || { printf 'pkgconf is not bootstrapped: %s\n' "$PKGCONF" >&2; exit 1; } +default_libdir="${PKG_CONFIG_LIBDIR:-$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig}" +if test -n "${PKG_CONFIG_EXTRA_LIBDIR:-}"; then + default_libdir="$PKG_CONFIG_EXTRA_LIBDIR:$default_libdir" +fi + PKG_CONFIG_DIR= \ PKG_CONFIG_PATH= \ -PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig" \ +PKG_CONFIG_LIBDIR="$default_libdir" \ PKG_CONFIG_SYSROOT_DIR= \ exec "$PKGCONF" "$@"