[Bf-blender-cvs] [4d729b3b3fa] temp-vse-retiming-tool: Add sound strip retiming support

Richard Antalik noreply at git.blender.org
Mon Nov 14 16:58:20 CET 2022


Commit: 4d729b3b3fa3e9e53ae83a7f1177c0fbc9aa3833
Author: Richard Antalik
Date:   Fri Nov 4 18:26:15 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB4d729b3b3fa3e9e53ae83a7f1177c0fbc9aa3833

Add sound strip retiming support

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

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

M	extern/audaspace/src/sequence/SequenceHandle.cpp
M	source/blender/editors/space_sequencer/sequencer_draw.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/sequencer/intern/sequencer.c
M	source/blender/sequencer/intern/strip_add.c
M	source/blender/sequencer/intern/strip_time.c

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

diff --git a/extern/audaspace/src/sequence/SequenceHandle.cpp b/extern/audaspace/src/sequence/SequenceHandle.cpp
index 236e828963a..bb739d812de 100644
--- a/extern/audaspace/src/sequence/SequenceHandle.cpp
+++ b/extern/audaspace/src/sequence/SequenceHandle.cpp
@@ -249,9 +249,7 @@ bool SequenceHandle::seek(double position)
 	AnimateableProperty *pitch_property = m_entry->getAnimProperty(AP_PITCH);
 	
 	float target_frame = 0;
-
-	// XXX this can be optimized for constant interpolation
-	if (pitch_property != nullptr){
+ 	if (pitch_property != nullptr){
 		for (int i = 0; i < seek_frame; i++){
 			float pitch;
 			pitch_property->read(i, &pitch);
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 3a95475c1cc..140f74d871c 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -446,6 +446,7 @@ static void draw_seq_waveform_overlay(
 
   for (int i = 0; i < pixels_to_draw; i++) {
     float timeline_frame = start_frame + i * frames_per_pixel;
+    /* TODO: Use linear interpolation between frames to avoid bad drawing quality. */
     float frame_index = SEQ_give_frame_index(scene, seq, timeline_frame);
     float sample = frame_index * samples_per_frame;
     int sample_index = round_fl_to_int(sample);
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index fde8fcf651c..9a4b42eb052 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -33,6 +33,7 @@
 #include "BKE_idtype.h"
 #include "BKE_paint.h"
 #include "BKE_volume.h"
+#include "BKE_sound.h"
 
 #include "ED_gpencil.h"
 #include "ED_object.h"
@@ -888,9 +889,10 @@ static void rna_Scene_camera_update(Main *bmain, Scene *UNUSED(scene_unused), Po
   DEG_relations_tag_update(bmain);
 }
 
-static void rna_Scene_fps_update(Main *bmain, Scene *UNUSED(active_scene), PointerRNA *ptr)
+static void rna_Scene_fps_update(Main *bmain, Scene *active_scene, PointerRNA *ptr)
 {
   Scene *scene = (Scene *)ptr->owner_id;
+  BKE_sound_update_fps(bmain, active_scene);
   DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO_FPS | ID_RECALC_SEQUENCER_STRIPS);
   /* NOTE: Tag via dependency graph will take care of all the updates ion the evaluated domain,
    * however, changes in FPS actually modifies an original skip length,
diff --git a/source/blender/sequencer/intern/sequencer.c b/source/blender/sequencer/intern/sequencer.c
index d263c2e0437..f7281b67e5f 100644
--- a/source/blender/sequencer/intern/sequencer.c
+++ b/source/blender/sequencer/intern/sequencer.c
@@ -990,7 +990,7 @@ static bool seq_update_seq_cb(Sequence *seq, void *user_data)
     BKE_sound_set_scene_sound_volume(
         seq->scene_sound, seq->volume, (seq->flag & SEQ_AUDIO_VOLUME_ANIMATED) != 0);
     SEQ_retiming_sound_animation_data_set(scene, seq);
-    BKE_sound_set_scene_sound_pan(
+     BKE_sound_set_scene_sound_pan(
         seq->scene_sound, seq->pan, (seq->flag & SEQ_AUDIO_PAN_ANIMATED) != 0);
   }
   return true;
diff --git a/source/blender/sequencer/intern/strip_add.c b/source/blender/sequencer/intern/strip_add.c
index 7f4c91724fc..b3a364fa800 100644
--- a/source/blender/sequencer/intern/strip_add.c
+++ b/source/blender/sequencer/intern/strip_add.c
@@ -431,6 +431,7 @@ Sequence *SEQ_add_movie_strip(Main *bmain, Scene *scene, ListBase *seqbase, SeqL
     if (load_data->flags & SEQ_LOAD_MOVIE_SYNC_FPS) {
       scene->r.frs_sec = fps_denom;
       scene->r.frs_sec_base = fps_num;
+      DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO_FPS | ID_RECALC_SEQUENCER_STRIPS);
     }
 
     load_data->r_video_stream_start = IMD_anim_get_offset(anim_arr[0]);
diff --git a/source/blender/sequencer/intern/strip_time.c b/source/blender/sequencer/intern/strip_time.c
index f95a9a3596f..aa1642d40b6 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -105,11 +105,10 @@ float SEQ_give_frame_index(const Scene *scene, Sequence *seq, float timeline_fra
   }
   else {
     frame_index *= seq_time_playback_rate_factor_get(scene, seq);
+    /* Clamp frame index to strip frame range. */
+    frame_index = clamp_f(frame_index, 0, end - sta);
   }
 
-  /* Clamp frame index to strip frame range. */
-  frame_index = clamp_f(frame_index, 0, end - sta);
-
   if (seq->strobe < 1.0f) {
     seq->strobe = 1.0f;
   }



More information about the Bf-blender-cvs mailing list