[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50392] trunk/blender/source/blender/ blenkernel: Sequencer: avoid allocating image buffer on every modifier

Sergey Sharybin sergey.vfx at gmail.com
Tue Sep 4 18:55:12 CEST 2012


Revision: 50392
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50392
Author:   nazgul
Date:     2012-09-04 16:55:12 +0000 (Tue, 04 Sep 2012)
Log Message:
-----------
Sequencer: avoid allocating image buffer on every modifier

This means that modifier would operate on buffer which was passed to it,
without creating copy of image buffer and operating on it.

All current modifiers fit into this model and if it would need to have
original buffer on modifier calculation, that particular modifier can
create copy.

Gives some percentage of boost.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/seqmodifier.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2012-09-04 16:54:32 UTC (rev 50391)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2012-09-04 16:55:12 UTC (rev 50392)
@@ -380,7 +380,7 @@
 	void (*copy_data) (struct SequenceModifierData *smd, struct SequenceModifierData *target);
 
 	/* apply modifier on a given image buffer */
-	struct ImBuf *(*apply) (struct SequenceModifierData *smd, struct ImBuf *ibuf, struct ImBuf *mask);
+	void (*apply) (struct SequenceModifierData *smd, struct ImBuf *ibuf, struct ImBuf *mask);
 } SequenceModifierTypeInfo;
 
 struct SequenceModifierTypeInfo *BKE_sequence_modifier_type_info_get(int type);

Modified: trunk/blender/source/blender/blenkernel/intern/seqmodifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/seqmodifier.c	2012-09-04 16:54:32 UTC (rev 50391)
+++ trunk/blender/source/blender/blenkernel/intern/seqmodifier.c	2012-09-04 16:55:12 UTC (rev 50392)
@@ -154,14 +154,11 @@
 	}
 }
 
-ImBuf *colorBalance_apply(SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
+void colorBalance_apply(SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
 {
 	ColorBalanceModifierData *cbmd = (ColorBalanceModifierData *) smd;
-	ImBuf *ibuf_new = IMB_dupImBuf(ibuf);
 
-	BKE_sequencer_color_balance_apply(&cbmd->color_balance, ibuf_new, cbmd->color_multiply, FALSE, mask);
-
-	return ibuf_new;
+	BKE_sequencer_color_balance_apply(&cbmd->color_balance, ibuf, cbmd->color_multiply, FALSE, mask);
 }
 
 static SequenceModifierTypeInfo seqModifier_ColorBalance = {
@@ -252,10 +249,9 @@
 	}
 }
 
-ImBuf *curves_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
+void curves_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
 {
 	CurvesModifierData *cmd = (CurvesModifierData *) smd;
-	ImBuf *ibuf_new = IMB_dupImBuf(ibuf);
 
 	float black[3] = {0.0f, 0.0f, 0.0f};
 	float white[3] = {1.0f, 1.0f, 1.0f};
@@ -265,11 +261,9 @@
 	curvemapping_premultiply(&cmd->curve_mapping, 0);
 	curvemapping_set_black_white(&cmd->curve_mapping, black, white);
 
-	modifier_apply_threaded(ibuf_new, mask, curves_apply_threaded, &cmd->curve_mapping);
+	modifier_apply_threaded(ibuf, mask, curves_apply_threaded, &cmd->curve_mapping);
 
 	curvemapping_premultiply(&cmd->curve_mapping, 1);
-
-	return ibuf_new;
 }
 
 static SequenceModifierTypeInfo seqModifier_Curves = {
@@ -371,16 +365,13 @@
 	}
 }
 
-ImBuf *hue_correct_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
+void hue_correct_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
 {
 	HueCorrectModifierData *hcmd = (HueCorrectModifierData *) smd;
-	ImBuf *ibuf_new = IMB_dupImBuf(ibuf);
 
 	curvemapping_initialize(&hcmd->curve_mapping);
 
-	modifier_apply_threaded(ibuf_new, mask, hue_correct_apply_threaded, &hcmd->curve_mapping);
-
-	return ibuf_new;
+	modifier_apply_threaded(ibuf, mask, hue_correct_apply_threaded, &hcmd->curve_mapping);
 }
 
 static SequenceModifierTypeInfo seqModifier_HueCorrect = {
@@ -469,18 +460,15 @@
 	}
 }
 
-ImBuf *brightcontrast_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
+void brightcontrast_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
 {
 	BrightContrastModifierData *bcmd = (BrightContrastModifierData *) smd;
 	BrightContrastThreadData data;
-	ImBuf *ibuf_new = IMB_dupImBuf(ibuf);
 
 	data.bright = bcmd->bright;
 	data.contrast = bcmd->contrast;
 
-	modifier_apply_threaded(ibuf_new, mask, brightcontrast_apply_threaded, &data);
-
-	return ibuf_new;
+	modifier_apply_threaded(ibuf, mask, brightcontrast_apply_threaded, &data);
 }
 
 static SequenceModifierTypeInfo seqModifier_BrightContrast = {
@@ -595,7 +583,6 @@
 
 	for (smd = seq->modifiers.first; smd; smd = smd->next) {
 		SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type);
-		ImBuf *ibuf_new;
 
 		/* could happen if modifier is being removed or not exists in current version of blender */
 		if (!smti)
@@ -611,13 +598,8 @@
 			if (processed_ibuf == ibuf)
 				processed_ibuf = IMB_dupImBuf(ibuf);
 
-			ibuf_new = smti->apply(smd, processed_ibuf, mask);
+			smti->apply(smd, processed_ibuf, mask);
 
-			if (ibuf_new != processed_ibuf) {
-				IMB_freeImBuf(processed_ibuf);
-				processed_ibuf = ibuf_new;
-			}
-
 			if (mask)
 				IMB_freeImBuf(mask);
 		}




More information about the Bf-blender-cvs mailing list