diff options
author | Max Kellermann <max@duempel.org> | 2010-03-03 20:29:33 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2010-03-10 19:49:31 +0100 |
commit | e686d19154d8de8f9884cd768ef5e600991076ef (patch) | |
tree | 655e0cfc3577f98d20082ffe61f66aa7f81a55f7 /src/output_control.c | |
parent | 762565e9d11b19534cff2d74715af0645f3885d8 (diff) | |
download | mpd-e686d19154d8de8f9884cd768ef5e600991076ef.tar.gz mpd-e686d19154d8de8f9884cd768ef5e600991076ef.tar.xz mpd-e686d19154d8de8f9884cd768ef5e600991076ef.zip |
output: added option "always_on" for radio stations
Did you ever accidently click "stop" while feeding a radio station?
This option sets the output device to "pause" to disable the "close"
method. It falls back to "pause" then, which is specific to the
plugin. Some plugins implement it by feeding silence.
Diffstat (limited to 'src/output_control.c')
-rw-r--r-- | src/output_control.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/output_control.c b/src/output_control.c index b5d983ae1..17edc3d72 100644 --- a/src/output_control.c +++ b/src/output_control.c @@ -118,9 +118,13 @@ audio_output_open(struct audio_output *ao, if (ao->open && audio_format_equals(audio_format, &ao->in_audio_format)) { - assert(ao->pipe == mp); + assert(ao->pipe == mp || + (ao->always_on && ao->pause)); if (ao->pause) { + ao->chunk = NULL; + ao->pipe = mp; + /* unpause with the CANCEL command; this is a hack, but suits well for forcing the thread to leave the ao_pause() thread, and we need @@ -266,6 +270,15 @@ void audio_output_close(struct audio_output *ao) g_mutex_unlock(ao->mutex); } +void +audio_output_release(struct audio_output *ao) +{ + if (ao->always_on) + audio_output_pause(ao); + else + audio_output_close(ao); +} + void audio_output_finish(struct audio_output *ao) { audio_output_close(ao); |