[alsa-devel] Have multiple opens removed on one device?
Hi Mark and Takashi,
In kernel 2.6.34 I can use aplay to play audio at the same time, alsa will mix the audio. Now the second open will return device busy. So it seems this feature has been removed. What's the proper approach for this operation at present?
Thanks.
Scott
At Mon, 22 Aug 2011 18:13:03 +0800, Scott Jiang wrote:
Hi Mark and Takashi,
In kernel 2.6.34 I can use aplay to play audio at the same time, alsa will mix the audio.
No, kernel part doesn't do such a thing. If it's mixed, it must be in the user-space (either dmix or a daemon like pulseaudio), unless you hardware can do mixing by itself.
Now the second open will return device busy.
So, something else must have been changed in your system...
Takashi
On Mon, Aug 22, 2011 at 12:15:58PM +0200, Takashi Iwai wrote:
Scott Jiang wrote:
In kernel 2.6.34 I can use aplay to play audio at the same time, alsa will mix the audio.
No, kernel part doesn't do such a thing. If it's mixed, it must be in the user-space (either dmix or a daemon like pulseaudio), unless you hardware can do mixing by itself.
There *are* some cards (mostly older ones like emu10k) that support multiple streams transparently but this has never been supported in ASoC due a lack of hardware that can do it.
2011/8/22 Mark Brown broonie@opensource.wolfsonmicro.com:
On Mon, Aug 22, 2011 at 12:15:58PM +0200, Takashi Iwai wrote:
Scott Jiang wrote:
In kernel 2.6.34 I can use aplay to play audio at the same time, alsa will mix the audio.
No, kernel part doesn't do such a thing. If it's mixed, it must be in the user-space (either dmix or a daemon like pulseaudio), unless you hardware can do mixing by itself.
There *are* some cards (mostly older ones like emu10k) that support multiple streams transparently but this has never been supported in ASoC due a lack of hardware that can do it.
Hi Mark,
Indeed we use dmix. But now we can't open the same device twice. Our alsa lib and utils version is 1.0.18. The test command: aplay 1.wav &; aplay 1.wav In 2.6.34, strace open("/dev/snd/pcmC0D0p", O_RDWR|O_NONBLOCK) = 4 open("/dev/snd/pcmC0D0p", O_RDWR|O_APPEND|O_NONBLOCK) = 4
In 3.0, strace open("/dev/snd/pcmC0D0p", O_RDWR|O_NONBLOCK) = 4 open("/dev/snd/pcmC0D0p", O_RDWR|O_NONBLOCK) = -1 EBUSY (Device or resource busy)
The O_APPEND flag missed in new kernel. But we use the same lib and utils. It's strange. And I found the prefer subdevice changes from 0 to -1. These two changes cause kernel return device busy.
Mark, can you do this simple test on your board? I appreciate your help. Thank you very much.
Regards, Scott
2011/8/29 Scott Jiang scott.jiang.linux@gmail.com:
Indeed we use dmix. But now we can't open the same device twice. Our alsa lib and utils version is 1.0.18. The test command: aplay 1.wav &; aplay 1.wav In 2.6.34, strace open("/dev/snd/pcmC0D0p", O_RDWR|O_NONBLOCK) = 4 open("/dev/snd/pcmC0D0p", O_RDWR|O_APPEND|O_NONBLOCK) = 4
In 3.0, strace open("/dev/snd/pcmC0D0p", O_RDWR|O_NONBLOCK) = 4 open("/dev/snd/pcmC0D0p", O_RDWR|O_NONBLOCK) = -1 EBUSY (Device or resource busy)
The O_APPEND flag missed in new kernel. But we use the same lib and utils. It's strange. And I found the prefer subdevice changes from 0 to -1. These two changes cause kernel return device busy.
Mark, can you do this simple test on your board? I appreciate your help. Thank you very much.
I know the reason. The card config file didn't read properly. Asoc doesn't copy codec name to card->driver now. I guess it is because multiple codecs are supported. I add driver_name in my snd_soc_card to solve this bug. But I scan other drivers in asoc, nobody did this. Maybe nobody are aware of this. Are there any better way to solve this bug?
Regards, Scott
participants (3)
-
Mark Brown
-
Scott Jiang
-
Takashi Iwai