diff options
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;  | 
