The Mixer can mix audio streams from any of the 10 XBAR-originating input ports to any of the 5 output ports. The DAPM widgets and routes for Mixer are shown in the following diagram. The Mixer driver also exposes Rx Gain and Mixer Enable as additional kcontrols to set the volume of each input stream and to globally enable or disable the Mixer itself.
As described above, there are currently only 5 Mixer output ports in Tegra Asoc, but currently I need 8 Mixer output ports for my application.
Excuse me, Can I extend more Mixer Output ports? and How to finish this work?
Unfortunately, that is a limitation of the TX1/TX2 hardware that the mixer only has 5 output ports. However, you should note that each mixer input/output port can support up to 8 channels. How many channels do each of your 8 outputs have for you application?
Also I am curious, for your application, what are the external audio interfaces you were planning to use? The TX1 only has 5 I2S interfaces and so even if the mixer could output more than 5, we may still be limited by the number of physical interfaces on the device. Unless you are doing some sort of TDM.
Just speculating, but can’t each i2s use two channels? So for example, 7.1 surround sound would use one i2s for front left/right, another for side left/right, a third for rear left/right, and a fourth for single channel subwoofer? In that use-case it might be useful to be able to mix each channel (8) while output goes to five i2s. Not that this helps since there are only five mixers, but it might demo the possibility of maximum use of i2s.
I am not sure I completely follow, but each I2S interface can support between 1 and 16 channels. To use 1 or more than 2 channels, you need to configure the I2S for TDM (ie. dsp-a or dsp-b mode) as standard I2S signaling there are only 2 channels. So potentially, even for 7.1 you could use a single I2S port in dsp-a/b mode.
In the example above, you seem to be missing a channel as you only have 7. I think you are missing centre. However, in the above example you are only using 4 I2S interfaces (2 channels per I2S interface) and so the mixer, which has a maximum of 5 outputs, could interface to each of these 4 I2S ports (with 2 channels per mixer output).
This link above is my design. I’m working on a conference terminal that supports multiplayer meetings and then remixes, so I don’t have the task of playing all mixer sounds here. Currently, there are only five mixer outputs, so I limit the number of hardware mixer I use, that is, the number of access users.
If the requirement changes to 6 / 7, or 8 users, I can’t use the hardware mixer way, only turning to the software way?
If each of the user channels were say stereo, then it could be possible (although I have not tried) to mux the users into a single stream using the AMX and then send the multiplexed output to a single MIXER input. On the output side of the MIXER the ADX could then be used to demultiplex the audio stream again. However, as previously mentioned, if you have more than 5 outputs, how exactly do you plan to output the audio from Tegra? There are only 5 I2S interfaces and so if you do have 6, 7, or 8 then I am curious what interface you would use to output the audio?