mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-01 22:58:47 -04:00
make sure we check the sink status for PA_SINK_INPUT_FAIL_ON_SUSPEND only after module-suspend-on-idle had the chance to resume the device
This commit is contained in:
parent
7f5fff943f
commit
00839ddaa6
2 changed files with 12 additions and 2 deletions
|
|
@ -158,7 +158,6 @@ int pa_sink_input_new(
|
||||||
pa_return_val_if_fail(data->sink, -PA_ERR_NOENTITY);
|
pa_return_val_if_fail(data->sink, -PA_ERR_NOENTITY);
|
||||||
pa_return_val_if_fail(PA_SINK_IS_LINKED(pa_sink_get_state(data->sink)), -PA_ERR_BADSTATE);
|
pa_return_val_if_fail(PA_SINK_IS_LINKED(pa_sink_get_state(data->sink)), -PA_ERR_BADSTATE);
|
||||||
pa_return_val_if_fail(!data->sync_base || (data->sync_base->sink == data->sink && pa_sink_input_get_state(data->sync_base) == PA_SINK_INPUT_CORKED), -PA_ERR_INVALID);
|
pa_return_val_if_fail(!data->sync_base || (data->sync_base->sink == data->sink && pa_sink_input_get_state(data->sync_base) == PA_SINK_INPUT_CORKED), -PA_ERR_INVALID);
|
||||||
pa_return_val_if_fail(!(flags & PA_SINK_INPUT_FAIL_ON_SUSPEND) || pa_sink_get_state(data->sink) != PA_SINK_SUSPENDED, -PA_ERR_BADSTATE);
|
|
||||||
|
|
||||||
if (!data->sample_spec_is_set)
|
if (!data->sample_spec_is_set)
|
||||||
data->sample_spec = data->sink->sample_spec;
|
data->sample_spec = data->sink->sample_spec;
|
||||||
|
|
@ -228,6 +227,12 @@ int pa_sink_input_new(
|
||||||
if ((r = pa_hook_fire(&core->hooks[PA_CORE_HOOK_SINK_INPUT_FIXATE], data)) < 0)
|
if ((r = pa_hook_fire(&core->hooks[PA_CORE_HOOK_SINK_INPUT_FIXATE], data)) < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
if ((flags & PA_SINK_INPUT_FAIL_ON_SUSPEND) &&
|
||||||
|
pa_sink_get_state(data->sink) == PA_SINK_SUSPENDED) {
|
||||||
|
pa_log_warn("Failed to create sink input: sink is suspended.");
|
||||||
|
return -PA_ERR_BADSTATE;
|
||||||
|
}
|
||||||
|
|
||||||
if (pa_idxset_size(data->sink->inputs) >= PA_MAX_INPUTS_PER_SINK) {
|
if (pa_idxset_size(data->sink->inputs) >= PA_MAX_INPUTS_PER_SINK) {
|
||||||
pa_log_warn("Failed to create sink input: too many inputs per sink.");
|
pa_log_warn("Failed to create sink input: too many inputs per sink.");
|
||||||
return -PA_ERR_TOOLARGE;
|
return -PA_ERR_TOOLARGE;
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,6 @@ int pa_source_output_new(
|
||||||
pa_return_val_if_fail(data->source, -PA_ERR_NOENTITY);
|
pa_return_val_if_fail(data->source, -PA_ERR_NOENTITY);
|
||||||
pa_return_val_if_fail(PA_SOURCE_IS_LINKED(pa_source_get_state(data->source)), -PA_ERR_BADSTATE);
|
pa_return_val_if_fail(PA_SOURCE_IS_LINKED(pa_source_get_state(data->source)), -PA_ERR_BADSTATE);
|
||||||
pa_return_val_if_fail(!data->direct_on_input || data->direct_on_input->sink == data->source->monitor_of, -PA_ERR_INVALID);
|
pa_return_val_if_fail(!data->direct_on_input || data->direct_on_input->sink == data->source->monitor_of, -PA_ERR_INVALID);
|
||||||
pa_return_val_if_fail(!(flags & PA_SOURCE_OUTPUT_FAIL_ON_SUSPEND) || pa_source_get_state(data->source) != PA_SOURCE_SUSPENDED, -PA_ERR_BADSTATE);
|
|
||||||
|
|
||||||
if (!data->sample_spec_is_set)
|
if (!data->sample_spec_is_set)
|
||||||
data->sample_spec = data->source->sample_spec;
|
data->sample_spec = data->source->sample_spec;
|
||||||
|
|
@ -166,6 +165,12 @@ int pa_source_output_new(
|
||||||
if ((r = pa_hook_fire(&core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_FIXATE], data)) < 0)
|
if ((r = pa_hook_fire(&core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_FIXATE], data)) < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
if ((flags & PA_SOURCE_OUTPUT_FAIL_ON_SUSPEND) &&
|
||||||
|
pa_source_get_state(data->source) == PA_SOURCE_SUSPENDED) {
|
||||||
|
pa_log("Failed to create source output: source is suspended.");
|
||||||
|
return -PA_ERR_BADSTATE;
|
||||||
|
}
|
||||||
|
|
||||||
if (pa_idxset_size(data->source->outputs) >= PA_MAX_OUTPUTS_PER_SOURCE) {
|
if (pa_idxset_size(data->source->outputs) >= PA_MAX_OUTPUTS_PER_SOURCE) {
|
||||||
pa_log("Failed to create source output: too many outputs per source.");
|
pa_log("Failed to create source output: too many outputs per source.");
|
||||||
return -PA_ERR_TOOLARGE;
|
return -PA_ERR_TOOLARGE;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue