[Bf-blender-cvs] [bbf1c83370e] master: Fix T74875: Preview shows previously cached frame after Hard Cut

Richard Antalik noreply at git.blender.org
Sun Apr 12 22:51:02 CEST 2020


Commit: bbf1c83370ea0682cafb99ad98e52ae625f360a9
Author: Richard Antalik
Date:   Sun Apr 12 22:42:31 2020 +0200
Branches: master
https://developer.blender.org/rBbbf1c83370ea0682cafb99ad98e52ae625f360a9

Fix T74875: Preview shows previously cached frame after Hard Cut

Add method to invalidate strip cache in range of non-overlapping strip.
Invalidate original strip in range of new strip created by cutting.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7313

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

M	source/blender/blenkernel/BKE_sequencer.h
M	source/blender/blenkernel/intern/seqcache.c
M	source/blender/blenkernel/intern/sequencer.c
M	source/blender/editors/space_sequencer/sequencer_edit.c

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

diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index dd9414b81f7..cb95bacba4c 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -336,7 +336,8 @@ void BKE_sequencer_cache_cleanup(struct Scene *scene);
 void BKE_sequencer_cache_cleanup_sequence(struct Scene *scene,
                                           struct Sequence *seq,
                                           struct Sequence *seq_changed,
-                                          int invalidate_types);
+                                          int invalidate_types,
+                                          bool force_seq_changed_range);
 void BKE_sequencer_cache_iterate(struct Scene *scene,
                                  void *userdata,
                                  bool callback_init(void *userdata, size_t item_count),
@@ -434,6 +435,7 @@ void BKE_sequence_invalidate_cache_composite(struct Scene *scene, struct Sequenc
 void BKE_sequence_invalidate_dependent(struct Scene *scene, struct Sequence *seq);
 void BKE_sequence_invalidate_scene_strips(struct Main *bmain, struct Scene *scene_target);
 void BKE_sequence_invalidate_movieclip_strips(struct Main *bmain, struct MovieClip *clip_target);
+void BKE_sequence_invalidate_cache_in_range(struct Scene *scene, struct Sequence *seq, struct Sequence *range_mask, int invalidate_types);
 
 void BKE_sequencer_update_sound_bounds_all(struct Scene *scene);
 void BKE_sequencer_update_sound_bounds(struct Scene *scene, struct Sequence *seq);
diff --git a/source/blender/blenkernel/intern/seqcache.c b/source/blender/blenkernel/intern/seqcache.c
index 12c5821e858..f999a98faac 100644
--- a/source/blender/blenkernel/intern/seqcache.c
+++ b/source/blender/blenkernel/intern/seqcache.c
@@ -1153,7 +1153,8 @@ void BKE_sequencer_cache_cleanup(Scene *scene)
 void BKE_sequencer_cache_cleanup_sequence(Scene *scene,
                                           Sequence *seq,
                                           Sequence *seq_changed,
-                                          int invalidate_types)
+                                          int invalidate_types,
+                                          bool force_seq_changed_range)
 {
   SeqCache *cache = seq_cache_get_from_scene(scene);
   if (!cache) {
@@ -1169,12 +1170,14 @@ void BKE_sequencer_cache_cleanup_sequence(Scene *scene,
   int range_start = seq_changed->startdisp;
   int range_end = seq_changed->enddisp;
 
-  if (seq->startdisp > range_start) {
-    range_start = seq->startdisp;
-  }
+  if (!force_seq_changed_range) {
+    if (seq->startdisp > range_start) {
+      range_start = seq->startdisp;
+    }
 
-  if (seq->enddisp < range_end) {
-    range_end = seq->enddisp;
+    if (seq->enddisp < range_end) {
+      range_end = seq->enddisp;
+    }
   }
 
   int invalidate_composite = invalidate_types & SEQ_CACHE_STORE_FINAL_OUT;
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 7f89b946948..93e5a3bbd74 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -4168,13 +4168,12 @@ static void sequence_do_invalidate_dependent(Scene *scene, Sequence *seq, ListBa
     if (BKE_sequence_check_depend(seq, cur)) {
       /* Effect must be invalidated completely if they depend on invalidated seq. */
       if ((cur->type & SEQ_TYPE_EFFECT) != 0) {
-        BKE_sequencer_cache_cleanup_sequence(
-            scene, cur, seq, SEQ_CACHE_ALL_TYPES);
+        BKE_sequencer_cache_cleanup_sequence(scene, cur, seq, SEQ_CACHE_ALL_TYPES, false);
       }
       else {
         /* In case of alpha over for example only invalidate composite image */
         BKE_sequencer_cache_cleanup_sequence(
-            scene, cur, seq, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT);
+            scene, cur, seq, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT, false);
       }
     }
 
@@ -4193,7 +4192,7 @@ static void sequence_invalidate_cache(Scene *scene,
 
   if (invalidate_self) {
     BKE_sequence_free_anim(seq);
-    BKE_sequencer_cache_cleanup_sequence(scene, seq, seq, invalidate_types);
+    BKE_sequencer_cache_cleanup_sequence(scene, seq, seq, invalidate_types, false);
   }
 
   if (seq->effectdata && seq->type == SEQ_TYPE_SPEED) {
@@ -4205,6 +4204,14 @@ static void sequence_invalidate_cache(Scene *scene,
   BKE_sequencer_prefetch_stop(scene);
 }
 
+void BKE_sequence_invalidate_cache_in_range(Scene *scene,
+                                            Sequence *seq,
+                                            Sequence *range_mask,
+                                            int invalidate_types)
+{
+  BKE_sequencer_cache_cleanup_sequence(scene, seq, range_mask, invalidate_types, true);
+}
+
 void BKE_sequence_invalidate_cache_raw(Scene *scene, Sequence *seq)
 {
   sequence_invalidate_cache(scene, seq, true, SEQ_CACHE_ALL_TYPES);
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 0175260a95c..83671a0d600 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -838,6 +838,7 @@ static Sequence *split_seq_hard(
 
     BKE_sequence_reload_new_file(bmain, scene, seqn, false);
     BKE_sequence_calc(scene, seqn);
+    BKE_sequence_invalidate_cache_in_range(scene, seq, seqn, SEQ_CACHE_ALL_TYPES);
   }
   return seqn;
 }
@@ -937,6 +938,7 @@ static Sequence *split_seq_soft(
     }
 
     BKE_sequence_calc(scene, seqn);
+    BKE_sequence_invalidate_cache_in_range(scene, seq, seqn, SEQ_CACHE_ALL_TYPES);
   }
   return seqn;
 }



More information about the Bf-blender-cvs mailing list