diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c index fbede0196..d57ad779f 100644 --- a/src/pulsecore/sink-input.c +++ b/src/pulsecore/sink-input.c @@ -556,6 +556,12 @@ 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) { + /* 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)); + } + pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_STATE, PA_UINT_TO_PTR(state), 0, NULL) == 0); update_n_corked(i, state); diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c index 47b93a932..7b0cb84e3 100644 --- a/src/pulsecore/source-output.c +++ b/src/pulsecore/source-output.c @@ -515,6 +515,12 @@ 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) { + /* 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)); + } + pa_assert_se(pa_asyncmsgq_send(o->source->asyncmsgq, PA_MSGOBJECT(o), PA_SOURCE_OUTPUT_MESSAGE_SET_STATE, PA_UINT_TO_PTR(state), 0, NULL) == 0); update_n_corked(o, state);