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:
authorRichard Antalik <richardantalik@gmail.com>2020-12-02 07:51:22 +0300
committerRichard Antalik <richardantalik@gmail.com>2020-12-02 07:51:22 +0300
commit13ca11ac52a851d1a2ef252335f7a19d36223506 (patch)
treea68782eafe1b6142a57ff14024f5da042ae2723a /source/blender/makesrna/intern/rna_sequencer_api.c
parent1176591574f9ec5ead51c512dbe77c3cc7972d6d (diff)
VSE: Unify sequences collections API
Use RNA_api_sequences() for SequenceEditor and MetaSequence sequences member. Defines pair of dispatch functions rna_Sequences_editing_* and rna_Sequences_meta_* that pass pointer to seqbase to rna_Sequences_* function. Downside of this implementation is, that it defines 2 seemingly different RNA collections - SequencesMeta and SequencesTopLevel Reviewed By: mont29 Differential Revision: https://developer.blender.org/D9601
Diffstat (limited to 'source/blender/makesrna/intern/rna_sequencer_api.c')
-rw-r--r--source/blender/makesrna/intern/rna_sequencer_api.c267
1 files changed, 231 insertions, 36 deletions
diff --git a/source/blender/makesrna/intern/rna_sequencer_api.c b/source/blender/makesrna/intern/rna_sequencer_api.c
index 5419fc4ac7c..5d17beba901 100644
--- a/source/blender/makesrna/intern/rna_sequencer_api.c
+++ b/source/blender/makesrna/intern/rna_sequencer_api.c
@@ -77,15 +77,15 @@ static void rna_Sequence_swap_internal(Sequence *seq_self,
}
static Sequence *alloc_generic_sequence(
- Editing *ed, const char *name, int frame_start, int channel, int type, const char *file)
+ ListBase *seqbase, const char *name, int frame_start, int channel, int type, const char *file)
{
Sequence *seq;
StripElem *se;
- seq = BKE_sequence_alloc(ed->seqbasep, frame_start, channel, type);
+ seq = BKE_sequence_alloc(seqbase, frame_start, channel, type);
BLI_strncpy(seq->name + 2, name, sizeof(seq->name) - 2);
- BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq);
+ BKE_sequence_base_unique_name_recursive(seqbase, seq);
Strip *strip = seq->strip;
@@ -105,7 +105,7 @@ static Sequence *alloc_generic_sequence(
}
static Sequence *rna_Sequences_new_clip(ID *id,
- Editing *ed,
+ ListBase *seqbase,
Main *bmain,
const char *name,
MovieClip *clip,
@@ -115,7 +115,8 @@ static Sequence *rna_Sequences_new_clip(ID *id,
Scene *scene = (Scene *)id;
Sequence *seq;
- seq = alloc_generic_sequence(ed, name, frame_start, channel, SEQ_TYPE_MOVIECLIP, clip->filepath);
+ seq = alloc_generic_sequence(
+ seqbase, name, frame_start, channel, SEQ_TYPE_MOVIECLIP, clip->filepath);
seq->clip = clip;
seq->len = BKE_movieclip_get_duration(clip);
id_us_plus((ID *)clip);
@@ -129,13 +130,40 @@ static Sequence *rna_Sequences_new_clip(ID *id,
return seq;
}
-static Sequence *rna_Sequences_new_mask(
- ID *id, Editing *ed, Main *bmain, const char *name, Mask *mask, int channel, int frame_start)
+static Sequence *rna_Sequences_editing_new_clip(ID *id,
+ Editing *ed,
+ Main *bmain,
+ const char *name,
+ MovieClip *clip,
+ int channel,
+ int frame_start)
+{
+ return rna_Sequences_new_clip(id, &ed->seqbase, bmain, name, clip, channel, frame_start);
+}
+
+static Sequence *rna_Sequences_meta_new_clip(ID *id,
+ Sequence *seq,
+ Main *bmain,
+ const char *name,
+ MovieClip *clip,
+ int channel,
+ int frame_start)
+{
+ return rna_Sequences_new_clip(id, &seq->seqbase, bmain, name, clip, channel, frame_start);
+}
+
+static Sequence *rna_Sequences_new_mask(ID *id,
+ ListBase *seqbase,
+ Main *bmain,
+ const char *name,
+ Mask *mask,
+ int channel,
+ int frame_start)
{
Scene *scene = (Scene *)id;
Sequence *seq;
- seq = alloc_generic_sequence(ed, name, frame_start, channel, SEQ_TYPE_MASK, mask->id.name);
+ seq = alloc_generic_sequence(seqbase, name, frame_start, channel, SEQ_TYPE_MASK, mask->id.name);
seq->mask = mask;
seq->len = BKE_mask_get_duration(mask);
id_us_plus((ID *)mask);
@@ -149,9 +177,20 @@ static Sequence *rna_Sequences_new_mask(
return seq;
}
+static Sequence *rna_Sequences_editing_new_mask(
+ ID *id, Editing *ed, Main *bmain, const char *name, Mask *mask, int channel, int frame_start)
+{
+ return rna_Sequences_new_mask(id, &ed->seqbase, bmain, name, mask, channel, frame_start);
+}
+
+static Sequence *rna_Sequences_meta_new_mask(
+ ID *id, Sequence *seq, Main *bmain, const char *name, Mask *mask, int channel, int frame_start)
+{
+ return rna_Sequences_new_mask(id, &seq->seqbase, bmain, name, mask, channel, frame_start);
+}
static Sequence *rna_Sequences_new_scene(ID *id,
- Editing *ed,
+ ListBase *seqbase,
Main *bmain,
const char *name,
Scene *sce_seq,
@@ -161,7 +200,7 @@ static Sequence *rna_Sequences_new_scene(ID *id,
Scene *scene = (Scene *)id;
Sequence *seq;
- seq = alloc_generic_sequence(ed, name, frame_start, channel, SEQ_TYPE_SCENE, NULL);
+ seq = alloc_generic_sequence(seqbase, name, frame_start, channel, SEQ_TYPE_SCENE, NULL);
seq->scene = sce_seq;
seq->len = sce_seq->r.efra - sce_seq->r.sfra + 1;
id_us_plus((ID *)sce_seq);
@@ -176,8 +215,30 @@ static Sequence *rna_Sequences_new_scene(ID *id,
return seq;
}
+static Sequence *rna_Sequences_editing_new_scene(ID *id,
+ Editing *ed,
+ Main *bmain,
+ const char *name,
+ Scene *sce_seq,
+ int channel,
+ int frame_start)
+{
+ return rna_Sequences_new_scene(id, &ed->seqbase, bmain, name, sce_seq, channel, frame_start);
+}
+
+static Sequence *rna_Sequences_meta_new_scene(ID *id,
+ Sequence *seq,
+ Main *bmain,
+ const char *name,
+ Scene *sce_seq,
+ int channel,
+ int frame_start)
+{
+ return rna_Sequences_new_scene(id, &seq->seqbase, bmain, name, sce_seq, channel, frame_start);
+}
+
static Sequence *rna_Sequences_new_image(ID *id,
- Editing *ed,
+ ListBase *seqbase,
Main *bmain,
ReportList *reports,
const char *name,
@@ -188,12 +249,12 @@ static Sequence *rna_Sequences_new_image(ID *id,
Scene *scene = (Scene *)id;
Sequence *seq;
- seq = alloc_generic_sequence(ed, name, frame_start, channel, SEQ_TYPE_IMAGE, file);
+ seq = alloc_generic_sequence(seqbase, name, frame_start, channel, SEQ_TYPE_IMAGE, file);
seq->len = 1;
if (seq->strip->stripdata->name[0] == '\0') {
BKE_report(reports, RPT_ERROR, "Sequences.new_image: unable to open image file");
- BLI_remlink(&ed->seqbase, seq);
+ BLI_remlink(seqbase, seq);
BKE_sequence_free(scene, seq, true);
return NULL;
}
@@ -208,14 +269,40 @@ static Sequence *rna_Sequences_new_image(ID *id,
return seq;
}
+static Sequence *rna_Sequences_editing_new_image(ID *id,
+ Editing *ed,
+ Main *bmain,
+ ReportList *reports,
+ const char *name,
+ const char *file,
+ int channel,
+ int frame_start)
+{
+ return rna_Sequences_new_image(
+ id, &ed->seqbase, bmain, reports, name, file, channel, frame_start);
+}
+
+static Sequence *rna_Sequences_meta_new_image(ID *id,
+ Sequence *seq,
+ Main *bmain,
+ ReportList *reports,
+ const char *name,
+ const char *file,
+ int channel,
+ int frame_start)
+{
+ return rna_Sequences_new_image(
+ id, &seq->seqbase, bmain, reports, name, file, channel, frame_start);
+}
+
static Sequence *rna_Sequences_new_movie(
- ID *id, Editing *ed, const char *name, const char *file, int channel, int frame_start)
+ ID *id, ListBase *seqbase, const char *name, const char *file, int channel, int frame_start)
{
Scene *scene = (Scene *)id;
Sequence *seq;
StripAnim *sanim;
- seq = alloc_generic_sequence(ed, name, frame_start, channel, SEQ_TYPE_MOVIE, file);
+ seq = alloc_generic_sequence(seqbase, name, frame_start, channel, SEQ_TYPE_MOVIE, file);
struct anim *an = openanim(file, IB_rect, 0, NULL);
if (an == NULL) {
@@ -240,9 +327,21 @@ static Sequence *rna_Sequences_new_movie(
return seq;
}
+static Sequence *rna_Sequences_editing_new_movie(
+ ID *id, Editing *ed, const char *name, const char *file, int channel, int frame_start)
+{
+ return rna_Sequences_new_movie(id, &ed->seqbase, name, file, channel, frame_start);
+}
+
+static Sequence *rna_Sequences_meta_new_movie(
+ ID *id, Sequence *seq, const char *name, const char *file, int channel, int frame_start)
+{
+ return rna_Sequences_new_movie(id, &seq->seqbase, name, file, channel, frame_start);
+}
+
# ifdef WITH_AUDASPACE
static Sequence *rna_Sequences_new_sound(ID *id,
- Editing *ed,
+ ListBase *seqbase,
Main *bmain,
ReportList *reports,
const char *name,
@@ -262,7 +361,7 @@ static Sequence *rna_Sequences_new_sound(ID *id,
return NULL;
}
seq = alloc_generic_sequence(
- ed, name, frame_start, channel, SEQ_TYPE_SOUND_RAM, sound->filepath);
+ seqbase, name, frame_start, channel, SEQ_TYPE_SOUND_RAM, sound->filepath);
seq->sound = sound;
seq->len = ceil((double)info.length * FPS);
@@ -276,7 +375,7 @@ static Sequence *rna_Sequences_new_sound(ID *id,
}
# else /* WITH_AUDASPACE */
static Sequence *rna_Sequences_new_sound(ID *UNUSED(id),
- Editing *UNUSED(ed),
+ Editing *UNUSED(seqbase),
Main *UNUSED(bmain),
ReportList *reports,
const char *UNUSED(name),
@@ -289,8 +388,34 @@ static Sequence *rna_Sequences_new_sound(ID *UNUSED(id),
}
# endif /* WITH_AUDASPACE */
+static Sequence *rna_Sequences_editing_new_sound(ID *id,
+ Editing *ed,
+ Main *bmain,
+ ReportList *reports,
+ const char *name,
+ const char *file,
+ int channel,
+ int frame_start)
+{
+ return rna_Sequences_new_sound(
+ id, &ed->seqbase, bmain, reports, name, file, channel, frame_start);
+}
+
+static Sequence *rna_Sequences_meta_new_sound(ID *id,
+ Sequence *seq,
+ Main *bmain,
+ ReportList *reports,
+ const char *name,
+ const char *file,
+ int channel,
+ int frame_start)
+{
+ return rna_Sequences_new_sound(
+ id, &seq->seqbase, bmain, reports, name, file, channel, frame_start);
+}
+
static Sequence *rna_Sequences_new_effect(ID *id,
- Editing *ed,
+ ListBase *seqbase,
ReportList *reports,
const char *name,
int type,
@@ -340,7 +465,7 @@ static Sequence *rna_Sequences_new_effect(ID *id,
return NULL;
}
- seq = alloc_generic_sequence(ed, name, frame_start, channel, type, NULL);
+ seq = alloc_generic_sequence(seqbase, name, frame_start, channel, type, NULL);
sh = BKE_sequence_get_effect(seq);
@@ -367,20 +492,52 @@ static Sequence *rna_Sequences_new_effect(ID *id,
return seq;
}
+static Sequence *rna_Sequences_editing_new_effect(ID *id,
+ Editing *ed,
+ ReportList *reports,
+ const char *name,
+ int type,
+ int channel,
+ int frame_start,
+ int frame_end,
+ Sequence *seq1,
+ Sequence *seq2,
+ Sequence *seq3)
+{
+ return rna_Sequences_new_effect(
+ id, &ed->seqbase, reports, name, type, channel, frame_start, frame_end, seq1, seq2, seq3);
+}
+
+static Sequence *rna_Sequences_meta_new_effect(ID *id,
+ Sequence *seq,
+ ReportList *reports,
+ const char *name,
+ int type,
+ int channel,
+ int frame_start,
+ int frame_end,
+ Sequence *seq1,
+ Sequence *seq2,
+ Sequence *seq3)
+{
+ return rna_Sequences_new_effect(
+ id, &seq->seqbase, reports, name, type, channel, frame_start, frame_end, seq1, seq2, seq3);
+}
+
static void rna_Sequences_remove(
- ID *id, Editing *ed, Main *bmain, ReportList *reports, PointerRNA *seq_ptr)
+ ID *id, ListBase *seqbase, Main *bmain, ReportList *reports, PointerRNA *seq_ptr)
{
Sequence *seq = seq_ptr->data;
Scene *scene = (Scene *)id;
- if (BLI_findindex(&ed->seqbase, seq) == -1) {
+ if (BLI_findindex(seqbase, seq) == -1) {
BKE_reportf(
reports, RPT_ERROR, "Sequence '%s' not in scene '%s'", seq->name + 2, scene->id.name + 2);
return;
}
- BKE_sequencer_flag_for_removal(scene, &ed->seqbase, seq);
- BKE_sequencer_remove_flagged_sequences(scene, &ed->seqbase);
+ BKE_sequencer_flag_for_removal(scene, seqbase, seq);
+ BKE_sequencer_remove_flagged_sequences(scene, seqbase);
RNA_POINTER_INVALIDATE(seq_ptr);
DEG_relations_tag_update(bmain);
@@ -388,6 +545,18 @@ static void rna_Sequences_remove(
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
}
+static void rna_Sequences_editing_remove(
+ ID *id, Editing *ed, Main *bmain, ReportList *reports, PointerRNA *seq_ptr)
+{
+ rna_Sequences_remove(id, &ed->seqbase, bmain, reports, seq_ptr);
+}
+
+static void rna_Sequences_meta_remove(
+ ID *id, Sequence *seq, Main *bmain, ReportList *reports, PointerRNA *seq_ptr)
+{
+ rna_Sequences_remove(id, &seq->seqbase, bmain, reports, seq_ptr);
+}
+
static StripElem *rna_SequenceElements_append(ID *id, Sequence *seq, const char *filename)
{
Scene *scene = (Scene *)id;
@@ -536,7 +705,7 @@ void RNA_api_sequence_elements(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
}
-void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
+void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop, const bool metastrip)
{
StructRNA *srna;
PropertyRNA *parm;
@@ -564,12 +733,38 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
{0, NULL, 0, NULL, NULL},
};
- RNA_def_property_srna(cprop, "Sequences");
- srna = RNA_def_struct(brna, "Sequences", NULL);
- RNA_def_struct_sdna(srna, "Editing");
+ const char *new_clip_func_name = "rna_Sequences_editing_new_clip";
+ const char *new_mask_func_name = "rna_Sequences_editing_new_mask";
+ const char *new_scene_func_name = "rna_Sequences_editing_new_scene";
+ const char *new_image_func_name = "rna_Sequences_editing_new_image";
+ const char *new_movie_func_name = "rna_Sequences_editing_new_movie";
+ const char *new_sound_func_name = "rna_Sequences_editing_new_sound";
+ const char *new_effect_func_name = "rna_Sequences_editing_new_effect";
+ const char *remove_func_name = "rna_Sequences_editing_remove";
+
+ if (metastrip) {
+ RNA_def_property_srna(cprop, "SequencesMeta");
+ srna = RNA_def_struct(brna, "SequencesMeta", NULL);
+ RNA_def_struct_sdna(srna, "Sequence");
+
+ new_clip_func_name = "rna_Sequences_meta_new_clip";
+ new_mask_func_name = "rna_Sequences_meta_new_mask";
+ new_scene_func_name = "rna_Sequences_meta_new_scene";
+ new_image_func_name = "rna_Sequences_meta_new_image";
+ new_movie_func_name = "rna_Sequences_meta_new_movie";
+ new_sound_func_name = "rna_Sequences_meta_new_sound";
+ new_effect_func_name = "rna_Sequences_meta_new_effect";
+ remove_func_name = "rna_Sequences_meta_remove";
+ }
+ else {
+ RNA_def_property_srna(cprop, "SequencesTopLevel");
+ srna = RNA_def_struct(brna, "SequencesTopLevel", NULL);
+ RNA_def_struct_sdna(srna, "Editing");
+ }
+
RNA_def_struct_ui_text(srna, "Sequences", "Collection of Sequences");
- func = RNA_def_function(srna, "new_clip", "rna_Sequences_new_clip");
+ func = RNA_def_function(srna, "new_clip", new_clip_func_name);
RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
RNA_def_function_ui_description(func, "Add a new movie clip sequence");
parm = RNA_def_string(func, "name", "Name", 0, "", "Name for the new sequence");
@@ -593,7 +788,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
RNA_def_function_return(func, parm);
- func = RNA_def_function(srna, "new_mask", "rna_Sequences_new_mask");
+ func = RNA_def_function(srna, "new_mask", new_mask_func_name);
RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
RNA_def_function_ui_description(func, "Add a new mask sequence");
parm = RNA_def_string(func, "name", "Name", 0, "", "Name for the new sequence");
@@ -617,7 +812,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
RNA_def_function_return(func, parm);
- func = RNA_def_function(srna, "new_scene", "rna_Sequences_new_scene");
+ func = RNA_def_function(srna, "new_scene", new_scene_func_name);
RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
RNA_def_function_ui_description(func, "Add a new scene sequence");
parm = RNA_def_string(func, "name", "Name", 0, "", "Name for the new sequence");
@@ -641,7 +836,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
RNA_def_function_return(func, parm);
- func = RNA_def_function(srna, "new_image", "rna_Sequences_new_image");
+ func = RNA_def_function(srna, "new_image", new_image_func_name);
RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID | FUNC_USE_MAIN);
RNA_def_function_ui_description(func, "Add a new image sequence");
parm = RNA_def_string(func, "name", "Name", 0, "", "Name for the new sequence");
@@ -665,7 +860,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
RNA_def_function_return(func, parm);
- func = RNA_def_function(srna, "new_movie", "rna_Sequences_new_movie");
+ func = RNA_def_function(srna, "new_movie", new_movie_func_name);
RNA_def_function_flag(func, FUNC_USE_SELF_ID);
RNA_def_function_ui_description(func, "Add a new movie sequence");
parm = RNA_def_string(func, "name", "Name", 0, "", "Name for the new sequence");
@@ -689,7 +884,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
RNA_def_function_return(func, parm);
- func = RNA_def_function(srna, "new_sound", "rna_Sequences_new_sound");
+ func = RNA_def_function(srna, "new_sound", new_sound_func_name);
RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID | FUNC_USE_MAIN);
RNA_def_function_ui_description(func, "Add a new sound sequence");
parm = RNA_def_string(func, "name", "Name", 0, "", "Name for the new sequence");
@@ -713,7 +908,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
RNA_def_function_return(func, parm);
- func = RNA_def_function(srna, "new_effect", "rna_Sequences_new_effect");
+ func = RNA_def_function(srna, "new_effect", new_effect_func_name);
RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
RNA_def_function_ui_description(func, "Add a new effect sequence");
parm = RNA_def_string(func, "name", "Name", 0, "", "Name for the new sequence");
@@ -750,7 +945,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
RNA_def_function_return(func, parm);
- func = RNA_def_function(srna, "remove", "rna_Sequences_remove");
+ func = RNA_def_function(srna, "remove", remove_func_name);
RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_REPORTS | FUNC_USE_MAIN);
RNA_def_function_ui_description(func, "Remove a Sequence");
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "Sequence to remove");