Date: Sunday, July 17, 2022 @ 13:33:43 Author: arojas Revision: 1254311
archrelease: copy trunk to community-x86_64 Added: aegisub/repos/community-x86_64/PKGBUILD (from rev 1254310, aegisub/trunk/PKGBUILD) aegisub/repos/community-x86_64/boost-1.68.patch (from rev 1254310, aegisub/trunk/boost-1.68.patch) aegisub/repos/community-x86_64/fix-ffms2-compat-2.patch (from rev 1254310, aegisub/trunk/fix-ffms2-compat-2.patch) aegisub/repos/community-x86_64/fix-ffms2-compat-3.patch (from rev 1254310, aegisub/trunk/fix-ffms2-compat-3.patch) aegisub/repos/community-x86_64/fix-ffms2-compat.patch (from rev 1254310, aegisub/trunk/fix-ffms2-compat.patch) aegisub/repos/community-x86_64/icu59.patch (from rev 1254310, aegisub/trunk/icu59.patch) aegisub/repos/community-x86_64/keys/ aegisub/repos/community-x86_64/make-4.3.patch (from rev 1254310, aegisub/trunk/make-4.3.patch) Deleted: aegisub/repos/community-x86_64/PKGBUILD aegisub/repos/community-x86_64/boost-1.68.patch aegisub/repos/community-x86_64/fix-ffms2-compat-2.patch aegisub/repos/community-x86_64/fix-ffms2-compat-3.patch aegisub/repos/community-x86_64/fix-ffms2-compat.patch aegisub/repos/community-x86_64/icu59.patch aegisub/repos/community-x86_64/make-4.3.patch --------------------------+ PKGBUILD | 192 ++++++++-------- boost-1.68.patch | 68 ++--- fix-ffms2-compat-2.patch | 46 ++-- fix-ffms2-compat-3.patch | 212 +++++++++--------- fix-ffms2-compat.patch | 514 ++++++++++++++++++++++----------------------- icu59.patch | 22 - make-4.3.patch | 46 ++-- 7 files changed, 550 insertions(+), 550 deletions(-) Deleted: PKGBUILD =================================================================== --- PKGBUILD 2022-07-17 13:33:24 UTC (rev 1254310) +++ PKGBUILD 2022-07-17 13:33:43 UTC (rev 1254311) @@ -1,96 +0,0 @@ -# Maintainer: Maxime Gauduin <aluc...@archlinux.org> -# Contributor: kozec <ko...@kozec.com> -# Contributor: Limao Luo <luolimao+...@gmail.com> - -pkgname=aegisub -pkgver=3.2.2 -pkgrel=51 -pkgdesc='A general-purpose subtitle editor with ASS/SSA support' -arch=(x86_64) -url=http://www.aegisub.org -license=( - GPL - BSD -) -depends=( - alsa-lib - boost-libs - fftw - fontconfig - hunspell - icu - libass.so - libffms2.so - libgl - libpulse - wxwidgets-gtk3 - zlib -) -makedepends=( - boost - git - intltool - mesa -) -source=( - git+https://github.com/Aegisub/Aegisub.git?signed#tag=v${pkgver} - boost-1.68.patch - icu59.patch - make-4.3.patch - fix-ffms2-compat.patch - fix-ffms2-compat-2.patch - fix-ffms2-compat-3.patch -) -validpgpkeys=(6DD9508BCB1CE31AF295FF9B6A889F50A8B00C08) # Thomas Goyne <plorkye...@aegisub.org> -sha256sums=('SKIP' - 'aa1689a2204f6a617000f3380b8dea9c3dca4f500d0643e05172750c49cc5a21' - '29d8cc91e73602d5e3c8517c977dcc77cb84af7d42787f510d487d0a6abf7fa6' - '1e350a04c152075b369176f8e0b7f691a792de0d5091568e2388e6bd677180e1' - '1361e782a19d1e6cdd0dabe0a5e7dedd3d750ea5c18884eee807c70637811fad' - 'c5753b989896d1f29722fbf748a2177ffd2d73538020bedaadbf3bca73a3c6d7' - '301ee822a01bad9004c8cab4e96d8bf3fe378a31956c0bd784e0bc245de57c5c') - -prepare() { - cd Aegisub - - patch -Np1 -i ../boost-1.68.patch - sed 's|gil/gil_all.hpp|gil.hpp|g' -i src/*.cpp # boost 1.69 - sed 's/$(LIBS_BOOST) $(LIBS_ICU)/$(LIBS_BOOST) $(LIBS_ICU) -pthread/' -i tools/Makefile # missing link flag - sed 's/^Exec=/Exec=env GDK_BACKEND=x11 /' -i packages/desktop/aegisub.desktop.template.in # fix running under wayland - sed -i 's/-Wno-c++11-narrowing/-Wno-narrowing/' configure.ac - patch -Np1 -i ../icu59.patch - patch -Np1 -i ../make-4.3.patch - patch -p1 -i ../fix-ffms2-compat.patch - patch -p1 -i ../fix-ffms2-compat-2.patch - patch -p1 -i ../fix-ffms2-compat-3.patch - - # Not sure when this broke and resulted in: - # > configure.ac: error: required file 'config.rpath' not found - cp /usr/share/gettext/config.rpath . - - ./autogen.sh -} - -build() { - cd Aegisub - - # http://site.icu-project.org/download/61#TOC-Migration-Issues - CPPFLAGS+=' -DU_USING_ICU_NAMESPACE=1' - - ./configure \ - --prefix=/usr \ - --without-{portaudio,openal,oss} \ - --disable-update-checker - make -} - -package() { - cd Aegisub - - make DESTDIR="${pkgdir}" install - - install -dm 755 "${pkgdir}"/usr/share/licenses/aegisub - install -m 644 LICENCE "${pkgdir}"/usr/share/licenses/aegisub/LICENSE -} - -# vim: ts=2 sw=2 et: Copied: aegisub/repos/community-x86_64/PKGBUILD (from rev 1254310, aegisub/trunk/PKGBUILD) =================================================================== --- PKGBUILD (rev 0) +++ PKGBUILD 2022-07-17 13:33:43 UTC (rev 1254311) @@ -0,0 +1,96 @@ +# Maintainer: Maxime Gauduin <aluc...@archlinux.org> +# Contributor: kozec <ko...@kozec.com> +# Contributor: Limao Luo <luolimao+...@gmail.com> + +pkgname=aegisub +pkgver=3.2.2 +pkgrel=52 +pkgdesc='A general-purpose subtitle editor with ASS/SSA support' +arch=(x86_64) +url=http://www.aegisub.org +license=( + GPL + BSD +) +depends=( + alsa-lib + boost-libs + fftw + fontconfig + hunspell + icu + libass.so + libffms2.so + libgl + libpulse + wxwidgets-gtk3 + zlib +) +makedepends=( + boost + git + intltool + mesa +) +source=( + git+https://github.com/Aegisub/Aegisub.git?signed#tag=v${pkgver} + boost-1.68.patch + icu59.patch + make-4.3.patch + fix-ffms2-compat.patch + fix-ffms2-compat-2.patch + fix-ffms2-compat-3.patch +) +validpgpkeys=(6DD9508BCB1CE31AF295FF9B6A889F50A8B00C08) # Thomas Goyne <plorkye...@aegisub.org> +sha256sums=('SKIP' + 'aa1689a2204f6a617000f3380b8dea9c3dca4f500d0643e05172750c49cc5a21' + '29d8cc91e73602d5e3c8517c977dcc77cb84af7d42787f510d487d0a6abf7fa6' + '1e350a04c152075b369176f8e0b7f691a792de0d5091568e2388e6bd677180e1' + '1361e782a19d1e6cdd0dabe0a5e7dedd3d750ea5c18884eee807c70637811fad' + 'c5753b989896d1f29722fbf748a2177ffd2d73538020bedaadbf3bca73a3c6d7' + '301ee822a01bad9004c8cab4e96d8bf3fe378a31956c0bd784e0bc245de57c5c') + +prepare() { + cd Aegisub + + patch -Np1 -i ../boost-1.68.patch + sed 's|gil/gil_all.hpp|gil.hpp|g' -i src/*.cpp # boost 1.69 + sed 's/$(LIBS_BOOST) $(LIBS_ICU)/$(LIBS_BOOST) $(LIBS_ICU) -pthread/' -i tools/Makefile # missing link flag + sed 's/^Exec=/Exec=env GDK_BACKEND=x11 /' -i packages/desktop/aegisub.desktop.template.in # fix running under wayland + sed -i 's/-Wno-c++11-narrowing/-Wno-narrowing/' configure.ac + patch -Np1 -i ../icu59.patch + patch -Np1 -i ../make-4.3.patch + patch -p1 -i ../fix-ffms2-compat.patch + patch -p1 -i ../fix-ffms2-compat-2.patch + patch -p1 -i ../fix-ffms2-compat-3.patch + + # Not sure when this broke and resulted in: + # > configure.ac: error: required file 'config.rpath' not found + cp /usr/share/gettext/config.rpath . + + ./autogen.sh +} + +build() { + cd Aegisub + + # http://site.icu-project.org/download/61#TOC-Migration-Issues + CPPFLAGS+=' -DU_USING_ICU_NAMESPACE=1' + CXXFLAGS+=' -DNDEBUG' \ + ./configure \ + --prefix=/usr \ + --without-{portaudio,openal,oss} \ + --disable-update-checker + make +} + +package() { + cd Aegisub + + make DESTDIR="${pkgdir}" install + + install -dm 755 "${pkgdir}"/usr/share/licenses/aegisub + install -m 644 LICENCE "${pkgdir}"/usr/share/licenses/aegisub/LICENSE +} + +# vim: ts=2 sw=2 et: Deleted: boost-1.68.patch =================================================================== --- boost-1.68.patch 2022-07-17 13:33:24 UTC (rev 1254310) +++ boost-1.68.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -1,34 +0,0 @@ -From d8336d2fed73c72d1227b343d6acfb991bc1651b Mon Sep 17 00:00:00 2001 -From: Jan Beich <jbe...@freebsd.org> -Date: Mon, 9 Jul 2018 20:15:29 +0000 -Subject: [PATCH] Keep using std::distance after Boost 1.68 - -src/search_replace_engine.cpp:256:14: error: call to - 'distance' is ambiguous - count += distance( - ^~~~~~~~ -/usr/include/c++/v1/iterator:511:1: note: candidate function [with _InputIter = - boost::u32regex_iterator<std::__1::__wrap_iter<const char *> >] -distance(_InputIter __first, _InputIter __last) -^ -/usr/local/include/boost/iterator/distance.hpp:49:9: note: candidate function [with SinglePassIterator = - boost::u32regex_iterator<std::__1::__wrap_iter<const char *> >] - distance(SinglePassIterator first, SinglePassIterator last) - ^ ---- - src/search_replace_engine.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/search_replace_engine.cpp b/src/search_replace_engine.cpp -index 594c21e5e..14c71680d 100644 ---- a/src/search_replace_engine.cpp -+++ b/src/search_replace_engine.cpp -@@ -253,7 +253,7 @@ bool SearchReplaceEngine::ReplaceAll() { - if (MatchState ms = matches(&diag, 0)) { - auto& diag_field = diag.*get_dialogue_field(settings.field); - std::string const& text = diag_field.get(); -- count += distance( -+ count += std::distance( - boost::u32regex_iterator<std::string::const_iterator>(begin(text), end(text), *ms.re), - boost::u32regex_iterator<std::string::const_iterator>()); - diag_field = u32regex_replace(text, *ms.re, settings.replace_with); Copied: aegisub/repos/community-x86_64/boost-1.68.patch (from rev 1254310, aegisub/trunk/boost-1.68.patch) =================================================================== --- boost-1.68.patch (rev 0) +++ boost-1.68.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -0,0 +1,34 @@ +From d8336d2fed73c72d1227b343d6acfb991bc1651b Mon Sep 17 00:00:00 2001 +From: Jan Beich <jbe...@freebsd.org> +Date: Mon, 9 Jul 2018 20:15:29 +0000 +Subject: [PATCH] Keep using std::distance after Boost 1.68 + +src/search_replace_engine.cpp:256:14: error: call to + 'distance' is ambiguous + count += distance( + ^~~~~~~~ +/usr/include/c++/v1/iterator:511:1: note: candidate function [with _InputIter = + boost::u32regex_iterator<std::__1::__wrap_iter<const char *> >] +distance(_InputIter __first, _InputIter __last) +^ +/usr/local/include/boost/iterator/distance.hpp:49:9: note: candidate function [with SinglePassIterator = + boost::u32regex_iterator<std::__1::__wrap_iter<const char *> >] + distance(SinglePassIterator first, SinglePassIterator last) + ^ +--- + src/search_replace_engine.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/search_replace_engine.cpp b/src/search_replace_engine.cpp +index 594c21e5e..14c71680d 100644 +--- a/src/search_replace_engine.cpp ++++ b/src/search_replace_engine.cpp +@@ -253,7 +253,7 @@ bool SearchReplaceEngine::ReplaceAll() { + if (MatchState ms = matches(&diag, 0)) { + auto& diag_field = diag.*get_dialogue_field(settings.field); + std::string const& text = diag_field.get(); +- count += distance( ++ count += std::distance( + boost::u32regex_iterator<std::string::const_iterator>(begin(text), end(text), *ms.re), + boost::u32regex_iterator<std::string::const_iterator>()); + diag_field = u32regex_replace(text, *ms.re, settings.replace_with); Deleted: fix-ffms2-compat-2.patch =================================================================== --- fix-ffms2-compat-2.patch 2022-07-17 13:33:24 UTC (rev 1254310) +++ fix-ffms2-compat-2.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -1,23 +0,0 @@ -From 7a6da26be6a830f4e1255091952cc0a1326a4520 Mon Sep 17 00:00:00 2001 -From: Thomas Goyne <plorkye...@aegisub.org> -Date: Fri, 8 Apr 2016 12:14:28 -0700 -Subject: [PATCH] Fix compilation on X11-using platforms - ---- - src/ffmpegsource_common.h | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/ffmpegsource_common.h b/src/ffmpegsource_common.h -index 5f6df7cfa..383d5baa2 100644 ---- a/src/ffmpegsource_common.h -+++ b/src/ffmpegsource_common.h -@@ -51,6 +51,9 @@ class FFmpegSourceProvider { - public: - FFmpegSourceProvider(agi::BackgroundRunner *br); - -+ // X11 is wonderful -+#undef None -+ - enum class TrackSelection : int { - None = -1, - All = -2 Copied: aegisub/repos/community-x86_64/fix-ffms2-compat-2.patch (from rev 1254310, aegisub/trunk/fix-ffms2-compat-2.patch) =================================================================== --- fix-ffms2-compat-2.patch (rev 0) +++ fix-ffms2-compat-2.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -0,0 +1,23 @@ +From 7a6da26be6a830f4e1255091952cc0a1326a4520 Mon Sep 17 00:00:00 2001 +From: Thomas Goyne <plorkye...@aegisub.org> +Date: Fri, 8 Apr 2016 12:14:28 -0700 +Subject: [PATCH] Fix compilation on X11-using platforms + +--- + src/ffmpegsource_common.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/ffmpegsource_common.h b/src/ffmpegsource_common.h +index 5f6df7cfa..383d5baa2 100644 +--- a/src/ffmpegsource_common.h ++++ b/src/ffmpegsource_common.h +@@ -51,6 +51,9 @@ class FFmpegSourceProvider { + public: + FFmpegSourceProvider(agi::BackgroundRunner *br); + ++ // X11 is wonderful ++#undef None ++ + enum class TrackSelection : int { + None = -1, + All = -2 Deleted: fix-ffms2-compat-3.patch =================================================================== --- fix-ffms2-compat-3.patch 2022-07-17 13:33:24 UTC (rev 1254310) +++ fix-ffms2-compat-3.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -1,106 +0,0 @@ -commit 89c4e8d34ab77c3322f097b91fd9de22cbea7a37 -Author: Thomas Goyne <plorkye...@aegisub.org> -Date: Wed Nov 21 16:41:05 2018 -0800 - - Update ffmpeg and ffms2 - -diff --git a/src/video_provider_ffmpegsource.cpp b/src/video_provider_ffmpegsource.cpp -index 8bd68fbbf..f4ed6a2f2 100644 ---- a/src/video_provider_ffmpegsource.cpp -+++ b/src/video_provider_ffmpegsource.cpp -@@ -44,6 +44,23 @@ - #include <libaegisub/make_unique.h> - - namespace { -+typedef enum AGI_ColorSpaces { -+ AGI_CS_RGB = 0, -+ AGI_CS_BT709 = 1, -+ AGI_CS_UNSPECIFIED = 2, -+ AGI_CS_FCC = 4, -+ AGI_CS_BT470BG = 5, -+ AGI_CS_SMPTE170M = 6, -+ AGI_CS_SMPTE240M = 7, -+ AGI_CS_YCOCG = 8, -+ AGI_CS_BT2020_NCL = 9, -+ AGI_CS_BT2020_CL = 10, -+ AGI_CS_SMPTE2085 = 11, -+ AGI_CS_CHROMATICITY_DERIVED_NCL = 12, -+ AGI_CS_CHROMATICITY_DERIVED_CL = 13, -+ AGI_CS_ICTCP = 14 -+} AGI_ColorSpaces; -+ - /// @class FFmpegSourceVideoProvider - /// @brief Implements video loading through the FFMS library. - class FFmpegSourceVideoProvider final : public VideoProvider, FFmpegSourceProvider { -@@ -78,7 +95,7 @@ public: - if (matrix == RealColorSpace) - FFMS_SetInputFormatV(VideoSource, CS, CR, FFMS_GetPixFmt(""), nullptr); - else if (matrix == "TV.601") -- FFMS_SetInputFormatV(VideoSource, FFMS_CS_BT470BG, CR, FFMS_GetPixFmt(""), nullptr); -+ FFMS_SetInputFormatV(VideoSource, AGI_CS_BT470BG, CR, FFMS_GetPixFmt(""), nullptr); - else - return; - ColorSpace = matrix; -@@ -103,16 +120,16 @@ std::string colormatrix_description(int cs, int cr) { - std::string str = cr == FFMS_CR_JPEG ? "PC" : "TV"; - - switch (cs) { -- case FFMS_CS_RGB: -+ case AGI_CS_RGB: - return "None"; -- case FFMS_CS_BT709: -+ case AGI_CS_BT709: - return str + ".709"; -- case FFMS_CS_FCC: -+ case AGI_CS_FCC: - return str + ".FCC"; -- case FFMS_CS_BT470BG: -- case FFMS_CS_SMPTE170M: -+ case AGI_CS_BT470BG: -+ case AGI_CS_SMPTE170M: - return str + ".601"; -- case FFMS_CS_SMPTE240M: -+ case AGI_CS_SMPTE240M: - return str + ".240M"; - default: - throw VideoOpenError("Unknown video color space"); -@@ -206,8 +223,10 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st - - // set thread count - int Threads = OPT_GET("Provider/Video/FFmpegSource/Decoding Threads")->GetInt(); -+#if FFMS_VERSION < ((2 << 24) | (30 << 16) | (0 << 8) | 0) - if (FFMS_GetVersion() < ((2 << 24) | (17 << 16) | (2 << 8) | 1) && FFMS_GetSourceType(Index) == FFMS_SOURCE_LAVF) - Threads = 1; -+#endif - - // set seekmode - // TODO: give this its own option? -@@ -235,18 +254,22 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st - else - DAR = double(Width) / Height; - -- CS = TempFrame->ColorSpace; -+ int VideoCS = CS = TempFrame->ColorSpace; - CR = TempFrame->ColorRange; - -- if (CS == FFMS_CS_UNSPECIFIED) -- CS = Width > 1024 || Height >= 600 ? FFMS_CS_BT709 : FFMS_CS_BT470BG; -+ if (CS == AGI_CS_UNSPECIFIED) -+ CS = Width > 1024 || Height >= 600 ? AGI_CS_BT709 : AGI_CS_BT470BG; - RealColorSpace = ColorSpace = colormatrix_description(CS, CR); - - #if FFMS_VERSION >= ((2 << 24) | (17 << 16) | (1 << 8) | 0) -- if (CS != FFMS_CS_RGB && CS != FFMS_CS_BT470BG && ColorSpace != colormatrix && (colormatrix == "TV.601" || OPT_GET("Video/Force BT.601")->GetBool())) { -- if (FFMS_SetInputFormatV(VideoSource, FFMS_CS_BT470BG, CR, FFMS_GetPixFmt(""), &ErrInfo)) -+ if (CS != AGI_CS_RGB && CS != AGI_CS_BT470BG && ColorSpace != colormatrix && (colormatrix == "TV.601" || OPT_GET("Video/Force BT.601")->GetBool())) { -+ CS = AGI_CS_BT470BG; -+ ColorSpace = colormatrix_description(AGI_CS_BT470BG, CR); -+ } -+ -+ if (CS != VideoCS) { -+ if (FFMS_SetInputFormatV(VideoSource, CS, CR, FFMS_GetPixFmt(""), &ErrInfo)) - throw VideoOpenError(std::string("Failed to set input format: ") + ErrInfo.Buffer); -- ColorSpace = colormatrix_description(FFMS_CS_BT470BG, CR); - } - #endif - Copied: aegisub/repos/community-x86_64/fix-ffms2-compat-3.patch (from rev 1254310, aegisub/trunk/fix-ffms2-compat-3.patch) =================================================================== --- fix-ffms2-compat-3.patch (rev 0) +++ fix-ffms2-compat-3.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -0,0 +1,106 @@ +commit 89c4e8d34ab77c3322f097b91fd9de22cbea7a37 +Author: Thomas Goyne <plorkye...@aegisub.org> +Date: Wed Nov 21 16:41:05 2018 -0800 + + Update ffmpeg and ffms2 + +diff --git a/src/video_provider_ffmpegsource.cpp b/src/video_provider_ffmpegsource.cpp +index 8bd68fbbf..f4ed6a2f2 100644 +--- a/src/video_provider_ffmpegsource.cpp ++++ b/src/video_provider_ffmpegsource.cpp +@@ -44,6 +44,23 @@ + #include <libaegisub/make_unique.h> + + namespace { ++typedef enum AGI_ColorSpaces { ++ AGI_CS_RGB = 0, ++ AGI_CS_BT709 = 1, ++ AGI_CS_UNSPECIFIED = 2, ++ AGI_CS_FCC = 4, ++ AGI_CS_BT470BG = 5, ++ AGI_CS_SMPTE170M = 6, ++ AGI_CS_SMPTE240M = 7, ++ AGI_CS_YCOCG = 8, ++ AGI_CS_BT2020_NCL = 9, ++ AGI_CS_BT2020_CL = 10, ++ AGI_CS_SMPTE2085 = 11, ++ AGI_CS_CHROMATICITY_DERIVED_NCL = 12, ++ AGI_CS_CHROMATICITY_DERIVED_CL = 13, ++ AGI_CS_ICTCP = 14 ++} AGI_ColorSpaces; ++ + /// @class FFmpegSourceVideoProvider + /// @brief Implements video loading through the FFMS library. + class FFmpegSourceVideoProvider final : public VideoProvider, FFmpegSourceProvider { +@@ -78,7 +95,7 @@ public: + if (matrix == RealColorSpace) + FFMS_SetInputFormatV(VideoSource, CS, CR, FFMS_GetPixFmt(""), nullptr); + else if (matrix == "TV.601") +- FFMS_SetInputFormatV(VideoSource, FFMS_CS_BT470BG, CR, FFMS_GetPixFmt(""), nullptr); ++ FFMS_SetInputFormatV(VideoSource, AGI_CS_BT470BG, CR, FFMS_GetPixFmt(""), nullptr); + else + return; + ColorSpace = matrix; +@@ -103,16 +120,16 @@ std::string colormatrix_description(int cs, int cr) { + std::string str = cr == FFMS_CR_JPEG ? "PC" : "TV"; + + switch (cs) { +- case FFMS_CS_RGB: ++ case AGI_CS_RGB: + return "None"; +- case FFMS_CS_BT709: ++ case AGI_CS_BT709: + return str + ".709"; +- case FFMS_CS_FCC: ++ case AGI_CS_FCC: + return str + ".FCC"; +- case FFMS_CS_BT470BG: +- case FFMS_CS_SMPTE170M: ++ case AGI_CS_BT470BG: ++ case AGI_CS_SMPTE170M: + return str + ".601"; +- case FFMS_CS_SMPTE240M: ++ case AGI_CS_SMPTE240M: + return str + ".240M"; + default: + throw VideoOpenError("Unknown video color space"); +@@ -206,8 +223,10 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st + + // set thread count + int Threads = OPT_GET("Provider/Video/FFmpegSource/Decoding Threads")->GetInt(); ++#if FFMS_VERSION < ((2 << 24) | (30 << 16) | (0 << 8) | 0) + if (FFMS_GetVersion() < ((2 << 24) | (17 << 16) | (2 << 8) | 1) && FFMS_GetSourceType(Index) == FFMS_SOURCE_LAVF) + Threads = 1; ++#endif + + // set seekmode + // TODO: give this its own option? +@@ -235,18 +254,22 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st + else + DAR = double(Width) / Height; + +- CS = TempFrame->ColorSpace; ++ int VideoCS = CS = TempFrame->ColorSpace; + CR = TempFrame->ColorRange; + +- if (CS == FFMS_CS_UNSPECIFIED) +- CS = Width > 1024 || Height >= 600 ? FFMS_CS_BT709 : FFMS_CS_BT470BG; ++ if (CS == AGI_CS_UNSPECIFIED) ++ CS = Width > 1024 || Height >= 600 ? AGI_CS_BT709 : AGI_CS_BT470BG; + RealColorSpace = ColorSpace = colormatrix_description(CS, CR); + + #if FFMS_VERSION >= ((2 << 24) | (17 << 16) | (1 << 8) | 0) +- if (CS != FFMS_CS_RGB && CS != FFMS_CS_BT470BG && ColorSpace != colormatrix && (colormatrix == "TV.601" || OPT_GET("Video/Force BT.601")->GetBool())) { +- if (FFMS_SetInputFormatV(VideoSource, FFMS_CS_BT470BG, CR, FFMS_GetPixFmt(""), &ErrInfo)) ++ if (CS != AGI_CS_RGB && CS != AGI_CS_BT470BG && ColorSpace != colormatrix && (colormatrix == "TV.601" || OPT_GET("Video/Force BT.601")->GetBool())) { ++ CS = AGI_CS_BT470BG; ++ ColorSpace = colormatrix_description(AGI_CS_BT470BG, CR); ++ } ++ ++ if (CS != VideoCS) { ++ if (FFMS_SetInputFormatV(VideoSource, CS, CR, FFMS_GetPixFmt(""), &ErrInfo)) + throw VideoOpenError(std::string("Failed to set input format: ") + ErrInfo.Buffer); +- ColorSpace = colormatrix_description(FFMS_CS_BT470BG, CR); + } + #endif + Deleted: fix-ffms2-compat.patch =================================================================== --- fix-ffms2-compat.patch 2022-07-17 13:33:24 UTC (rev 1254310) +++ fix-ffms2-compat.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -1,257 +0,0 @@ -From 1aa9215e7fc360de05da9b7ec2cd68f1940af8b2 Mon Sep 17 00:00:00 2001 -From: Thomas Goyne <plorkye...@aegisub.org> -Date: Wed, 6 Apr 2016 11:24:21 -0700 -Subject: [PATCH] Use FFMS_DoIndexing2 when using a recent version of ffms2 - -And clean up the audio track selection logic a bit. ---- - src/audio_provider_ffmpegsource.cpp | 40 ++++++++------------------ - src/ffmpegsource_common.cpp | 44 +++++++++++++++++++++-------- - src/ffmpegsource_common.h | 25 +++++----------- - src/video_provider_ffmpegsource.cpp | 12 ++++---- - 4 files changed, 56 insertions(+), 65 deletions(-) - -diff --git a/src/audio_provider_ffmpegsource.cpp b/src/audio_provider_ffmpegsource.cpp -index 4e44b1d29..606d5b415 100644 ---- a/src/audio_provider_ffmpegsource.cpp -+++ b/src/audio_provider_ffmpegsource.cpp -@@ -91,18 +91,20 @@ void FFmpegSourceAudioProvider::LoadAudio(agi::fs::path const& filename) { - } - - std::map<int, std::string> TrackList = GetTracksOfType(Indexer, FFMS_TYPE_AUDIO); -- if (TrackList.empty()) -- throw agi::AudioDataNotFound("no audio tracks found"); - - // initialize the track number to an invalid value so we can detect later on - // whether the user actually had to choose a track or not - int TrackNumber = -1; - if (TrackList.size() > 1) { -- TrackNumber = AskForTrackSelection(TrackList, FFMS_TYPE_AUDIO); -- // if it's still -1 here, user pressed cancel -- if (TrackNumber == -1) -+ auto Selection = AskForTrackSelection(TrackList, FFMS_TYPE_AUDIO); -+ if (Selection == TrackSelection::None) - throw agi::UserCancelException("audio loading canceled by user"); -+ TrackNumber = static_cast<int>(Selection); - } -+ else if (TrackList.size() == 1) -+ TrackNumber = TrackList.begin()->first; -+ else -+ throw agi::AudioDataNotFound("no audio tracks found"); - - // generate a name for the cache file - agi::fs::path CacheName = GetCacheFilename(filename); -@@ -114,24 +116,13 @@ void FFmpegSourceAudioProvider::LoadAudio(agi::fs::path const& filename) { - if (Index && FFMS_IndexBelongsToFile(Index, filename.string().c_str(), &ErrInfo)) - Index = nullptr; - -- // index valid but track number still not set? - if (Index) { -- // track number not set? just grab the first track -- if (TrackNumber < 0) -- TrackNumber = FFMS_GetFirstTrackOfType(Index, FFMS_TYPE_AUDIO, &ErrInfo); -- if (TrackNumber < 0) -- throw agi::AudioDataNotFound(std::string("Couldn't find any audio tracks: ") + ErrInfo.Buffer); -- -- // index is valid and track number is now set, -- // but do we have indexing info for the desired audio track? -+ // we already have an index, but the desired track may not have been -+ // indexed, and if it wasn't we need to reindex - FFMS_Track *TempTrackData = FFMS_GetTrackFromIndex(Index, TrackNumber); - if (FFMS_GetNumFrames(TempTrackData) <= 0) - Index = nullptr; - } -- // no valid index exists and the file only has one audio track, index it -- else if (TrackNumber < 0) -- TrackNumber = FFMS_TRACKMASK_ALL; -- // else: do nothing (keep track mask as it is) - - // reindex if the error handling mode has changed - FFMS_IndexErrorHandling ErrorHandling = GetErrorHandlingMode(); -@@ -142,17 +133,10 @@ void FFmpegSourceAudioProvider::LoadAudio(agi::fs::path const& filename) { - - // moment of truth - if (!Index) { -- int TrackMask; -- if (OPT_GET("Provider/FFmpegSource/Index All Tracks")->GetBool() || TrackNumber == FFMS_TRACKMASK_ALL) -- TrackMask = FFMS_TRACKMASK_ALL; -- else -- TrackMask = (1 << TrackNumber); -- -+ TrackSelection TrackMask = static_cast<TrackSelection>(TrackNumber); -+ if (OPT_GET("Provider/FFmpegSource/Index All Tracks")->GetBool()) -+ TrackMask = TrackSelection::All; - Index = DoIndexing(Indexer, CacheName, TrackMask, ErrorHandling); -- -- // if tracknumber still isn't set we need to set it now -- if (TrackNumber == FFMS_TRACKMASK_ALL) -- TrackNumber = FFMS_GetFirstTrackOfType(Index, FFMS_TYPE_AUDIO, &ErrInfo); - } - else - FFMS_CancelIndexing(Indexer); -diff --git a/src/ffmpegsource_common.cpp b/src/ffmpegsource_common.cpp -index 60a7e91e6..d66be0222 100644 ---- a/src/ffmpegsource_common.cpp -+++ b/src/ffmpegsource_common.cpp -@@ -60,7 +60,10 @@ FFmpegSourceProvider::FFmpegSourceProvider(agi::BackgroundRunner *br) - /// @param Indexer A pointer to the indexer object representing the file to be indexed - /// @param CacheName The filename of the output index file - /// @param Trackmask A binary mask of the track numbers to index --FFMS_Index *FFmpegSourceProvider::DoIndexing(FFMS_Indexer *Indexer, agi::fs::path const& CacheName, int Trackmask, FFMS_IndexErrorHandling IndexEH) { -+FFMS_Index *FFmpegSourceProvider::DoIndexing(FFMS_Indexer *Indexer, -+ agi::fs::path const& CacheName, -+ TrackSelection Track, -+ FFMS_IndexErrorHandling IndexEH) { - char FFMSErrMsg[1024]; - FFMS_ErrorInfo ErrInfo; - ErrInfo.Buffer = FFMSErrMsg; -@@ -78,8 +81,22 @@ FFMS_Index *FFmpegSourceProvider::DoIndexing(FFMS_Indexer *Indexer, agi::fs::pat - ps->SetProgress(Current, Total); - return ps->IsCancelled(); - }; -- Index = FFMS_DoIndexing(Indexer, Trackmask, FFMS_TRACKMASK_NONE, -+#if FFMS_VERSION >= ((2 << 24) | (21 << 16) | (0 << 8) | 0) -+ if (Track == TrackSelection::All) -+ FFMS_TrackTypeIndexSettings(Indexer, FFMS_TYPE_AUDIO, 1, 0); -+ else if (Track != TrackSelection::None) -+ FFMS_TrackIndexSettings(Indexer, static_cast<int>(Track), 1, 0); -+ FFMS_SetProgressCallback(Indexer, callback, ps); -+ Index = FFMS_DoIndexing2(Indexer, IndexEH, &ErrInfo); -+#else -+ int Trackmask = 0; -+ if (Track == TrackSelection::All) -+ Trackmask = std::numeric_limits<int>::max(); -+ else if (Track != TrackSelection::None) -+ Trackmask = 1 << static_cast<int>(Track); -+ Index = FFMS_DoIndexing(Indexer, Trackmask, 0, - nullptr, nullptr, IndexEH, callback, ps, &ErrInfo); -+#endif - }); - - if (Index == nullptr) -@@ -99,21 +116,24 @@ std::map<int, std::string> FFmpegSourceProvider::GetTracksOfType(FFMS_Indexer *I - std::map<int,std::string> TrackList; - int NumTracks = FFMS_GetNumTracksI(Indexer); - -+ // older versions of ffms2 can't index audio tracks past 31 -+#if FFMS_VERSION < ((2 << 24) | (21 << 16) | (0 << 8) | 0) -+ if (Type == FFMS_TYPE_AUDIO) -+ NumTracks = std::min(NumTracks, std::numeric_limits<int>::digits); -+#endif -+ - for (int i=0; i<NumTracks; i++) { - if (FFMS_GetTrackTypeI(Indexer, i) == Type) { -- const char *CodecName = FFMS_GetCodecNameI(Indexer, i); -- if (CodecName) -- TrackList.insert(std::pair<int,std::string>(i, CodecName)); -+ if (auto CodecName = FFMS_GetCodecNameI(Indexer, i)) -+ TrackList[i] = CodecName; - } - } - return TrackList; - } - --/// @brief Ask user for which track he wants to load --/// @param TrackList A std::map with the track numbers as keys and codec names as values --/// @param Type The track type to ask about --/// @return Returns the track number chosen (an integer >= 0) on success, or a negative integer if the user cancelled. --int FFmpegSourceProvider::AskForTrackSelection(const std::map<int, std::string> &TrackList, FFMS_TrackType Type) { -+FFmpegSourceProvider::TrackSelection -+FFmpegSourceProvider::AskForTrackSelection(const std::map<int, std::string> &TrackList, -+ FFMS_TrackType Type) { - std::vector<int> TrackNumbers; - wxArrayString Choices; - -@@ -128,8 +148,8 @@ int FFmpegSourceProvider::AskForTrackSelection(const std::map<int, std::string> - Choices); - - if (Choice < 0) -- return Choice; -- return TrackNumbers[Choice]; -+ return TrackSelection::None; -+ return static_cast<TrackSelection>(TrackNumbers[Choice]); - } - - /// @brief Set ffms2 log level according to setting in config.dat -diff --git a/src/ffmpegsource_common.h b/src/ffmpegsource_common.h -index 8cb7f33f6..5f6df7cfa 100644 ---- a/src/ffmpegsource_common.h -+++ b/src/ffmpegsource_common.h -@@ -42,11 +42,6 @@ - - namespace agi { class BackgroundRunner; } - --/// Index all tracks --#define FFMS_TRACKMASK_ALL -1 --/// Index no tracks --#define FFMS_TRACKMASK_NONE 0 -- - /// @class FFmpegSourceProvider - /// @brief Base class for FFMS2 source providers; contains common functions etc - class FFmpegSourceProvider { -@@ -56,24 +51,18 @@ class FFmpegSourceProvider { - public: - FFmpegSourceProvider(agi::BackgroundRunner *br); - -- /// Logging level constants from avutil/log.h -- enum FFMS_LogLevel { -- /// nothing printed -- FFMS_LOG_QUIET = -8, -- FFMS_LOG_PANIC = 0, -- FFMS_LOG_FATAL = 8, -- FFMS_LOG_ERROR = 16, -- FFMS_LOG_WARNING = 24, -- FFMS_LOG_INFO = 32, -- FFMS_LOG_VERBOSE = 40, -- FFMS_LOG_DEBUG = 48, -+ enum class TrackSelection : int { -+ None = -1, -+ All = -2 - }; - - void CleanCache(); - -- FFMS_Index *DoIndexing(FFMS_Indexer *Indexer, agi::fs::path const& Cachename, int Trackmask, FFMS_IndexErrorHandling IndexEH); -+ FFMS_Index *DoIndexing(FFMS_Indexer *Indexer, agi::fs::path const& Cachename, -+ TrackSelection Track, -+ FFMS_IndexErrorHandling IndexEH); - std::map<int, std::string> GetTracksOfType(FFMS_Indexer *Indexer, FFMS_TrackType Type); -- int AskForTrackSelection(const std::map<int, std::string>& TrackList, FFMS_TrackType Type); -+ TrackSelection AskForTrackSelection(const std::map<int, std::string>& TrackList, FFMS_TrackType Type); - agi::fs::path GetCacheFilename(agi::fs::path const& filename); - void SetLogLevel(); - FFMS_IndexErrorHandling GetErrorHandlingMode(); -diff --git a/src/video_provider_ffmpegsource.cpp b/src/video_provider_ffmpegsource.cpp -index 5fd14f69c..8bd68fbbf 100644 ---- a/src/video_provider_ffmpegsource.cpp -+++ b/src/video_provider_ffmpegsource.cpp -@@ -149,14 +149,12 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st - if (TrackList.size() <= 0) - throw VideoNotSupported("no video tracks found"); - -- // initialize the track number to an invalid value so we can detect later on -- // whether the user actually had to choose a track or not - int TrackNumber = -1; - if (TrackList.size() > 1) { -- TrackNumber = AskForTrackSelection(TrackList, FFMS_TYPE_VIDEO); -- // if it's still -1 here, user pressed cancel -- if (TrackNumber == -1) -+ auto Selection = AskForTrackSelection(TrackList, FFMS_TYPE_VIDEO); -+ if (Selection == TrackSelection::None) - throw agi::UserCancelException("video loading cancelled by user"); -+ TrackNumber = static_cast<int>(Selection); - } - - // generate a name for the cache file -@@ -180,9 +178,9 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st - - // moment of truth - if (!Index) { -- int TrackMask = FFMS_TRACKMASK_NONE; -+ auto TrackMask = TrackSelection::None; - if (OPT_GET("Provider/FFmpegSource/Index All Tracks")->GetBool() || OPT_GET("Video/Open Audio")->GetBool()) -- TrackMask = FFMS_TRACKMASK_ALL; -+ TrackMask = TrackSelection::All; - Index = DoIndexing(Indexer, CacheName, TrackMask, GetErrorHandlingMode()); - } - else { Copied: aegisub/repos/community-x86_64/fix-ffms2-compat.patch (from rev 1254310, aegisub/trunk/fix-ffms2-compat.patch) =================================================================== --- fix-ffms2-compat.patch (rev 0) +++ fix-ffms2-compat.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -0,0 +1,257 @@ +From 1aa9215e7fc360de05da9b7ec2cd68f1940af8b2 Mon Sep 17 00:00:00 2001 +From: Thomas Goyne <plorkye...@aegisub.org> +Date: Wed, 6 Apr 2016 11:24:21 -0700 +Subject: [PATCH] Use FFMS_DoIndexing2 when using a recent version of ffms2 + +And clean up the audio track selection logic a bit. +--- + src/audio_provider_ffmpegsource.cpp | 40 ++++++++------------------ + src/ffmpegsource_common.cpp | 44 +++++++++++++++++++++-------- + src/ffmpegsource_common.h | 25 +++++----------- + src/video_provider_ffmpegsource.cpp | 12 ++++---- + 4 files changed, 56 insertions(+), 65 deletions(-) + +diff --git a/src/audio_provider_ffmpegsource.cpp b/src/audio_provider_ffmpegsource.cpp +index 4e44b1d29..606d5b415 100644 +--- a/src/audio_provider_ffmpegsource.cpp ++++ b/src/audio_provider_ffmpegsource.cpp +@@ -91,18 +91,20 @@ void FFmpegSourceAudioProvider::LoadAudio(agi::fs::path const& filename) { + } + + std::map<int, std::string> TrackList = GetTracksOfType(Indexer, FFMS_TYPE_AUDIO); +- if (TrackList.empty()) +- throw agi::AudioDataNotFound("no audio tracks found"); + + // initialize the track number to an invalid value so we can detect later on + // whether the user actually had to choose a track or not + int TrackNumber = -1; + if (TrackList.size() > 1) { +- TrackNumber = AskForTrackSelection(TrackList, FFMS_TYPE_AUDIO); +- // if it's still -1 here, user pressed cancel +- if (TrackNumber == -1) ++ auto Selection = AskForTrackSelection(TrackList, FFMS_TYPE_AUDIO); ++ if (Selection == TrackSelection::None) + throw agi::UserCancelException("audio loading canceled by user"); ++ TrackNumber = static_cast<int>(Selection); + } ++ else if (TrackList.size() == 1) ++ TrackNumber = TrackList.begin()->first; ++ else ++ throw agi::AudioDataNotFound("no audio tracks found"); + + // generate a name for the cache file + agi::fs::path CacheName = GetCacheFilename(filename); +@@ -114,24 +116,13 @@ void FFmpegSourceAudioProvider::LoadAudio(agi::fs::path const& filename) { + if (Index && FFMS_IndexBelongsToFile(Index, filename.string().c_str(), &ErrInfo)) + Index = nullptr; + +- // index valid but track number still not set? + if (Index) { +- // track number not set? just grab the first track +- if (TrackNumber < 0) +- TrackNumber = FFMS_GetFirstTrackOfType(Index, FFMS_TYPE_AUDIO, &ErrInfo); +- if (TrackNumber < 0) +- throw agi::AudioDataNotFound(std::string("Couldn't find any audio tracks: ") + ErrInfo.Buffer); +- +- // index is valid and track number is now set, +- // but do we have indexing info for the desired audio track? ++ // we already have an index, but the desired track may not have been ++ // indexed, and if it wasn't we need to reindex + FFMS_Track *TempTrackData = FFMS_GetTrackFromIndex(Index, TrackNumber); + if (FFMS_GetNumFrames(TempTrackData) <= 0) + Index = nullptr; + } +- // no valid index exists and the file only has one audio track, index it +- else if (TrackNumber < 0) +- TrackNumber = FFMS_TRACKMASK_ALL; +- // else: do nothing (keep track mask as it is) + + // reindex if the error handling mode has changed + FFMS_IndexErrorHandling ErrorHandling = GetErrorHandlingMode(); +@@ -142,17 +133,10 @@ void FFmpegSourceAudioProvider::LoadAudio(agi::fs::path const& filename) { + + // moment of truth + if (!Index) { +- int TrackMask; +- if (OPT_GET("Provider/FFmpegSource/Index All Tracks")->GetBool() || TrackNumber == FFMS_TRACKMASK_ALL) +- TrackMask = FFMS_TRACKMASK_ALL; +- else +- TrackMask = (1 << TrackNumber); +- ++ TrackSelection TrackMask = static_cast<TrackSelection>(TrackNumber); ++ if (OPT_GET("Provider/FFmpegSource/Index All Tracks")->GetBool()) ++ TrackMask = TrackSelection::All; + Index = DoIndexing(Indexer, CacheName, TrackMask, ErrorHandling); +- +- // if tracknumber still isn't set we need to set it now +- if (TrackNumber == FFMS_TRACKMASK_ALL) +- TrackNumber = FFMS_GetFirstTrackOfType(Index, FFMS_TYPE_AUDIO, &ErrInfo); + } + else + FFMS_CancelIndexing(Indexer); +diff --git a/src/ffmpegsource_common.cpp b/src/ffmpegsource_common.cpp +index 60a7e91e6..d66be0222 100644 +--- a/src/ffmpegsource_common.cpp ++++ b/src/ffmpegsource_common.cpp +@@ -60,7 +60,10 @@ FFmpegSourceProvider::FFmpegSourceProvider(agi::BackgroundRunner *br) + /// @param Indexer A pointer to the indexer object representing the file to be indexed + /// @param CacheName The filename of the output index file + /// @param Trackmask A binary mask of the track numbers to index +-FFMS_Index *FFmpegSourceProvider::DoIndexing(FFMS_Indexer *Indexer, agi::fs::path const& CacheName, int Trackmask, FFMS_IndexErrorHandling IndexEH) { ++FFMS_Index *FFmpegSourceProvider::DoIndexing(FFMS_Indexer *Indexer, ++ agi::fs::path const& CacheName, ++ TrackSelection Track, ++ FFMS_IndexErrorHandling IndexEH) { + char FFMSErrMsg[1024]; + FFMS_ErrorInfo ErrInfo; + ErrInfo.Buffer = FFMSErrMsg; +@@ -78,8 +81,22 @@ FFMS_Index *FFmpegSourceProvider::DoIndexing(FFMS_Indexer *Indexer, agi::fs::pat + ps->SetProgress(Current, Total); + return ps->IsCancelled(); + }; +- Index = FFMS_DoIndexing(Indexer, Trackmask, FFMS_TRACKMASK_NONE, ++#if FFMS_VERSION >= ((2 << 24) | (21 << 16) | (0 << 8) | 0) ++ if (Track == TrackSelection::All) ++ FFMS_TrackTypeIndexSettings(Indexer, FFMS_TYPE_AUDIO, 1, 0); ++ else if (Track != TrackSelection::None) ++ FFMS_TrackIndexSettings(Indexer, static_cast<int>(Track), 1, 0); ++ FFMS_SetProgressCallback(Indexer, callback, ps); ++ Index = FFMS_DoIndexing2(Indexer, IndexEH, &ErrInfo); ++#else ++ int Trackmask = 0; ++ if (Track == TrackSelection::All) ++ Trackmask = std::numeric_limits<int>::max(); ++ else if (Track != TrackSelection::None) ++ Trackmask = 1 << static_cast<int>(Track); ++ Index = FFMS_DoIndexing(Indexer, Trackmask, 0, + nullptr, nullptr, IndexEH, callback, ps, &ErrInfo); ++#endif + }); + + if (Index == nullptr) +@@ -99,21 +116,24 @@ std::map<int, std::string> FFmpegSourceProvider::GetTracksOfType(FFMS_Indexer *I + std::map<int,std::string> TrackList; + int NumTracks = FFMS_GetNumTracksI(Indexer); + ++ // older versions of ffms2 can't index audio tracks past 31 ++#if FFMS_VERSION < ((2 << 24) | (21 << 16) | (0 << 8) | 0) ++ if (Type == FFMS_TYPE_AUDIO) ++ NumTracks = std::min(NumTracks, std::numeric_limits<int>::digits); ++#endif ++ + for (int i=0; i<NumTracks; i++) { + if (FFMS_GetTrackTypeI(Indexer, i) == Type) { +- const char *CodecName = FFMS_GetCodecNameI(Indexer, i); +- if (CodecName) +- TrackList.insert(std::pair<int,std::string>(i, CodecName)); ++ if (auto CodecName = FFMS_GetCodecNameI(Indexer, i)) ++ TrackList[i] = CodecName; + } + } + return TrackList; + } + +-/// @brief Ask user for which track he wants to load +-/// @param TrackList A std::map with the track numbers as keys and codec names as values +-/// @param Type The track type to ask about +-/// @return Returns the track number chosen (an integer >= 0) on success, or a negative integer if the user cancelled. +-int FFmpegSourceProvider::AskForTrackSelection(const std::map<int, std::string> &TrackList, FFMS_TrackType Type) { ++FFmpegSourceProvider::TrackSelection ++FFmpegSourceProvider::AskForTrackSelection(const std::map<int, std::string> &TrackList, ++ FFMS_TrackType Type) { + std::vector<int> TrackNumbers; + wxArrayString Choices; + +@@ -128,8 +148,8 @@ int FFmpegSourceProvider::AskForTrackSelection(const std::map<int, std::string> + Choices); + + if (Choice < 0) +- return Choice; +- return TrackNumbers[Choice]; ++ return TrackSelection::None; ++ return static_cast<TrackSelection>(TrackNumbers[Choice]); + } + + /// @brief Set ffms2 log level according to setting in config.dat +diff --git a/src/ffmpegsource_common.h b/src/ffmpegsource_common.h +index 8cb7f33f6..5f6df7cfa 100644 +--- a/src/ffmpegsource_common.h ++++ b/src/ffmpegsource_common.h +@@ -42,11 +42,6 @@ + + namespace agi { class BackgroundRunner; } + +-/// Index all tracks +-#define FFMS_TRACKMASK_ALL -1 +-/// Index no tracks +-#define FFMS_TRACKMASK_NONE 0 +- + /// @class FFmpegSourceProvider + /// @brief Base class for FFMS2 source providers; contains common functions etc + class FFmpegSourceProvider { +@@ -56,24 +51,18 @@ class FFmpegSourceProvider { + public: + FFmpegSourceProvider(agi::BackgroundRunner *br); + +- /// Logging level constants from avutil/log.h +- enum FFMS_LogLevel { +- /// nothing printed +- FFMS_LOG_QUIET = -8, +- FFMS_LOG_PANIC = 0, +- FFMS_LOG_FATAL = 8, +- FFMS_LOG_ERROR = 16, +- FFMS_LOG_WARNING = 24, +- FFMS_LOG_INFO = 32, +- FFMS_LOG_VERBOSE = 40, +- FFMS_LOG_DEBUG = 48, ++ enum class TrackSelection : int { ++ None = -1, ++ All = -2 + }; + + void CleanCache(); + +- FFMS_Index *DoIndexing(FFMS_Indexer *Indexer, agi::fs::path const& Cachename, int Trackmask, FFMS_IndexErrorHandling IndexEH); ++ FFMS_Index *DoIndexing(FFMS_Indexer *Indexer, agi::fs::path const& Cachename, ++ TrackSelection Track, ++ FFMS_IndexErrorHandling IndexEH); + std::map<int, std::string> GetTracksOfType(FFMS_Indexer *Indexer, FFMS_TrackType Type); +- int AskForTrackSelection(const std::map<int, std::string>& TrackList, FFMS_TrackType Type); ++ TrackSelection AskForTrackSelection(const std::map<int, std::string>& TrackList, FFMS_TrackType Type); + agi::fs::path GetCacheFilename(agi::fs::path const& filename); + void SetLogLevel(); + FFMS_IndexErrorHandling GetErrorHandlingMode(); +diff --git a/src/video_provider_ffmpegsource.cpp b/src/video_provider_ffmpegsource.cpp +index 5fd14f69c..8bd68fbbf 100644 +--- a/src/video_provider_ffmpegsource.cpp ++++ b/src/video_provider_ffmpegsource.cpp +@@ -149,14 +149,12 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st + if (TrackList.size() <= 0) + throw VideoNotSupported("no video tracks found"); + +- // initialize the track number to an invalid value so we can detect later on +- // whether the user actually had to choose a track or not + int TrackNumber = -1; + if (TrackList.size() > 1) { +- TrackNumber = AskForTrackSelection(TrackList, FFMS_TYPE_VIDEO); +- // if it's still -1 here, user pressed cancel +- if (TrackNumber == -1) ++ auto Selection = AskForTrackSelection(TrackList, FFMS_TYPE_VIDEO); ++ if (Selection == TrackSelection::None) + throw agi::UserCancelException("video loading cancelled by user"); ++ TrackNumber = static_cast<int>(Selection); + } + + // generate a name for the cache file +@@ -180,9 +178,9 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st + + // moment of truth + if (!Index) { +- int TrackMask = FFMS_TRACKMASK_NONE; ++ auto TrackMask = TrackSelection::None; + if (OPT_GET("Provider/FFmpegSource/Index All Tracks")->GetBool() || OPT_GET("Video/Open Audio")->GetBool()) +- TrackMask = FFMS_TRACKMASK_ALL; ++ TrackMask = TrackSelection::All; + Index = DoIndexing(Indexer, CacheName, TrackMask, GetErrorHandlingMode()); + } + else { Deleted: icu59.patch =================================================================== --- icu59.patch 2022-07-17 13:33:24 UTC (rev 1254310) +++ icu59.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -1,11 +0,0 @@ -diff -upr aegisub-3.2.2.orig/src/utils.cpp aegisub-3.2.2/src/utils.cpp ---- aegisub-3.2.2.orig/src/utils.cpp 2014-12-08 02:07:09.000000000 +0200 -+++ aegisub-3.2.2/src/utils.cpp 2017-04-26 11:11:15.438239182 +0300 -@@ -44,6 +44,7 @@ - #include <boost/filesystem/path.hpp> - #include <map> - #include <unicode/locid.h> -+#include <unicode/unistr.h> - #include <wx/clipbrd.h> - #include <wx/filedlg.h> - #include <wx/stdpaths.h> Copied: aegisub/repos/community-x86_64/icu59.patch (from rev 1254310, aegisub/trunk/icu59.patch) =================================================================== --- icu59.patch (rev 0) +++ icu59.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -0,0 +1,11 @@ +diff -upr aegisub-3.2.2.orig/src/utils.cpp aegisub-3.2.2/src/utils.cpp +--- aegisub-3.2.2.orig/src/utils.cpp 2014-12-08 02:07:09.000000000 +0200 ++++ aegisub-3.2.2/src/utils.cpp 2017-04-26 11:11:15.438239182 +0300 +@@ -44,6 +44,7 @@ + #include <boost/filesystem/path.hpp> + #include <map> + #include <unicode/locid.h> ++#include <unicode/unistr.h> + #include <wx/clipbrd.h> + #include <wx/filedlg.h> + #include <wx/stdpaths.h> Deleted: make-4.3.patch =================================================================== --- make-4.3.patch 2022-07-17 13:33:24 UTC (rev 1254310) +++ make-4.3.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -1,23 +0,0 @@ -From f4cc905c69ca69c68cb95674cefce4abc37ce046 Mon Sep 17 00:00:00 2001 -From: wangqr <wan...@wangqr.tk> -Date: Mon, 17 Feb 2020 14:42:07 +0800 -Subject: [PATCH] Use target name without directory in $*_OBJ macro - -Fix Aegisub/Aegisub#171 ---- - Makefile.target | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile.target b/Makefile.target -index 516ef3c24..5c4c5d259 100644 ---- a/Makefile.target -+++ b/Makefile.target -@@ -112,7 +112,7 @@ POST_FLAGS = $($@_FLAGS) -c -o $@ $< - # Libraries contain all object files they depend on (but they may depend on other files) - # Not using libtool on OS X because it has an unsilenceable warning about a - # compatibility issue with BSD 4.3 (wtf) --lib%.a: $$($$*_OBJ) -+lib%.a: $$($$(*F)_OBJ) - @$(BIN_MKDIR_P) $(dir $@) - $(BIN_AR) cru $@ $(filter %.o,$^) - $(BIN_RANLIB) $@ Copied: aegisub/repos/community-x86_64/make-4.3.patch (from rev 1254310, aegisub/trunk/make-4.3.patch) =================================================================== --- make-4.3.patch (rev 0) +++ make-4.3.patch 2022-07-17 13:33:43 UTC (rev 1254311) @@ -0,0 +1,23 @@ +From f4cc905c69ca69c68cb95674cefce4abc37ce046 Mon Sep 17 00:00:00 2001 +From: wangqr <wan...@wangqr.tk> +Date: Mon, 17 Feb 2020 14:42:07 +0800 +Subject: [PATCH] Use target name without directory in $*_OBJ macro + +Fix Aegisub/Aegisub#171 +--- + Makefile.target | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.target b/Makefile.target +index 516ef3c24..5c4c5d259 100644 +--- a/Makefile.target ++++ b/Makefile.target +@@ -112,7 +112,7 @@ POST_FLAGS = $($@_FLAGS) -c -o $@ $< + # Libraries contain all object files they depend on (but they may depend on other files) + # Not using libtool on OS X because it has an unsilenceable warning about a + # compatibility issue with BSD 4.3 (wtf) +-lib%.a: $$($$*_OBJ) ++lib%.a: $$($$(*F)_OBJ) + @$(BIN_MKDIR_P) $(dir $@) + $(BIN_AR) cru $@ $(filter %.o,$^) + $(BIN_RANLIB) $@