gnu: gstreamer: Fix buffer offset problem.
* gnu/packages/patches/gstreamer-buffer-reset-offset.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/gstreamer.scm (gstreamer)[source](patches): New field. [arguments]: Do not disable any tests.
This commit is contained in:
parent
bdb51ed6d1
commit
55d1d9eb2f
|
@ -901,6 +901,7 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/guile-relocatable.patch \
|
%D%/packages/patches/guile-relocatable.patch \
|
||||||
%D%/packages/patches/guile-rsvg-pkgconfig.patch \
|
%D%/packages/patches/guile-rsvg-pkgconfig.patch \
|
||||||
%D%/packages/patches/guile-emacs-fix-configure.patch \
|
%D%/packages/patches/guile-emacs-fix-configure.patch \
|
||||||
|
%D%/packages/patches/gstreamer-buffer-reset-offset.patch \
|
||||||
%D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \
|
%D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \
|
||||||
%D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \
|
%D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \
|
||||||
%D%/packages/patches/gtk2-theme-paths.patch \
|
%D%/packages/patches/gtk2-theme-paths.patch \
|
||||||
|
|
|
@ -110,6 +110,7 @@ arrays of data.")
|
||||||
(uri (string-append
|
(uri (string-append
|
||||||
"https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-"
|
"https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-"
|
||||||
version ".tar.xz"))
|
version ".tar.xz"))
|
||||||
|
(patches (search-patches "gstreamer-buffer-reset-offset.patch"))
|
||||||
(sha256
|
(sha256
|
||||||
(base32
|
(base32
|
||||||
"003wy1p1in85p9sr5jsyhbnwqaiwz069flwkhyx7qhxy31qjz3hf"))))
|
"003wy1p1in85p9sr5jsyhbnwqaiwz069flwkhyx7qhxy31qjz3hf"))))
|
||||||
|
@ -119,19 +120,7 @@ arrays of data.")
|
||||||
`(#:configure-flags
|
`(#:configure-flags
|
||||||
(list (string-append "--with-html-dir="
|
(list (string-append "--with-html-dir="
|
||||||
(assoc-ref %outputs "doc")
|
(assoc-ref %outputs "doc")
|
||||||
"/share/gtk-doc/html"))
|
"/share/gtk-doc/html"))))
|
||||||
|
|
||||||
,@(if (not (target-64bit?))
|
|
||||||
;; Skip test that fails on 32-bit systems:
|
|
||||||
;; <https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/316>.
|
|
||||||
`(#:phases (modify-phases %standard-phases
|
|
||||||
(add-before 'check 'disable-gstbufferpool-test
|
|
||||||
(lambda _
|
|
||||||
(substitute* "tests/check/Makefile"
|
|
||||||
(("^[[:blank:]]+gst/gstbufferpool.*$")
|
|
||||||
""))
|
|
||||||
#t))))
|
|
||||||
'())))
|
|
||||||
(propagated-inputs `(("glib" ,glib))) ; required by gstreamer-1.0.pc.
|
(propagated-inputs `(("glib" ,glib))) ; required by gstreamer-1.0.pc.
|
||||||
(native-inputs
|
(native-inputs
|
||||||
`(("bison" ,bison)
|
`(("bison" ,bison)
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
Fix a buffer offset problem in GStreamer 1.16. Initially reported by Mark H.
|
||||||
|
Weaver in <https://lists.gnu.org/archive/html/guix-devel/2019-06/msg00140.html>.
|
||||||
|
|
||||||
|
See also <https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/316>.
|
||||||
|
|
||||||
|
From 1734c9fc1a4f99b165383ae1eb02f04e0844a00c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||||
|
Date: Sat, 29 Jun 2019 09:22:05 -0400
|
||||||
|
Subject: [PATCH] bufferpool: Fix the buffer size reset code
|
||||||
|
|
||||||
|
The offset in gst_buffer_resize() is additive. So to move back the
|
||||||
|
offset to zero, we need to pass the opposite of the current offset. This
|
||||||
|
was raised through the related unit test failingon 32bit as on 64bit
|
||||||
|
the alignment padding was enough to hide the issue. The test was
|
||||||
|
modified to also fail on 64bit. This patch will remove spurious
|
||||||
|
assertions like:
|
||||||
|
|
||||||
|
assertion 'bufmax >= bufoffs + offset + size' failed
|
||||||
|
|
||||||
|
Fixes #316
|
||||||
|
---
|
||||||
|
gst/gstbufferpool.c | 7 +++++--
|
||||||
|
tests/check/gst/gstbufferpool.c | 2 +-
|
||||||
|
2 files changed, 6 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gst/gstbufferpool.c b/gst/gstbufferpool.c
|
||||||
|
index e5c7a5872..619860e63 100644
|
||||||
|
--- a/gst/gstbufferpool.c
|
||||||
|
+++ b/gst/gstbufferpool.c
|
||||||
|
@@ -1222,8 +1222,11 @@ default_reset_buffer (GstBufferPool * pool, GstBuffer * buffer)
|
||||||
|
GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE;
|
||||||
|
|
||||||
|
/* if the memory is intact reset the size to the full size */
|
||||||
|
- if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY))
|
||||||
|
- gst_buffer_resize (buffer, 0, pool->priv->size);
|
||||||
|
+ if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY)) {
|
||||||
|
+ gsize offset;
|
||||||
|
+ gst_buffer_get_sizes (buffer, &offset, NULL);
|
||||||
|
+ gst_buffer_resize (buffer, -offset, pool->priv->size);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* remove all metadata without the POOLED flag */
|
||||||
|
gst_buffer_foreach_meta (buffer, remove_meta_unpooled, pool);
|
||||||
|
diff --git a/tests/check/gst/gstbufferpool.c b/tests/check/gst/gstbufferpool.c
|
||||||
|
index f0c3c8d8e..dd9b2dc03 100644
|
||||||
|
--- a/tests/check/gst/gstbufferpool.c
|
||||||
|
+++ b/tests/check/gst/gstbufferpool.c
|
||||||
|
@@ -190,7 +190,7 @@ GST_START_TEST (test_buffer_modify_discard)
|
||||||
|
gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
|
||||||
|
buffer_track_destroy (buf, &dcount);
|
||||||
|
/* do resize, as we didn't modify the memory, pool should reuse this buffer */
|
||||||
|
- gst_buffer_resize (buf, 5, 2);
|
||||||
|
+ gst_buffer_resize (buf, 8, 2);
|
||||||
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
|
/* buffer should've gone back into pool */
|
||||||
|
--
|
||||||
|
2.22.0
|
||||||
|
|
Loading…
Reference in New Issue