Changeset View
Changeset View
Standalone View
Standalone View
source/blender/sequencer/intern/sound.c
| Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
| static bool sequencer_refresh_sound_length_recursive(Main *bmain, Scene *scene, ListBase *seqbase) | static bool sequencer_refresh_sound_length_recursive(Main *bmain, Scene *scene, ListBase *seqbase) | ||||
| { | { | ||||
| Sequence *seq; | Sequence *seq; | ||||
| bool changed = false; | bool changed = false; | ||||
| for (seq = seqbase->first; seq; seq = seq->next) { | for (seq = seqbase->first; seq; seq = seq->next) { | ||||
| if (seq->type == SEQ_TYPE_META) { | if (seq->type == SEQ_TYPE_META) { | ||||
| if (sequencer_refresh_sound_length_recursive(bmain, scene, &seq->seqbase)) { | if (sequencer_refresh_sound_length_recursive(bmain, scene, &seq->seqbase)) { | ||||
| SEQ_time_update_sequence(scene, seq); | SEQ_time_update_sequence(scene, seqbase, seq); | ||||
| changed = true; | changed = true; | ||||
| } | } | ||||
| } | } | ||||
| else if (seq->type == SEQ_TYPE_SOUND_RAM && seq->sound) { | else if (seq->type == SEQ_TYPE_SOUND_RAM && seq->sound) { | ||||
| const float length = BKE_sound_get_length(bmain, seq->sound); | const float length = BKE_sound_get_length(bmain, seq->sound); | ||||
| int old = seq->len; | int old = seq->len; | ||||
| float fac; | float fac; | ||||
| seq->len = (int)ceil((double)length * FPS); | seq->len = (int)ceil((double)length * FPS); | ||||
| fac = (float)seq->len / (float)old; | fac = (float)seq->len / (float)old; | ||||
| old = seq->startofs; | old = seq->startofs; | ||||
| seq->startofs *= fac; | seq->startofs *= fac; | ||||
| seq->endofs *= fac; | seq->endofs *= fac; | ||||
| seq->start += (old - seq->startofs); /* So that visual/"real" start frame does not change! */ | seq->start += (old - seq->startofs); /* So that visual/"real" start frame does not change! */ | ||||
| SEQ_time_update_sequence(scene, seq); | SEQ_time_update_sequence(scene, seqbase, seq); | ||||
| changed = true; | changed = true; | ||||
| } | } | ||||
| } | } | ||||
| return changed; | return changed; | ||||
| } | } | ||||
| #endif | #endif | ||||
| void SEQ_sound_update_length(Main *bmain, Scene *scene) | void SEQ_sound_update_length(Main *bmain, Scene *scene) | ||||
| ▲ Show 20 Lines • Show All 71 Lines • Show Last 20 Lines | |||||