From 87664af999a534090c37ffb53aec2a6cd970cdcc Mon Sep 17 00:00:00 2001 From: Yonit Halperin Date: Sun, 18 Sep 2011 21:42:18 +0300 Subject: client: playback/record channels: implement on_disconnect (cherry picked from commit d3ed9d5e9d52ddcadcb3c8c77dd827b50071d813 branch 0.8) --- client/playback_channel.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'client/playback_channel.cpp') diff --git a/client/playback_channel.cpp b/client/playback_channel.cpp index 731b5202..d3445e59 100644 --- a/client/playback_channel.cpp +++ b/client/playback_channel.cpp @@ -172,19 +172,37 @@ PlaybackChannel::PlaybackChannel(RedClient& client, uint32_t id) set_capability(SPICE_PLAYBACK_CAP_CELT_0_5_1); } -PlaybackChannel::~PlaybackChannel(void) +void PlaybackChannel::clear() { - delete _wave_player; + if (_wave_player) { + _playing = false; + _wave_player->stop(); + delete _wave_player; + _wave_player = NULL; + } + _mode = SPICE_AUDIO_DATA_MODE_INVALID; if (_celt_decoder) { celt051_decoder_destroy(_celt_decoder); + _celt_decoder = NULL; } if (_celt_mode) { celt051_mode_destroy(_celt_mode); + _celt_mode = NULL; } } +void PlaybackChannel::on_disconnect() +{ + clear(); +} + +PlaybackChannel::~PlaybackChannel(void) +{ + clear(); +} + bool PlaybackChannel::abort(void) { return (!_wave_player || _wave_player->abort()) && RedChannel::abort(); -- cgit