diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-06-07 12:27:34 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-06-07 12:59:30 +0300 |
commit | 7081935a307b1dbdb3d8c564611c5f82c45d1ec2 (patch) | |
tree | db4247dd2a668b125c2b11a2d82fb984575716d9 /source/blender/depsgraph | |
parent | d4a5691d0fd5be0517968a95ebbe84778fb82b3a (diff) |
Sequencer: Fix missing sound from nested scene strips
Diffstat (limited to 'source/blender/depsgraph')
3 files changed, 30 insertions, 4 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_map.h b/source/blender/depsgraph/intern/builder/deg_builder_map.h index dd124e07a00..0767837a587 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_map.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_map.h @@ -40,10 +40,11 @@ class BuilderMap { TAG_SCENE_COMPOSITOR = (1 << 4), TAG_SCENE_SEQUENCER = (1 << 5), + TAG_SCENE_AUDIO = (1 << 5), /* All ID components has been built. */ TAG_COMPLETE = (TAG_ANIMATION | TAG_PARAMETERS | TAG_TRANSFORM | TAG_GEOMETRY | - TAG_SCENE_COMPOSITOR | TAG_SCENE_SEQUENCER), + TAG_SCENE_COMPOSITOR | TAG_SCENE_SEQUENCER | TAG_SCENE_AUDIO), }; BuilderMap(); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index 9bdc815518d..64e5455dcbe 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -1582,7 +1582,8 @@ void DepsgraphNodeBuilder::build_scene_sequencer(Scene *scene) if (scene->ed == NULL) { return; } - Scene *scene_cow = get_cow_datablock(scene_); + build_scene_audio(scene); + Scene *scene_cow = get_cow_datablock(scene); add_operation_node(&scene->id, NodeType::SEQUENCER, OperationCode::SEQUENCES_EVAL, @@ -1593,6 +1594,14 @@ void DepsgraphNodeBuilder::build_scene_sequencer(Scene *scene) if (seq->sound != NULL) { build_sound(seq->sound); } + if (seq->scene != NULL) { + build_scene_parameters(seq->scene); + } + if (seq->type == SEQ_TYPE_SCENE && seq->flag & SEQ_SCENE_STRIPS) { + if (seq->scene != NULL) { + build_scene_sequencer(seq->scene); + } + } /* TODO(sergey): Movie clip, scene, camera, mask. */ } SEQ_END; @@ -1600,6 +1609,9 @@ void DepsgraphNodeBuilder::build_scene_sequencer(Scene *scene) void DepsgraphNodeBuilder::build_scene_audio(Scene *scene) { + if (built_map_.checkIsBuiltAndTag(scene, BuilderMap::TAG_SCENE_AUDIO)) { + return; + } add_operation_node(&scene->id, NodeType::AUDIO, OperationCode::SOUND_EVAL); } diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index a1f8c59f936..a0f10e560fa 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -2331,6 +2331,8 @@ void DepsgraphRelationBuilder::build_scene_sequencer(Scene *scene) if (scene->ed == NULL) { return; } + build_scene_audio(scene); + ComponentKey scene_audio_key(&scene->id, NodeType::AUDIO); /* Make sure dependencies from sequences data goes to the sequencer evaluation. */ ComponentKey sequencer_key(&scene->id, NodeType::SEQUENCER); Sequence *seq; @@ -2342,11 +2344,22 @@ void DepsgraphRelationBuilder::build_scene_sequencer(Scene *scene) add_relation(sound_key, sequencer_key, "Sound -> Sequencer"); has_audio_strips = true; } - /* TODO(sergey): Movie clip, scene, camera, mask. */ + if (seq->scene != NULL) { + build_scene_parameters(seq->scene); + /* This is to support 3D audio. */ + has_audio_strips = true; + } + if (seq->type == SEQ_TYPE_SCENE && seq->flag & SEQ_SCENE_STRIPS) { + if (seq->scene != NULL) { + build_scene_sequencer(seq->scene); + ComponentKey sequence_scene_audio_key(&seq->scene->id, NodeType::AUDIO); + add_relation(sequence_scene_audio_key, scene_audio_key, "Sequence Audio -> Scene Audio"); + } + } + /* TODO(sergey): Movie clip, camera, mask. */ } SEQ_END; if (has_audio_strips) { - ComponentKey scene_audio_key(&scene->id, NodeType::AUDIO); add_relation(sequencer_key, scene_audio_key, "Sequencer -> Audio"); } } |