Browse Source

self_connect_mode engine parameter

tags/v1.9.10
Nedko Arnaudov 16 years ago
parent
commit
aab13501f4
10 changed files with 69 additions and 14 deletions
  1. +2
    -0
      common/JackConstants.h
  2. +1
    -0
      common/JackControlAPI.cpp
  3. +43
    -4
      common/JackEngine.cpp
  4. +2
    -1
      common/JackEngine.h
  5. +2
    -2
      common/JackLockedEngine.h
  6. +2
    -2
      common/JackServer.cpp
  7. +1
    -1
      common/JackServer.h
  8. +4
    -3
      common/JackServerGlobals.cpp
  9. +2
    -1
      common/JackServerGlobals.h
  10. +10
    -0
      common/JackTypes.h

+ 2
- 0
common/JackConstants.h View File

@@ -92,4 +92,6 @@
#define EMPTY 0xFFFD
#define FREE 0xFFFC

#define JACK_DEFAULT_SELF_CONNECT_MODE JackSelfConnectIgnoreAll

#endif

+ 1
- 0
common/JackControlAPI.cpp View File

@@ -864,6 +864,7 @@ jackctl_server_start(
server_ptr->realtime_priority.i,
server_ptr->verbose.b,
(jack_timer_type_t)server_ptr->clock_source.ui,
JACK_DEFAULT_SELF_CONNECT_MODE,
server_ptr->name.str);
if (server_ptr->engine == NULL)
{


+ 43
- 4
common/JackEngine.cpp View File

@@ -39,11 +39,13 @@ namespace Jack

JackEngine::JackEngine(JackGraphManager* manager,
JackSynchro* table,
JackEngineControl* control)
JackEngineControl* control,
JackSelfConnectMode self_connect_mode)
{
fGraphManager = manager;
fSynchroTable = table;
fEngineControl = control;
fSelfConnectMode = self_connect_mode;
for (int i = 0; i < CLIENT_NUM; i++)
fClientTable[i] = NULL;
}
@@ -756,10 +758,47 @@ int JackEngine::CheckPortsConnect(int refnum, jack_port_id_t src, jack_port_id_t
// 2 means client is connecting its own ports (i.e. for app internal functionality)
// TODO: Make this check an engine option and more tweakable (return error or success)
// MAYBE: make the engine option changable on the fly and expose it through client or control API
if (src_self + dst_self != 0)

switch (fSelfConnectMode)
{
jack_info("ignoring port self connect request");
return 0;
case JackSelfConnectFailExternalOnly:
if (src_self + dst_self == 1)
{
jack_info("rejecting port self connect request to external port");
return -1;
}

return 1;

case JackSelfConnectIgnoreExternalOnly:
if (src_self + dst_self == 1)
{
jack_info("ignoring port self connect request to external port");
return 0;
}

return 1;

case JackSelfConnectFailAll:
if (src_self + dst_self != 0)
{
jack_info("rejecting port self connect request");
return -1;
}

return 1;

case JackSelfConnectIgnoreAll:
if (src_self + dst_self != 0)
{
jack_info("ignoring port self connect request");
return 0;
}

return 1;

case JackSelfConnectAllow: // fix warning
return 1;
}

return 1;


+ 2
- 1
common/JackEngine.h View File

@@ -43,6 +43,7 @@ class SERVER_EXPORT JackEngine

JackGraphManager* fGraphManager;
JackEngineControl* fEngineControl;
JackSelfConnectMode fSelfConnectMode;
JackClientInterface* fClientTable[CLIENT_NUM];
JackSynchro* fSynchroTable;
JackServerNotifyChannel fChannel; /*! To communicate between the RT thread and server */
@@ -75,7 +76,7 @@ class SERVER_EXPORT JackEngine

public:

JackEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler);
JackEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler, JackSelfConnectMode self_connect_mode);
~JackEngine();

int Open();


+ 2
- 2
common/JackLockedEngine.h View File

@@ -38,8 +38,8 @@ class SERVER_EXPORT JackLockedEngine : public JackLockAble

public:

JackLockedEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler):
fEngine(manager, table, controler)
JackLockedEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler, JackSelfConnectMode self_connect_mode):
fEngine(manager, table, controler, self_connect_mode)
{}
~JackLockedEngine()
{}


+ 2
- 2
common/JackServer.cpp View File

@@ -38,7 +38,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
namespace Jack
{

JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose, jack_timer_type_t clock, const char* server_name)
JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose, jack_timer_type_t clock, JackSelfConnectMode self_connect_mode, const char* server_name)
{
if (rt) {
jack_info("JACK server starting in realtime mode with priority %ld", priority);
@@ -48,7 +48,7 @@ JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long pr

fGraphManager = new JackGraphManager();
fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, clock, server_name);
fEngine = new JackLockedEngine(fGraphManager, GetSynchroTable(), fEngineControl);
fEngine = new JackLockedEngine(fGraphManager, GetSynchroTable(), fEngineControl, self_connect_mode);
fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver(fEngine, GetSynchroTable()));
fDriverInfo = new JackDriverInfo();
fAudioDriver = NULL;


+ 1
- 1
common/JackServer.h View File

@@ -62,7 +62,7 @@ class SERVER_EXPORT JackServer

public:

JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose, jack_timer_type_t clock, const char* server_name);
JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose, jack_timer_type_t clock, JackSelfConnectMode self_connect_mode, const char* server_name);
~JackServer();

int Open(jack_driver_desc_t* driver_desc, JSList* driver_params);


+ 4
- 3
common/JackServerGlobals.cpp View File

@@ -40,10 +40,11 @@ int JackServerGlobals::Start(const char* server_name,
int rt,
int priority,
int verbose,
jack_timer_type_t clock)
jack_timer_type_t clock,
JackSelfConnectMode self_connect_mode)
{
jack_log("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld ", sync, time_out_ms, rt, priority, verbose);
new JackServer(sync, temporary, time_out_ms, rt, priority, verbose, clock, server_name); // Will setup fInstance and fUserCount globals
new JackServer(sync, temporary, time_out_ms, rt, priority, verbose, clock, self_connect_mode, server_name); // Will setup fInstance and fUserCount globals
int res = fInstance->Open(driver_desc, driver_params);
return (res < 0) ? res : fInstance->Start();
}
@@ -289,7 +290,7 @@ bool JackServerGlobals::Init()
free(argv[i]);
}

int res = Start(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, verbose_aux, clock_source);
int res = Start(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, verbose_aux, clock_source, JACK_DEFAULT_SELF_CONNECT_MODE);
if (res < 0) {
jack_error("Cannot start server... exit");
Delete();


+ 2
- 1
common/JackServerGlobals.h View File

@@ -53,7 +53,8 @@ struct SERVER_EXPORT JackServerGlobals
int rt,
int priority,
int verbose,
jack_timer_type_t clock);
jack_timer_type_t clock,
JackSelfConnectMode self_connect_mode);
static void Stop();
static void Delete();
};


+ 10
- 0
common/JackTypes.h View File

@@ -49,4 +49,14 @@ typedef enum {
Finished,
} jack_client_state_t;


enum JackSelfConnectMode
{
JackSelfConnectAllow,
JackSelfConnectFailExternalOnly,
JackSelfConnectIgnoreExternalOnly,
JackSelfConnectFailAll,
JackSelfConnectIgnoreAll,
};

#endif

Loading…
Cancel
Save