[pitivi/1.0] project: Fix restoring the project w/h after render
- From: Alexandru Băluț <alexbalut src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi/1.0] project: Fix restoring the project w/h after render
- Date: Thu, 8 Feb 2018 05:54:06 +0000 (UTC)
commit e1aacd856ee1db07cd076181cb388c570341c5d4
Author: Alexandru Băluț <alexandru balut gmail com>
Date: Sat Dec 23 01:13:02 2017 +0100
project: Fix restoring the project w/h after render
Sometimes int(x / y) * y != x
Differential Revision: https://phabricator.freedesktop.org/D1927
pitivi/project.py | 24 +++++++++++++-----------
tests/test_project.py | 44 +++++++++++++++++++++++++++++++++++++++-----
2 files changed, 52 insertions(+), 16 deletions(-)
---
diff --git a/pitivi/project.py b/pitivi/project.py
index bb05c23..c7a7627 100644
--- a/pitivi/project.py
+++ b/pitivi/project.py
@@ -742,6 +742,8 @@ class Project(Loggable, GES.Project):
self._vcodecsettings_cache = {}
# A ((container_profile, aencoder) -> acodecsettings) map.
self._acodecsettings_cache = {}
+ # Whether the current settings are temporary and should be reverted,
+ # as they apply only for rendering.
self._has_rendering_values = False
def _scenarioDoneCb(self, scenario):
@@ -807,23 +809,23 @@ class Project(Loggable, GES.Project):
return
self.set_meta("author", author)
- # Encoding related properties
def set_rendering(self, rendering):
+ """Sets the a/v restrictions for rendering or for editing."""
self._ensureAudioRestrictions()
self._ensureVideoRestrictions()
video_restrictions = self.video_profile.get_restriction().copy_nth(0)
- video_restrictions_struct = video_restrictions[0]
- if rendering and self._has_rendering_values != rendering:
- width = int(video_restrictions_struct["width"] * self.render_scale / 100)
- height = int(video_restrictions_struct["height"] * self.render_scale / 100)
-
- video_restrictions.set_value('width', width)
- video_restrictions.set_value('height', height)
- elif self._has_rendering_values != rendering:
- width = int(video_restrictions_struct["width"] / self.render_scale * 100)
- height = int(video_restrictions_struct["height"] / self.render_scale * 100)
+ if self._has_rendering_values != rendering:
+ if rendering:
+ video_restrictions_struct = video_restrictions[0]
+ self.__width = video_restrictions_struct["width"]
+ self.__height = video_restrictions_struct["height"]
+ width = int(self.__width * self.render_scale / 100)
+ height = int(self.__height * self.render_scale / 100)
+ else:
+ width = self.__width
+ height = self.__height
video_restrictions.set_value("width", width)
video_restrictions.set_value("height", height)
diff --git a/tests/test_project.py b/tests/test_project.py
index c388559..8daaea2 100644
--- a/tests/test_project.py
+++ b/tests/test_project.py
@@ -606,12 +606,12 @@ class TestProjectSettings(common.TestCase):
class TestExportSettings(TestCase):
- def testMasterAttributes(self):
- self._testMasterAttribute('muxer', dependant_attr='containersettings')
- self._testMasterAttribute('vencoder', dependant_attr='vcodecsettings')
- self._testMasterAttribute('aencoder', dependant_attr='acodecsettings')
+ def test_master_attributes(self):
+ self._check_master_attribute("muxer", dependant_attr="containersettings")
+ self._check_master_attribute("vencoder", dependant_attr="vcodecsettings")
+ self._check_master_attribute("aencoder", dependant_attr="acodecsettings")
- def _testMasterAttribute(self, attr, dependant_attr):
+ def _check_master_attribute(self, attr, dependant_attr):
"""Test changing the specified attr has effect on its dependent attr."""
project = common.create_project()
@@ -645,3 +645,37 @@ class TestExportSettings(TestCase):
setattr(project, attr, attr_value2)
self.assertFalse("key1" in getattr(project, dependant_attr))
self.assertFalse("key2" in getattr(project, dependant_attr))
+
+ def test_set_rendering(self):
+ """Checks the set_rendering method."""
+ mainloop = common.create_main_loop()
+
+ def loaded_cb(project, timeline):
+ project.addUris([common.get_sample_uri("tears_of_steel.webm")])
+
+ def progress_cb(project, progress, estimated_time):
+ if progress == 100:
+ mainloop.quit()
+
+ # Create a blank project and add some assets.
+ project = common.create_project()
+
+ project.connect_after("loaded", loaded_cb)
+ project.connect_after("asset-loading-progress", progress_cb)
+
+ mainloop.run()
+
+ # The video settings should match tears_of_steel.webm
+ self.assertEqual(project.videowidth, 960)
+ self.assertEqual(project.videoheight, 400)
+
+ project.render_scale = 3
+ # Pretend we're rendering.
+ project.set_rendering(True)
+ self.assertEqual(project.videowidth, 28)
+ self.assertEqual(project.videoheight, 12)
+
+ # Pretend we're not rendering anymore.
+ project.set_rendering(False)
+ self.assertEqual(project.videowidth, 960)
+ self.assertEqual(project.videoheight, 400)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]