[pitivi] project: Commit video restriction caps at once



commit 73957cc19eb2fa42e66fec679d27098c30a0b8b5
Author: Thibault Saunier <tsaunier igalia com>
Date:   Sat Feb 22 14:20:46 2020 -0300

    project: Commit video restriction caps at once
    
    This way GES will be able to compute new positions of the source
    (if the aspect ratio was not changed)

 pitivi/project.py | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)
---
diff --git a/pitivi/project.py b/pitivi/project.py
index bcff66df..9edf049e 100644
--- a/pitivi/project.py
+++ b/pitivi/project.py
@@ -993,7 +993,6 @@ class Project(Loggable, GES.Project):
         if res:
             self.emit("video-size-changed")
             self._has_default_video_settings = False
-            self.update_restriction_caps()
         return res
 
     def _set_audio_restriction(self, name, value):
@@ -1010,6 +1009,7 @@ class Project(Loggable, GES.Project):
     @videowidth.setter
     def videowidth(self, value):
         if self._set_video_restriction("width", int(value)):
+            self.update_restriction_caps()
             self._emit_change("width")
 
     @property
@@ -1019,6 +1019,7 @@ class Project(Loggable, GES.Project):
     @videoheight.setter
     def videoheight(self, value):
         if self._set_video_restriction("height", int(value)):
+            self.update_restriction_caps()
             self._emit_change("height")
 
     @property
@@ -1028,8 +1029,26 @@ class Project(Loggable, GES.Project):
     @videorate.setter
     def videorate(self, value):
         if self._set_video_restriction("framerate", value):
+            self.update_restriction_caps()
             self._emit_change("videorate")
 
+    def set_video_properties(self, width, height, framerate):
+        """Sets the video properties in one operation.
+
+        This should be called when several properties can be changed at once,
+        to avoid GES repositioning all sources when the video size changes.
+
+        Args:
+            width (int): The new project width.
+            height (int): The new project height.
+            framerate (Gst.Fraction): The new project framerate.
+        """
+        changed = any([self._set_video_restriction("width", width),
+                       self._set_video_restriction("height", height),
+                       self._set_video_restriction("framerate", framerate)])
+        if changed:
+            self.update_restriction_caps()
+
     @property
     def audiochannels(self):
         return self.audio_profile.get_restriction()[0]["channels"]
@@ -2235,9 +2254,10 @@ class ProjectSettingsDialog:
             self.project.author = self.author_entry.get_text()
             self.project.year = str(self.year_spinbutton.get_value_as_int())
 
-            self.project.videowidth = int(self.width_spinbutton.get_value())
-            self.project.videoheight = int(self.height_spinbutton.get_value())
-            self.project.videorate = self.frame_rate_fraction_widget.get_widget_value()
+            self.project.set_video_properties(
+                int(self.width_spinbutton.get_value()),
+                int(self.height_spinbutton.get_value()),
+                self.frame_rate_fraction_widget.get_widget_value())
 
             self.project.audiochannels = get_combo_value(self.channels_combo)
             self.project.audiorate = get_combo_value(self.sample_rate_combo)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]