summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pulsecore/source.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 5cb6b73af..c69251127 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -972,14 +972,12 @@ bool pa_source_update_rate(pa_source *s, uint32_t rate, bool passthrough) {
uint32_t desired_rate = rate;
uint32_t default_rate = s->default_sample_rate;
uint32_t alternate_rate = s->alternate_sample_rate;
- uint32_t idx;
- pa_source_output *o;
bool use_alternate = false;
if (rate == s->sample_spec.rate)
return true;
- if (!s->update_rate)
+ if (!s->update_rate && !s->monitor_of)
return false;
if (PA_UNLIKELY(default_rate == alternate_rate && !passthrough)) {
@@ -1027,14 +1025,24 @@ bool pa_source_update_rate(pa_source *s, uint32_t rate, bool passthrough) {
pa_log_debug("Suspending source %s due to changing the sample rate.", s->name);
pa_source_suspend(s, true, PA_SUSPEND_INTERNAL);
- if (s->update_rate(s, desired_rate) == true) {
- pa_log_info("Changed sampling rate successfully ");
+ if (s->update_rate)
+ ret = s->update_rate(s, desired_rate);
+ else {
+ /* This is a monitor source. */
+ s->sample_spec.rate = desired_rate;
+ ret = true;
+ }
+
+ if (ret) {
+ uint32_t idx;
+ pa_source_output *o;
PA_IDXSET_FOREACH(o, s->outputs, idx) {
if (o->state == PA_SOURCE_OUTPUT_CORKED)
pa_source_output_update_rate(o);
}
- ret = true;
+
+ pa_log_info("Changed sampling rate successfully");
}
pa_source_suspend(s, false, PA_SUSPEND_INTERNAL);