Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2010-06-25 16:04:04 +0400
committerCampbell Barton <ideasman42@gmail.com>2010-06-25 16:04:04 +0400
commit7b36b2ebbb5449cebd6264d707a43bcaf910b81c (patch)
treed1c12525e05fcd1c190cd5304c4db9067c7c4c96 /source/blender/blenkernel/intern
parent044a20821b290beef5b39a265a3527bc4ecf31fa (diff)
- duplicating a scene now duplicates its sequence strips too.
- bugfix for copying a scene with FFMPEG properties set (wasnt copying the ID properties, could crash blender) - relative path option for adding sequence strips and replaceing images.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/scene.c10
-rw-r--r--source/blender/blenkernel/intern/sequencer.c31
2 files changed, 28 insertions, 13 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 6f049df917c..a2fdf35583f 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -198,6 +198,10 @@ Scene *copy_scene(Main *bmain, Scene *sce, int type)
scen->r.qtcodecdata->cdParms = MEM_dupallocN(scen->r.qtcodecdata->cdParms);
}
+ if(sce->r.ffcodecdata.properties) { /* intentionally check scen not sce. */
+ scen->r.ffcodecdata.properties= IDP_CopyProperty(scen->r.ffcodecdata.properties);
+ }
+
/* NOTE: part of SCE_COPY_LINK_DATA and SCE_COPY_FULL operations
* are done outside of blenkernel with ED_objects_single_users! */
@@ -212,6 +216,12 @@ Scene *copy_scene(Main *bmain, Scene *sce, int type)
id_us_plus((ID *)scen->world);
scen->world= copy_world(scen->world);
}
+
+ if(sce->ed) {
+ scen->ed= MEM_callocN( sizeof(Editing), "addseq");
+ scen->ed->seqbasep= &scen->ed->seqbase;
+ seqbase_dupli_recursive(sce, &scen->ed->seqbase, &sce->ed->seqbase, 0);
+ }
}
sound_create_scene(scen);
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index f16b169a4fb..4241f481c30 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -3991,7 +3991,7 @@ Sequence *sequencer_add_sound_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo
AUD_SoundInfo info;
- sound = sound_new_file(CTX_data_main(C), seq_load->path);
+ sound = sound_new_file(CTX_data_main(C), seq_load->path); /* handles relative paths */
if (sound==NULL || sound->playback_handle == NULL) {
//if(op)
@@ -4039,6 +4039,7 @@ Sequence *sequencer_add_sound_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo
Sequence *sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo *seq_load)
{
Scene *scene= CTX_data_scene(C); /* only for sound */
+ char path[sizeof(seq_load->path)];
Sequence *seq, *soundseq; /* generic strip vars */
Strip *strip;
@@ -4046,7 +4047,10 @@ Sequence *sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo
struct anim *an;
- an = openanim(seq_load->path, IB_rect);
+ BLI_strncpy(path, seq_load->path, sizeof(path));
+ BLI_path_abs(path, G.sce);
+
+ an = openanim(path, IB_rect);
if(an==NULL)
return NULL;
@@ -4088,7 +4092,7 @@ Sequence *sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo
}
-static Sequence *dupli_seq(struct Scene *scene, Sequence *seq)
+static Sequence *seq_dupli(struct Scene *scene, Sequence *seq, int dupe_flag)
{
Sequence *seqn = MEM_dupallocN(seq);
@@ -4164,18 +4168,19 @@ static Sequence *dupli_seq(struct Scene *scene, Sequence *seq)
" now...\n");
}
- seqbase_unique_name_recursive(&scene->ed->seqbase, seqn);
+ if(dupe_flag & SEQ_DUPE_UNIQUE_NAME)
+ seqbase_unique_name_recursive(&scene->ed->seqbase, seqn);
return seqn;
}
-Sequence * seq_dupli_recursive(struct Scene *scene, Sequence * seq)
+Sequence * seq_dupli_recursive(struct Scene *scene, Sequence * seq, int dupe_flag)
{
- Sequence * seqn = dupli_seq(scene, seq);
+ Sequence * seqn = seq_dupli(scene, seq, dupe_flag);
if (seq->type == SEQ_META) {
- Sequence * s;
+ Sequence *s;
for(s= seq->seqbase.first; s; s = s->next) {
- Sequence *n = seq_dupli_recursive(scene, s);
+ Sequence *n = seq_dupli_recursive(scene, s, dupe_flag);
if (n) {
BLI_addtail(&seqn->seqbase, n);
}
@@ -4184,7 +4189,7 @@ Sequence * seq_dupli_recursive(struct Scene *scene, Sequence * seq)
return seqn;
}
-void seqbase_dupli_recursive(Scene *scene, ListBase *nseqbase, ListBase *seqbase, int do_context)
+void seqbase_dupli_recursive(Scene *scene, ListBase *nseqbase, ListBase *seqbase, int dupe_flag)
{
Sequence *seq;
Sequence *seqn = 0;
@@ -4193,18 +4198,18 @@ void seqbase_dupli_recursive(Scene *scene, ListBase *nseqbase, ListBase *seqbase
for(seq= seqbase->first; seq; seq= seq->next) {
seq->tmp= NULL;
if(seq->flag & SELECT) {
- seqn = dupli_seq(scene, seq);
+ seqn = seq_dupli(scene, seq, dupe_flag);
if (seqn) { /*should never fail */
- if(do_context) {
+ if(dupe_flag & SEQ_DUPE_CONTEXT) {
seq->flag &= ~SEQ_ALLSEL;
seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL+SEQ_LOCK);
}
BLI_addtail(nseqbase, seqn);
if(seq->type==SEQ_META)
- seqbase_dupli_recursive(scene, &seqn->seqbase, &seq->seqbase, do_context);
+ seqbase_dupli_recursive(scene, &seqn->seqbase, &seq->seqbase, dupe_flag);
- if(do_context) {
+ if(dupe_flag & SEQ_DUPE_CONTEXT) {
if (seq == last_seq) {
seq_active_set(scene, seqn);
}