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:
authorFĂ©lix <Miadim>2021-03-20 01:55:39 +0300
committerRichard Antalik <richardantalik@gmail.com>2021-03-20 03:40:53 +0300
commitbfad8deb0be0d014b5e05c7e1af564acb3d494d1 (patch)
treee035210f0f0d4c3cd1a19870ea5d1183aa8ae825
parent4158405c0b9d32dd0c6cc1844bc06561b8513766 (diff)
VSE: Add new_meta RNA API function
This function can be used to create empty meta strip, which is not straightforward when using operators. Very useful for import/export scripts. Reviewed By: ISS Differential Revision: https://developer.blender.org/D10661
-rw-r--r--source/blender/makesrna/intern/rna_sequencer_api.c56
-rw-r--r--source/blender/sequencer/SEQ_add.h3
-rw-r--r--source/blender/sequencer/intern/strip_add.c26
3 files changed, 84 insertions, 1 deletions
diff --git a/source/blender/makesrna/intern/rna_sequencer_api.c b/source/blender/makesrna/intern/rna_sequencer_api.c
index 04ca3cfdb32..a6a0e9d3dcd 100644
--- a/source/blender/makesrna/intern/rna_sequencer_api.c
+++ b/source/blender/makesrna/intern/rna_sequencer_api.c
@@ -382,6 +382,32 @@ static Sequence *rna_Sequences_meta_new_sound(ID *id,
id, &seq->seqbase, bmain, reports, name, file, channel, frame_start);
}
+/* Meta sequence
+ * Possibility to create an empty meta to avoid plenty of meta toggling
+ * Created meta have a length equal to 1, must be set through the API. */
+static Sequence *rna_Sequences_new_meta(
+ ID *id, ListBase *seqbase, const char *name, int channel, int frame_start)
+{
+ Scene *scene = (Scene *)id;
+ SeqLoadData load_data;
+ SEQ_add_load_data_init(&load_data, name, NULL, frame_start, channel);
+ Sequence *seqm = SEQ_add_meta_strip(scene, seqbase, &load_data);
+
+ return seqm;
+}
+
+static Sequence *rna_Sequences_editing_new_meta(
+ ID *id, Editing *ed, const char *name, int channel, int frame_start)
+{
+ return rna_Sequences_new_meta(id, &ed->seqbase, name, channel, frame_start);
+}
+
+static Sequence *rna_Sequences_meta_new_meta(
+ ID *id, Sequence *seq, const char *name, int channel, int frame_start)
+{
+ return rna_Sequences_new_meta(id, &seq->seqbase, name, channel, frame_start);
+}
+
static Sequence *rna_Sequences_new_effect(ID *id,
ListBase *seqbase,
ReportList *reports,
@@ -626,7 +652,11 @@ void RNA_api_sequence_strip(StructRNA *srna)
func = RNA_def_function(srna, "move_to_meta", "rna_Sequences_move_strip_to_meta");
RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
- parm = RNA_def_pointer(func, "meta_sequence", "Sequence", "Destination Meta Sequence", "Meta to move the strip into");
+ parm = RNA_def_pointer(func,
+ "meta_sequence",
+ "Sequence",
+ "Destination Meta Sequence",
+ "Meta to move the strip into");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
func = RNA_def_function(srna, "invalidate_cache", "rna_Sequence_invalidate_cache_rnafunc");
@@ -699,6 +729,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop, const bool metastri
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_meta_func_name = "rna_Sequences_editing_new_meta";
const char *new_effect_func_name = "rna_Sequences_editing_new_effect";
const char *remove_func_name = "rna_Sequences_editing_remove";
@@ -713,6 +744,7 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop, const bool metastri
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_meta_func_name = "rna_Sequences_meta_new_meta";
new_effect_func_name = "rna_Sequences_meta_new_effect";
remove_func_name = "rna_Sequences_meta_remove";
}
@@ -868,6 +900,28 @@ void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop, const bool metastri
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
RNA_def_function_return(func, parm);
+ func = RNA_def_function(srna, "new_meta", new_meta_func_name);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+ RNA_def_function_ui_description(func, "Add a new meta sequence");
+ parm = RNA_def_string(func, "name", "Name", 0, "", "Name for the new sequence");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ parm = RNA_def_int(
+ func, "channel", 0, 1, MAXSEQ, "Channel", "The channel for the new sequence", 1, MAXSEQ);
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ parm = RNA_def_int(func,
+ "frame_start",
+ 0,
+ -MAXFRAME,
+ MAXFRAME,
+ "",
+ "The start frame for the new sequence",
+ -MAXFRAME,
+ MAXFRAME);
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ /* return type */
+ parm = RNA_def_pointer(func, "sequence", "Sequence", "", "New Sequence");
+ RNA_def_function_return(func, parm);
+
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");
diff --git a/source/blender/sequencer/SEQ_add.h b/source/blender/sequencer/SEQ_add.h
index 7d728b25a30..983f5ab1391 100644
--- a/source/blender/sequencer/SEQ_add.h
+++ b/source/blender/sequencer/SEQ_add.h
@@ -79,6 +79,9 @@ struct Sequence *SEQ_add_sound_strip(struct Main *bmain,
struct Scene *scene,
struct ListBase *seqbase,
struct SeqLoadData *load_data);
+struct Sequence *SEQ_add_meta_strip(struct Scene *scene,
+ struct ListBase *seqbase,
+ struct SeqLoadData *load_data);
struct Sequence *SEQ_add_movie_strip(struct Main *bmain,
struct Scene *scene,
struct ListBase *seqbase,
diff --git a/source/blender/sequencer/intern/strip_add.c b/source/blender/sequencer/intern/strip_add.c
index 54e71ff0698..aab522da659 100644
--- a/source/blender/sequencer/intern/strip_add.c
+++ b/source/blender/sequencer/intern/strip_add.c
@@ -413,6 +413,32 @@ Sequence *SEQ_add_sound_strip(Main *UNUSED(bmain),
#endif // WITH_AUDASPACE
/**
+ * Add meta strip.
+ *
+ * \param scene: Scene where strips will be added
+ * \param seqbase: ListBase where strips will be added
+ * \param load_data: SeqLoadData with information necessary to create strip
+ * \return created strip
+ */
+
+Sequence *SEQ_add_meta_strip(Scene *scene, ListBase *seqbase, SeqLoadData *load_data)
+{
+ /* Allocate sequence. */
+ Sequence *seqm = SEQ_sequence_alloc(
+ seqbase, load_data->start_frame, load_data->channel, SEQ_TYPE_META);
+
+ /* Set name. */
+ seq_add_set_name(seqm, load_data);
+
+ /* Set frames start and length. */
+ seqm->start = load_data->start_frame;
+ seqm->len = 1;
+ SEQ_time_update_sequence(scene, seqm);
+
+ return seqm;
+}
+
+/**
* Add movie strip.
*
* \param main: Main reference