[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