From 07c4f26a8eadf47858ddc6bb3e43351d3416af0b Mon Sep 17 00:00:00 2001 From: arch1t3cht Date: Sat, 14 Oct 2023 00:51:32 +0200 Subject: [PATCH 1/3] ci: Install nasm for Ubuntu AppImage build Ubuntu doesn't have ffmpeg 6.0 yet, but we want to bundle ffms2 master since the distro version still has seeking issues. Compiling the ffmpeg wrap needs nasm. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f0ad7bdf92..1ec541296a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -118,7 +118,7 @@ jobs: if: startsWith(matrix.config.os, 'ubuntu-') run: | sudo apt-get update - sudo apt-get install ninja-build build-essential libx11-dev libwxgtk3.0-gtk3-dev libfreetype6-dev pkg-config libfontconfig1-dev libass-dev libasound2-dev libffms2-dev intltool libboost-all-dev libhunspell-dev libuchardet-dev libpulse-dev libopenal-dev libjansson-dev + sudo apt-get install ninja-build build-essential libx11-dev libwxgtk3.0-gtk3-dev libfreetype6-dev pkg-config libfontconfig1-dev libass-dev libasound2-dev libffms2-dev intltool libboost-all-dev libhunspell-dev libuchardet-dev libpulse-dev libopenal-dev libjansson-dev nasm - name: Configure run: meson setup build ${{ matrix.config.args }} -Dbuildtype=${{ matrix.config.buildtype }} From 39fc8347c51c9857c80a982bb0cd0a2ab5d38555 Mon Sep 17 00:00:00 2001 From: arch1t3cht Date: Sun, 15 Oct 2023 15:45:53 +0200 Subject: [PATCH 2/3] Further fixes to audio/video provider selection - Fix selection not aborting when the preferred provider returns null - Fix the default video provider being "ffmpegsource" (lowercase) instead of "FFmpegSource", which would trip up provider selection - More generally, make sure the preferred video provider actually exists and fall back to the default (FFmpegSource) if not. Fixes arch1t3cht/Aegisub#23 . Fixes arch1t3cht/Aegisub#61 . Fixes arch1t3cht/Aegisub#83 . --- src/audio_provider_factory.cpp | 16 +++++++++++++--- src/libresrc/default_config.json | 4 ++-- src/libresrc/osx/default_config.json | 4 ++-- src/video_provider_manager.cpp | 14 +++++++++++--- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/audio_provider_factory.cpp b/src/audio_provider_factory.cpp index d5904a532d..a6c088d9a3 100644 --- a/src/audio_provider_factory.cpp +++ b/src/audio_provider_factory.cpp @@ -70,6 +70,11 @@ std::unique_ptr SelectAudioProvider(fs::path const& filename Path const& path_helper, BackgroundRunner *br) { auto preferred = OPT_GET("Audio/Provider")->GetString(); + + if (!std::any_of(std::begin(providers), std::end(providers), [&](factory provider) { return provider.name == preferred; })) { + preferred = OPT_GET("Audio/Provider")->GetDefaultString(); + } + auto sorted = GetSorted(boost::make_iterator_range(std::begin(providers), std::end(providers)), preferred); RearrangeWithPriority(sorted, filename); @@ -79,14 +84,19 @@ std::unique_ptr SelectAudioProvider(fs::path const& filename auto tried_providers = sorted.begin(); + LOG_D("provider") << "Preferred Provider: " << preferred; for (; tried_providers < sorted.end(); tried_providers++) { auto factory = *tried_providers; std::string err; try { + LOG_D("provider") << "Trying " << factory->name; auto provider = factory->create(filename, br); - if (!provider) continue; - LOG_I("audio_provider") << "Using audio provider: " << factory->name; - return provider; + if (!provider) { + err = "Failed to create provider."; // Some generic error message here + } else { + LOG_I("audio_provider") << "Using audio provider: " << factory->name; + return provider; + } } catch (AudioDataNotFound const& ex) { found_file = true; diff --git a/src/libresrc/default_config.json b/src/libresrc/default_config.json index bafd52eb69..0eb8fb6b19 100644 --- a/src/libresrc/default_config.json +++ b/src/libresrc/default_config.json @@ -66,7 +66,7 @@ "Next Line on Commit" : true, "Player" : "", "Plays When Stepping Video" : false, - "Provider" : "ffmpegsource", + "Provider" : "FFmpegSource", "Renderer" : { "Spectrum" : { "Cutoff" : 0, @@ -660,7 +660,7 @@ "Last Script Resolution Mismatch Choice" : 2, "Open Audio" : true, "Overscan Mask" : false, - "Provider" : "ffmpegsource", + "Provider" : "FFmpegSource", "Script Resolution Mismatch" : 1, "Slider" : { "Fast Jump Step" : 10, diff --git a/src/libresrc/osx/default_config.json b/src/libresrc/osx/default_config.json index bcf3c42d41..faaa0d571a 100644 --- a/src/libresrc/osx/default_config.json +++ b/src/libresrc/osx/default_config.json @@ -66,7 +66,7 @@ "Next Line on Commit" : true, "Player" : "", "Plays When Stepping Video" : false, - "Provider" : "ffmpegsource", + "Provider" : "FFmpegSource", "Renderer" : { "Spectrum" : { "Cutoff" : 0, @@ -660,7 +660,7 @@ "Last Script Resolution Mismatch Choice" : 2, "Open Audio" : true, "Overscan Mask" : false, - "Provider" : "ffmpegsource", + "Provider" : "FFmpegSource", "Script Resolution Mismatch" : 1, "Slider" : { "Fast Jump Step" : 10, diff --git a/src/video_provider_manager.cpp b/src/video_provider_manager.cpp index cf3c6f1b29..7f7ad117e5 100644 --- a/src/video_provider_manager.cpp +++ b/src/video_provider_manager.cpp @@ -69,6 +69,11 @@ std::vector VideoProviderFactory::GetClasses() { std::unique_ptr VideoProviderFactory::GetProvider(agi::fs::path const& filename, std::string const& colormatrix, agi::BackgroundRunner *br) { auto preferred = OPT_GET("Video/Provider")->GetString(); + + if (!std::any_of(std::begin(providers), std::end(providers), [&](factory provider) { return provider.name == preferred; })) { + preferred = OPT_GET("Audio/Provider")->GetDefaultString(); + } + auto sorted = GetSorted(boost::make_iterator_range(std::begin(providers), std::end(providers)), preferred); RearrangeWithPriority(sorted, filename); @@ -89,9 +94,12 @@ std::unique_ptr VideoProviderFactory::GetProvider(agi::fs::path c std::string err; try { auto provider = factory->create(filename, colormatrix, br); - if (!provider) continue; - LOG_I("manager/video/provider") << factory->name << ": opened " << filename; - return finalize_provider(std::move(provider)); + if (!provider) { + err = "Failed to create provider."; // Some generic error message here + } else { + LOG_I("manager/video/provider") << factory->name << ": opened " << filename; + return finalize_provider(std::move(provider)); + } } catch (VideoNotSupported const& ex) { found = true; From 7eb1304a55398d771079a7ca7bdb0e2b2cbfef24 Mon Sep 17 00:00:00 2001 From: arch1t3cht Date: Sun, 15 Oct 2023 17:11:18 +0200 Subject: [PATCH 3/3] osx: Sign executable and libraries after bundling --- tools/osx-bundle.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/osx-bundle.sh b/tools/osx-bundle.sh index 29e0fbfd97..2fe8dd9ad6 100755 --- a/tools/osx-bundle.sh +++ b/tools/osx-bundle.sh @@ -105,5 +105,14 @@ echo echo "---- Fixing libraries ----" sudo python3 "${SRC_DIR}/tools/osx-fix-libs.py" "${PKG_DIR}/Contents/MacOS/aegisub" || exit $? +echo +echo "---- Resigning ----" +# After bundling and rewriting dylib paths we need to resign everything. +if codesign -d "${PKG_DIR}/Contents/MacoOS/aegisub"; then + for fname in "${PKG_DIR}/Contents/MacOS/"*; do + codesign -s ${AEGISUB_BUNDLE_SIGNATURE:--} -vf "${fname}" + done +fi + echo echo "Done creating \"${PKG_DIR}\""