[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20942] trunk/blender/source/blender: == Sequencer ==

Peter Schlaile peter at schlaile.de
Tue Jun 16 23:16:22 CEST 2009


Revision: 20942
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20942
Author:   schlaile
Date:     2009-06-16 23:16:22 +0200 (Tue, 16 Jun 2009)

Log Message:
-----------
== Sequencer ==

Fixed color balance tool. Problem was: we pretended to do Lift/Gamma/Gain,
but in reality we did (1-Offset)/Power/Slope. (slightly modified ASC CDL).

So now, the GUI is able to switch modes between ASC CDL-mode and real
Lift/Gamma/Gain.

It also adds a switch to enable Neutral Black/White flipping 
(very usefull for black point selection)

This closes:

[#18078] bugfix #18010 Sequencer lift

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/include/butspace.h
    trunk/blender/source/blender/makesdna/DNA_sequence_types.h
    trunk/blender/source/blender/src/buttons_scene.c
    trunk/blender/source/blender/src/editseq.c
    trunk/blender/source/blender/src/sequence.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-06-16 20:38:18 UTC (rev 20941)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-06-16 21:16:22 UTC (rev 20942)
@@ -3703,6 +3703,9 @@
 				} else {
 					seq->strip->color_balance = 0;
 				}
+				if (seq->strip->color_balance) {
+					seq->strip->color_balance->gui = 0;
+				}
 			}
 		}
 		END_SEQ

Modified: trunk/blender/source/blender/include/butspace.h
===================================================================
--- trunk/blender/source/blender/include/butspace.h	2009-06-16 20:38:18 UTC (rev 20941)
+++ trunk/blender/source/blender/include/butspace.h	2009-06-16 21:16:22 UTC (rev 20942)
@@ -378,6 +378,8 @@
 #define B_SEQ_BUT_REBUILD_PROXY 1697
 #define B_SEQ_SEL_PROXY_DIR     1698
 #define B_SEQ_SEL_PROXY_FILE    1699
+#define B_SEQ_BUT_COLOR_BALANCE 1700
+
 /* *********************** */
 #define B_ARMATUREBUTS		1800
 #define	B_POSE			1701

Modified: trunk/blender/source/blender/makesdna/DNA_sequence_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_sequence_types.h	2009-06-16 20:38:18 UTC (rev 20941)
+++ trunk/blender/source/blender/makesdna/DNA_sequence_types.h	2009-06-16 21:16:22 UTC (rev 20942)
@@ -38,6 +38,7 @@
 
 struct Ipo;
 struct Scene;
+struct StripColorBalanceGUIHelper;
 
 /* strlens; 80= FILE_MAXFILE, 160= FILE_MAXDIR */
 
@@ -71,9 +72,11 @@
 	float gamma[3];
 	float gain[3];
 	int flag;
-	int pad;
+	int mode;
 	float exposure;
 	float saturation;
+	int pad;
+	struct StripColorBalanceGUIHelper * gui;
 } StripColorBalance;
 
 typedef struct StripProxy {
@@ -263,10 +266,17 @@
 #define SEQ_ACTIVE                            1048576
 #define SEQ_USE_PROXY_CUSTOM_FILE             2097152
 
-#define SEQ_COLOR_BALANCE_INVERSE_GAIN 1
-#define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2
-#define SEQ_COLOR_BALANCE_INVERSE_LIFT 4
+#define SEQ_COLOR_BALANCE_INVERSE_GAIN      1
+#define SEQ_COLOR_BALANCE_INVERSE_GAMMA     2
+#define SEQ_COLOR_BALANCE_INVERSE_LIFT      4
 
+#define SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAIN      8
+#define SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAMMA    16
+#define SEQ_COLOR_BALANCE_GUI_BW_FLIP_LIFT     32
+
+#define SEQ_COLOR_BALANCE_GUI_MODE_LGG         0
+#define SEQ_COLOR_BALANCE_GUI_MODE_ASC_CDL     1
+
 /* seq->type WATCH IT: SEQ_EFFECT BIT is used to determine if this is an effect strip!!! */
 #define SEQ_IMAGE		0
 #define SEQ_META		1

Modified: trunk/blender/source/blender/src/buttons_scene.c
===================================================================
--- trunk/blender/source/blender/src/buttons_scene.c	2009-06-16 20:38:18 UTC (rev 20941)
+++ trunk/blender/source/blender/src/buttons_scene.c	2009-06-16 21:16:22 UTC (rev 20942)
@@ -480,6 +480,13 @@
 
 /* ************************* Sequencer *********************** */
 
+typedef struct StripColorBalanceGUIHelper {
+	float lift[3];
+	float gamma[3];
+	float gain[3];
+	int flag;
+} StripColorBalanceGUIHelper;
+
 #define SEQ_PANEL_EDITING 1
 #define SEQ_PANEL_INPUT   2
 #define SEQ_PANEL_FILTER  4
@@ -520,6 +527,108 @@
 	return string;
 }
 
+static char* seq_panel_color_balance_modes()
+{
+	static char string[2048];
+
+	sprintf(string, "Color balance mode: %%t|%s %%x%d|%s %%x%d",
+		"LiftGamGain", SEQ_COLOR_BALANCE_GUI_MODE_LGG,
+		"ASC CDL", SEQ_COLOR_BALANCE_GUI_MODE_ASC_CDL);
+
+	return string;
+}
+
+static void copy_to_color_balance_gui(StripColorBalance * cb)
+{
+	int c;
+	StripColorBalanceGUIHelper * cg = cb->gui;
+
+	for (c = 0; c < 3; c++) {
+		/* well in ACL terms,
+
+		   cb->lift  is actually 1 - offset
+		   cb->gamma is actually power
+		   cb->gain  is actually slope
+
+		   sorry for the confusion, that is for
+		   DNA backward compatibility...
+
+		   might better be renamed to low, mid, high (neutral terms)
+
+		   our lift / gamma / gain balancer sticks to neutral white
+		   (by default, can be switched with BW_FLIP)
+		   and therefore has:
+
+		   lift      is actually 1 - lift
+		   gain      is gain :)
+		   gamma     is actually power
+		*/
+
+		cg->lift[c] = cb->lift[c];
+		cg->gamma[c] = cb->gamma[c];
+		cg->gain[c] = cb->gain[c];
+
+		if (cb->mode == SEQ_COLOR_BALANCE_GUI_MODE_LGG) {
+			float offset = cg->lift[c];
+			float slope = cg->gain[c];
+
+			offset = 1 - offset;
+
+			cg->gain[c] = offset + slope;
+			cg->lift[c] = offset/(offset + slope);
+
+			cg->lift[c] = 1 - cg->lift[c];
+		
+		}
+
+		if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_LIFT) {
+			cg->lift[c] = 1 - cg->lift[c];
+		}
+		if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAMMA) {
+			cg->gamma[c] = 1 - cg->gamma[c];
+		}
+		if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAIN) {
+			cg->gain[c] = 1 - cg->gain[c];
+		}
+	}
+}
+
+static void copy_from_color_balance_gui(StripColorBalance * cb)
+{
+	int c;
+	StripColorBalanceGUIHelper * cg = cb->gui;
+
+	for (c = 0; c < 3; c++) {
+		/* see note above regarding confusing variable names */
+
+		cb->lift[c] = cg->lift[c];
+		cb->gamma[c] = cg->gamma[c];
+		cb->gain[c] = cg->gain[c];
+
+		if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_LIFT) {
+			cb->lift[c] = 1 - cb->lift[c];
+		}
+		if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAMMA) {
+			cb->gamma[c] = 1 - cb->gamma[c];
+		}
+		if (cb->flag & SEQ_COLOR_BALANCE_GUI_BW_FLIP_GAIN) {
+			cb->gain[c] = 1 - cb->gain[c];
+		}
+
+		if (cb->mode == SEQ_COLOR_BALANCE_GUI_MODE_LGG) {
+			float lift = cb->lift[c];
+			float gain = cb->gain[c];
+
+			lift = 1 - lift;
+
+			cb->gain[c] = ( 1 - lift ) * gain;
+			cb->lift[c] = lift * gain;
+
+			cb->lift[c] = 1 - cb->lift[c];
+		}
+	}
+}
+
 static char* seq_panel_scenes()
 {
 	static char rstr[8192];
@@ -948,19 +1057,30 @@
 		  1.0, 30.0, 100, 0, 
 		  "Only display every nth frame");
 
-	uiDefButBitI(block, TOG, SEQ_USE_COLOR_BALANCE,
-		     B_SEQ_BUT_RELOAD, "Use Color Balance", 
-		     10,50,240,19, &last_seq->flag, 
-		     0.0, 21.0, 100, 0, 
-		     "Activate Color Balance "
-		     "(3-Way color correction) on input");
+	if (last_seq->flag & SEQ_USE_COLOR_BALANCE) {
+		uiDefButBitI(block, TOG, SEQ_USE_COLOR_BALANCE,
+			     B_SEQ_BUT_RELOAD, "Use CB", 
+			     10,50,120,19, &last_seq->flag, 
+			     0.0, 21.0, 100, 0, 
+			     "Activate Color Balance "
+			     "(3-Way color correction) on input");
+	} else {
+		uiDefButBitI(block, TOG, SEQ_USE_COLOR_BALANCE,
+			     B_SEQ_BUT_RELOAD, "Use Color Balance", 
+			     10,50,240,19, &last_seq->flag, 
+			     0.0, 21.0, 100, 0, 
+			     "Activate Color Balance "
+			     "(3-Way color correction) on input");
+	}
 
+	if (last_seq->flag & SEQ_USE_COLOR_BALANCE) {
+		StripColorBalance * cb = last_seq->strip->color_balance;
+		StripColorBalanceGUIHelper * cg;
+		int xofs;
 
-	if (last_seq->flag & SEQ_USE_COLOR_BALANCE) {
-		if (!last_seq->strip->color_balance) {
+		if (!cb) {
 			int c;
-			StripColorBalance * cb 
-				= last_seq->strip->color_balance 
+			cb = last_seq->strip->color_balance 
 				= MEM_callocN(
 					sizeof(struct StripColorBalance), 
 					"StripColorBalance");
@@ -971,43 +1091,111 @@
 			}
 		}
 
-		uiDefBut(block, LABEL, 0, "Lift",
-			 10,30,80,19, 0, 0, 0, 0, 0, "");
-		uiDefBut(block, LABEL, 0, "Gamma",
-			 90,30,80,19, 0, 0, 0, 0, 0, "");
-		uiDefBut(block, LABEL, 0, "Gain",
-			 170,30,80,19, 0, 0, 0, 0, 0, "");
+		uiDefButI(block, MENU, B_SEQ_BUT_COLOR_BALANCE, 
+			  seq_panel_color_balance_modes(), 
+			  130, 50, 120, 19, &cb->mode, 
+			  0,0,0,0, "Color balance mode");
 
-		uiDefButF(block, COL, B_SEQ_BUT_RELOAD, "Lift",
-			  10,10,80,19, last_seq->strip->color_balance->lift, 
-			  0, 0, 0, 0, "Lift (shadows)");
+		if (!cb->gui) {
+			cb->gui	= MEM_callocN(
+				sizeof(struct StripColorBalanceGUIHelper), 
+				"StripColorBalanceGUIHelper");
+			copy_to_color_balance_gui(cb);
+			cb->gui->flag = cb->flag;
+		} 
 
-		uiDefButF(block, COL, B_SEQ_BUT_RELOAD, "Gamma",
-			  90,10,80,19, last_seq->strip->color_balance->gamma, 
-			  0, 0, 0, 0, "Gamma (midtones)");
+		cg = cb->gui;
 
-		uiDefButF(block, COL, B_SEQ_BUT_RELOAD, "Gain",
-			  170,10,80,19, last_seq->strip->color_balance->gain, 
-			  0, 0, 0, 0, "Gain (highlights)");
+		if (cb->mode == SEQ_COLOR_BALANCE_GUI_MODE_ASC_CDL) {
+			uiDefBut(block, LABEL, 0, "Ofs (shad)",
+				 10,30,80,19, 0, 0, 0, 0, 0, "");
+			uiDefBut(block, LABEL, 0, "Pow (midt)",
+				 90,30,80,19, 0, 0, 0, 0, 0, "");
+			uiDefBut(block, LABEL, 0, "Slp (high)",
+				 170,30,80,19, 0, 0, 0, 0, 0, "");
 
+			uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, 
+				  "1-Offset",
+				  10,10,80,19, cg->lift, 
+				  0, 0, 0, 0, "1 - Offset (shadows)");
+
+			uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, 
+				  "Gamma",
+				  90,10,80,19, cg->gamma, 
+				  0, 0, 0, 0, "Power (midtones)");
+			
+			uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, 
+				  "Slope",
+				  170,10,80,19, cg->gain, 
+				  0, 0, 0, 0, "Slope (highlights)");
+		} else {
+			uiDefBut(block, LABEL, 0, "Lift (shad)",
+				 10,30,80,19, 0, 0, 0, 0, 0, "");
+			uiDefBut(block, LABEL, 0, "Gamma (mi)",
+				 90,30,80,19, 0, 0, 0, 0, 0, "");
+			uiDefBut(block, LABEL, 0, "Gain (high)",
+				 170,30,80,19, 0, 0, 0, 0, 0, "");
+
+			uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, 
+				  "1-Lift",
+				  10,10,80,19, cg->lift, 
+				  0, 0, 0, 0, "1 - Lift (shadows)");
+
+			uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, 
+				  "1/Gamma",
+				  90,10,80,19, cg->gamma, 
+				  0, 0, 0, 0, "1 / Gamma (midtones)");
+			
+			uiDefButF(block, COL, B_SEQ_BUT_COLOR_BALANCE, 
+				  "Gain",
+				  170,10,80,19, cg->gain, 
+				  0, 0, 0, 0, "Gain (highlights)");
+		}
+
+		xofs = 10;
+
 		uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_INVERSE_LIFT,
-			     B_SEQ_BUT_RELOAD, "Inv Lift", 
-			     10,-10,80,19, 
-			     &last_seq->strip->color_balance->flag, 
+			     B_SEQ_BUT_COLOR_BALANCE, "Inverse", 
+			     xofs,-10,55,19, 
+			     &cb->flag, 
 			     0.0, 21.0, 100, 0, 
-			     "Inverse Lift");
+			     "Inverse");
+		xofs += 55;
+
+		uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_GUI_BW_FLIP_LIFT,
+			     B_SEQ_BUT_COLOR_BALANCE, "NB", 
+			     xofs,-10,25,19, 
+			     &cb->flag, 
+			     0.0, 21.0, 100, 0, 
+			     "Neutral Black");
+		xofs += 25;
 		uiDefButBitI(block, TOG, SEQ_COLOR_BALANCE_INVERSE_GAMMA,
-			     B_SEQ_BUT_RELOAD, "Inv Gamma", 
-			     90,-10,80,19, 
-			     &last_seq->strip->color_balance->flag, 
+			     B_SEQ_BUT_COLOR_BALANCE, "Inverse", 
+			     xofs,-10,55,19, 
+			     &cb->flag, 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list