Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755020AbXFZJSZ (ORCPT ); Tue, 26 Jun 2007 05:18:25 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751317AbXFZJSS (ORCPT ); Tue, 26 Jun 2007 05:18:18 -0400 Received: from mail.suse.de ([195.135.220.2]:42222 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751343AbXFZJSR (ORCPT ); Tue, 26 Jun 2007 05:18:17 -0400 Date: Tue, 26 Jun 2007 11:18:12 +0200 Message-ID: From: Takashi Iwai To: Hannu Savolainen Cc: linux-kernel@vger.kernel.org Subject: Re: Handling xruns in OSS (was re:whatever) In-Reply-To: <468020F1.1090602@opensound.com> References: <20070624200837.16e11305@the-village.bc.nu> <20070624215724.025a5de5@the-village.bc.nu> <20070624224411.GB21724@alinoe.com> <8d6898730706242041q61f56b07kf4dc181fdad4e4dc@mail.gmail.com> <20070625100618.3653863d@the-village.bc.nu> <468020F1.1090602@opensound.com> User-Agent: Wanderlust/2.15.5 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.7 (=?ISO-8859-4?Q?Sanj=F2?=) APEL/10.6 MULE XEmacs/21.5 (beta27) (fiddleheads) (+CVS-20060704) (i386-suse-linux) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1776 Lines: 43 At Mon, 25 Jun 2007 23:09:21 +0300, Hannu Savolainen wrote: > > 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. Ah, thanks for the hint! BTW, in this case, how the fragment is aligned to the newly given samples? Since the stream is running, and apps may feed the new samples at any time. Especially when it uses a small double-buffer (two short fragments), the wake-up timing is tight, and may introduce another underrun soon again. Takashi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/