From 55d1d9eb2f0051404d0562622d5d85b701f5a973 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Sat, 29 Jun 2019 19:07:40 +0200 Subject: [PATCH] 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. --- gnu/local.mk | 1 + gnu/packages/gstreamer.scm | 15 +---- .../gstreamer-buffer-reset-offset.patch | 59 +++++++++++++++++++ 3 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 gnu/packages/patches/gstreamer-buffer-reset-offset.patch diff --git a/gnu/local.mk b/gnu/local.mk index 8f63d0bd14..0f4cb2a6e4 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -901,6 +901,7 @@ dist_patch_DATA = \ %D%/packages/patches/guile-relocatable.patch \ %D%/packages/patches/guile-rsvg-pkgconfig.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_IM_MODULE_FILE.patch \ %D%/packages/patches/gtk2-theme-paths.patch \ diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm index 2a818e078c..13c2c2fc27 100644 --- a/gnu/packages/gstreamer.scm +++ b/gnu/packages/gstreamer.scm @@ -110,6 +110,7 @@ (define-public gstreamer (uri (string-append "https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-" version ".tar.xz")) + (patches (search-patches "gstreamer-buffer-reset-offset.patch")) (sha256 (base32 "003wy1p1in85p9sr5jsyhbnwqaiwz069flwkhyx7qhxy31qjz3hf")))) @@ -119,19 +120,7 @@ (define-public gstreamer `(#:configure-flags (list (string-append "--with-html-dir=" (assoc-ref %outputs "doc") - "/share/gtk-doc/html")) - - ,@(if (not (target-64bit?)) - ;; Skip test that fails on 32-bit systems: - ;; . - `(#:phases (modify-phases %standard-phases - (add-before 'check 'disable-gstbufferpool-test - (lambda _ - (substitute* "tests/check/Makefile" - (("^[[:blank:]]+gst/gstbufferpool.*$") - "")) - #t)))) - '()))) + "/share/gtk-doc/html")))) (propagated-inputs `(("glib" ,glib))) ; required by gstreamer-1.0.pc. (native-inputs `(("bison" ,bison) diff --git a/gnu/packages/patches/gstreamer-buffer-reset-offset.patch b/gnu/packages/patches/gstreamer-buffer-reset-offset.patch new file mode 100644 index 0000000000..024892a60f --- /dev/null +++ b/gnu/packages/patches/gstreamer-buffer-reset-offset.patch @@ -0,0 +1,59 @@ +Fix a buffer offset problem in GStreamer 1.16. Initially reported by Mark H. +Weaver in . + +See also . + +From 1734c9fc1a4f99b165383ae1eb02f04e0844a00c Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +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 +