diff options
-rw-r--r-- | release/scripts/startup/bl_ui/space_sequencer.py | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/seqmodifier.c | 14 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_sequence_types.h | 10 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_sequencer.c | 12 |
4 files changed, 36 insertions, 2 deletions
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 260919b0857..eeb6a5063c8 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -1112,6 +1112,8 @@ class SEQUENCER_PT_modifiers(SequencerButtonsPanel, Panel): box.prop_search(mod, "input_mask_strip", sequences_object, "sequences", text="Mask") else: box.prop(mod, "input_mask_id") + row = box.row() + row.prop(mod, "mask_time", expand=True) if mod.type == 'COLOR_BALANCE': box.prop(mod, "color_multiply") diff --git a/source/blender/blenkernel/intern/seqmodifier.c b/source/blender/blenkernel/intern/seqmodifier.c index 84d1c1bc414..2c46cf12844 100644 --- a/source/blender/blenkernel/intern/seqmodifier.c +++ b/source/blender/blenkernel/intern/seqmodifier.c @@ -978,7 +978,19 @@ ImBuf *BKE_sequence_modifier_apply_stack(const SeqRenderData *context, Sequence continue; if (smti->apply) { - ImBuf *mask = modifier_mask_get(smd, context, cfra, seq->start, ibuf->rect_float != NULL); + int frame_offset; + if (smd->mask_time == SEQUENCE_MASK_TIME_RELATIVE) { + frame_offset = seq->start; + } + else /*if (smd->mask_time == SEQUENCE_MASK_TIME_ABSOLUTE)*/ { + frame_offset = 0; + } + + ImBuf *mask = modifier_mask_get(smd, + context, + cfra, + frame_offset, + ibuf->rect_float != NULL); if (processed_ibuf == ibuf) processed_ibuf = IMB_dupImBuf(ibuf); diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h index 0236f41c5b9..56112d2866f 100644 --- a/source/blender/makesdna/DNA_sequence_types.h +++ b/source/blender/makesdna/DNA_sequence_types.h @@ -308,7 +308,8 @@ typedef struct SequenceModifierData { char name[64]; /* MAX_NAME */ /* mask input, either sequence or mask ID */ - int mask_input_type, pad; + int mask_input_type; + int mask_time; struct Sequence *mask_sequence; struct Mask *mask_id; @@ -557,4 +558,11 @@ enum { SEQUENCE_MASK_INPUT_ID = 1 }; +enum { + /* Mask animation will be remapped relative to the strip start frame. */ + SEQUENCE_MASK_TIME_RELATIVE = 0, + /* Global (scene) frame number will be used to access the mask. */ + SEQUENCE_MASK_TIME_ABSOLUTE = 1, +}; + #endif /* __DNA_SEQUENCE_TYPES_H__ */ diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index b49318b436e..2c66b737ca4 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -2422,6 +2422,12 @@ static void rna_def_modifier(BlenderRNA *brna) {0, NULL, 0, NULL, NULL} }; + static const EnumPropertyItem mask_time_items[] = { + {SEQUENCE_MASK_TIME_RELATIVE, "RELATIVE", 0, "Relative", "Mask animation is offset to start of strip"}, + {SEQUENCE_MASK_TIME_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Mask animation is in sync with scene frame"}, + {0, NULL, 0, NULL, NULL} + }; + srna = RNA_def_struct(brna, "SequenceModifier", NULL); RNA_def_struct_sdna(srna, "SequenceModifierData"); RNA_def_struct_ui_text(srna, "SequenceModifier", "Modifier for sequence strip"); @@ -2458,6 +2464,12 @@ static void rna_def_modifier(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Mask Input Type", "Type of input data used for mask"); RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceModifier_update"); + prop = RNA_def_property(srna, "mask_time", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mask_time"); + RNA_def_property_enum_items(prop, mask_time_items); + RNA_def_property_ui_text(prop, "Mask Time", "Time to use for the Mask animation"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceModifier_update"); + prop = RNA_def_property(srna, "input_mask_strip", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "mask_sequence"); RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_SequenceModifier_otherSequence_poll"); |