From 0d75d3a0559c7692ca3fd2eb9ca6c66309e03465 Mon Sep 17 00:00:00 2001 From: NihilDigit Date: Sat, 20 Jun 2026 20:39:49 +0800 Subject: [PATCH 1/2] Support Windows ARM64 libmpv package --- .github/workflows/ci.yml | 33 ++++++++++++ .../windows/CMakeLists.txt | 51 +++++++++++++++---- 2 files changed, 73 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 49d4ddb9b..686733c1b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,6 +117,39 @@ jobs: files: | media_kit_test/media_kit_test_win32_x64.7z + windows-arm64: + name: Windows ARM64 + runs-on: windows-11-arm + defaults: + run: + working-directory: media_kit_test + steps: + - uses: actions/checkout@v2 + with: + submodules: "true" + - name: Set up Flutter for ARM64 + shell: pwsh + run: | + $flutterPath = Join-Path $env:RUNNER_TEMP "flutter" + git clone https://github.com/flutter/flutter.git -b stable --depth 1 $flutterPath + Add-Content -Path $env:GITHUB_PATH -Value (Join-Path $flutterPath "bin") + & (Join-Path $flutterPath "bin\flutter.bat") --version + - run: flutter pub get + - run: flutter build windows --verbose + - run: cmake -E tar "cfv" "media_kit_test_win32_arm64.7z" --format=7zip "build\windows\arm64\runner\Release" + - uses: actions/upload-artifact@v4 + with: + name: media_kit_test_win32_arm64 + path: media_kit_test/media_kit_test_win32_arm64.7z + - uses: softprops/action-gh-release@v1 + if: github.ref == 'refs/heads/main' + with: + draft: true + prerelease: false + tag_name: "vnext" + files: | + media_kit_test/media_kit_test_win32_arm64.7z + linux: name: Linux runs-on: ubuntu-latest diff --git a/libs/windows/media_kit_libs_windows_video/windows/CMakeLists.txt b/libs/windows/media_kit_libs_windows_video/windows/CMakeLists.txt index 8234d5f39..e572fbe71 100644 --- a/libs/windows/media_kit_libs_windows_video/windows/CMakeLists.txt +++ b/libs/windows/media_kit_libs_windows_video/windows/CMakeLists.txt @@ -64,11 +64,21 @@ function(check_directory_exists_and_not_empty dir result_var) endfunction() # libmpv archive containing the pre-built shared libraries & headers. -set(LIBMPV "mpv-dev-x86_64-20251210-git-ad59ff1.7z") +string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" LIBMPV_TARGET_PROCESSOR) +string(TOLOWER "${CMAKE_GENERATOR_PLATFORM}" LIBMPV_GENERATOR_PLATFORM) + +if(LIBMPV_TARGET_PROCESSOR MATCHES "^(arm64|aarch64)$" OR LIBMPV_GENERATOR_PLATFORM MATCHES "^(arm64|aarch64)$") + set(LIBMPV_TARGET_ARM64 TRUE) + set(LIBMPV "mpv-dev-aarch64-20251210-git-ad59ff1.7z") + set(LIBMPV_SHA256 "8e3746e9d88351dd19be0e0da0c8745a089a3d07d5dd8a84c10de7f47ba88bcd") +else() + set(LIBMPV_TARGET_ARM64 FALSE) + set(LIBMPV "mpv-dev-x86_64-20251210-git-ad59ff1.7z") + set(LIBMPV_SHA256 "53212bb8886d76d041ecd023a29e6213ada6fb5afedb8970610b396435833b99") +endif() -# Download URL & SHA256 hash of the libmpv archive. +# Download URL of the libmpv archive. set(LIBMPV_URL "https://github.com/Predidit/libmpv-win32-video-cmake/releases/download/20251210/${LIBMPV}") -set(LIBMPV_SHA256 "53212bb8886d76d041ecd023a29e6213ada6fb5afedb8970610b396435833b99") # Download location of the libmpv archive. set(LIBMPV_ARCHIVE "${CMAKE_BINARY_DIR}/${LIBMPV}") @@ -87,14 +97,33 @@ if(NOT LIBMPV_SRC_VALID) message(STATUS "Extracting ${LIBMPV}...") make_directory("${LIBMPV_SRC}") add_custom_target("${PROJECT_NAME}_LIBMPV_EXTRACT" ALL) - add_custom_command( - TARGET "${PROJECT_NAME}_LIBMPV_EXTRACT" - COMMAND "${CMAKE_COMMAND}" -E tar xzf "\"${LIBMPV_ARCHIVE}\"" - COMMAND xcopy "\"${LIBMPV_SRC}/include/mpv\"" "\"${LIBMPV_SRC}/mpv\"" /E /H /C /I - COMMAND rmdir "\"${LIBMPV_SRC}/include\"" /S /Q - COMMAND ren "\"${LIBMPV_SRC}/mpv\"" "\"include\"" - WORKING_DIRECTORY "${LIBMPV_SRC}" - ) + if(LIBMPV_TARGET_ARM64) + # CMake's built-in extractor cannot unpack the current aarch64 .7z asset + # on Windows ARM64 ("Unexpected codec ID: a"), so use 7-Zip for this archive. + find_program(LIBMPV_7Z_EXECUTABLE NAMES 7z 7za 7zr) + + if(NOT LIBMPV_7Z_EXECUTABLE) + message(FATAL_ERROR "7z is required to extract ${LIBMPV}.") + endif() + + add_custom_command( + TARGET "${PROJECT_NAME}_LIBMPV_EXTRACT" + COMMAND "${LIBMPV_7Z_EXECUTABLE}" x "${LIBMPV_ARCHIVE}" -y + COMMAND xcopy "\"${LIBMPV_SRC}/include/mpv\"" "\"${LIBMPV_SRC}/mpv\"" /E /H /C /I + COMMAND rmdir "\"${LIBMPV_SRC}/include\"" /S /Q + COMMAND ren "\"${LIBMPV_SRC}/mpv\"" "\"include\"" + WORKING_DIRECTORY "${LIBMPV_SRC}" + ) + else() + add_custom_command( + TARGET "${PROJECT_NAME}_LIBMPV_EXTRACT" + COMMAND "${CMAKE_COMMAND}" -E tar xzf "\"${LIBMPV_ARCHIVE}\"" + COMMAND xcopy "\"${LIBMPV_SRC}/include/mpv\"" "\"${LIBMPV_SRC}/mpv\"" /E /H /C /I + COMMAND rmdir "\"${LIBMPV_SRC}/include\"" /S /Q + COMMAND ren "\"${LIBMPV_SRC}/mpv\"" "\"include\"" + WORKING_DIRECTORY "${LIBMPV_SRC}" + ) + endif() endif() # ------------------------------------------------------------------------------ From d0eacdbb79344905aca14d35f092e4b9098fd55b Mon Sep 17 00:00:00 2001 From: NihilDigit Date: Wed, 24 Jun 2026 00:09:33 +0800 Subject: [PATCH 2/2] fix(windows): use arm64 libmpv zip asset --- .../windows/CMakeLists.txt | 47 +++++-------------- 1 file changed, 13 insertions(+), 34 deletions(-) diff --git a/libs/windows/media_kit_libs_windows_video/windows/CMakeLists.txt b/libs/windows/media_kit_libs_windows_video/windows/CMakeLists.txt index e572fbe71..3686124c9 100644 --- a/libs/windows/media_kit_libs_windows_video/windows/CMakeLists.txt +++ b/libs/windows/media_kit_libs_windows_video/windows/CMakeLists.txt @@ -68,17 +68,15 @@ string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" LIBMPV_TARGET_PROCESSOR) string(TOLOWER "${CMAKE_GENERATOR_PLATFORM}" LIBMPV_GENERATOR_PLATFORM) if(LIBMPV_TARGET_PROCESSOR MATCHES "^(arm64|aarch64)$" OR LIBMPV_GENERATOR_PLATFORM MATCHES "^(arm64|aarch64)$") - set(LIBMPV_TARGET_ARM64 TRUE) - set(LIBMPV "mpv-dev-aarch64-20251210-git-ad59ff1.7z") - set(LIBMPV_SHA256 "8e3746e9d88351dd19be0e0da0c8745a089a3d07d5dd8a84c10de7f47ba88bcd") + set(LIBMPV "mpv-dev-aarch64-20260623-git-ad59ff1.zip") + set(LIBMPV_SHA256 "381711758315b81d17df24fbb9dc4333b33b840c14fd674e264fb3306d21b7b0") else() - set(LIBMPV_TARGET_ARM64 FALSE) - set(LIBMPV "mpv-dev-x86_64-20251210-git-ad59ff1.7z") - set(LIBMPV_SHA256 "53212bb8886d76d041ecd023a29e6213ada6fb5afedb8970610b396435833b99") + set(LIBMPV "mpv-dev-x86_64-20260623-git-ad59ff1.7z") + set(LIBMPV_SHA256 "159d7379898e2e2490ab3e0dca233daa5b7389fcd32d4cb8c420399f44284399") endif() # Download URL of the libmpv archive. -set(LIBMPV_URL "https://github.com/Predidit/libmpv-win32-video-cmake/releases/download/20251210/${LIBMPV}") +set(LIBMPV_URL "https://github.com/Predidit/libmpv-win32-video-cmake/releases/download/20260623/${LIBMPV}") # Download location of the libmpv archive. set(LIBMPV_ARCHIVE "${CMAKE_BINARY_DIR}/${LIBMPV}") @@ -97,33 +95,14 @@ if(NOT LIBMPV_SRC_VALID) message(STATUS "Extracting ${LIBMPV}...") make_directory("${LIBMPV_SRC}") add_custom_target("${PROJECT_NAME}_LIBMPV_EXTRACT" ALL) - if(LIBMPV_TARGET_ARM64) - # CMake's built-in extractor cannot unpack the current aarch64 .7z asset - # on Windows ARM64 ("Unexpected codec ID: a"), so use 7-Zip for this archive. - find_program(LIBMPV_7Z_EXECUTABLE NAMES 7z 7za 7zr) - - if(NOT LIBMPV_7Z_EXECUTABLE) - message(FATAL_ERROR "7z is required to extract ${LIBMPV}.") - endif() - - add_custom_command( - TARGET "${PROJECT_NAME}_LIBMPV_EXTRACT" - COMMAND "${LIBMPV_7Z_EXECUTABLE}" x "${LIBMPV_ARCHIVE}" -y - COMMAND xcopy "\"${LIBMPV_SRC}/include/mpv\"" "\"${LIBMPV_SRC}/mpv\"" /E /H /C /I - COMMAND rmdir "\"${LIBMPV_SRC}/include\"" /S /Q - COMMAND ren "\"${LIBMPV_SRC}/mpv\"" "\"include\"" - WORKING_DIRECTORY "${LIBMPV_SRC}" - ) - else() - add_custom_command( - TARGET "${PROJECT_NAME}_LIBMPV_EXTRACT" - COMMAND "${CMAKE_COMMAND}" -E tar xzf "\"${LIBMPV_ARCHIVE}\"" - COMMAND xcopy "\"${LIBMPV_SRC}/include/mpv\"" "\"${LIBMPV_SRC}/mpv\"" /E /H /C /I - COMMAND rmdir "\"${LIBMPV_SRC}/include\"" /S /Q - COMMAND ren "\"${LIBMPV_SRC}/mpv\"" "\"include\"" - WORKING_DIRECTORY "${LIBMPV_SRC}" - ) - endif() + add_custom_command( + TARGET "${PROJECT_NAME}_LIBMPV_EXTRACT" + COMMAND "${CMAKE_COMMAND}" -E tar xzf "\"${LIBMPV_ARCHIVE}\"" + COMMAND xcopy "\"${LIBMPV_SRC}/include/mpv\"" "\"${LIBMPV_SRC}/mpv\"" /E /H /C /I + COMMAND rmdir "\"${LIBMPV_SRC}/include\"" /S /Q + COMMAND ren "\"${LIBMPV_SRC}/mpv\"" "\"include\"" + WORKING_DIRECTORY "${LIBMPV_SRC}" + ) endif() # ------------------------------------------------------------------------------