diff options
author | Lennart Poettering <lennart@poettering.net> | 2007-09-06 23:29:16 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2007-09-06 23:29:16 +0000 |
commit | b41dbfd28d6f940004f412f3ef16a1419240786f (patch) | |
tree | 2cbbe54817b40f0ac6288c715553b603ece130e4 /src/modules/module-alsa-source.c | |
parent | d60940dbe4a6bf3acf0b458d321a1f4d449b7a01 (diff) |
fix an assert when runnig module-oss in record only-mode. optimize allocation of memblocks on playback
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1777 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/modules/module-alsa-source.c')
-rw-r--r-- | src/modules/module-alsa-source.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/modules/module-alsa-source.c b/src/modules/module-alsa-source.c index 9922668b..365f6ab2 100644 --- a/src/modules/module-alsa-source.c +++ b/src/modules/module-alsa-source.c @@ -210,7 +210,7 @@ static int unix_read(struct userdata *u) { for (;;) { void *p; - snd_pcm_sframes_t t; + snd_pcm_sframes_t t, k; ssize_t l; int err; pa_memchunk chunk; @@ -228,10 +228,17 @@ static int unix_read(struct userdata *u) { if (l <= 0) return work_done; - chunk.memblock = pa_memblock_new(u->core->mempool, l); + chunk.memblock = pa_memblock_new(u->core->mempool, (size_t) -1); + + k = pa_memblock_get_length(chunk.memblock); + + if (k > l) + k = l; + + k = (k/u->frame_size)*u->frame_size; p = pa_memblock_acquire(chunk.memblock); - t = snd_pcm_readi(u->pcm_handle, (uint8_t*) p, l / u->frame_size); + t = snd_pcm_readi(u->pcm_handle, (uint8_t*) p, k / u->frame_size); pa_memblock_release(chunk.memblock); /* pa_log("wrote %i bytes of %u (%u)", t*u->frame_size, u->memchunk.length, l); */ |