OBS User autobuild 2009-08-21 14:23:31 +00:00 committed by Git OBS Bridge
parent 29f13c45f3
commit 80b1a21915
2 changed files with 3 additions and 77 deletions

View File

@ -2956,18 +2956,9 @@ index 826685f..3a99d55 100644
}
diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c
index e43d354..2aa7572 100644
index e43d354..c582f5a 100644
--- a/src/pcm/pcm_ioplug.c
+++ b/src/pcm/pcm_ioplug.c
@@ -442,7 +442,7 @@ static int snd_pcm_ioplug_start(snd_pcm_t *pcm)
int err;
if (io->data->state != SND_PCM_STATE_PREPARED)
- return -EBUSY;
+ return -EBADFD;
err = io->data->callback->start(io->data);
if (err < 0)
@@ -877,7 +877,7 @@ callback.
Finally, the dump callback is used to print the status of the plugin.
@ -3000,7 +2991,7 @@ index 0357921..5acc7bc 100644
scope->ops = val;
}
diff --git a/src/pcm/pcm_mmap_emul.c b/src/pcm/pcm_mmap_emul.c
index 0dc1973..f6e7ae9 100644
index 0dc1973..e356e0b 100644
--- a/src/pcm/pcm_mmap_emul.c
+++ b/src/pcm/pcm_mmap_emul.c
@@ -34,6 +34,7 @@
@ -3011,73 +3002,14 @@ index 0dc1973..f6e7ae9 100644
/*
*
*/
@@ -43,7 +44,9 @@ typedef struct {
unsigned int mmap_emul :1;
@@ -44,6 +45,7 @@ typedef struct {
snd_pcm_uframes_t hw_ptr;
snd_pcm_uframes_t appl_ptr;
+ snd_pcm_uframes_t start_threshold;
} mmap_emul_t;
+#endif
/*
* here goes a really tricky part; hw_refine falls back to ACCESS_RW_* type
@@ -203,6 +206,24 @@ static int snd_pcm_mmap_emul_hw_params(snd_pcm_t *pcm,
return err;
}
+static int snd_pcm_mmap_emul_sw_params(snd_pcm_t *pcm,
+ snd_pcm_sw_params_t *params)
+{
+ mmap_emul_t *map = pcm->private_data;
+ int err;
+
+ map->start_threshold = params->start_threshold;
+
+ /* HACK: don't auto-start in the slave PCM */
+ params->start_threshold = pcm->boundary;
+ err = snd_pcm_generic_sw_params(pcm, params);
+ if (err < 0)
+ return err;
+ /* restore the value for this PCM */
+ params->start_threshold = map->start_threshold;
+ return err;
+}
+
static int snd_pcm_mmap_emul_prepare(snd_pcm_t *pcm)
{
mmap_emul_t *map = pcm->private_data;
@@ -254,13 +275,18 @@ sync_slave_write(snd_pcm_t *pcm)
snd_pcm_uframes_t offset;
snd_pcm_sframes_t size;
+ /* HACK: don't start stream automatically at commit in mmap mode */
+ pcm->start_threshold = pcm->boundary;
+
size = map->appl_ptr - *slave->appl.ptr;
if (size < 0)
size += pcm->boundary;
- if (!size)
- return 0;
- offset = *slave->appl.ptr % pcm->buffer_size;
- return snd_pcm_write_mmap(pcm, offset, size);
+ if (size) {
+ offset = *slave->appl.ptr % pcm->buffer_size;
+ size = snd_pcm_write_mmap(pcm, offset, size);
+ }
+ pcm->start_threshold = map->start_threshold; /* restore */
+ return size;
}
/* read the available chunk on the slave PCM to mmap buffer */
@@ -335,7 +361,7 @@ static const snd_pcm_ops_t snd_pcm_mmap_emul_ops = {
.hw_refine = snd_pcm_mmap_emul_hw_refine,
.hw_params = snd_pcm_mmap_emul_hw_params,
.hw_free = snd_pcm_generic_hw_free,
- .sw_params = snd_pcm_generic_sw_params,
+ .sw_params = snd_pcm_mmap_emul_sw_params,
.channel_info = snd_pcm_generic_channel_info,
.dump = snd_pcm_mmap_emul_dump,
.nonblock = snd_pcm_generic_nonblock,
diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c
index a97a5de..ecf0022 100644
--- a/src/pcm/pcm_rate.c

View File

@ -1,9 +1,3 @@
-------------------------------------------------------------------
Fri Aug 21 01:26:21 CEST 2009 - tiwai@suse.de
- pcm: workaround for avoiding automatic start in mmap mode
- pcm/ioplug: fix error code in start callback
-------------------------------------------------------------------
Thu Aug 13 08:46:04 CEST 2009 - tiwai@suse.de