diff options
author | Jyri Sarha <jyri.sarha@nokia.com> | 2009-05-07 19:55:57 +0300 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-05-09 00:06:47 +0200 |
commit | 35faedb6e836a4dbc32403dc9688c3bbbd377cb3 (patch) | |
tree | 0ce0f9bc30c44a5aa5d7ef3385eb64a255fa30ac /src | |
parent | d7b8947a5e428857ff96f5deead3dea180f69130 (diff) |
core: Take samples from silence cache rather than write zeros
If the only stream to render from is muted take samples from the
silence cache. This should shrink memory/cache bandwidth. Again the
gain was not what I hoped for.
Diffstat (limited to 'src')
-rw-r--r-- | src/pulsecore/sink.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index a7e95293..5ac5086b 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -787,11 +787,17 @@ void pa_sink_render(pa_sink*s, size_t length, pa_memchunk *result) { pa_sw_cvolume_multiply(&volume, &s->thread_info.soft_volume, &info[0].volume); if (s->thread_info.soft_muted || !pa_cvolume_is_norm(&volume)) { - pa_memchunk_make_writable(result, 0); - if (s->thread_info.soft_muted || pa_cvolume_is_muted(&volume)) - pa_silence_memchunk(result, &s->sample_spec); - else + if (s->thread_info.soft_muted || pa_cvolume_is_muted(&volume)) { + pa_memblock_unref(result->memblock); + pa_silence_memchunk_get(&s->core->silence_cache, + s->core->mempool, + result, + &s->sample_spec, + result->length); + } else { + pa_memchunk_make_writable(result, 0); pa_volume_memchunk(result, &s->sample_spec, &volume); + } } } else { void *ptr; @@ -968,13 +974,19 @@ void pa_sink_render_full(pa_sink *s, size_t length, pa_memchunk *result) { pa_sw_cvolume_multiply(&volume, &s->thread_info.soft_volume, &info[0].volume); - if (s->thread_info.soft_muted || !pa_cvolume_is_norm(&volume)) { - pa_memchunk_make_writable(result, length); - if (s->thread_info.soft_muted || pa_cvolume_is_muted(&volume)) - pa_silence_memchunk(result, &s->sample_spec); - else + if (s->thread_info.soft_muted || !pa_cvolume_is_norm(&volume)) { + if (s->thread_info.soft_muted || pa_cvolume_is_muted(&volume)) { + pa_memblock_unref(result->memblock); + pa_silence_memchunk_get(&s->core->silence_cache, + s->core->mempool, + result, + &s->sample_spec, + result->length); + } else { + pa_memchunk_make_writable(result, length); pa_volume_memchunk(result, &s->sample_spec, &volume); - } + } + } } else { void *ptr; |