[Bf-blender-cvs] [3369b828916] master: Depsgraph: Add scene audio component

Sergey Sharybin noreply at git.blender.org
Fri May 3 15:52:43 CEST 2019


Commit: 3369b8289167ddf3dbca0e3895d598bf73534124
Author: Sergey Sharybin
Date:   Wed May 1 12:46:47 2019 +0200
Branches: master
https://developer.blender.org/rB3369b8289167ddf3dbca0e3895d598bf73534124

Depsgraph: Add scene audio component

The idea is to make that responsible for dealing with
things like audio update on frame jump and such.

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

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.h
M	source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
M	source/blender/depsgraph/intern/depsgraph_tag.cc
M	source/blender/makesdna/DNA_ID.h

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 563edafcb0e..a9cafd933d9 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -1585,6 +1585,11 @@ void DepsgraphNodeBuilder::build_sequencer(Scene *scene)
   SEQ_END;
 }
 
+void DepsgraphNodeBuilder::build_scene_audio(Scene *scene)
+{
+  add_operation_node(&scene->id, NodeType::AUDIO, OperationCode::SOUND_EVAL);
+}
+
 /* **** ID traversal callbacks functions **** */
 
 void DepsgraphNodeBuilder::modifier_walk(void *user_data,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 9805bd97b08..9074efefe50 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -209,6 +209,7 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder {
   void build_speaker(Speaker *speaker);
   void build_sound(bSound *sound);
   void build_sequencer(Scene *scene);
+  void build_scene_audio(Scene *scene);
 
   /* Per-ID information about what was already in the dependency graph.
    * Allows to re-use certain values, to speed up following evaluation. */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
index c03416e956e..1b9524e5832 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
@@ -154,6 +154,7 @@ void DepsgraphNodeBuilder::build_view_layer(Scene *scene,
   }
   /* Sequencer. */
   if (linked_state == DEG_ID_LINKED_DIRECTLY) {
+    build_scene_audio(scene);
     build_sequencer(scene);
   }
   /* Collections. */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 46d565ad190..8fef35570fe 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -2307,15 +2307,25 @@ void DepsgraphRelationBuilder::build_sequencer(Scene *scene)
   /* Make sure dependnecies from sequences data goes to the sequencer evaluation. */
   ComponentKey sequencer_key(&scene->id, NodeType::SEQUENCER);
   Sequence *seq;
+  bool has_audio_strips = false;
   SEQ_BEGIN (scene->ed, seq) {
     if (seq->sound != NULL) {
       build_sound(seq->sound);
       ComponentKey sound_key(&seq->sound->id, NodeType::AUDIO);
       add_relation(sound_key, sequencer_key, "Sound -> Sequencer");
+      has_audio_strips = true;
     }
     /* TODO(sergey): Movie clip, scene, 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");
+  }
+}
+
+void DepsgraphRelationBuilder::build_scene_audio(Scene * /*scene*/)
+{
 }
 
 void DepsgraphRelationBuilder::build_copy_on_write_relations()
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 190b4064481..30fbe5bcf6b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -270,6 +270,7 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder {
   void build_speaker(Speaker *speaker);
   void build_sound(bSound *sound);
   void build_sequencer(Scene *scene);
+  void build_scene_audio(Scene *scene);
 
   void build_nested_datablock(ID *owner, ID *id);
   void build_nested_nodetree(ID *owner, bNodeTree *ntree);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
index 8a23e4b9b6e..cadb4ab3611 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
@@ -132,6 +132,7 @@ void DepsgraphRelationBuilder::build_view_layer(Scene *scene,
   }
   /* Sequencer. */
   if (linked_state == DEG_ID_LINKED_DIRECTLY) {
+    build_scene_audio(scene);
     build_sequencer(scene);
   }
   /* Build all set scenes. */
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index f7d7b76cb69..d8e895364ca 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -218,6 +218,9 @@ void depsgraph_tag_to_component_opcode(const ID *id,
     case ID_RECALC_SEQUENCER:
       *component_type = NodeType::SEQUENCER;
       break;
+    case ID_RECALC_AUDIO_JUMP:
+      *component_type = NodeType::AUDIO;
+      break;
     case ID_RECALC_ALL:
     case ID_RECALC_PSYS_ALL:
       BLI_assert(!"Should not happen");
@@ -620,6 +623,8 @@ const char *DEG_update_tag_as_string(IDRecalcFlag flag)
       return "EDITORS";
     case ID_RECALC_SEQUENCER:
       return "SEQUENCER";
+    case ID_RECALC_AUDIO_JUMP:
+      return "AUDIO_JUMP";
     case ID_RECALC_ALL:
       return "ALL";
   }
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index 12f59cf8e78..42ee4e9a6c8 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -608,6 +608,10 @@ typedef enum IDRecalcFlag {
    * Use this tag with a scene ID which owns the sequences. */
   ID_RECALC_SEQUENCER = (1 << 14),
 
+  /* Frame changed in a way that caused audio jump.
+   * Use this on a scene ID. */
+  ID_RECALC_AUDIO_JUMP = (1 << 15),
+
   /***************************************************************************
    * Pseudonyms, to have more semantic meaning in the actual code without
    * using too much low-level and implementation specific tags. */



More information about the Bf-blender-cvs mailing list