VSE: Add Sequence.parent_meta() python API function
This function can be used to find metastrip parent of nested strip. Reviewed By: ISS Differential Revision: https://developer.blender.org/D11985
This commit is contained in:
@@ -124,6 +124,14 @@ static Sequence *rna_Sequence_split(
|
||||
return r_seq;
|
||||
}
|
||||
|
||||
static Sequence *rna_Sequence_parent_meta(ID *id, Sequence *seq_self)
|
||||
{
|
||||
Scene *scene = (Scene *)id;
|
||||
Editing *ed = SEQ_editing_get(scene, false);
|
||||
|
||||
return SEQ_find_metastrip_by_sequence(&ed->seqbase, NULL, seq_self);
|
||||
}
|
||||
|
||||
static Sequence *rna_Sequences_new_clip(ID *id,
|
||||
ListBase *seqbase,
|
||||
Main *bmain,
|
||||
@@ -702,6 +710,13 @@ void RNA_api_sequence_strip(StructRNA *srna)
|
||||
"Meta to move the strip into");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
|
||||
|
||||
func = RNA_def_function(srna, "parent_meta", "rna_Sequence_parent_meta");
|
||||
RNA_def_function_flag(func, FUNC_USE_SELF_ID);
|
||||
RNA_def_function_ui_description(func, "Parent meta");
|
||||
/* return type */
|
||||
parm = RNA_def_pointer(func, "sequence", "Sequence", "", "Parent Meta");
|
||||
RNA_def_function_return(func, parm);
|
||||
|
||||
func = RNA_def_function(srna, "invalidate_cache", "rna_Sequence_invalidate_cache_rnafunc");
|
||||
RNA_def_function_flag(func, FUNC_USE_SELF_ID);
|
||||
RNA_def_function_ui_description(func,
|
||||
|
@@ -65,6 +65,9 @@ void SEQ_cache_iterate(
|
||||
void *userdata,
|
||||
bool callback_init(void *userdata, size_t item_count),
|
||||
bool callback_iter(void *userdata, struct Sequence *seq, int timeline_frame, int cache_type));
|
||||
struct Sequence *SEQ_find_metastrip_by_sequence(ListBase *seqbase /* = ed->seqbase */,
|
||||
struct Sequence *meta /* = NULL */,
|
||||
struct Sequence *seq);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@@ -61,6 +61,7 @@
|
||||
|
||||
#include "SEQ_effects.h"
|
||||
#include "SEQ_proxy.h"
|
||||
#include "SEQ_relations.h"
|
||||
#include "SEQ_render.h"
|
||||
#include "SEQ_utils.h"
|
||||
|
||||
@@ -3023,7 +3024,7 @@ static ImBuf *do_adjustment_impl(const SeqRenderData *context, Sequence *seq, fl
|
||||
if (!i) {
|
||||
Sequence *meta;
|
||||
|
||||
meta = seq_find_metastrip_by_sequence(&ed->seqbase, NULL, seq);
|
||||
meta = SEQ_find_metastrip_by_sequence(&ed->seqbase, NULL, seq);
|
||||
|
||||
if (meta) {
|
||||
i = do_adjustment_impl(context, meta, timeline_frame);
|
||||
|
@@ -504,3 +504,23 @@ void SEQ_relations_check_uuids_unique_and_report(const Scene *scene)
|
||||
|
||||
BLI_gset_free(used_uuids, NULL);
|
||||
}
|
||||
|
||||
/* Return immediate parent meta of sequence */
|
||||
struct Sequence *SEQ_find_metastrip_by_sequence(ListBase *seqbase, Sequence *meta, Sequence *seq)
|
||||
{
|
||||
Sequence *iseq;
|
||||
|
||||
for (iseq = seqbase->first; iseq; iseq = iseq->next) {
|
||||
Sequence *rval;
|
||||
|
||||
if (seq == iseq) {
|
||||
return meta;
|
||||
}
|
||||
if (iseq->seqbase.first &&
|
||||
(rval = SEQ_find_metastrip_by_sequence(&iseq->seqbase, iseq, seq))) {
|
||||
return rval;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
@@ -431,7 +431,7 @@ const Sequence *SEQ_get_topmost_sequence(const Scene *scene, int frame)
|
||||
return best_seq;
|
||||
}
|
||||
|
||||
/* in cases where we done know the sequence's listbase */
|
||||
/* in cases where we don't know the sequence's listbase */
|
||||
ListBase *SEQ_get_seqbase_by_seq(ListBase *seqbase, Sequence *seq)
|
||||
{
|
||||
Sequence *iseq;
|
||||
@@ -449,25 +449,6 @@ ListBase *SEQ_get_seqbase_by_seq(ListBase *seqbase, Sequence *seq)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Sequence *seq_find_metastrip_by_sequence(ListBase *seqbase, Sequence *meta, Sequence *seq)
|
||||
{
|
||||
Sequence *iseq;
|
||||
|
||||
for (iseq = seqbase->first; iseq; iseq = iseq->next) {
|
||||
Sequence *rval;
|
||||
|
||||
if (seq == iseq) {
|
||||
return meta;
|
||||
}
|
||||
if (iseq->seqbase.first &&
|
||||
(rval = seq_find_metastrip_by_sequence(&iseq->seqbase, iseq, seq))) {
|
||||
return rval;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Only use as last resort when the StripElem is available but no the Sequence.
|
||||
* (needed for RNA)
|
||||
|
@@ -31,10 +31,6 @@ struct Scene;
|
||||
|
||||
bool sequencer_seq_generates_image(struct Sequence *seq);
|
||||
void seq_open_anim_file(struct Scene *scene, struct Sequence *seq, bool openfile);
|
||||
struct Sequence *seq_find_metastrip_by_sequence(ListBase *seqbase /* = ed->seqbase */,
|
||||
struct Sequence *meta /* = NULL */,
|
||||
struct Sequence *seq);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user