[pulseaudio-discuss] [PATCH RFCv3 40/51] mix: Avoid redundant cvolume checks
Peter Meerwald
pmeerw at pmeerw.net
Tue Nov 4 15:26:35 PST 2014
Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net>
---
src/pulsecore/mix.c | 35 +++++++++++++++++++++++------------
src/pulsecore/mix.h | 5 +++++
src/pulsecore/sink-input.c | 2 +-
src/pulsecore/sink.c | 4 ++--
src/pulsecore/source.c | 4 ++--
5 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/src/pulsecore/mix.c b/src/pulsecore/mix.c
index 4a839ec..436e46f 100644
--- a/src/pulsecore/mix.c
+++ b/src/pulsecore/mix.c
@@ -689,7 +689,7 @@ static const pa_calc_volume_func_t calc_volume_table[] = {
[PA_SAMPLE_S24_32BE] = (pa_calc_volume_func_t) calc_linear_integer_volume
};
-void pa_volume_memchunk(
+void pa_volume_memchunk_unchecked(
pa_memchunk*c,
const pa_sample_spec *spec,
const pa_cvolume *volume) {
@@ -699,21 +699,11 @@ void pa_volume_memchunk(
pa_do_volume_func_t do_volume;
pa_assert(c);
- pa_assert(spec);
- pa_assert(pa_sample_spec_valid(spec));
- pa_assert(pa_frame_aligned(c->length, spec));
- pa_assert(volume);
if (pa_memblock_is_silence(c->memblock))
return;
- if (pa_cvolume_is_norm(volume))
- return;
-
- if (pa_cvolume_is_muted(volume)) {
- pa_silence_memchunk(c, spec);
- return;
- }
+ pa_assert(pa_frame_aligned(c->length, spec));
do_volume = pa_get_volume_func(spec->format);
pa_assert(do_volume);
@@ -726,3 +716,24 @@ void pa_volume_memchunk(
pa_memblock_release(c->memblock);
}
+
+void pa_volume_memchunk(
+ pa_memchunk*c,
+ const pa_sample_spec *spec,
+ const pa_cvolume *volume) {
+
+ pa_assert(c);
+ pa_assert(spec);
+ pa_assert(pa_sample_spec_valid(spec));
+ pa_assert(volume);
+
+ if (pa_cvolume_is_muted(volume)) {
+ pa_silence_memchunk(c, spec);
+ return;
+ }
+
+ if (pa_cvolume_is_norm(volume))
+ return;
+
+ pa_volume_memchunk_unchecked(c, spec, volume);
+}
diff --git a/src/pulsecore/mix.h b/src/pulsecore/mix.h
index a4cde01..df774b8 100644
--- a/src/pulsecore/mix.h
+++ b/src/pulsecore/mix.h
@@ -56,6 +56,11 @@ typedef void (*pa_do_mix_func_t) (pa_mix_info streams[], unsigned nstreams, unsi
pa_do_mix_func_t pa_get_mix_func(pa_sample_format_t f);
void pa_set_mix_func(pa_sample_format_t f, pa_do_mix_func_t func);
+void pa_volume_memchunk_unchecked(
+ pa_memchunk*c,
+ const pa_sample_spec *spec,
+ const pa_cvolume *volume);
+
void pa_volume_memchunk(
pa_memchunk*c,
const pa_sample_spec *spec,
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 5d755ea..1e909f3 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -946,7 +946,7 @@ void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink bytes */, pa
* post and the pre volume adjustment into one */
pa_sw_cvolume_multiply(&v, &i->thread_info.soft_volume, &i->volume_factor_sink);
- pa_volume_memchunk(&wchunk, &i->thread_info.sample_spec, &v);
+ pa_volume_memchunk(&wchunk, &i->thread_info.sample_spec, &v); // is_silence
nvfs = false;
} else
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index d034b54..62a68e1 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1202,7 +1202,7 @@ void pa_sink_render(pa_sink*s, size_t length, pa_memchunk *result) {
result->length);
} else if (!pa_cvolume_is_norm(&volume)) {
pa_memchunk_make_writable(result, 0);
- pa_volume_memchunk(result, &s->sample_spec, &volume);
+ pa_volume_memchunk_unchecked(result, &s->sample_spec, &volume);
}
} else {
void *ptr;
@@ -1283,7 +1283,7 @@ void pa_sink_render_into(pa_sink*s, pa_memchunk *target) {
if (!pa_cvolume_is_norm(&volume)) {
pa_memchunk_make_writable(&vchunk, 0);
- pa_volume_memchunk(&vchunk, &s->sample_spec, &volume);
+ pa_volume_memchunk_unchecked(&vchunk, &s->sample_spec, &volume);
}
pa_memchunk_memcpy(target, &vchunk);
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 77fa510..23bb061 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -920,7 +920,7 @@ void pa_source_post(pa_source*s, const pa_memchunk *chunk) {
if (s->thread_info.soft_muted || pa_cvolume_is_muted(&s->thread_info.soft_volume))
pa_silence_memchunk(&vchunk, &s->sample_spec);
else
- pa_volume_memchunk(&vchunk, &s->sample_spec, &s->thread_info.soft_volume);
+ pa_volume_memchunk_unchecked(&vchunk, &s->sample_spec, &s->thread_info.soft_volume);
while ((o = pa_hashmap_iterate(s->thread_info.outputs, &state, NULL))) {
pa_source_output_assert_ref(o);
@@ -962,7 +962,7 @@ void pa_source_post_direct(pa_source*s, pa_source_output *o, const pa_memchunk *
if (s->thread_info.soft_muted || pa_cvolume_is_muted(&s->thread_info.soft_volume))
pa_silence_memchunk(&vchunk, &s->sample_spec);
else
- pa_volume_memchunk(&vchunk, &s->sample_spec, &s->thread_info.soft_volume);
+ pa_volume_memchunk_unchecked(&vchunk, &s->sample_spec, &s->thread_info.soft_volume);
pa_source_output_push(o, &vchunk);
--
1.9.1
More information about the pulseaudio-discuss
mailing list