commit bac4125196c77d155937eaafc133a03c2797da5b
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Sat Jun 25 00:42:16 2022 +0100
fix
fix-dav1d-1.0.patch | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++
vlc.spec | 8 ++-
2 files changed, 156 insertions(+), 1 deletion(-)
---
diff --git a/fix-dav1d-1.0.patch b/fix-dav1d-1.0.patch
new file mode 100644
index 0000000..47799bc
--- /dev/null
+++ b/fix-dav1d-1.0.patch
@@ -0,0 +1,149 @@
+From 55b24abf7219a0c6a6560187496e41fd60638552 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4(a)ycbcr.xyz>
+Date: Fri, 18 Mar 2022 11:42:49 +0100
+Subject: [PATCH 1/2] dav1d: fix compilation with (upcoming) dav1d 1.0
+
+(cherry picked from commit dbf45cea2a8abdfbef897b8a71f3eb782bb1b712) (edited)
+edited:
+- 3.0 has the 128 pixels padding elsewhere
+- 3.0 has an extra parameter for add_integer_with_range()
+- 3.0 was setting i_extra_picture_buffers further down in the code
+- 3.0 uses 16 threads max
+
+Signed-off-by: Steve Lhomme <robux4(a)ycbcr.xyz>
+---
+ modules/codec/dav1d.c | 22 +++++++++++++++++++++-
+ 1 file changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/modules/codec/dav1d.c b/modules/codec/dav1d.c
+index 039165f52e..cfabbc27cb 100644
+--- a/modules/codec/dav1d.c
++++ b/modules/codec/dav1d.c
+@@ -63,10 +63,16 @@ vlc_module_begin ()
+ set_category(CAT_INPUT)
+ set_subcategory(SUBCAT_INPUT_VCODEC)
+
++#if DAV1D_API_VERSION_MAJOR >= 6
++ add_integer_with_range("dav1d-thread-frames", 0, 0, DAV1D_MAX_THREADS,
++ THREAD_FRAMES_TEXT, THREAD_FRAMES_LONGTEXT, false)
++ add_obsolete_string("dav1d-thread-tiles") // unused with dav1d 1.0
++#else
+ add_integer_with_range("dav1d-thread-frames", 0, 0,
DAV1D_MAX_FRAME_THREADS,
+ THREAD_FRAMES_TEXT, THREAD_FRAMES_LONGTEXT, false)
+ add_integer_with_range("dav1d-thread-tiles", 0, 0,
DAV1D_MAX_TILE_THREADS,
+ THREAD_TILES_TEXT, THREAD_TILES_LONGTEXT, false)
++#endif
+ vlc_module_end ()
+
+ /*****************************************************************************
+@@ -294,6 +300,11 @@ static int OpenDecoder(vlc_object_t *p_this)
+ return VLC_ENOMEM;
+
+ dav1d_default_settings(&p_sys->s);
++#if DAV1D_API_VERSION_MAJOR >= 6
++ p_sys->s.n_threads = var_InheritInteger(p_this,
"dav1d-thread-frames");
++ if (p_sys->s.n_threads == 0)
++ p_sys->s.n_threads = (i_core_count < 16) ? i_core_count : 16;
++#else
+ p_sys->s.n_tile_threads = var_InheritInteger(p_this,
"dav1d-thread-tiles");
+ if (p_sys->s.n_tile_threads == 0)
+ p_sys->s.n_tile_threads =
+@@ -303,6 +314,7 @@ static int OpenDecoder(vlc_object_t *p_this)
+ p_sys->s.n_frame_threads = var_InheritInteger(p_this,
"dav1d-thread-frames");
+ if (p_sys->s.n_frame_threads == 0)
+ p_sys->s.n_frame_threads = (i_core_count < 16) ? i_core_count : 16;
++#endif
+ p_sys->s.allocator.cookie = dec;
+ p_sys->s.allocator.alloc_picture_callback = NewPicture;
+ p_sys->s.allocator.release_picture_callback = FreePicture;
+@@ -313,12 +325,20 @@ static int OpenDecoder(vlc_object_t *p_this)
+ return VLC_EGENERIC;
+ }
+
++#if DAV1D_API_VERSION_MAJOR >= 6
++ msg_Dbg(p_this, "Using dav1d version %s with %d threads",
++ dav1d_version(), p_sys->s.n_threads);
++
++ dec->i_extra_picture_buffers = (p_sys->s.n_threads - 1);
++#else
+ msg_Dbg(p_this, "Using dav1d version %s with %d/%d frame/tile threads",
+ dav1d_version(), p_sys->s.n_frame_threads, p_sys->s.n_tile_threads);
+
++ dec->i_extra_picture_buffers = (p_sys->s.n_frame_threads - 1);
++#endif
++
+ dec->pf_decode = Decode;
+ dec->pf_flush = FlushDecoder;
+- dec->i_extra_picture_buffers = (p_sys->s.n_frame_threads - 1);
+
+ dec->fmt_out.video.i_width = dec->fmt_in.video.i_width;
+ dec->fmt_out.video.i_height = dec->fmt_in.video.i_height;
+--
+2.36.1
+
+
+From c95e5288ab2d222346b19552a462afe5159d1122 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4(a)ycbcr.xyz>
+Date: Mon, 21 Mar 2022 15:53:52 +0100
+Subject: [PATCH 2/2] dav1d: limit the number of extra frames needed by the
+ decoder
+
+The i_extra_picture_buffers is used to add pictures to the pool that the core
+will allocate. dav1d is actually using n_threads frames. And the core is
+allocating 10 frames per default for AV1. So we need to add the missing ones.
+
+(cherry picked from commit a32031dc0f5f32083fc54a21397bce732742ccbe) (rebased)
+rebased:
+- the code dav1d 1.0.0 in 3.0 uses different max versions
+
+Signed-off-by: Steve Lhomme <robux4(a)ycbcr.xyz>
+---
+ modules/codec/dav1d.c | 25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/modules/codec/dav1d.c b/modules/codec/dav1d.c
+index cfabbc27cb..8a439ce4ff 100644
+--- a/modules/codec/dav1d.c
++++ b/modules/codec/dav1d.c
+@@ -304,7 +304,28 @@ static int OpenDecoder(vlc_object_t *p_this)
+ p_sys->s.n_threads = var_InheritInteger(p_this,
"dav1d-thread-frames");
+ if (p_sys->s.n_threads == 0)
+ p_sys->s.n_threads = (i_core_count < 16) ? i_core_count : 16;
+-#else
++
++#if DAV1D_API_VERSION_MAJOR > 6 || DAV1D_API_VERSION_MINOR >= 7
++ // after dav1d 1.0.0
++ p_sys->s.max_frame_delay = dav1d_get_frame_delay( &p_sys->s );
++#else // 1.0.0
++ // corresponds to c->n_fc when max_frame_delay is 0 in dav1d 1.0.0
++ static const uint8_t fc_lut[49] = {
++ 1, /* 1 */
++ 2, 2, 2, /* 2- 4 */
++ 3, 3, 3, 3, 3, /* 5- 9 */
++ 4, 4, 4, 4, 4, 4, 4, /* 10-16 */
++ 5, 5, 5, 5, 5, 5, 5, 5, 5, /* 17-25 */
++ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, /* 26-36 */
++ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, /* 37-49 */
++ };
++ if (p_sys->s.n_threads >= 50)
++ p_sys->s.max_frame_delay = 8;
++ else
++ p_sys->s.max_frame_delay = fc_lut[p_sys->s.n_threads - 1];
++#endif
++
++#else // before dav1d 1.0.0
+ p_sys->s.n_tile_threads = var_InheritInteger(p_this,
"dav1d-thread-tiles");
+ if (p_sys->s.n_tile_threads == 0)
+ p_sys->s.n_tile_threads =
+@@ -329,7 +350,7 @@ static int OpenDecoder(vlc_object_t *p_this)
+ msg_Dbg(p_this, "Using dav1d version %s with %d threads",
+ dav1d_version(), p_sys->s.n_threads);
+
+- dec->i_extra_picture_buffers = (p_sys->s.n_threads - 1);
++ dec->i_extra_picture_buffers = p_sys->s.max_frame_delay;
+ #else
+ msg_Dbg(p_this, "Using dav1d version %s with %d/%d frame/tile threads",
+ dav1d_version(), p_sys->s.n_frame_threads, p_sys->s.n_tile_threads);
+--
+2.36.1
+
diff --git a/vlc.spec b/vlc.spec
index 798c773..6b4fb61 100644
--- a/vlc.spec
+++ b/vlc.spec
@@ -81,6 +81,9 @@ Patch12:
0001-Revert-access-libdvdread-6.1.2-supports-UTF-8-paths-.patch
Patch13: 0001-Get-addr-by-ref.-from-getConnectionEndpointAddress.patch
#
https://code.videolan.org/videolan/vlc/-/merge_requests/889
Patch14: Remove_legacy_caca.patch
+#
https://code.videolan.org/videolan/vlc/-/commit/2202c892c8dc1381b596c53c2...
+#
https://code.videolan.org/videolan/vlc/-/commit/d38ddd7270ffaea705981b6a4...
+Patch15: fix-dav1d-1.0.patch
BuildRequires: desktop-file-utils
BuildRequires: libappstream-glib
@@ -361,6 +364,9 @@ sed -i -e 's/luac/luac-5.1/g' configure.ac
%if 0%{?fedora} > 35 || 0%{?rhel} >= 9
%patch14 -p1
%endif
+%if 0%{?fedora} > 36
+%patch15 -p1
+%endif
%{?_with_bootstrap:
rm aclocal.m4 m4/lib*.m4 m4/lt*.m4 || :
@@ -629,7 +635,7 @@ fi || :
%changelog
-* Thu Jun 24 2022 Robert-André Mauchin <zebob.m(a)gmail.com> - 1:3.0.17.4-4
+* Fri Jun 24 2022 Robert-André Mauchin <zebob.m(a)gmail.com> - 1:3.0.17.4-4
- Rebuilt for new AOM and dav1d
* Fri Jun 24 2022 Nicolas Chauvet <kwizart(a)gmail.com> - 1:3.0.17.4-3