void BKE_sequence_modifier_unique_name(Sequence *seq, SequenceModifierData *smd) { const SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type); BLI_uniquename(&seq->modifiers, smd, CTX_DATA_(BLT_I18NCONTEXT_ID_SEQUENCE, smti->name), '.', offsetof(SequenceModifierData, name), sizeof(smd->name)); }
SequenceModifierData *BKE_sequence_modifier_new(Sequence *seq, const char *name, int type, struct Scene *scene) { SequenceModifierData *smd; const SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(type); smd = MEM_callocN(smti->struct_size, "sequence modifier"); smd->type = type; smd->flag |= SEQUENCE_MODIFIER_EXPANDED; smd->scene = scene; if (!name || !name[0]) BLI_strncpy(smd->name, smti->name, sizeof(smd->name)); else BLI_strncpy(smd->name, name, sizeof(smd->name)); BLI_addtail(&seq->modifiers, smd); BKE_sequence_modifier_unique_name(seq, smd); if (smti->init_data) smti->init_data(smd); return smd; }
void BKE_sequence_modifier_free(SequenceModifierData *smd) { const SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type); if (smti && smti->free_data) { smti->free_data(smd); } MEM_freeN(smd); }
ImBuf *BKE_sequence_modifier_apply_stack(const SeqRenderData *context, Sequence *seq, ImBuf *ibuf, int cfra) { SequenceModifierData *smd; ImBuf *processed_ibuf = ibuf; if (seq->modifiers.first && (seq->flag & SEQ_USE_LINEAR_MODIFIERS)) { processed_ibuf = IMB_dupImBuf(ibuf); BKE_sequencer_imbuf_from_sequencer_space(context->scene, processed_ibuf); } for (smd = seq->modifiers.first; smd; smd = smd->next) { const SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type); /* could happen if modifier is being removed or not exists in current version of blender */ if (!smti) continue; /* modifier is muted, do nothing */ if (smd->flag & SEQUENCE_MODIFIER_MUTE) continue; if (smti->apply) { 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); smti->apply(smd, processed_ibuf, mask); if (mask) IMB_freeImBuf(mask); } } if (seq->modifiers.first && (seq->flag & SEQ_USE_LINEAR_MODIFIERS)) { BKE_sequencer_imbuf_to_sequencer_space(context->scene, processed_ibuf, false); } return processed_ibuf; }
void BKE_sequence_modifier_list_copy(Sequence *seqn, Sequence *seq) { SequenceModifierData *smd; for (smd = seq->modifiers.first; smd; smd = smd->next) { SequenceModifierData *smdn; const SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type); smdn = MEM_dupallocN(smd); if (smti && smti->copy_data) smti->copy_data(smdn, smd); smdn->next = smdn->prev = NULL; BLI_addtail(&seqn->modifiers, smdn); } }
ImBuf *BKE_sequence_modifier_apply_stack(SeqRenderData context, Sequence *seq, ImBuf *ibuf, int cfra) { SequenceModifierData *smd; ImBuf *processed_ibuf = ibuf; if (seq->modifiers.first && (seq->flag & SEQ_USE_LINEAR_MODIFIERS)) { processed_ibuf = IMB_dupImBuf(ibuf); BKE_sequencer_imbuf_from_sequencer_space(context.scene, processed_ibuf); } for (smd = seq->modifiers.first; smd; smd = smd->next) { SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type); /* could happen if modifier is being removed or not exists in current version of blender */ if (!smti) continue; /* modifier is muted, do nothing */ if (smd->flag & SEQUENCE_MODIFIER_MUTE) continue; if (smti->apply) { ImBuf *mask = modifier_mask_get(smd, context, cfra, ibuf->rect_float != NULL); if (processed_ibuf == ibuf) processed_ibuf = IMB_dupImBuf(ibuf); smti->apply(smd, processed_ibuf, mask); if (mask) IMB_freeImBuf(mask); } } if (seq->modifiers.first && (seq->flag & SEQ_USE_LINEAR_MODIFIERS)) { BKE_sequencer_imbuf_to_sequencer_space(context.scene, processed_ibuf, FALSE); } return processed_ibuf; }
void BKE_sequence_modifier_unique_name(Sequence *seq, SequenceModifierData *smd) { SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type); BLI_uniquename(&seq->modifiers, smd, smti->name, '.', offsetof(SequenceModifierData, name), sizeof(smd->name)); }