All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Arnaud de Bossoreille de Ribou <arnaud.debossoreille@via.ecp.fr>
Cc: alsa-devel@lists.sourceforge.net
Subject: Re: emu10k1 bug and patch (0.9.0rc7)
Date: Thu, 13 Feb 2003 13:03:07 +0100	[thread overview]
Message-ID: <s5hptpwl75w.wl@alsa2.suse.de> (raw)
In-Reply-To: <20030210172112.GA12226@via.ecp.fr>

At Mon, 10 Feb 2003 18:21:12 +0100,
Arnaud de Bossoreille de Ribou wrote:
> 
> Hi, I discovered a bug in the emu10k1 driver which I'll explain here:
> 
> I was developing an application which uses the timestamps given in the
> status of the device to send S/PDIF data to it. This app worked pretty
> well except that sometimes I heard sound discontinuities and then a
> constant time delay between the sound and the video.
> 
> I finally found where was the problem, my results is based on the
> emu10k1-debug.patch file attached. The "frame" argument is equal to 0
> when the app gets the status of the device. With this patch applied I
> saw some output on the console exactly at the same time the bug occured.
> Adding a "else" after the "if" to prevent sw_ready from being updated
> fixed the problem and the output looked like
> 
> ----------------
> plop 0 -1536 A B
> plop 0 1536 B A
> ----------------
> 
> where B == A - 1536 (1536 is the period_size). These two lines were
> repeated a few times during playback.
> 
> So the bug looks like a signedness problem since sw_ready is unsigned
> and there is a while(sw_ready > 0), which explain the constant delay,
> next in the "snd_emu10k1_fx8010_playback_transfer" function.

this is because of the incorrect check of boundary-wrap.
the comparison below must be <= instead of <.
(or, it can be simply "diff < 0".)
if there only two periods, the original code cannot detect the
boundary-wrap.

	if (diff) {
==>		if (diff < -(snd_pcm_sframes_t) (runtime->boundary / 2))
			diff += runtime->boundary;
		pcm->sw_ready += diff;
	}

sw_ready should be unsigned safely.
please try the change above with the unsigned sw_ready.


anyway, thanks for your bug report!


ciao,

Takashi


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf

  reply	other threads:[~2003-02-13 12:03 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-02-10 17:21 emu10k1 bug and patch (0.9.0rc7) Arnaud de Bossoreille de Ribou
2003-02-13 12:03 ` Takashi Iwai [this message]
2003-02-13 19:57   ` Jaroslav Kysela
2003-02-14  9:09     ` Takashi Iwai
2003-02-14 11:07       ` Abramo Bagnara
2003-02-14 12:49       ` Jaroslav Kysela
2003-02-13 20:30 ` Jaroslav Kysela
2003-02-14  9:21   ` Takashi Iwai
2003-02-14 10:58     ` tomasz motylewski
2003-02-14 11:31       ` Abramo Bagnara
2003-02-14 15:00         ` Takashi Iwai
2003-02-14 12:51     ` Jaroslav Kysela
2003-02-17  8:36   ` Arnaud de Bossoreille de Ribou
2003-02-17 10:24     ` Jaroslav Kysela
2003-02-18  8:30       ` Arnaud de Bossoreille de Ribou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5hptpwl75w.wl@alsa2.suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@lists.sourceforge.net \
    --cc=arnaud.debossoreille@via.ecp.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.