diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index a27c683672..654211b3df 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -3,7 +3,7 @@ * Copyright (C) 2005-2007 Taybin Rutkin * Copyright (C) 2006-2014 David Robillard * Copyright (C) 2009-2012 Carl Hetherington - * Copyright (C) 2013-2019 Robin Gareus + * Copyright (C) 2013-2023 Robin Gareus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -131,11 +131,12 @@ public: struct LIBARDOUR_API IOPortDescription { public: - IOPortDescription (const std::string& n, bool sc = false, std::string gn = "", uint32_t gc = 0) + IOPortDescription (const std::string& n, bool sc = false, std::string gn = "", uint32_t gc = 0, uint32_t bn = 0) : name (n) , is_sidechain (sc) , group_name (gn.empty () ? n : gn) , group_channel (gc) + , bus_number (bn) { } IOPortDescription (const IOPortDescription& other) @@ -143,6 +144,7 @@ public: , is_sidechain (other.is_sidechain) , group_name (other.group_name) , group_channel (other.group_channel) + , bus_number (other.bus_number) { } std::string name; @@ -150,6 +152,7 @@ public: std::string group_name; uint32_t group_channel; + uint32_t bus_number; }; virtual IOPortDescription describe_io_port (DataType dt, bool input, uint32_t id) const; diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index f316b224c1..f1d01adcbd 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -2,7 +2,7 @@ * Copyright (C) 2006-2016 David Robillard * Copyright (C) 2007-2017 Paul Davis * Copyright (C) 2010 Carl Hetherington - * Copyright (C) 2013-2019 Robin Gareus + * Copyright (C) 2013-2023 Robin Gareus * Copyright (C) 2014-2017 Tim Mayberry * Copyright (C) 2015-2016 Nick Mainsbridge * Copyright (C) 2018 Julien "_FrnchFrgg_" RIVAUD @@ -1776,6 +1776,7 @@ AUPlugin::describe_io_port (ARDOUR::DataType dt, bool input, uint32_t id) const } std::string busname; + uint32_t bus_number = 0; bool is_sidechain = false; if (dt == DataType::AUDIO) { @@ -1788,7 +1789,8 @@ AUPlugin::describe_io_port (ARDOUR::DataType dt, bool input, uint32_t id) const ss << " / Bus " << (1 + bus); busname = _bus_name_in[bus]; is_sidechain = bus > 0; - busname = _bus_name_in[bus]; + busname = _bus_name_in[bus]; + bus_number = bus; break; } pid -= bus_inused[bus]; @@ -1801,7 +1803,8 @@ AUPlugin::describe_io_port (ARDOUR::DataType dt, bool input, uint32_t id) const id = pid; ss << _bus_name_out[bus]; ss << " / Bus " << (1 + bus); - busname = _bus_name_out[bus]; + busname = _bus_name_out[bus]; + bus_number = bus; break; } pid -= bus_outputs[bus]; @@ -1820,8 +1823,9 @@ AUPlugin::describe_io_port (ARDOUR::DataType dt, bool input, uint32_t id) const Plugin::IOPortDescription iod (ss.str()); iod.is_sidechain = is_sidechain; if (!busname.empty()) { - iod.group_name = busname; + iod.group_name = busname; iod.group_channel = id; + iod.bus_number = bus_number; } return iod; } diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index b4fbae4838..5acf0d0eb3 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -2,7 +2,7 @@ * Copyright (C) 2008-2012 Carl Hetherington * Copyright (C) 2008-2017 Paul Davis * Copyright (C) 2008-2019 David Robillard - * Copyright (C) 2012-2019 Robin Gareus + * Copyright (C) 2012-2023 Robin Gareus * Copyright (C) 2013-2018 John Emmas * Copyright (C) 2013 Michael R. Fisher * Copyright (C) 2014-2016 Tim Mayberry @@ -2448,6 +2448,7 @@ LV2Plugin::describe_io_port (ARDOUR::DataType dt, bool input, uint32_t id) const if (lilv_nodes_size (grouplabel) > 0) { const LilvNode* grpname = lilv_nodes_get_first (grouplabel); iod.group_name = lilv_node_as_string (grpname); + // TODO set iod.bus_number (nth group) } lilv_nodes_free (grouplabel); diff --git a/libs/ardour/vst3_plugin.cc b/libs/ardour/vst3_plugin.cc index 22df1c3569..b442be65a0 100644 --- a/libs/ardour/vst3_plugin.cc +++ b/libs/ardour/vst3_plugin.cc @@ -1656,7 +1656,7 @@ VST3PI::count_channels (Vst::MediaType media, Vst::BusDirection dir, Vst::BusTyp return std::min (1, bus.channelCount); #else /* Some plugin leave it at zero, even though they accept events */ - _io_name[media][dir].push_back (Plugin::IOPortDescription (bus_name, is_sidechain)); + _io_name[media][dir].push_back (Plugin::IOPortDescription (bus_name, is_sidechain, "", 0, i)); return 1; #endif } else { @@ -1667,7 +1667,7 @@ VST3PI::count_channels (Vst::MediaType media, Vst::BusDirection dir, Vst::BusTyp } else { channel_name = bus_name; } - _io_name[media][dir].push_back (Plugin::IOPortDescription (channel_name, is_sidechain, bus_name, j)); + _io_name[media][dir].push_back (Plugin::IOPortDescription (channel_name, is_sidechain, bus_name, j, i)); } n_channels += bus.channelCount; }