Vapor: add support to trim surround object level
This commit is contained in:
parent
ee6d46d403
commit
a9719f1b35
@ -34,6 +34,7 @@
|
||||
|
||||
namespace ARDOUR
|
||||
{
|
||||
class Amp;
|
||||
class Session;
|
||||
class SurroundSend;
|
||||
class SurroundPannable;
|
||||
@ -42,7 +43,7 @@ class LV2Plugin;
|
||||
class LIBARDOUR_API SurroundReturn : public Processor
|
||||
{
|
||||
public:
|
||||
SurroundReturn (Session&);
|
||||
SurroundReturn (Session&, Route*);
|
||||
virtual ~SurroundReturn ();
|
||||
|
||||
bool can_support_io_configuration (const ChanCount& in, ChanCount& out);
|
||||
@ -65,6 +66,8 @@ public:
|
||||
|
||||
samplecnt_t signal_latency () const;
|
||||
|
||||
int set_state (XMLNode const&, int version);
|
||||
|
||||
protected:
|
||||
XMLNode& state () const;
|
||||
|
||||
@ -80,6 +83,8 @@ private:
|
||||
|
||||
LUFSMeter _lufs_meter;
|
||||
|
||||
std::shared_ptr<Amp> _trim;
|
||||
|
||||
LV2_Atom_Forge _forge;
|
||||
uint8_t _atom_buf[8192];
|
||||
pan_t _current_value[max_object_id][num_pan_parameters];
|
||||
|
@ -297,7 +297,7 @@ Route::init ()
|
||||
|
||||
if (is_surround_master ()) {
|
||||
_meter_point = _pending_meter_point = MeterPreFader;
|
||||
_surround_return.reset (new SurroundReturn (_session));
|
||||
_surround_return.reset (new SurroundReturn (_session, this));
|
||||
_surround_return->activate ();
|
||||
panner_shell()->set_bypassed (true);
|
||||
|
||||
@ -3333,6 +3333,11 @@ Route::set_processor_state (XMLNode const& node, int version, XMLProperty const*
|
||||
_surround_send.reset (new SurroundSend (_session, _mute_master));
|
||||
_surround_send->set_owner (this);
|
||||
processor = _surround_send;
|
||||
} else if (prop->value() == "surreturn") {
|
||||
if (_surround_return) {
|
||||
_surround_return->set_state (node, version);
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
warning << string_compose(_("unknown Processor type \"%1\"; ignored"), prop->value()) << endmsg;
|
||||
return false;
|
||||
|
@ -17,19 +17,20 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "ardour/surround_return.h"
|
||||
#include "ardour/amp.h"
|
||||
#include "ardour/audio_buffer.h"
|
||||
#include "ardour/lv2_plugin.h"
|
||||
#include "ardour/route.h"
|
||||
#include "ardour/session.h"
|
||||
#include "ardour/surround_pannable.h"
|
||||
#include "ardour/surround_return.h"
|
||||
#include "ardour/surround_send.h"
|
||||
#include "ardour/uri_map.h"
|
||||
#include "pbd/i18n.h"
|
||||
|
||||
using namespace ARDOUR;
|
||||
|
||||
SurroundReturn::SurroundReturn (Session& s)
|
||||
SurroundReturn::SurroundReturn (Session& s, Route* r)
|
||||
: Processor (s, _("SurrReturn"), Temporal::TimeDomainProvider (Temporal::AudioTime))
|
||||
, _lufs_meter (s.nominal_sample_rate (), 5)
|
||||
, _current_n_objects (max_object_id)
|
||||
@ -49,13 +50,19 @@ SurroundReturn::SurroundReturn (Session& s)
|
||||
throw ProcessorException (_("Required Atmos/Vapor Processor not found."));
|
||||
}
|
||||
|
||||
ChanCount cca128 (ChanCount (DataType::AUDIO, 128));
|
||||
|
||||
_flush.store (0);
|
||||
_surround_processor->activate ();
|
||||
_surround_bufs.ensure_buffers (DataType::AUDIO, 128, s.get_block_size ());
|
||||
_surround_bufs.set_count (ChanCount (DataType::AUDIO, 128));
|
||||
_surround_bufs.set_count (cca128);
|
||||
|
||||
lv2_atom_forge_init (&_forge, URIMap::instance ().urid_map ());
|
||||
|
||||
_trim.reset (new Amp (_session, X_("Trim"), r->trim_control(), false));
|
||||
_trim->configure_io (cca128, cca128);
|
||||
_trim->activate ();
|
||||
|
||||
for (size_t i = 0; i < max_object_id; ++i) {
|
||||
_current_render_mode[i] = -1;
|
||||
for (size_t p = 0; p < num_pan_parameters; ++p) {
|
||||
@ -218,6 +225,10 @@ SurroundReturn::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_
|
||||
#endif
|
||||
}
|
||||
|
||||
_trim->set_gain_automation_buffer (_session.trim_automation_buffer ());
|
||||
_trim->setup_gain_automation (start_sample, end_sample, nframes);
|
||||
_trim->run (_surround_bufs, start_sample, end_sample, speed, nframes, true);
|
||||
|
||||
_surround_processor->connect_and_run (_surround_bufs, start_sample, end_sample, speed, _in_map, _out_map, nframes, 0);
|
||||
|
||||
BufferSet::iterator i = _surround_bufs.begin (DataType::AUDIO);
|
||||
@ -372,9 +383,17 @@ SurroundReturn::max_dbtp () const
|
||||
return _lufs_meter.dbtp ();
|
||||
}
|
||||
|
||||
int
|
||||
SurroundReturn::set_state (XMLNode const& node, int version)
|
||||
{
|
||||
return _trim->set_state (node, version);
|
||||
}
|
||||
|
||||
XMLNode&
|
||||
SurroundReturn::state () const
|
||||
{
|
||||
XMLNode* node = new XMLNode (X_("SurroundReturn"));
|
||||
return *node;
|
||||
XMLNode& node (_trim->state ());
|
||||
node.set_property ("name", "SurrReturn");
|
||||
node.set_property ("type", "surreturn");
|
||||
return node;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user