From a813e85503355496c7ea6397e39072fd8ffedcff Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Sun, 6 Nov 2011 19:12:19 +0530 Subject: [PATCH] sink,source: Update sample rate if possible on stream uncork 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. --- src/pulsecore/sink-input.c | 6 ++++++ src/pulsecore/source-output.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c index fbede01..d57ad77 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 47b93a9..7b0cb84 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); -- 2.7.4