Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/sequencer.c
| Show First 20 Lines • Show All 5,365 Lines • ▼ Show 20 Lines | Sequence *BKE_sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo *seq_load) | ||||
| /* can be NULL */ | /* can be NULL */ | ||||
| seq_load_apply(CTX_data_main(C), scene, seq, seq_load); | seq_load_apply(CTX_data_main(C), scene, seq, seq_load); | ||||
| MEM_freeN(anim_arr); | MEM_freeN(anim_arr); | ||||
| return seq; | return seq; | ||||
| } | } | ||||
| static Sequence *seq_dupli(Scene *scene, Scene *scene_to, Sequence *seq, int dupe_flag) | static Sequence *seq_dupli(Scene *scene, Scene *scene_to, Sequence *seq, int dupe_flag, const int flag) | ||||
| { | { | ||||
| Scene *sce_audio = scene_to ? scene_to : scene; | Scene *sce_audio = scene_to ? scene_to : scene; | ||||
| Sequence *seqn = MEM_dupallocN(seq); | Sequence *seqn = MEM_dupallocN(seq); | ||||
| seq->tmp = seqn; | seq->tmp = seqn; | ||||
| seqn->strip = MEM_dupallocN(seq->strip); | seqn->strip = MEM_dupallocN(seq->strip); | ||||
| seqn->stereo3d_format = MEM_dupallocN(seq->stereo3d_format); | seqn->stereo3d_format = MEM_dupallocN(seq->stereo3d_format); | ||||
| Show All 9 Lines | static Sequence *seq_dupli(Scene *scene, Scene *scene_to, Sequence *seq, int dupe_flag, const int flag) | ||||
| } | } | ||||
| if (seq->strip->proxy) { | if (seq->strip->proxy) { | ||||
| seqn->strip->proxy = MEM_dupallocN(seq->strip->proxy); | seqn->strip->proxy = MEM_dupallocN(seq->strip->proxy); | ||||
| seqn->strip->proxy->anim = NULL; | seqn->strip->proxy->anim = NULL; | ||||
| } | } | ||||
| if (seq->prop) { | if (seq->prop) { | ||||
| seqn->prop = IDP_CopyProperty(seq->prop); | seqn->prop = IDP_CopyProperty_ex(seq->prop, flag); | ||||
| } | } | ||||
| if (seqn->modifiers.first) { | if (seqn->modifiers.first) { | ||||
| BLI_listbase_clear(&seqn->modifiers); | BLI_listbase_clear(&seqn->modifiers); | ||||
| BKE_sequence_modifier_list_copy(seqn, seq); | BKE_sequence_modifier_list_copy(seqn, seq); | ||||
| } | } | ||||
| Show All 21 Lines | else if (seq->type == SEQ_TYPE_MOVIE) { | ||||
| BLI_listbase_clear(&seqn->anims); | BLI_listbase_clear(&seqn->anims); | ||||
| } | } | ||||
| else if (seq->type == SEQ_TYPE_SOUND_RAM) { | else if (seq->type == SEQ_TYPE_SOUND_RAM) { | ||||
| seqn->strip->stripdata = | seqn->strip->stripdata = | ||||
| MEM_dupallocN(seq->strip->stripdata); | MEM_dupallocN(seq->strip->stripdata); | ||||
| if (seq->scene_sound) | if (seq->scene_sound) | ||||
| seqn->scene_sound = BKE_sound_add_scene_sound_defaults(sce_audio, seqn); | seqn->scene_sound = BKE_sound_add_scene_sound_defaults(sce_audio, seqn); | ||||
| if ((flag & LIB_ID_COPY_NO_USER_REFCOUNT) == 0) { | |||||
| id_us_plus((ID *)seqn->sound); | id_us_plus((ID *)seqn->sound); | ||||
| } | } | ||||
| } | |||||
| else if (seq->type == SEQ_TYPE_IMAGE) { | else if (seq->type == SEQ_TYPE_IMAGE) { | ||||
| seqn->strip->stripdata = | seqn->strip->stripdata = | ||||
| MEM_dupallocN(seq->strip->stripdata); | MEM_dupallocN(seq->strip->stripdata); | ||||
| } | } | ||||
| else if (seq->type & SEQ_TYPE_EFFECT) { | else if (seq->type & SEQ_TYPE_EFFECT) { | ||||
| struct SeqEffectHandle sh; | struct SeqEffectHandle sh; | ||||
| sh = BKE_sequence_get_effect(seq); | sh = BKE_sequence_get_effect(seq); | ||||
| if (sh.copy) | if (sh.copy) | ||||
| Show All 38 Lines | static void seq_new_fix_links_recursive(Sequence *seq) | ||||
| } | } | ||||
| } | } | ||||
| Sequence *BKE_sequence_dupli_recursive(Scene *scene, Scene *scene_to, Sequence *seq, int dupe_flag) | Sequence *BKE_sequence_dupli_recursive(Scene *scene, Scene *scene_to, Sequence *seq, int dupe_flag) | ||||
| { | { | ||||
| Sequence *seqn; | Sequence *seqn; | ||||
| seq->tmp = NULL; | seq->tmp = NULL; | ||||
| seqn = seq_dupli(scene, scene_to, seq, dupe_flag); | seqn = seq_dupli(scene, scene_to, seq, dupe_flag, 0); | ||||
| if (seq->type == SEQ_TYPE_META) { | if (seq->type == SEQ_TYPE_META) { | ||||
| Sequence *s; | Sequence *s; | ||||
| for (s = seq->seqbase.first; s; s = s->next) { | for (s = seq->seqbase.first; s; s = s->next) { | ||||
| Sequence *n = BKE_sequence_dupli_recursive(scene, scene_to, s, dupe_flag); | Sequence *n = BKE_sequence_dupli_recursive(scene, scene_to, s, dupe_flag); | ||||
| if (n) { | if (n) { | ||||
| BLI_addtail(&seqn->seqbase, n); | BLI_addtail(&seqn->seqbase, n); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| seq_new_fix_links_recursive(seqn); | seq_new_fix_links_recursive(seqn); | ||||
| return seqn; | return seqn; | ||||
| } | } | ||||
| void BKE_sequence_base_dupli_recursive( | void BKE_sequence_base_dupli_recursive( | ||||
| Scene *scene, Scene *scene_to, ListBase *nseqbase, ListBase *seqbase, | const Scene *scene, Scene *scene_to, ListBase *nseqbase, const ListBase *seqbase, | ||||
| int dupe_flag) | int dupe_flag, const int flag) | ||||
| { | { | ||||
| Sequence *seq; | Sequence *seq; | ||||
| Sequence *seqn = NULL; | Sequence *seqn = NULL; | ||||
| Sequence *last_seq = BKE_sequencer_active_get(scene); | Sequence *last_seq = BKE_sequencer_active_get((Scene *)scene); | ||||
| /* always include meta's strips */ | /* always include meta's strips */ | ||||
| int dupe_flag_recursive = dupe_flag | SEQ_DUPE_ALL; | int dupe_flag_recursive = dupe_flag | SEQ_DUPE_ALL; | ||||
| for (seq = seqbase->first; seq; seq = seq->next) { | for (seq = seqbase->first; seq; seq = seq->next) { | ||||
| seq->tmp = NULL; | seq->tmp = NULL; | ||||
| if ((seq->flag & SELECT) || (dupe_flag & SEQ_DUPE_ALL)) { | if ((seq->flag & SELECT) || (dupe_flag & SEQ_DUPE_ALL)) { | ||||
| seqn = seq_dupli(scene, scene_to, seq, dupe_flag); | seqn = seq_dupli((Scene *)scene, scene_to, seq, dupe_flag, flag); | ||||
| if (seqn) { /*should never fail */ | if (seqn) { /*should never fail */ | ||||
| if (dupe_flag & SEQ_DUPE_CONTEXT) { | if (dupe_flag & SEQ_DUPE_CONTEXT) { | ||||
| seq->flag &= ~SEQ_ALLSEL; | seq->flag &= ~SEQ_ALLSEL; | ||||
| seqn->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL + SEQ_LOCK); | seqn->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL + SEQ_LOCK); | ||||
| } | } | ||||
| BLI_addtail(nseqbase, seqn); | BLI_addtail(nseqbase, seqn); | ||||
| if (seq->type == SEQ_TYPE_META) { | if (seq->type == SEQ_TYPE_META) { | ||||
| BKE_sequence_base_dupli_recursive( | BKE_sequence_base_dupli_recursive( | ||||
| scene, scene_to, &seqn->seqbase, &seq->seqbase, | scene, scene_to, &seqn->seqbase, &seq->seqbase, | ||||
| dupe_flag_recursive); | dupe_flag_recursive, flag); | ||||
| } | } | ||||
| if (dupe_flag & SEQ_DUPE_CONTEXT) { | if (dupe_flag & SEQ_DUPE_CONTEXT) { | ||||
| if (seq == last_seq) { | if (seq == last_seq) { | ||||
| BKE_sequencer_active_set(scene, seqn); | BKE_sequencer_active_set(scene_to, seqn); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* fix modifier linking */ | /* fix modifier linking */ | ||||
| for (seq = nseqbase->first; seq; seq = seq->next) { | for (seq = nseqbase->first; seq; seq = seq->next) { | ||||
| ▲ Show 20 Lines • Show All 117 Lines • Show Last 20 Lines | |||||