Use a default configuration instead of bailing out
authorJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Thu, 4 Aug 2016 16:03:24 +0000 (18:03 +0200)
committerJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Sat, 6 Aug 2016 17:38:09 +0000 (19:38 +0200)
If the script doesn't provide a dsp_ioconfig() function, or if it does
not return a table of tables, provide an empty table of table as
default, which means a single configuration with default values.

libs/ardour/luaproc.cc

index e157467094179d0da3a75728a7a73441e5e033f7..e73b18ee21877e6ee533be202935bf0de6573d82 100644 (file)
@@ -329,22 +329,24 @@ LuaProc::can_support_io_configuration (const ChanCount& in, ChanCount& out, Chan
 
        lua_State* L = lua.getState ();
        luabridge::LuaRef ioconfig = luabridge::getGlobal (L, "dsp_ioconfig");
-       if (!ioconfig.isFunction ()) {
-               return false;
-       }
 
        luabridge::LuaRef *_iotable = NULL; // can't use reference :(
-       try {
-               luabridge::LuaRef iotable = ioconfig ();
-               if (iotable.isTable ()) {
-                       _iotable = new luabridge::LuaRef (iotable);
+
+       if (ioconfig.isFunction ()) {
+               try {
+                       luabridge::LuaRef iotable = ioconfig ();
+                       if (iotable.isTable ()) {
+                               _iotable = new luabridge::LuaRef (iotable);
+                       }
+               } catch (luabridge::LuaException const& e) {
+                       _iotable = NULL;
                }
-       } catch (luabridge::LuaException const& e) {
-               return false;
        }
 
        if (!_iotable) {
-               return false;
+               /* empty table as default */
+               luabridge::LuaRef iotable = luabridge::newTable(L);
+               _iotable = new luabridge::LuaRef (iotable);
        }
 
        // now we can reference it.
@@ -352,7 +354,9 @@ LuaProc::can_support_io_configuration (const ChanCount& in, ChanCount& out, Chan
        delete _iotable;
 
        if ((iotable).length () < 1) {
-               return false;
+               /* empty table as only config, to get default values */
+               luabridge::LuaRef ioconf = luabridge::newTable(L);
+               iotable[1] = ioconf;
        }
 
        const int audio_in = in.n_audio ();