summaryrefslogtreecommitdiffstats
path: root/client/playback_channel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/playback_channel.cpp')
-rw-r--r--client/playback_channel.cpp22
1 files changed, 20 insertions, 2 deletions
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();