[Bf-blender-cvs] [5449ae00534] temp-vse-retiming-tool: Fix speed range math when one of strips has no retiming data

Richard Antalik noreply at git.blender.org
Mon Nov 14 16:58:21 CET 2022


Commit: 5449ae00534ea8a1f48fba1e5fd732c0aa77a32f
Author: Richard Antalik
Date:   Mon Nov 14 16:13:25 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB5449ae00534ea8a1f48fba1e5fd732c0aa77a32f

Fix speed range math when one of strips has no retiming data

===================================================================

M	source/blender/sequencer/intern/strip_retiming.cc

===================================================================

diff --git a/source/blender/sequencer/intern/strip_retiming.cc b/source/blender/sequencer/intern/strip_retiming.cc
index d7262efc46c..1a61ccce013 100644
--- a/source/blender/sequencer/intern/strip_retiming.cc
+++ b/source/blender/sequencer/intern/strip_retiming.cc
@@ -311,34 +311,45 @@ class RetimingRangeData {
 
   RetimingRangeData &operator*=(const RetimingRangeData rhs)
   {
-    for (int i = 0; i < ranges.size(); i++) {
-      RetimingRange &range = ranges[i];
+    if (ranges.size() == 0) {
       for (const RetimingRange &rhs_range : rhs.ranges) {
-        if (range.intersect_type(rhs_range) == range.NONE) {
-          continue;
-        }
-        else if (range.intersect_type(rhs_range) == range.FULL) {
-          range.speed *= rhs_range.speed;
-        }
-        else if (range.intersect_type(rhs_range) == range.PARTIAL_START) {
-          RetimingRange range_left = RetimingRange(
-              range.start, rhs_range.end, range.speed * rhs_range.speed);
-          range.start = rhs_range.end + 1;
-          ranges.insert(ranges.begin() + i, range_left);
-        }
-        else if (range.intersect_type(rhs_range) == range.PARTIAL_END) {
-          RetimingRange range_left = RetimingRange(range.start, rhs_range.start - 1, range.speed);
-          range.start = rhs_range.start;
-          ranges.insert(ranges.begin() + i, range_left);
-        }
-        else if (range.intersect_type(rhs_range) == range.INSIDE) {
-          RetimingRange range_left = RetimingRange(range.start, rhs_range.start - 1, range.speed);
-          RetimingRange range_mid = RetimingRange(
-              rhs_range.start, rhs_range.start, rhs_range.speed * range.speed);
-          range.start = rhs_range.end + 1;
-          ranges.insert(ranges.begin() + i, range_left);
-          ranges.insert(ranges.begin() + i, range_mid);
-          break;
+        RetimingRange range = RetimingRange(
+            rhs_range.start, rhs_range.end, rhs_range.speed);
+        ranges.push_back(range);
+      }
+    }
+    else {
+      for (int i = 0; i < ranges.size(); i++) {
+        RetimingRange &range = ranges[i];
+        for (const RetimingRange &rhs_range : rhs.ranges) {
+          if (range.intersect_type(rhs_range) == range.NONE) {
+            continue;
+          }
+          else if (range.intersect_type(rhs_range) == range.FULL) {
+            range.speed *= rhs_range.speed;
+          }
+          else if (range.intersect_type(rhs_range) == range.PARTIAL_START) {
+            RetimingRange range_left = RetimingRange(
+                range.start, rhs_range.end, range.speed * rhs_range.speed);
+            range.start = rhs_range.end + 1;
+            ranges.insert(ranges.begin() + i, range_left);
+          }
+          else if (range.intersect_type(rhs_range) == range.PARTIAL_END) {
+            RetimingRange range_left = RetimingRange(
+                range.start, rhs_range.start - 1, range.speed);
+            range.start = rhs_range.start;
+            ranges.insert(ranges.begin() + i, range_left);
+          }
+          else if (range.intersect_type(rhs_range) == range.INSIDE) {
+            RetimingRange range_left = RetimingRange(
+                range.start, rhs_range.start - 1, range.speed);
+            RetimingRange range_mid = RetimingRange(
+                rhs_range.start, rhs_range.start, rhs_range.speed * range.speed);
+            range.start = rhs_range.end + 1;
+            ranges.insert(ranges.begin() + i, range_left);
+            ranges.insert(ranges.begin() + i, range_mid);
+            break;
+          }
         }
       }
     }



More information about the Bf-blender-cvs mailing list