]> code.delx.au - pulseaudio/commitdiff
sink-input,source-output: Avoid unneccessary rate updates
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Mon, 14 May 2012 06:51:45 +0000 (12:21 +0530)
committerArun Raghavan <arun.raghavan@collabora.co.uk>
Mon, 14 May 2012 06:59:13 +0000 (12:29 +0530)
This makes sure we only call sink/source update_rate() if the stream
being woken up has a sample spec that doesn't match the corresponding
device'.

https://bugs.freedesktop.org/show_bug.cgi?id=49875

src/pulsecore/sink-input.c
src/pulsecore/source-output.c

index f6f7324c06ef6d800b29a9fe628cbb567915afed..f6f93b88314a7dd4eecea66cfc98ba60605b07d8 100644 (file)
@@ -553,7 +553,8 @@ static void sink_input_set_state(pa_sink_input *i, pa_sink_input_state_t state)
     if (i->state == state)
         return;
 
-    if (i->state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING && pa_sink_used_by(i->sink) == 0) {
+    if (i->state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING && pa_sink_used_by(i->sink) == 0 &&
+        !pa_sample_spec_equal(&i->sample_spec, &i->sink->sample_spec)) {
         /* We were uncorked and the sink was not playing anything -- let's try
          * to update the sample rate to avoid resampling */
         pa_sink_update_rate(i->sink, i->sample_spec.rate, pa_sink_input_is_passthrough(i));
index cd7981c933c442fa38d3c969069f7d00f59913de..844dd223debf977d8150c12d8142bd13d1c405e0 100644 (file)
@@ -510,7 +510,8 @@ static void source_output_set_state(pa_source_output *o, pa_source_output_state_
     if (o->state == state)
         return;
 
-    if (o->state == PA_SOURCE_OUTPUT_CORKED && state == PA_SOURCE_OUTPUT_RUNNING && pa_source_used_by(o->source) == 0) {
+    if (o->state == PA_SOURCE_OUTPUT_CORKED && state == PA_SOURCE_OUTPUT_RUNNING && pa_source_used_by(o->source) == 0 &&
+        !pa_sample_spec_equal(&o->sample_spec, &o->source->sample_spec)) {
         /* We were uncorked and the source was not playing anything -- let's try
          * to update the sample rate to avoid resampling */
         pa_source_update_rate(o->source, o->sample_spec.rate, pa_source_output_is_passthrough(o));