Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_sequencer.cc')
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_sequencer.cc48
1 files changed, 29 insertions, 19 deletions
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_sequencer.cc b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_sequencer.cc
index 34c23740730..166ca37bc35 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_sequencer.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_sequencer.cc
@@ -38,33 +38,43 @@ SequencerBackup::SequencerBackup(const Depsgraph *depsgraph) : depsgraph(depsgra
{
}
+static bool seq_init_cb(Sequence *seq, void *user_data)
+{
+ SequencerBackup *sb = (SequencerBackup *)user_data;
+ SequenceBackup sequence_backup(sb->depsgraph);
+ sequence_backup.init_from_sequence(seq);
+ if (!sequence_backup.isEmpty()) {
+ const SessionUUID &session_uuid = seq->runtime.session_uuid;
+ BLI_assert(BLI_session_uuid_is_generated(&session_uuid));
+ sb->sequences_backup.add(session_uuid, sequence_backup);
+ }
+ return true;
+}
+
void SequencerBackup::init_from_scene(Scene *scene)
{
- Sequence *sequence;
- SEQ_ALL_BEGIN (scene->ed, sequence) {
- SequenceBackup sequence_backup(depsgraph);
- sequence_backup.init_from_sequence(sequence);
- if (!sequence_backup.isEmpty()) {
- const SessionUUID &session_uuid = sequence->runtime.session_uuid;
- BLI_assert(BLI_session_uuid_is_generated(&session_uuid));
- sequences_backup.add(session_uuid, sequence_backup);
- }
+ if (scene->ed != nullptr) {
+ SEQ_for_each_callback(&scene->ed->seqbase, seq_init_cb, this);
}
- SEQ_ALL_END;
+}
+
+static bool seq_restore_cb(Sequence *seq, void *user_data)
+{
+ SequencerBackup *sb = (SequencerBackup *)user_data;
+ const SessionUUID &session_uuid = seq->runtime.session_uuid;
+ BLI_assert(BLI_session_uuid_is_generated(&session_uuid));
+ SequenceBackup *sequence_backup = sb->sequences_backup.lookup_ptr(session_uuid);
+ if (sequence_backup != nullptr) {
+ sequence_backup->restore_to_sequence(seq);
+ }
+ return true;
}
void SequencerBackup::restore_to_scene(Scene *scene)
{
- Sequence *sequence;
- SEQ_ALL_BEGIN (scene->ed, sequence) {
- const SessionUUID &session_uuid = sequence->runtime.session_uuid;
- BLI_assert(BLI_session_uuid_is_generated(&session_uuid));
- SequenceBackup *sequence_backup = sequences_backup.lookup_ptr(session_uuid);
- if (sequence_backup != nullptr) {
- sequence_backup->restore_to_sequence(sequence);
- }
+ if (scene->ed != nullptr) {
+ SEQ_for_each_callback(&scene->ed->seqbase, seq_restore_cb, this);
}
- SEQ_ALL_END;
/* Cleanup audio while the scene is still known. */
for (SequenceBackup &sequence_backup : sequences_backup.values()) {
if (sequence_backup.scene_sound != nullptr) {