Changeset View
Changeset View
Standalone View
Standalone View
source/blender/sequencer/intern/strip_relations.c
| Show First 20 Lines • Show All 275 Lines • ▼ Show 20 Lines | for (seq = seqbase->first; seq; seq = seq->next) { | ||||
| } | } | ||||
| if (seq->type == SEQ_TYPE_SCENE) { | if (seq->type == SEQ_TYPE_SCENE) { | ||||
| /* FIXME: recurse downwards, | /* FIXME: recurse downwards, | ||||
| * but do recurse protection somehow! */ | * but do recurse protection somehow! */ | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static bool update_changed_seq_recurs( | |||||
| Scene *scene, Sequence *seq, Sequence *changed_seq, int len_change, int ibuf_change) | |||||
| { | |||||
| Sequence *subseq; | |||||
| bool free_imbuf = false; | |||||
| /* recurse downwards to see if this seq depends on the changed seq */ | |||||
| if (seq == NULL) { | |||||
| return false; | |||||
| } | |||||
| if (seq == changed_seq) { | |||||
| free_imbuf = true; | |||||
| } | |||||
| for (subseq = seq->seqbase.first; subseq; subseq = subseq->next) { | |||||
| if (update_changed_seq_recurs(scene, subseq, changed_seq, len_change, ibuf_change)) { | |||||
| free_imbuf = true; | |||||
| } | |||||
| } | |||||
| if (seq->seq1) { | |||||
| if (update_changed_seq_recurs(scene, seq->seq1, changed_seq, len_change, ibuf_change)) { | |||||
| free_imbuf = true; | |||||
| } | |||||
| } | |||||
| if (seq->seq2 && (seq->seq2 != seq->seq1)) { | |||||
| if (update_changed_seq_recurs(scene, seq->seq2, changed_seq, len_change, ibuf_change)) { | |||||
| free_imbuf = true; | |||||
| } | |||||
| } | |||||
| if (seq->seq3 && (seq->seq3 != seq->seq1) && (seq->seq3 != seq->seq2)) { | |||||
| if (update_changed_seq_recurs(scene, seq->seq3, changed_seq, len_change, ibuf_change)) { | |||||
| free_imbuf = true; | |||||
| } | |||||
| } | |||||
| if (free_imbuf) { | |||||
| if (ibuf_change) { | |||||
| if (seq->type == SEQ_TYPE_MOVIE) { | |||||
| SEQ_relations_sequence_free_anim(seq); | |||||
| } | |||||
| else if (seq->type == SEQ_TYPE_SPEED) { | |||||
| seq_effect_speed_rebuild_map(scene, seq); | |||||
| } | |||||
| } | |||||
| if (len_change) { | |||||
| ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(scene)); | |||||
| SEQ_time_update_sequence(scene, seqbase, seq); | |||||
| } | |||||
| } | |||||
| return free_imbuf; | |||||
| } | |||||
| void SEQ_relations_update_changed_seq_and_deps(Scene *scene, | |||||
| Sequence *changed_seq, | |||||
| int len_change, | |||||
| int ibuf_change) | |||||
| { | |||||
| Editing *ed = SEQ_editing_get(scene); | |||||
| Sequence *seq; | |||||
| if (ed == NULL) { | |||||
| return; | |||||
| } | |||||
| for (seq = ed->seqbase.first; seq; seq = seq->next) { | |||||
| update_changed_seq_recurs(scene, seq, changed_seq, len_change, ibuf_change); | |||||
| } | |||||
| } | |||||
| static void sequencer_all_free_anim_ibufs(ListBase *seqbase, int timeline_frame) | static void sequencer_all_free_anim_ibufs(ListBase *seqbase, int timeline_frame) | ||||
| { | { | ||||
| for (Sequence *seq = seqbase->first; seq != NULL; seq = seq->next) { | for (Sequence *seq = seqbase->first; seq != NULL; seq = seq->next) { | ||||
| if (!SEQ_time_strip_intersects_frame(seq, timeline_frame)) { | if (!SEQ_time_strip_intersects_frame(seq, timeline_frame)) { | ||||
| SEQ_relations_sequence_free_anim(seq); | SEQ_relations_sequence_free_anim(seq); | ||||
| } | } | ||||
| if (seq->type == SEQ_TYPE_META) { | if (seq->type == SEQ_TYPE_META) { | ||||
| sequencer_all_free_anim_ibufs(&seq->seqbase, timeline_frame); | sequencer_all_free_anim_ibufs(&seq->seqbase, timeline_frame); | ||||
| ▲ Show 20 Lines • Show All 162 Lines • Show Last 20 Lines | |||||