File 01-GxCreamMachine-leaks-signal-between-two-separate-plugin-instances.patch of Package lv2-gxplugins

commit 214f3c32d0b19b091d215d78c159cbc8c8b2c467
Author: brummer10 <brummer-@web.de>
Date:   Wed Feb 23 06:29:03 2022 +0100

    Fix issue #38 GxCreamMachine leaks signal between two separate plugin instances

Submodule GxCreamMachine.lv2 7326cd0..62f19a6:
diff --git a/GxCreamMachine.lv2/dsp/12ax7_table.h b/GxCreamMachine.lv2/dsp/12ax7_table.h
index f39f953..fa335a9 100644
--- a/GxCreamMachine.lv2/dsp/12ax7_table.h
+++ b/GxCreamMachine.lv2/dsp/12ax7_table.h
@@ -70,9 +70,7 @@ static table1d_imp<200> tube_table __rt_data = {
 	}
 };
 
-average MA = (average) {0.0,0.0,0.0};
-
-double always_inline tubeclip(double x) {
+double always_inline tubeclip(double x, average MA) {
     double f = fabs(x);
     f = f * tube_table.istep;
     int i = static_cast<int>(f);
diff --git a/GxCreamMachine.lv2/dsp/CreamMachine.cc b/GxCreamMachine.lv2/dsp/CreamMachine.cc
index 4364cd4..e18586a 100644
--- a/GxCreamMachine.lv2/dsp/CreamMachine.cc
+++ b/GxCreamMachine.lv2/dsp/CreamMachine.cc
@@ -209,6 +209,7 @@ private:
 	double 	fConst183;
 	double 	fConst184;
 	double 	fConst185;
+	average MA;
 
 	void connect(uint32_t port,void* data);
 	void clear_state_f();
@@ -239,6 +240,7 @@ Dsp::Dsp()
 	connect_ports = connect_static;
 	clear_state = clear_state_f_static;
 	delete_instance = del_instance;
+	MA = (average) {0.0,0.0,0.0};
 }
 
 Dsp::~Dsp() {
@@ -473,7 +475,7 @@ void always_inline Dsp::compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *outpu
 		double fTemp0 = (7.20035317480518e-13 + ((fRec3[0] * (5.79929217601893e-13 + ((fRec3[0] * ((fConst0 * (fConst39 + (fRec2[0] * ((fConst0 * (fConst38 + (fConst37 * fRec2[0]))) - 5.15819689693484e-15)))) - 2.76727301337706e-13)) + (fConst0 * (fConst36 + (fRec2[0] * (1.08098806160993e-14 + (fConst0 * (fConst34 + (fConst32 * fRec2[0])))))))))) + (fConst0 * (fConst30 + (fRec2[0] * (1.34214583178369e-14 + (fConst0 * (fConst28 + (fConst26 * fRec2[0])))))))));
 		fRec4[0] = ((double)input0[i] - ((((((fRec4[1] * (3.60017658740259e-12 + ((fRec3[0] * (2.89964608800947e-12 + ((fRec3[0] * ((fConst0 * (fConst112 + (fRec2[0] * ((fConst0 * (fConst111 + (fConst110 * fRec2[0]))) - 1.54745906908045e-14)))) - 1.38363650668853e-12)) + (fConst0 * (fConst109 + (fRec2[0] * (3.24296418482979e-14 + (fConst0 * (fConst108 + (fConst107 * fRec2[0])))))))))) + (fConst0 * (fConst106 + (fRec2[0] * (4.02643749535106e-14 + (fConst0 * (fConst105 + (fConst104 * fRec2[0])))))))))) + (fRec4[2] * (7.20035317480518e-12 + ((fRec3[0] * (5.79929217601893e-12 + ((fRec3[0] * ((fConst0 * (fConst103 + (fRec2[0] * ((fConst0 * (fConst102 + (fConst101 * fRec2[0]))) - 1.03163937938697e-14)))) - 2.76727301337706e-12)) + (fConst0 * (fConst100 + (fRec2[0] * (2.16197612321986e-14 + (fConst0 * (fConst99 + (fConst98 * fRec2[0])))))))))) + (fConst0 * (fConst97 + (fRec2[0] * (2.68429166356737e-14 + (fConst0 * (fConst96 + (fConst95 * fRec2[0]))))))))))) + (fRec4[3] * (7.20035317480518e-12 + ((fRec3[0] * (5.79929217601893e-12 + ((fRec3[0] * ((fConst0 * (fConst94 + (fRec2[0] * (1.03163937938697e-14 + (fConst0 * (fConst93 + (fConst92 * fRec2[0]))))))) - 2.76727301337706e-12)) + (fConst0 * (fConst91 + (fRec2[0] * ((fConst0 * (fConst89 + (fConst87 * fRec2[0]))) - 2.16197612321986e-14))))))) + (fConst0 * (fConst85 + (fRec2[0] * ((fConst0 * (fConst83 + (fConst81 * fRec2[0]))) - 2.68429166356737e-14)))))))) + (fRec4[4] * (3.60017658740259e-12 + ((fRec3[0] * (2.89964608800947e-12 + ((fRec3[0] * ((fConst0 * (fConst79 + (fRec2[0] * (1.54745906908045e-14 + (fConst0 * (fConst78 + (fConst77 * fRec2[0]))))))) - 1.38363650668853e-12)) + (fConst0 * (fConst76 + (fRec2[0] * ((fConst0 * (fConst74 + (fConst72 * fRec2[0]))) - 3.24296418482979e-14))))))) + (fConst0 * (fConst70 + (fRec2[0] * ((fConst0 * (fConst68 + (fConst66 * fRec2[0]))) - 4.02643749535106e-14)))))))) + (fRec4[5] * (7.20035317480518e-13 + ((fRec3[0] * (5.79929217601893e-13 + ((fRec3[0] * ((fConst0 * (fConst64 + (fRec2[0] * (5.15819689693484e-15 + (fConst0 * (fConst63 + (fConst62 * fRec2[0]))))))) - 2.76727301337706e-13)) + (fConst0 * (fConst61 + (fRec2[0] * ((fConst0 * (fConst60 + (fConst59 * fRec2[0]))) - 1.08098806160993e-14))))))) + (fConst0 * (fConst58 + (fRec2[0] * ((fConst0 * (fConst57 + (fConst56 * fRec2[0]))) - 1.34214583178369e-14)))))))) / fTemp0));
 		fRec5[0] = (fSlow2 + (0.993 * fRec5[1]));
-		fRec1[0] = (tubeclip(((fRec5[0] * ((((((fRec4[0] * (((fRec3[0] * ((fConst0 * (fConst168 + ((fRec3[0] * (2.73217975091517e-14 + (fConst0 * (fConst167 + (fRec2[0] * (5.20868763523094e-16 + (fConst0 * (fConst166 + (fConst165 * fRec2[0]))))))))) + (fRec2[0] * ((fConst0 * (fConst164 + (fConst163 * fRec2[0]))) - 1.16806950818942e-13))))) - 6.26646731861278e-12)) + (fConst0 * (fConst162 + (fRec2[0] * ((fConst0 * (fConst161 + (fConst160 * fRec2[0]))) - 7.94287265568807e-15))))) - 4.26119777665669e-13)) + (fRec4[1] * (((fRec3[0] * ((fConst0 * (fConst159 + ((fRec3[0] * (8.19653925274551e-14 + (fConst0 * (fConst158 + (fRec2[0] * (5.20868763523094e-16 + (fConst0 * (fConst157 + (fConst156 * fRec2[0]))))))))) + (fRec2[0] * ((fConst0 * (fConst155 + (fConst154 * fRec2[0]))) - 3.50420852456827e-13))))) - 3.13323365930639e-11)) + (fConst0 * (fConst153 + (fRec2[0] * ((fConst0 * (fConst152 + (fConst151 * fRec2[0]))) - 2.38286179670642e-14))))) - 2.13059888832834e-12))) + (fRec4[2] * (((fRec3[0] * ((fConst0 * (fConst150 + ((fRec3[0] * (5.46435950183034e-14 + (fConst0 * (fConst149 + (fRec2[0] * ((fConst0 * (fConst148 + (fConst147 * fRec2[0]))) - 1.04173752704619e-15)))))) + (fRec2[0] * ((fConst0 * (fConst146 + (fConst145 * fRec2[0]))) - 2.33613901637884e-13))))) - 6.26646731861278e-11)) + (fConst0 * (fConst144 + (fRec2[0] * ((fConst0 * (fConst143 + (fConst142 * fRec2[0]))) - 1.58857453113761e-14))))) - 4.26119777665669e-12))) + (fRec4[3] * (((fRec3[0] * ((fConst0 * (fConst141 + ((fRec3[0] * ((fConst0 * (fConst140 + (fRec2[0] * ((fConst0 * (fConst138 + (fConst137 * fRec2[0]))) - 1.04173752704619e-15)))) - 5.46435950183034e-14)) + (fRec2[0] * (2.33613901637884e-13 + (fConst0 * (fConst136 + (fConst134 * fRec2[0])))))))) - 6.26646731861278e-11)) + (fConst0 * (fConst132 + (fRec2[0] * (1.58857453113761e-14 + (fConst0 * (fConst130 + (fConst129 * fRec2[0])))))))) - 4.26119777665669e-12))) + (fRec4[4] * (((fRec3[0] * ((fConst0 * (fConst127 + ((fRec3[0] * ((fConst0 * (fConst126 + (fRec2[0] * (5.20868763523094e-16 + (fConst0 * (fConst124 + (fConst123 * fRec2[0]))))))) - 8.19653925274551e-14)) + (fRec2[0] * (3.50420852456827e-13 + (fConst0 * (fConst122 + (fConst120 * fRec2[0])))))))) - 3.13323365930639e-11)) + (fConst0 * (fConst118 + (fRec2[0] * (2.38286179670642e-14 + (fConst0 * (fConst116 + (fConst114 * fRec2[0])))))))) - 2.13059888832834e-12))) + (fRec4[5] * (((fRec3[0] * ((fConst0 * (fConst55 + ((fRec3[0] * ((fConst0 * (fConst54 + (fRec2[0] * (5.20868763523094e-16 + (fConst0 * (fConst52 + (fConst51 * fRec2[0]))))))) - 2.73217975091517e-14)) + (fRec2[0] * (1.16806950818942e-13 + (fConst0 * (fConst50 + (fConst48 * fRec2[0])))))))) - 6.26646731861278e-12)) + (fConst0 * (fConst46 + (fRec2[0] * (7.94287265568807e-15 + (fConst0 * (fConst43 + (fConst41 * fRec2[0])))))))) - 4.26119777665669e-13)))) / fTemp0)) - (fConst24 * (((fConst22 * fRec1[1]) + (fConst21 * fRec1[2])) + (fConst19 * fRec1[3]))));
+		fRec1[0] = (tubeclip(((fRec5[0] * ((((((fRec4[0] * (((fRec3[0] * ((fConst0 * (fConst168 + ((fRec3[0] * (2.73217975091517e-14 + (fConst0 * (fConst167 + (fRec2[0] * (5.20868763523094e-16 + (fConst0 * (fConst166 + (fConst165 * fRec2[0]))))))))) + (fRec2[0] * ((fConst0 * (fConst164 + (fConst163 * fRec2[0]))) - 1.16806950818942e-13))))) - 6.26646731861278e-12)) + (fConst0 * (fConst162 + (fRec2[0] * ((fConst0 * (fConst161 + (fConst160 * fRec2[0]))) - 7.94287265568807e-15))))) - 4.26119777665669e-13)) + (fRec4[1] * (((fRec3[0] * ((fConst0 * (fConst159 + ((fRec3[0] * (8.19653925274551e-14 + (fConst0 * (fConst158 + (fRec2[0] * (5.20868763523094e-16 + (fConst0 * (fConst157 + (fConst156 * fRec2[0]))))))))) + (fRec2[0] * ((fConst0 * (fConst155 + (fConst154 * fRec2[0]))) - 3.50420852456827e-13))))) - 3.13323365930639e-11)) + (fConst0 * (fConst153 + (fRec2[0] * ((fConst0 * (fConst152 + (fConst151 * fRec2[0]))) - 2.38286179670642e-14))))) - 2.13059888832834e-12))) + (fRec4[2] * (((fRec3[0] * ((fConst0 * (fConst150 + ((fRec3[0] * (5.46435950183034e-14 + (fConst0 * (fConst149 + (fRec2[0] * ((fConst0 * (fConst148 + (fConst147 * fRec2[0]))) - 1.04173752704619e-15)))))) + (fRec2[0] * ((fConst0 * (fConst146 + (fConst145 * fRec2[0]))) - 2.33613901637884e-13))))) - 6.26646731861278e-11)) + (fConst0 * (fConst144 + (fRec2[0] * ((fConst0 * (fConst143 + (fConst142 * fRec2[0]))) - 1.58857453113761e-14))))) - 4.26119777665669e-12))) + (fRec4[3] * (((fRec3[0] * ((fConst0 * (fConst141 + ((fRec3[0] * ((fConst0 * (fConst140 + (fRec2[0] * ((fConst0 * (fConst138 + (fConst137 * fRec2[0]))) - 1.04173752704619e-15)))) - 5.46435950183034e-14)) + (fRec2[0] * (2.33613901637884e-13 + (fConst0 * (fConst136 + (fConst134 * fRec2[0])))))))) - 6.26646731861278e-11)) + (fConst0 * (fConst132 + (fRec2[0] * (1.58857453113761e-14 + (fConst0 * (fConst130 + (fConst129 * fRec2[0])))))))) - 4.26119777665669e-12))) + (fRec4[4] * (((fRec3[0] * ((fConst0 * (fConst127 + ((fRec3[0] * ((fConst0 * (fConst126 + (fRec2[0] * (5.20868763523094e-16 + (fConst0 * (fConst124 + (fConst123 * fRec2[0]))))))) - 8.19653925274551e-14)) + (fRec2[0] * (3.50420852456827e-13 + (fConst0 * (fConst122 + (fConst120 * fRec2[0])))))))) - 3.13323365930639e-11)) + (fConst0 * (fConst118 + (fRec2[0] * (2.38286179670642e-14 + (fConst0 * (fConst116 + (fConst114 * fRec2[0])))))))) - 2.13059888832834e-12))) + (fRec4[5] * (((fRec3[0] * ((fConst0 * (fConst55 + ((fRec3[0] * ((fConst0 * (fConst54 + (fRec2[0] * (5.20868763523094e-16 + (fConst0 * (fConst52 + (fConst51 * fRec2[0]))))))) - 2.73217975091517e-14)) + (fRec2[0] * (1.16806950818942e-13 + (fConst0 * (fConst50 + (fConst48 * fRec2[0])))))))) - 6.26646731861278e-12)) + (fConst0 * (fConst46 + (fRec2[0] * (7.94287265568807e-15 + (fConst0 * (fConst43 + (fConst41 * fRec2[0])))))))) - 4.26119777665669e-13)))) / fTemp0), MA) - (fConst24 * (((fConst22 * fRec1[1]) + (fConst21 * fRec1[2])) + (fConst19 * fRec1[3]))));
 		fRec6[0] = (fSlow3 + (0.993 * fRec6[1]));
 		fRec0[0] = ((fConst169 * ((5.95584926303693e-10 * (fRec6[0] * (fRec1[1] + fRec1[2]))) + ((0 - (5.95584926303693e-10 * fRec6[0])) * (fRec1[3] + fRec1[0])))) - (fConst17 * (((((((((fConst15 * fRec0[1]) + (fConst14 * fRec0[2])) + (fConst13 * fRec0[3])) + (fConst12 * fRec0[4])) + (fConst11 * fRec0[5])) + (fConst9 * fRec0[6])) + (fConst7 * fRec0[7])) + (fConst4 * fRec0[8])) + (fConst2 * fRec0[9]))));
 		output0[i] = (FAUSTFLOAT)(fConst185 * ((fConst0 * ((fConst181 * fRec0[2]) + (fConst178 * fRec0[7]))) + ((fConst184 * fRec0[9]) + ((fConst183 * fRec0[8]) + ((fConst182 * fRec0[6]) + ((fConst180 * fRec0[5]) + ((fConst179 * fRec0[3]) + ((fConst176 * fRec0[1]) + ((fConst174 * fRec0[4]) + (fConst172 * fRec0[0]))))))))));
diff --git a/GxCreamMachine.lv2/plugin/gx_CreamMachine.cpp b/GxCreamMachine.lv2/plugin/gx_CreamMachine.cpp
index 74ae7f8..841ccd7 100644
--- a/GxCreamMachine.lv2/plugin/gx_CreamMachine.cpp
+++ b/GxCreamMachine.lv2/plugin/gx_CreamMachine.cpp
@@ -263,6 +263,7 @@ void Gx_CreamMachine_::deactivate_f()
 
 void Gx_CreamMachine_::run_dsp_(uint32_t n_samples)
 {
+  if (n_samples < 1) return;
   uint32_t ReCount = n_samples;
   if (fact>1) {
     ReCount = n_samples/fact ;
@@ -397,7 +398,6 @@ const LV2_Descriptor Gx_CreamMachine_::descriptor =
 
 ////////////////////////// LV2 SYMBOL EXPORT ///////////////////////////
 
-extern "C"
 LV2_SYMBOL_EXPORT
 const LV2_Descriptor*
 lv2_descriptor(uint32_t index)
openSUSE Build Service is sponsored by