]> code.delx.au - pulseaudio/commitdiff
sink,source: Handle equal default and alternate sample rates
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Mon, 17 Oct 2011 14:33:52 +0000 (20:03 +0530)
committerArun Raghavan <arun.raghavan@collabora.co.uk>
Mon, 17 Oct 2011 14:50:14 +0000 (20:20 +0530)
src/pulsecore/sink.c
src/pulsecore/source.c

index f3b78a5a86f35be0b7c54f422bffe9d90489bfdd..5ca245340ffbb4d9966910f145f77b28db29aeea 100644 (file)
@@ -285,11 +285,17 @@ pa_sink* pa_sink_new(
 
     s->sample_spec = data->sample_spec;
     s->channel_map = data->channel_map;
+    s->default_sample_rate = s->sample_spec.rate;
+
     if (data->alternate_sample_rate_is_set)
         s->alternate_sample_rate = data->alternate_sample_rate;
     else
         s->alternate_sample_rate = s->core->alternate_sample_rate;
-    s->default_sample_rate = s->sample_spec.rate;
+
+    if (s->sample_spec.rate == s->alternate_sample_rate) {
+        pa_log_warn("Default and alternate sample rates are the same.");
+        s->alternate_sample_rate = 0;
+    }
 
     s->inputs = pa_idxset_new(NULL, NULL);
     s->n_corked = 0;
@@ -1335,6 +1341,11 @@ pa_bool_t pa_sink_update_rate(pa_sink *s, uint32_t rate, pa_bool_t passthrough)
         uint32_t alternate_rate = s->alternate_sample_rate;
         pa_bool_t use_alternate = FALSE;
 
+        if (PA_UNLIKELY(default_rate == alternate_rate)) {
+            pa_log_warn("Default and alternate sample rates are the same.");
+            return FALSE;
+        }
+
         if (PA_SINK_IS_RUNNING(s->state)) {
             pa_log_info("Cannot update rate, SINK_IS_RUNNING, will keep using %u kHz",
                         s->sample_spec.rate);
index 444d58701170f11705a7a36d3dbe570f5f67ea4c..e70e446b38cd106aeb0bba93824614dd73146b21 100644 (file)
@@ -251,11 +251,17 @@ pa_source* pa_source_new(
 
     s->sample_spec = data->sample_spec;
     s->channel_map = data->channel_map;
+    s->default_sample_rate = s->sample_spec.rate;
+
     if (data->alternate_sample_rate_is_set)
         s->alternate_sample_rate = data->alternate_sample_rate;
     else
         s->alternate_sample_rate = s->core->alternate_sample_rate;
-    s->default_sample_rate = s->sample_spec.rate;
+
+    if (s->sample_spec.rate == s->alternate_sample_rate) {
+        pa_log_warn("Default and alternate sample rates are the same.");
+        s->alternate_sample_rate = 0;
+    }
 
     s->outputs = pa_idxset_new(NULL, NULL);
     s->n_corked = 0;
@@ -929,6 +935,11 @@ pa_bool_t pa_source_update_rate(pa_source *s, uint32_t rate, pa_bool_t passthrou
         uint32_t alternate_rate = s->alternate_sample_rate;
         pa_bool_t use_alternate = FALSE;
 
+        if (PA_UNLIKELY(default_rate == alternate_rate)) {
+            pa_log_warn("Default and alternate sample rates are the same.");
+            return FALSE;
+        }
+
         if (PA_SOURCE_IS_RUNNING(s->state)) {
             pa_log_info("Cannot update rate, SOURCE_IS_RUNNING, will keep using %u kHz",
                         s->sample_spec.rate);