diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 85c1e45e6..400628e28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -143,7 +143,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 }} diff --git a/src/audio_provider_factory.cpp b/src/audio_provider_factory.cpp index d5904a532..3af069c3b 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); @@ -84,9 +89,12 @@ std::unique_ptr SelectAudioProvider(fs::path const& filename std::string err; try { 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/avisynth_wrap.cpp b/src/avisynth_wrap.cpp index 1dc5d71b2..3473efd94 100644 --- a/src/avisynth_wrap.cpp +++ b/src/avisynth_wrap.cpp @@ -53,6 +53,7 @@ // Allocate storage for and initialise static members namespace { int avs_refcount = 0; + bool failed = false; #ifdef _WIN32 HINSTANCE hLib = nullptr; #else @@ -66,8 +67,8 @@ const AVS_Linkage *AVS_linkage = nullptr; typedef IScriptEnvironment* __stdcall FUNC(int); -AviSynthWrapper::AviSynthWrapper() { - if (!avs_refcount){ +AviSynthWrapper::AviSynthWrapper() try { + if (!avs_refcount++) { #ifdef _WIN32 #define CONCATENATE(x, y) x ## y #define _Lstr(x) CONCATENATE(L, x) @@ -94,8 +95,6 @@ AviSynthWrapper::AviSynthWrapper() { if (!env) throw AvisynthError("Failed to create a new avisynth script environment. Avisynth is too old?"); - avs_refcount++; - AVS_linkage = env->GetAVSLinkage(); // Set memory limit @@ -103,6 +102,9 @@ AviSynthWrapper::AviSynthWrapper() { if (memoryMax) env->SetMemoryMax(memoryMax); } +} catch (AvisynthError const&) { + avs_refcount--; + throw; } AviSynthWrapper::~AviSynthWrapper() { diff --git a/src/libresrc/default_config.json b/src/libresrc/default_config.json index 9270075c4..4c0710e21 100644 --- a/src/libresrc/default_config.json +++ b/src/libresrc/default_config.json @@ -67,7 +67,7 @@ "Next Line on Commit" : true, "Player" : "", "Plays When Stepping Video" : false, - "Provider" : "ffmpegsource", + "Provider" : "FFmpegSource", "Renderer" : { "Spectrum" : { "Cutoff" : 0, @@ -661,7 +661,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 a9a7af568..665ef8065 100644 --- a/src/libresrc/osx/default_config.json +++ b/src/libresrc/osx/default_config.json @@ -67,7 +67,7 @@ "Next Line on Commit" : true, "Player" : "", "Plays When Stepping Video" : false, - "Provider" : "ffmpegsource", + "Provider" : "FFmpegSource", "Renderer" : { "Spectrum" : { "Cutoff" : 0, @@ -661,7 +661,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 cf3c6f1b2..7f7ad117e 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; diff --git a/tools/osx-bundle.sh b/tools/osx-bundle.sh index 29e0fbfd9..813151a55 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/MacOS/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}\""