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) $@

Reply via email to