diff options
author | Lennart Poettering <lennart@poettering.net> | 2008-03-15 15:19:40 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2008-03-15 15:19:40 +0000 |
commit | 12c01e942d23bd477e14b467e66352e6ce0557a9 (patch) | |
tree | 3231d52f87a1115744b5e4f4b61a0bccf04a57bc /src/pulsecore/sample-util.c | |
parent | 347cfc356aa1c5073a5fc1d4355392759df13ab8 (diff) |
commit glitch-free work
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/glitch-free@2122 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/pulsecore/sample-util.c')
-rw-r--r-- | src/pulsecore/sample-util.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/pulsecore/sample-util.c b/src/pulsecore/sample-util.c index 4ea5d446..4a532f29 100644 --- a/src/pulsecore/sample-util.c +++ b/src/pulsecore/sample-util.c @@ -43,26 +43,25 @@ #define PA_SILENCE_MAX (PA_PAGE_SIZE*16) pa_memblock *pa_silence_memblock_new(pa_mempool *pool, const pa_sample_spec *spec, size_t length) { - size_t fs; + pa_memblock *b; + pa_assert(pool); pa_assert(spec); if (length <= 0) - length = pa_bytes_per_second(spec)/20; /* 50 ms */ + length = PA_MIN(pa_bytes_per_second(spec)/20, /* 50 ms */ + pa_mempool_block_size_max(pool)); if (length > PA_SILENCE_MAX) length = PA_SILENCE_MAX; - fs = pa_frame_size(spec); + length = pa_frame_align(length, spec); - length = (length+fs-1)/fs; - - if (length <= 0) - length = 1; + b = pa_silence_memblock(pa_memblock_new(pool, length), spec); - length *= fs; + pa_memblock_set_is_silence(b, TRUE); - return pa_silence_memblock(pa_memblock_new(pool, length), spec); + return b; } pa_memblock *pa_silence_memblock(pa_memblock* b, const pa_sample_spec *spec) { @@ -74,6 +73,7 @@ pa_memblock *pa_silence_memblock(pa_memblock* b, const pa_sample_spec *spec) { data = pa_memblock_acquire(b); pa_silence_memory(data, pa_memblock_get_length(b), spec); pa_memblock_release(b); + return b; } @@ -631,6 +631,9 @@ void pa_volume_memchunk( pa_assert(c->length % pa_frame_size(spec) == 0); pa_assert(volume); + if (pa_memblock_is_silence(c->memblock)) + return; + if (pa_cvolume_channels_equal_to(volume, PA_VOLUME_NORM)) return; |