---------------------
  Jackdmp Todo list
---------------------


2008-03-12 : Do not start the client RT thread if no callback or thread routine has been setup (no use of jack_set_process_callback or jack_set_process_thread). This require change in the server to avoid signaling the client in this case. Check direct access from server internal clients (see comment in JackInternalClient::JackInternalClient() in JackInternalClient.cpp)

2008-02-07 : Pipelining idea:

- cut the driver buffer size in n slices : clients see the divided value, server deal with the driver value, some clients may want to keep the driver buffer size (non pipelining)
- new jack_set_buffer_divisor/jack_get_buffer_divisor and jack_set_pipelining/jack_get_pipelining API
- jack_set_buffer_size changes the driver buffer size, jack_get_buffer_size get the divided value
- buffer_size callback notify the divided value for pipelining clients

2008-02-06 : Do a "fork-exec" for the server (deamon..)

2008-02-05 : Hierarchical model : having several client graph running simultaneously (Fons) with a "link" between them (AKA NetJack)

2008-01-15 : Server control API (Nedko Arnoudov): would help to develop external control applications (DBUS or OSC based...)

2007-12-16 : Dynamic backend switch, so that audio backend can be switch off and replaced by the dummy backend.

2007-10-17 : Optimize activation call graph with multiple clients in a same process

Andrzej Szombierski recently did interesting test to measure jack client activation speed in different context: jack client opened in separated processes, multiple jack clients running in the server, multiple jack clients running in a same separated process, this using jackd or jackdmp.

jackd:

- multiple jack clients in the server: fast because *direct function call* to the client process callback is done bypassing the fifo based activation system
- jack clients in separated processes: slower using the fifo based activation system
- multiple jack clients in a separated process: slower using the fifo based activation system

jackdmp:

- multiple jack clients in the server: slower using the fifo based activation system
- jack clients in separated processes: slower using the fifo based activation system
- multiple jack clients in a separated process: slower using the fifo based activation system

So basically jackdmp use the same fifo based activated system in all cases, and jackd does some optimization in the "multiple jack clients in the server" case.

Also having multiple clients in a same process (jack server or separated process) is not so common, it may still be interesting to be able to optimize the activation path with sequential clients in a same process (server or separated). I am thinking in a method that could be done in jackdmp data-flow model : since the activation path is "computed on the fly" when following links between clients, the step where a client activates all its output could be reworked a little with something like :

- find one of the client in the output client list that is in the same process
- activate all other output clients using the normal fifo based system
- *direct* call the client process callback

(and this would be done recursively following a sequential path in the graph until no more client in the same process is found)

There is still an issue if a client uses the "Fons special" ((-: new jack_thread_wait API, where a client explicitly gives control back to libjack... I still don't have a clear idea if this optimization path could still be done.

Even if the "multiple clients" way is not really used in existing applications, is it a desirable feature to have at some point?

2007-10-07 : Before doing an official package, check all public headers

2007-03-14 : Check JackGraphManager::GetPortsAux after MIDI branch merge.

2007-03-14 : Add Paul dynamic jack server location code.

2007-01-22 : Check the "dead" client removing code in the server : non running client may cause Desactivation and Close time out problems.

