Update of /cvsroot/alsa/alsa-kernel/core/oss
In directory sc8-pr-cvs1:/tmp/cvs-serv28692

Modified Files:
        pcm_oss.c 
Log Message:
- fixed the bytes field of GETxPTR ioctl in the mmap mode.
- fixed the bytes field of GETxSPACE ioctl.
- don't count the negative delay values.



Index: pcm_oss.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/oss/pcm_oss.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- pcm_oss.c   28 Nov 2003 15:51:56 -0000      1.59
+++ pcm_oss.c   1 Dec 2003 13:15:00 -0000       1.60
@@ -1448,7 +1448,7 @@
        }
        if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
                err = snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_DELAY, &delay);
-               if (err == -EPIPE || err == -ESTRPIPE) {
+               if (err == -EPIPE || err == -ESTRPIPE || (! err && delay < 0)) {
                        err = 0;
                        delay = 0;
                        fixup = 0;
@@ -1461,11 +1461,6 @@
        }
        if (err < 0)
                return err;
-       if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               info.bytes = runtime->oss.bytes - snd_pcm_oss_bytes(substream, delay);
-       } else {
-               info.bytes = runtime->oss.bytes + snd_pcm_oss_bytes(substream, delay);
-       }
        info.ptr = snd_pcm_oss_bytes(substream, runtime->status->hw_ptr % 
runtime->buffer_size);
        if (atomic_read(&runtime->mmap_count)) {
                snd_pcm_sframes_t n;
@@ -1476,9 +1471,14 @@
                runtime->oss.prev_hw_ptr_interrupt = runtime->hw_ptr_interrupt;
                if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                        snd_pcm_oss_simulate_fill(substream);
+               info.bytes = snd_pcm_oss_bytes(substream, runtime->status->hw_ptr);
        } else {
                delay = snd_pcm_oss_bytes(substream, delay) + fixup;
                info.blocks = delay / runtime->oss.period_bytes;
+               if (stream == SNDRV_PCM_STREAM_PLAYBACK)
+                       info.bytes = runtime->oss.bytes - snd_pcm_oss_bytes(substream, 
delay);
+               else
+                       info.bytes = runtime->oss.bytes + snd_pcm_oss_bytes(substream, 
delay);
        }
        if (copy_to_user(_info, &info, sizeof(info)))
                return -EFAULT;
@@ -1509,7 +1509,7 @@
        info.fragstotal = runtime->periods;
        if (runtime->oss.prepare) {
                if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
-                       info.bytes = runtime->oss.period_bytes * runtime->periods;
+                       info.bytes = runtime->oss.period_bytes * runtime->oss.periods;
                        info.fragments = runtime->oss.periods;
                } else {
                        info.bytes = 0;
@@ -1518,7 +1518,7 @@
        } else {
                if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
                        err = snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_DELAY, 
&avail);
-                       if (err == -EPIPE || err == -ESTRPIPE) {
+                       if (err == -EPIPE || err == -ESTRPIPE || (! err && avail < 0)) 
{
                                avail = runtime->buffer_size;
                                err = 0;
                                fixup = 0;



-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to