summaryrefslogtreecommitdiff
path: root/src/xine-engine/audio_out.c
diff options
context:
space:
mode:
authorMatthias Kretz <kretz@kde.org>2007-06-04 21:18:49 +0200
committerMatthias Kretz <kretz@kde.org>2007-06-04 21:18:49 +0200
commit6d72cf30f29689035eddbe95d35fd39fcf5d70ca (patch)
tree5c269736ce0c18550207ef30f7f85d75968a4881 /src/xine-engine/audio_out.c
parent24b7171dff5bdbb05dd7ab343e718814aaba9186 (diff)
downloadxine-lib-6d72cf30f29689035eddbe95d35fd39fcf5d70ca.tar.gz
xine-lib-6d72cf30f29689035eddbe95d35fd39fcf5d70ca.tar.bz2
fallback to none output when the device is unplugged
Diffstat (limited to 'src/xine-engine/audio_out.c')
-rw-r--r--src/xine-engine/audio_out.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c
index 2655d495a..75cef4ce6 100644
--- a/src/xine-engine/audio_out.c
+++ b/src/xine-engine/audio_out.c
@@ -1213,11 +1213,23 @@ static void *ao_loop (void *this_gen) {
if( result < 0 ) {
/* device unplugged. */
xprintf(this->xine, XINE_VERBOSITY_LOG, _("write to sound card failed. Assuming the device was unplugged.\n"));
+ _x_message (in_buf->stream, XINE_MSG_AUDIO_OUT_UNAVAILABLE, NULL);
pthread_mutex_lock( &this->driver_lock );
- if(this->driver_open)
- this->driver->close(this->driver);
- this->driver_open = 0;
+ if(this->driver_open) {
+ this->driver->close(this->driver);
+ this->driver_open = 0;
+ this->driver->exit(this->driver);
+ this->driver = _x_load_audio_output_plugin (this->xine, "none");
+ if (this->driver && !in_buf->stream->emergency_brake &&
+ ao_change_settings(this,
+ in_buf->format.bits,
+ in_buf->format.rate,
+ in_buf->format.mode) == 0) {
+ in_buf->stream->emergency_brake = 1;
+ _x_message (in_buf->stream, XINE_MSG_AUDIO_OUT_UNAVAILABLE, NULL);
+ }
+ }
pthread_mutex_unlock( &this->driver_lock );
/* closing the driver will result in XINE_MSG_AUDIO_OUT_UNAVAILABLE to be emitted */
}