From af3219abeab4f11edc0b5538d7739009c65f4e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Wed, 17 Oct 2018 22:15:17 +0200 Subject: [PATCH] ardour: meter performance tweaks / fluidsynth 2.x support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Andreas Müller --- .../recipes-multimedia/ardour/ardour5_git.bb | 3 + ...e-meter-redraws-for-inactive-meters-.patch | 29 +++++ ...e-meter-redraws-for-inactive-meters-.patch | 32 +++++ ...h-s-API-changes-introduced-with-2.0..patch | 117 ++++++++++++++++++ 4 files changed, 181 insertions(+) create mode 100644 recipes-misc/recipes-multimedia/ardour/files/0003-Prevent-excessive-meter-redraws-for-inactive-meters-.patch create mode 100644 recipes-misc/recipes-multimedia/ardour/files/0004-Prevent-excessive-meter-redraws-for-inactive-meters-.patch create mode 100644 recipes-misc/recipes-multimedia/ardour/files/0005-Follow-fluidsynth-s-API-changes-introduced-with-2.0..patch diff --git a/recipes-misc/recipes-multimedia/ardour/ardour5_git.bb b/recipes-misc/recipes-multimedia/ardour/ardour5_git.bb index a618a8bd..865a8f0d 100644 --- a/recipes-misc/recipes-multimedia/ardour/ardour5_git.bb +++ b/recipes-misc/recipes-multimedia/ardour/ardour5_git.bb @@ -36,6 +36,9 @@ SRC_URI = " \ git://github.com/Ardour/ardour.git \ file://0001-remove-all-build-flags-that-cause-trouble-for-cross-.patch \ file://0002-Use-ARM-NEON-intrinsics-if-available-for-mixing-func.patch \ + file://0003-Prevent-excessive-meter-redraws-for-inactive-meters-.patch \ + file://0004-Prevent-excessive-meter-redraws-for-inactive-meters-.patch \ + file://0005-Follow-fluidsynth-s-API-changes-introduced-with-2.0..patch \ file://ardour5.desktop \ " SRCREV = "ae0dcdc0c5d13483271065c360e378202d20170a" diff --git a/recipes-misc/recipes-multimedia/ardour/files/0003-Prevent-excessive-meter-redraws-for-inactive-meters-.patch b/recipes-misc/recipes-multimedia/ardour/files/0003-Prevent-excessive-meter-redraws-for-inactive-meters-.patch new file mode 100644 index 00000000..ecee636f --- /dev/null +++ b/recipes-misc/recipes-multimedia/ardour/files/0003-Prevent-excessive-meter-redraws-for-inactive-meters-.patch @@ -0,0 +1,29 @@ +From be826f363522dbca96c8263d404c57c4fe9ff0e2 Mon Sep 17 00:00:00 2001 +From: Robin Gareus +Date: Wed, 3 Oct 2018 20:54:14 +0200 +Subject: [PATCH] Prevent excessive meter redraws for inactive meters at zero + +Upstream-Status: Backport [1] + +[1] https://github.com/Ardour/ardour/commit/be826f363522dbca96c8263d404c57c4fe9ff0e2 + +--- + libs/widgets/fastmeter.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libs/widgets/fastmeter.cc b/libs/widgets/fastmeter.cc +index cf1d9dd07..a9ecf5dad 100644 +--- a/libs/widgets/fastmeter.cc ++++ b/libs/widgets/fastmeter.cc +@@ -703,7 +703,7 @@ FastMeter::set (float lvl, float peak) + if (pixwidth <= 0 || pixheight <=0) return; + + if (peak == -1) { +- if (lvl >= current_peak) { ++ if (lvl >= current_peak && lvl > 0) { + current_peak = lvl; + hold_state = hold_cnt; + } +-- +2.14.4 + diff --git a/recipes-misc/recipes-multimedia/ardour/files/0004-Prevent-excessive-meter-redraws-for-inactive-meters-.patch b/recipes-misc/recipes-multimedia/ardour/files/0004-Prevent-excessive-meter-redraws-for-inactive-meters-.patch new file mode 100644 index 00000000..42e9adf9 --- /dev/null +++ b/recipes-misc/recipes-multimedia/ardour/files/0004-Prevent-excessive-meter-redraws-for-inactive-meters-.patch @@ -0,0 +1,32 @@ +From 8d5e7e9f4e4372debb9ce285336ccc1ecc0383f6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andreas=20M=C3=BCller?= +Date: Wed, 17 Oct 2018 22:10:41 +0200 +Subject: [PATCH] Prevent excessive meter redraws for inactive meters at zero + II +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Same as be826f363522dbca96c8263d404c57c4fe9ff0e2 + +Signed-off-by: Andreas Müller +--- + libs/canvas/meter.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libs/canvas/meter.cc b/libs/canvas/meter.cc +index b539a1b4a..76e31bf58 100644 +--- a/libs/canvas/meter.cc ++++ b/libs/canvas/meter.cc +@@ -702,7 +702,7 @@ Meter::set (float lvl, float peak) + if (pixwidth <= 0 || pixheight <=0) return; + + if (peak == -1) { +- if (lvl >= current_peak) { ++ if (lvl >= current_peak && lvl > 0) { + current_peak = lvl; + hold_state = hold_cnt; + } +-- +2.14.4 + diff --git a/recipes-misc/recipes-multimedia/ardour/files/0005-Follow-fluidsynth-s-API-changes-introduced-with-2.0..patch b/recipes-misc/recipes-multimedia/ardour/files/0005-Follow-fluidsynth-s-API-changes-introduced-with-2.0..patch new file mode 100644 index 00000000..4bedbbcf --- /dev/null +++ b/recipes-misc/recipes-multimedia/ardour/files/0005-Follow-fluidsynth-s-API-changes-introduced-with-2.0..patch @@ -0,0 +1,117 @@ +From ae281f2135607e55675d7cc18a9fe1a5b88464ec Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andreas=20M=C3=BCller?= +Date: Fri, 12 Oct 2018 00:56:59 +0200 +Subject: [PATCH] Follow fluidsynth's API changes introduced with 2.0.0 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Upstream-Status: Submitted [1] + +[1] https://github.com/Ardour/ardour/pull/431 + +Signed-off-by: Andreas Müller +--- + libs/ardour/fluid_synth.cc | 14 ++++++++++++++ + libs/plugins/a-fluidsynth.lv2/a-fluidsynth.cc | 27 ++++++++++++++++++++++++++- + 2 files changed, 40 insertions(+), 1 deletion(-) + +diff --git a/libs/ardour/fluid_synth.cc b/libs/ardour/fluid_synth.cc +index 45653a9e7..c9b7b526e 100644 +--- a/libs/ardour/fluid_synth.cc ++++ b/libs/ardour/fluid_synth.cc +@@ -71,6 +71,7 @@ FluidSynth::load_sf2 (const std::string& fn) + } + + size_t count; ++#if FLUIDSYNTH_VERSION_MAJOR < 2 + fluid_preset_t preset; + + sfont->iteration_start (sfont); +@@ -83,7 +84,20 @@ FluidSynth::load_sf2 (const std::string& fn) + preset.get_banknum (&preset), + preset.get_num (&preset))); + } ++#else ++ fluid_preset_t* preset; + ++ fluid_sfont_iteration_start (sfont); ++ for (count = 0; (preset = fluid_sfont_iteration_next (sfont)) != 0; ++count) { ++ if (count < 16) { ++ fluid_synth_program_select (_synth, count, _synth_id, fluid_preset_get_banknum (preset), fluid_preset_get_num (preset)); ++ } ++ _presets.push_back (BankProgram ( ++ fluid_preset_get_name (preset), ++ fluid_preset_get_banknum (preset), ++ fluid_preset_get_num (preset))); ++ } ++#endif + if (count == 0) { + return false; + } +diff --git a/libs/plugins/a-fluidsynth.lv2/a-fluidsynth.cc b/libs/plugins/a-fluidsynth.lv2/a-fluidsynth.cc +index e6cf1e29d..6d168d5fe 100644 +--- a/libs/plugins/a-fluidsynth.lv2/a-fluidsynth.cc ++++ b/libs/plugins/a-fluidsynth.lv2/a-fluidsynth.cc +@@ -184,6 +184,7 @@ load_sf2 (AFluidSynth* self, const char* fn) + } + + int chn; ++#if FLUIDSYNTH_VERSION_MAJOR < 2 + fluid_preset_t preset; + sfont->iteration_start (sfont); + pthread_mutex_lock (&self->bp_lock); +@@ -192,15 +193,33 @@ load_sf2 (AFluidSynth* self, const char* fn) + fluid_synth_program_select (self->synth, chn, synth_id, + preset.get_banknum (&preset), preset.get_num (&preset)); + } ++#else ++ fluid_preset_t *preset; ++ fluid_sfont_iteration_start (sfont); ++ pthread_mutex_lock (&self->bp_lock); ++ for (chn = 0; (preset = fluid_sfont_iteration_next (sfont)); ++chn) { ++ if (chn < 16) { ++ fluid_synth_program_select (self->synth, chn, synth_id, ++ fluid_preset_get_banknum (preset), fluid_preset_get_num (preset)); ++ } ++#endif // FLUIDSYNTH_VERSION_MAJOR < 2 + #ifndef LV2_EXTENDED + else { break ; } + #else ++#if FLUIDSYNTH_VERSION_MAJOR < 2 + self->presets[preset.get_banknum (&preset)].push_back ( + BankProgram ( + preset.get_name (&preset), + preset.get_banknum (&preset), + preset.get_num (&preset))); +-#endif ++#else ++ self->presets[fluid_preset_get_banknum (preset)].push_back ( ++ BankProgram ( ++ fluid_preset_get_name (preset), ++ fluid_preset_get_banknum (preset), ++ fluid_preset_get_num (preset))); ++#endif // FLUIDSYNTH_VERSION_MAJOR < 2 ++#endif // LV2_EXTENDED + } + pthread_mutex_unlock (&self->bp_lock); + +@@ -681,9 +700,15 @@ work_response (LV2_Handle instance, + } + + for (int chn = 0; chn < 16; ++chn) { ++#if FLUIDSYNTH_VERSION_MAJOR < 2 + unsigned int sfid = 0; + unsigned int bank = 0; + unsigned int program = -1; ++#else ++ int sfid = 0; ++ int bank = 0; ++ int program = -1; ++#endif + if (FLUID_OK == fluid_synth_get_program (self->synth, chn, &sfid, &bank, &program)) { + self->program_state[chn].bank = bank; + self->program_state[chn].program = program; +-- +2.14.4 +