Timur Tabi wrote:
The customer is using an old application called "bplay" to test OSS audio support on our hardware. The application works fine on x86, but fails on our PowerPC board. It could be an endian issue, but I doubt it.
Is that a recent enough version of bplay, from Debian? Older ones didn't work on big-endian machines.
#1) Stopped audio stream output after doing followings:
- Opening /dev/mixer
- Getting a channel value (0x00000001) that is used for "ioctl(fd,
SOUND_MIXER_READ_DEVMASK, &Sndsts);". 3. Write audio volume information by "ioctl(fd, SOUND_MIXER_WRITE_VOLUME, &Value);",
I didn't find this in the bplay code.
If writing to a mixer control stops the audio stream, this may be a bug in the driver (whatever driver this is).
#2) Stopped audio stream output after doing following: 2. Executing command "ioctl(fd, SNDCTL_DSP_SYNC, NULL);",
This ioctl stops the output (after playing the remaining data in the buffer). The application can restart playing by writing more data.
XXXX found that by commenting out the "sync_audio" function on the source code of "bplay" made "bplay" work. So XXXX suspects the implementation of the ioctl on the OSS emulation may have a problem.
bplay calls the SYNC ioctl before setting the sample format, but this is not allowed: http://manuals.opensound.com/developer/callorder.html.
Removing that call to sync_audio() fixes the bug. :-)
snd_pcm_oss_sync() displays this message:
sync: buffer_used
What does this mean?
It means that the buffer contains some data which will be played before the device is stopped and the ioctl returns.
HTH Clemens