[Bf-blender-cvs] [62e32e7c2e0] blender-v3.4-release: Fix VSE: Effect strip flickers when moving left handle

Richard Antalik noreply at git.blender.org
Tue Nov 8 21:20:36 CET 2022


Commit: 62e32e7c2e039415f91cb5578c462f98417bad0b
Author: Richard Antalik
Date:   Tue Nov 8 21:05:18 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB62e32e7c2e039415f91cb5578c462f98417bad0b

Fix VSE: Effect strip flickers when moving left handle

The issue was caused by refactoring, see 7afcfe111aacc8bc. Function
`SEQ_transform_fix_single_image_seq_offsets` modified offsets after
handle was moved, but this was not done correctly.

Remove function mentioned above and move strip start when moving left
handle of strips that have only single frame of content by design
(image, text, color, ...).

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

M	source/blender/blenloader/intern/versioning_290.c
M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/transform/transform_convert_sequencer.c
M	source/blender/makesrna/intern/rna_sequencer.c
M	source/blender/sequencer/SEQ_transform.h
M	source/blender/sequencer/intern/strip_add.c
M	source/blender/sequencer/intern/strip_time.c
M	source/blender/sequencer/intern/strip_transform.c

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

diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c
index e4c476e1212..b8161a9dc40 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -365,7 +365,6 @@ static void seq_update_meta_disp_range(Scene *scene)
     /* Update meta strip endpoints. */
     SEQ_time_left_handle_frame_set(scene, ms->parseq, ms->disp_range[0]);
     SEQ_time_right_handle_frame_set(scene, ms->parseq, ms->disp_range[1]);
-    SEQ_transform_fix_single_image_seq_offsets(scene, ms->parseq);
 
     /* Recalculate effects using meta strip. */
     LISTBASE_FOREACH (Sequence *, seq, ms->oldbasep) {
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index c0c7782c60c..a9e31de2096 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -371,7 +371,6 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op)
         else { /* SEQ_RIGHTSEL */
           SEQ_time_right_handle_frame_set(scene, seq, snap_frame);
         }
-        SEQ_transform_fix_single_image_seq_offsets(scene, seq);
       }
     }
   }
diff --git a/source/blender/editors/transform/transform_convert_sequencer.c b/source/blender/editors/transform/transform_convert_sequencer.c
index 090f1bf1e6c..80c74b81cfa 100644
--- a/source/blender/editors/transform/transform_convert_sequencer.c
+++ b/source/blender/editors/transform/transform_convert_sequencer.c
@@ -615,7 +615,6 @@ static void flushTransSeq(TransInfo *t)
       case SEQ_LEFTSEL: { /* No vertical transform. */
         int old_startdisp = SEQ_time_left_handle_frame_get(scene, seq);
         SEQ_time_left_handle_frame_set(t->scene, seq, new_frame);
-        SEQ_transform_fix_single_image_seq_offsets(t->scene, seq);
 
         if (abs(SEQ_time_left_handle_frame_get(scene, seq) - old_startdisp) > abs(max_offset)) {
           max_offset = SEQ_time_left_handle_frame_get(scene, seq) - old_startdisp;
@@ -625,7 +624,6 @@ static void flushTransSeq(TransInfo *t)
       case SEQ_RIGHTSEL: { /* No vertical transform. */
         int old_enddisp = SEQ_time_right_handle_frame_get(scene, seq);
         SEQ_time_right_handle_frame_set(t->scene, seq, new_frame);
-        SEQ_transform_fix_single_image_seq_offsets(t->scene, seq);
 
         if (abs(SEQ_time_right_handle_frame_get(scene, seq) - old_enddisp) > abs(max_offset)) {
           max_offset = SEQ_time_right_handle_frame_get(scene, seq) - old_enddisp;
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index c952210eecf..a10c64e292e 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -330,7 +330,6 @@ static void rna_Sequence_start_frame_final_set(PointerRNA *ptr, int value)
   Scene *scene = (Scene *)ptr->owner_id;
 
   SEQ_time_left_handle_frame_set(scene, seq, value);
-  SEQ_transform_fix_single_image_seq_offsets(scene, seq);
   do_sequence_frame_change_update(scene, seq);
   SEQ_relations_invalidate_cache_composite(scene, seq);
 }
@@ -341,7 +340,6 @@ static void rna_Sequence_end_frame_final_set(PointerRNA *ptr, int value)
   Scene *scene = (Scene *)ptr->owner_id;
 
   SEQ_time_right_handle_frame_set(scene, seq, value);
-  SEQ_transform_fix_single_image_seq_offsets(scene, seq);
   do_sequence_frame_change_update(scene, seq);
   SEQ_relations_invalidate_cache_composite(scene, seq);
 }
diff --git a/source/blender/sequencer/SEQ_transform.h b/source/blender/sequencer/SEQ_transform.h
index c27a9dc4409..30cf472f55b 100644
--- a/source/blender/sequencer/SEQ_transform.h
+++ b/source/blender/sequencer/SEQ_transform.h
@@ -23,7 +23,6 @@ bool SEQ_transform_sequence_can_be_translated(struct Sequence *seq);
  * since they work a bit differently to normal image seq's (during transform).
  */
 bool SEQ_transform_single_image_check(struct Sequence *seq);
-void SEQ_transform_fix_single_image_seq_offsets(const struct Scene *scene, struct Sequence *seq);
 bool SEQ_transform_test_overlap(const struct Scene *scene,
                                 struct ListBase *seqbasep,
                                 struct Sequence *test);
diff --git a/source/blender/sequencer/intern/strip_add.c b/source/blender/sequencer/intern/strip_add.c
index 7f4c91724fc..d98a00aa9a5 100644
--- a/source/blender/sequencer/intern/strip_add.c
+++ b/source/blender/sequencer/intern/strip_add.c
@@ -668,7 +668,6 @@ void SEQ_add_reload_new_file(Main *bmain, Scene *scene, Sequence *seq, const boo
   if (lock_range) {
     SEQ_time_left_handle_frame_set(scene, seq, prev_startdisp);
     SEQ_time_right_handle_frame_set(scene, seq, prev_enddisp);
-    SEQ_transform_fix_single_image_seq_offsets(scene, seq);
   }
 
   SEQ_relations_invalidate_cache_raw(scene, seq);
diff --git a/source/blender/sequencer/intern/strip_time.c b/source/blender/sequencer/intern/strip_time.c
index c484cd425c4..0b480b22e91 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -530,7 +530,18 @@ void SEQ_time_left_handle_frame_set(const Scene *scene, Sequence *seq, int timel
     timeline_frame = right_handle_orig_frame - 1;
   }
 
-  seq->startofs = timeline_frame - SEQ_time_start_frame_get(seq);
+  float offset = timeline_frame - SEQ_time_start_frame_get(seq);
+
+  if (SEQ_transform_single_image_check(seq)) {
+    /* This strip has only 1 frame of content, that is always stretched to whole strip length.
+     * Therefore, strip start should be moved instead of adjusting offset. */
+    SEQ_time_start_frame_set(scene, seq, timeline_frame);
+    seq->endofs += offset;
+  }
+  else {
+    seq->startofs = offset;
+  }
+
   seq->startdisp = timeline_frame; /* Only to make files usable in older versions. */
 
   SEQ_time_update_meta_strip_range(scene, seq_sequence_lookup_meta_by_seq(scene, seq));
diff --git a/source/blender/sequencer/intern/strip_transform.c b/source/blender/sequencer/intern/strip_transform.c
index 4296a8ea35c..14875df9445 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -82,24 +82,6 @@ bool SEQ_transform_seqbase_isolated_sel_check(ListBase *seqbase)
   return true;
 }
 
-void SEQ_transform_fix_single_image_seq_offsets(const Scene *scene, Sequence *seq)
-{
-  int left, start;
-  if (!SEQ_transform_single_image_check(seq)) {
-    return;
-  }
-
-  /* make sure the image is always at the start since there is only one,
-   * adjusting its start should be ok */
-  left = SEQ_time_left_handle_frame_get(scene, seq);
-  start = seq->start;
-  if (start != left) {
-    const int offset = left - start;
-    seq_time_translate_handles(scene, seq, -offset);
-    seq->start += offset;
-  }
-}
-
 bool SEQ_transform_sequence_can_be_translated(Sequence *seq)
 {
   return !(seq->type & SEQ_TYPE_EFFECT) || (SEQ_effect_get_num_inputs(seq->type) == 0);



More information about the Bf-blender-cvs mailing list