mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
Handle suspended alsa devices. Based on patch by ranma. (closes #26)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1433 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
19b17ff504
commit
2b82336df2
2 changed files with 77 additions and 0 deletions
|
|
@ -141,6 +141,33 @@ static int xrun_recovery(struct userdata *u) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int suspend_recovery(struct userdata *u) {
|
||||
int ret;
|
||||
assert(u);
|
||||
|
||||
pa_log_info("*** ALSA-SUSPEND (playback) ***");
|
||||
|
||||
if ((ret = snd_pcm_resume(u->pcm_handle)) < 0) {
|
||||
if (ret == -EAGAIN)
|
||||
return -1;
|
||||
|
||||
if (ret != -ENOSYS)
|
||||
pa_log("snd_pcm_resume() failed: %s", snd_strerror(-ret));
|
||||
else {
|
||||
if ((ret = snd_pcm_prepare(u->pcm_handle)) < 0)
|
||||
pa_log("snd_pcm_prepare() failed: %s", snd_strerror(-ret));
|
||||
}
|
||||
|
||||
if (ret < 0) {
|
||||
clear_up(u);
|
||||
pa_module_unload_request(u->module);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void do_write(struct userdata *u) {
|
||||
assert(u);
|
||||
|
||||
|
|
@ -176,6 +203,13 @@ static void do_write(struct userdata *u) {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (frames == -ESTRPIPE) {
|
||||
if (suspend_recovery(u) < 0)
|
||||
return;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
pa_log("snd_pcm_writei() failed: %s", snd_strerror(-frames));
|
||||
|
||||
clear_up(u);
|
||||
|
|
@ -207,6 +241,10 @@ static void fdl_callback(void *userdata) {
|
|||
if (xrun_recovery(u) < 0)
|
||||
return;
|
||||
|
||||
if (snd_pcm_state(u->pcm_handle) == SND_PCM_STATE_SUSPENDED)
|
||||
if (suspend_recovery(u) < 0)
|
||||
return;
|
||||
|
||||
do_write(u);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue