The Proof of Concept is now working for 8 channels 16 bits and 96k. Good ! It took some time because the ESP component is not design to achieve that bandwidth. You need to go the micro frames each 125 us. And the missing "Channel Config" in the descriptor was working up to 48k but not at 96k (Windows was starting/stopping/starting/ stopping... the device).
The MAX98357 I use for tests is limited to 96k. So next test is to move to 32bits instead of 16 bits. Then I will be at the limit for that CODEC.
The good news is that the load on the CPU is very low, even at 8ch 16bits 96k. I was afraid to have CPU load issues, but this is not the case. Possibly 15 CPU load on one of the 2 cores and 0 on the other ;-).
Channel 0 corresponds to TinyUSB writing the data to the application buffer
Channel 1 is the TinyUSB data reception each 125us
Channel 2 is the esp_i2s_write() it is blocked in "wait" most of the time
So next test with 32 bits, but there are several sections hard coded to 16 bits in the esp_device_uac() code.
This is not "clean" code. But seems to me that once proved to work OK on the POC, It shouldn't be a dramatic effort to have a robust code doing the 8 channels / fixed number of bits / different sampling frequencies. A bit more complex to allow the switch between 16 and 32 bits.