[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