Exemple #1
0
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));
}
Exemple #2
0
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;
}
Exemple #3
0
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);
}
Exemple #4
0
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;
}
Exemple #5
0
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));
}