Package: pitivi
Version: 2020.09.2-2
Severity: grave
Tags: upstream patch
Justification: renders package unusable
Forwarded: https://gitlab.gnome.org/GNOME/pitivi/-/issues/2498

Dear Maintainer,

The version of pitivi in bullseye is affected by the bug listed above:
rendered videos have A/V out of sync by a few seconds, while they sound
just find in the preview.

I'm attaching the upstream patch that fixed the issue, already
backported to the current Debian package. I rebuilt pitivi locally with
this patch, and confirmed that it does fix the issue.

-- System Information:
Debian Release: bullseye/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'testing-debug'), (500, 
'unstable'), (500, 'testing'), (1, 'experimental-debug'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: arm64

Kernel: Linux 5.10.0-4-amd64 (SMP w/4 CPU threads)
Locale: LANG=pt_BR.UTF-8, LC_CTYPE=pt_BR.UTF-8 (charmap=UTF-8), 
LANGUAGE=pt_BR:pt:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages pitivi depends on:
ii  gir1.2-gdkpixbuf-2.0                                2.42.2+dfsg-1
ii  gir1.2-ges-1.0                                      1.18.3-1
ii  gir1.2-glib-2.0                                     1.66.1-1+b1
ii  gir1.2-gst-plugins-bad-1.0                          1.18.3-1+b1
ii  gir1.2-gst-plugins-base-1.0                         1.18.3-1
ii  gir1.2-gstreamer-1.0                                1.18.3-1
ii  gir1.2-gtk-3.0                                      3.24.24-3
ii  gir1.2-pango-1.0                                    1.46.2-3
ii  gir1.2-peas-1.0                                     1.28.0-2+b1
pn  gstreamer1.0-audiosink                              <none>
ii  gstreamer1.0-gl [gstreamer1.0-videosink]            1.18.3-1
ii  gstreamer1.0-gtk3 [gstreamer1.0-videosink]          1.18.3-1
ii  gstreamer1.0-plugins-bad [gstreamer1.0-videosink]   1.18.3-1+b1
ii  gstreamer1.0-plugins-base                           1.18.3-1
ii  gstreamer1.0-plugins-good [gstreamer1.0-videosink]  1.18.3-1
ii  gstreamer1.0-x [gstreamer1.0-videosink]             1.18.3-1
ii  libc6                                               2.31-9
ii  libcairo2                                           1.16.0-5
ii  libglib2.0-0                                        2.66.7-2
ii  libgstreamer1.0-0                                   1.18.3-1
ii  libpython3.9                                        3.9.2-1
ii  python3                                             3.9.2-2
ii  python3-cairo                                       1.16.2-4+b2
ii  python3-dbus                                        1.2.16-5
ii  python3-ges-1.0                                     1.18.3-1
ii  python3-gi                                          3.38.0-2
ii  python3-gi-cairo                                    3.38.0-2
ii  python3-gst-1.0                                     1.18.3-1
ii  python3-matplotlib                                  3.3.4-1
ii  python3-numpy                                       1:1.19.5-1
ii  python3-xdg                                         0.27-2
ii  python3.9                                           3.9.2-1

pitivi recommends no packages.

Versions of packages pitivi suggests:
pn  frei0r-plugins             <none>
ii  gir1.2-gnomedesktop-3.0    3.38.4-1
pn  gir1.2-gsound-1.0          <none>
ii  gir1.2-notify-0.7          0.7.9-3
ii  gstreamer1.0-libav         1.18.3-1
ii  gstreamer1.0-plugins-ugly  1.18.3-1

-- no debconf information
From: Thibault Saunier <tsaun...@igalia.com>
Date: Mon, 11 Jan 2021 17:50:26 -0300
Subject: pipeline: Avoid committing the timeline while rendering

This can cause weird behavior and in particular it can lead to
de-synchronized audio/video streams.

Fixes https://gitlab.gnome.org/GNOME/pitivi/-/issues/2498
---
 pitivi/editorperspective.py | 3 +++
 pitivi/utils/pipeline.py    | 8 ++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/pitivi/editorperspective.py b/pitivi/editorperspective.py
index a25450c..49cbf61 100644
--- a/pitivi/editorperspective.py
+++ b/pitivi/editorperspective.py
@@ -128,6 +128,9 @@ class EditorPerspective(Perspective, Loggable):
             # Nothing to work with, Pitivi is starting up.
             return
 
+        if self.app.project_manager.current_project.pipeline.rendering():
+            return
+
         # Commit the timeline so its nested timelines assets are refreshed.
         ges_timeline.commit()
 
diff --git a/pitivi/utils/pipeline.py b/pitivi/utils/pipeline.py
index 95be106..c92c880 100644
--- a/pitivi/utils/pipeline.py
+++ b/pitivi/utils/pipeline.py
@@ -424,7 +424,7 @@ class SimplePipeline(GObject.Object, Loggable):
             Gst.debug_bin_to_dot_file_with_ts(self._pipeline,
                                               Gst.DebugGraphDetails.ALL,
                                               "pitivi.error")
-            if not self._rendering():
+            if not self.rendering():
                 self._remove_waiting_for_async_done_timeout()
                 self._recover()
         elif message.type == Gst.MessageType.DURATION_CHANGED:
@@ -498,7 +498,7 @@ class SimplePipeline(GObject.Object, Loggable):
             raise PipelineError("Couldn't get duration: Returned None")
         return dur
 
-    def _rendering(self):
+    def rendering(self):
         return False
 
 
@@ -611,7 +611,7 @@ class Pipeline(GES.Pipeline, SimplePipeline):
             # Nowhere to seek.
             return
 
-        if self._rendering():
+        if self.rendering():
             raise PipelineError("Trying to seek while rendering")
 
         st = Gst.Structure.new_empty("seek")
@@ -675,6 +675,6 @@ class Pipeline(GES.Pipeline, SimplePipeline):
             self._was_empty = True
             self._remove_waiting_for_async_done_timeout()
 
-    def _rendering(self):
+    def rendering(self):
         mask = GES.PipelineFlags.RENDER | GES.PipelineFlags.SMART_RENDER
         return self._pipeline.get_mode() & mask != 0

Attachment: signature.asc
Description: PGP signature

Reply via email to