Update of /cvsroot/alsa/alsa-kernel/core/oss
In directory sc8-pr-cvs1:/tmp/cvs-serv31131/core/oss
Modified Files:
pcm_oss.c
Log Message:
Fixed comments in pcm_oss.h
Fixed sync() routine for the partial playback transfers
Index: pcm_oss.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/oss/pcm_oss.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -r1.48 -r1.49
--- pcm_oss.c 8 Sep 2003 07:14:17 -0000 1.48
+++ pcm_oss.c 10 Sep 2003 13:51:30 -0000 1.49
@@ -937,46 +937,68 @@
return 0;
}
+static int snd_pcm_oss_sync1(snd_pcm_substream_t *substream, size_t size)
+{
+ snd_pcm_runtime_t *runtime;
+ ssize_t result = 0;
+ wait_queue_t wait;
+
+ runtime = substream->runtime;
+ init_waitqueue_entry(&wait, current);
+ add_wait_queue(&runtime->sleep, &wait);
+ while (1) {
+ result = snd_pcm_oss_write2(substream, runtime->oss.buffer, size, 1);
+ if (result > 0) {
+ runtime->oss.buffer_used = 0;
+ result = 0;
+ break;
+ }
+ if (result != 0 && result != -EAGAIN)
+ break;
+ result = 0;
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule();
+ if (signal_pending(current)) {
+ result = -ERESTARTSYS;
+ break;
+ }
+ set_current_state(TASK_RUNNING);
+ }
+ remove_wait_queue(&runtime->sleep, &wait);
+ return result;
+}
+
static int snd_pcm_oss_sync(snd_pcm_oss_file_t *pcm_oss_file)
{
int err = 0;
unsigned int saved_f_flags;
snd_pcm_substream_t *substream;
snd_pcm_runtime_t *runtime;
- ssize_t result;
- wait_queue_t wait;
+ size_t size;
substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
if (substream != NULL) {
if ((err = snd_pcm_oss_make_ready(substream)) < 0)
return err;
-
runtime = substream->runtime;
if (runtime->oss.buffer_used > 0) {
snd_pcm_format_set_silence(runtime->format,
runtime->oss.buffer +
runtime->oss.buffer_used,
bytes_to_samples(runtime,
runtime->oss.period_bytes - runtime->oss.buffer_used));
- init_waitqueue_entry(&wait, current);
- add_wait_queue(&runtime->sleep, &wait);
- while (1) {
- result = snd_pcm_oss_write2(substream,
runtime->oss.buffer, runtime->oss.period_bytes, 1);
- if (result > 0) {
- runtime->oss.buffer_used = 0;
- break;
- }
- if (result != 0 && result != -EAGAIN)
- break;
- set_current_state(TASK_INTERRUPTIBLE);
- schedule();
- if (signal_pending(current)) {
- result = -ERESTARTSYS;
- break;
- }
- }
- set_current_state(TASK_RUNNING);
- remove_wait_queue(&runtime->sleep, &wait);
- if (result < 0)
- return result;
+ err = snd_pcm_oss_sync1(substream, runtime->oss.period_bytes);
+ if (err < 0)
+ return err;
+ }
+ size = runtime->control->appl_ptr % runtime->period_size;
+ if (size > 0) {
+ size = runtime->period_size - size;
+ size *= runtime->channels;
+ snd_pcm_format_set_silence(runtime->format,
+ runtime->oss.buffer,
+ size);
+ err = snd_pcm_oss_sync1(substream, samples_to_bytes(runtime,
size));
+ if (err < 0)
+ return err;
}
saved_f_flags = substream->ffile->f_flags;
substream->ffile->f_flags &= ~O_NONBLOCK;
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog