If a stream is being uncorked and no other stream is running, we try to
update the sink/source sample rate to match it and avoid resampling.
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);
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);