Handling xruns in OSS (was re:whatever)

From: Hannu Savolainen
Date: Mon Jun 25 2007 - 16:20:17 EST


Takashi Iwai kirjoitti:
At Mon, 25 Jun 2007 10:06:18 +0100,
Alan Cox wrote:
If it is native ALSA driver then it will restart after each underrun
and overrun. It is the applications job to do this, alsa-lib provides
all support for this. I have no idea of OSS and OSS emulation in ALSA.
OSS should autorestart on underrun and just moan about overruns and drop
bits. So if it's not following that behaviour he is IMHO correct for the
OSS emulation case.

I think he is right in the case of read (although I don't remember his
post as my buffer overran). The playback is automaically reset and
restarted at underrun.

But, the patch there is wrong. It should handle -EPIPE, which means
XRUN, while -ESTRPIPE means the suspend state.
To be exact the OSS should not even stop the device when a xrun occurs. Instead it should keep playing silence until the application writes more output data and to discard the oldest recorded data when an overrun occurs. This is more effective than stopping and restarting the device.

Best regards,

Hannu
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/