Differential D8433 Diff 27307 source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_sequencer.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_sequencer.cc
| Show All 20 Lines | |||||
| * \ingroup depsgraph | * \ingroup depsgraph | ||||
| */ | */ | ||||
| #include "intern/eval/deg_eval_runtime_backup_sequencer.h" | #include "intern/eval/deg_eval_runtime_backup_sequencer.h" | ||||
| #include "DNA_scene_types.h" | #include "DNA_scene_types.h" | ||||
| #include "DNA_sequence_types.h" | #include "DNA_sequence_types.h" | ||||
| #include "BLI_assert.h" | |||||
| #include "BKE_sequencer.h" | #include "BKE_sequencer.h" | ||||
| #include "BKE_sound.h" | #include "BKE_sound.h" | ||||
| namespace blender { | namespace blender { | ||||
| namespace deg { | namespace deg { | ||||
| SequencerBackup::SequencerBackup(const Depsgraph *depsgraph) : depsgraph(depsgraph) | SequencerBackup::SequencerBackup(const Depsgraph *depsgraph) : depsgraph(depsgraph) | ||||
| { | { | ||||
| } | } | ||||
| void SequencerBackup::init_from_scene(Scene *scene) | void SequencerBackup::init_from_scene(Scene *scene) | ||||
| { | { | ||||
| Sequence *sequence; | Sequence *sequence; | ||||
| SEQ_BEGIN (scene->ed, sequence) { | SEQ_BEGIN (scene->ed, sequence) { | ||||
| SequenceBackup sequence_backup(depsgraph); | SequenceBackup sequence_backup(depsgraph); | ||||
| sequence_backup.init_from_sequence(sequence); | sequence_backup.init_from_sequence(sequence); | ||||
| if (!sequence_backup.isEmpty()) { | if (!sequence_backup.isEmpty()) { | ||||
| sequences_backup.add(sequence->orig_sequence, sequence_backup); | const SessionUUID &session_uuid = sequence->runtime.session_uuid; | ||||
| BLI_assert(BLI_session_uuid_is_generated(&session_uuid)); | |||||
| sequences_backup.add(session_uuid, sequence_backup); | |||||
| } | } | ||||
| } | } | ||||
| SEQ_END; | SEQ_END; | ||||
| } | } | ||||
| void SequencerBackup::restore_to_scene(Scene *scene) | void SequencerBackup::restore_to_scene(Scene *scene) | ||||
| { | { | ||||
| Sequence *sequence; | Sequence *sequence; | ||||
| SEQ_BEGIN (scene->ed, sequence) { | SEQ_BEGIN (scene->ed, sequence) { | ||||
| SequenceBackup *sequence_backup = sequences_backup.lookup_ptr(sequence->orig_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) { | if (sequence_backup != nullptr) { | ||||
| sequence_backup->restore_to_sequence(sequence); | sequence_backup->restore_to_sequence(sequence); | ||||
| } | } | ||||
| } | } | ||||
| SEQ_END; | SEQ_END; | ||||
| /* Cleanup audio while the scene is still known. */ | /* Cleanup audio while the scene is still known. */ | ||||
| for (SequenceBackup &sequence_backup : sequences_backup.values()) { | for (SequenceBackup &sequence_backup : sequences_backup.values()) { | ||||
| if (sequence_backup.scene_sound != nullptr) { | if (sequence_backup.scene_sound != nullptr) { | ||||
| BKE_sound_remove_scene_sound(scene, sequence_backup.scene_sound); | BKE_sound_remove_scene_sound(scene, sequence_backup.scene_sound); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } // namespace deg | } // namespace deg | ||||
| } // namespace blender | } // namespace blender | ||||