That's right, with that illustration there would be a minimum 8 sample delay from ADC to DAC. But keep in mind that the samples that go in to thread 1 and that come out of thread 7 are actually routed as follows where the seven threads we're talking about comprise the [effects] block below:
[Guitar (ADC)]-----+-------------------------[Mixer2]---->[USB In]
| /\
| |
\/ |
[Mixer1]--->[Effects]--->[Spatialization]
/\ |
| |
(Left Ch.) +---------------+
| |
| \/
[USB Out]----------+-------->[Mixer3]--->[GraphicEQ]--->[Volume]--->[Line Out (DAC)]
So total delay from ADC to DAC is eight sample periods (less than 0.167 milliseconds with Fs = 48 kHz) for the [effects] plus the group delay through the AK4556 ADC and DAC (17+21 samples or 0.8 milliseconds) plus any other delays added by [Mixer1], [Spatialization], [Mixer3], and [GraphicEQ] blocks that are part of the framework and therefore in the audio path by default. Total delay then for this effects framework is less than 1 msec.
Here's an idea. I could also offer a more minimal framework that omits the mixers, eq and spatialization DSP code. That would then look like this:
[Guitar (ADC)]-----+ +---->[Line Out (DAC)]
| |
| |
\/ |
[Effects]----+
/\ |
| |
| |
[USB Out]----------+ +---->[USB In]
Notice from the previous code sample (earlier post) that the four samples passed in to and out of the function (for every audio cycle). With this simpler default audio path definition the audio processing thread function arguments would then be defined as as ADC/DAC left, ADC/DAC right, USB out/in left, USB out/in right allowing you to mix any time (in any thread) as you see fit. So using the example code for the LFO, Chorus and Tone control from a few postings ago ... see the comments below that call out the meaning of the four audio samples pass in/out.
// audio_sample[0] is left channel ADC (incoming) sample and left channel DAC (outgoing) sample
// audio_sample[1] is right channel ADC (incoming) sample and right channel DAC (outgoing) sample
// audio_sample[2] is left channel USB (incoming) sample and left channel USB (outgoing) sample
// audio_sample[3] is right channel USB (incoming) sample and right channel USB (outgoing) sample
void audio_thread_2_exec( int audio_samples[4], const int property_data[6] )
{
// Process the ADC/DAC left channel audio sample for the current audio cycle.
// The right ADC/DAC channel and USB audio channels are not modified.
efx_lfo1_run(); // Update LFO value
sample[0] = efx_chorus1_run( sample[0] ); // Apply tone shaping to left audio channel
sample[0] = efx_tone1_run ( sample[0] ); // Apply chorus effect to left audio channel
// Give effects objects an opportunity to update parameters if property data applies
efx_lfo1_update ( property_data );
efx_chorus1_update( property_data );
efx_tone1_update ( property_data );
}