From 42072343d378165f63162d0a8c97bfd3aaff80a4 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Fri, 15 Mar 2013 17:54:37 -0700 Subject: [PATCH] Mixer: Fix persistence of bypass setting for LADSPA plugins. --- mixer/src/Module.H | 5 ++++- mixer/src/Plugin_Module.C | 26 ++++++++++++++++++-------- mixer/src/Plugin_Module.H | 3 +-- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/mixer/src/Module.H b/mixer/src/Module.H index 24bd8e2..04fe8e6 100644 --- a/mixer/src/Module.H +++ b/mixer/src/Module.H @@ -46,7 +46,6 @@ class Module : public Fl_Group, public Loggable { nframes_t _nframes; Chain *_chain; bool _is_default; - bool _bypass; Module_Parameter_Editor *_editor; @@ -65,6 +64,10 @@ class Module : public Fl_Group, public Loggable { void copy ( void ) const; void paste_before ( void ); +protected: + + volatile bool _bypass; + public: /* true if this module was added by default and not under normal user control */ diff --git a/mixer/src/Plugin_Module.C b/mixer/src/Plugin_Module.C index 9da242a..5abd77c 100644 --- a/mixer/src/Plugin_Module.C +++ b/mixer/src/Plugin_Module.C @@ -170,7 +170,8 @@ Plugin_Module::init ( void ) { _idata = new Plugin_Module::ImplementationData(); _idata->handle.clear(); - _active = false; + /* module will be bypassed until plugin is loaded */ + _bypass = true; _crosswire = false; align( (Fl_Align)FL_ALIGN_CENTER | FL_ALIGN_INSIDE ); @@ -256,7 +257,9 @@ Plugin_Module::configure_inputs( int n ) } } - if ( _active ) + bool b = bypass(); + + if ( !b ) deactivate(); if ( plugin_instances( inst ) ) @@ -264,7 +267,7 @@ Plugin_Module::configure_inputs( int n ) else return false; - if ( ! _active ) + if ( !b ) activate(); return true; @@ -623,7 +626,14 @@ Plugin_Module::load ( unsigned long id ) return false; } - return plugin_instances( 1 ); + int instances = plugin_instances( 1 ); + + if ( instances ) + { + bypass( false ); + } + + return instances; } void @@ -671,7 +681,7 @@ Plugin_Module::activate ( void ) { DMESSAGE( "Activating plugin \"%s\"", label() ); - if ( _active ) + if ( !bypass() ) FATAL( "Attempt to activate already active plugin" ); if ( chain() ) @@ -681,7 +691,7 @@ Plugin_Module::activate ( void ) for ( unsigned int i = 0; i < _idata->handle.size(); ++i ) _idata->descriptor->activate( _idata->handle[i] ); - _active = true; + _bypass = false; if ( chain() ) chain()->engine()->unlock(); @@ -695,7 +705,7 @@ Plugin_Module::deactivate( void ) if ( chain() ) chain()->engine()->lock(); - _active = false; + _bypass = true; if ( _idata->descriptor->deactivate ) for ( unsigned int i = 0; i < _idata->handle.size(); ++i ) @@ -736,7 +746,7 @@ Plugin_Module::process ( nframes_t nframes ) { handle_port_connection_change(); - if ( _active ) + if ( !bypass() ) { for ( unsigned int i = 0; i < _idata->handle.size(); ++i ) _idata->descriptor->run( _idata->handle[i], nframes ); diff --git a/mixer/src/Plugin_Module.H b/mixer/src/Plugin_Module.H index 791b2f8..ace95ab 100644 --- a/mixer/src/Plugin_Module.H +++ b/mixer/src/Plugin_Module.H @@ -66,7 +66,6 @@ private: ImplementationData *_idata; - volatile bool _active; int _plugin_ins; int _plugin_outs; bool _crosswire; @@ -108,7 +107,7 @@ public: int can_support_inputs ( int ); bool configure_inputs ( int ); - virtual bool bypass ( void ) const { return !_active; } + virtual bool bypass ( void ) const { return _bypass; } virtual void bypass ( bool v ); virtual void process ( nframes_t );