mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-01-05 02:08:00 +00:00
client: playback/record channels: implement on_disconnect
(cherry picked from commit d3ed9d5e9d branch 0.8)
This commit is contained in:
parent
0a5e9cbbcf
commit
87664af999
@ -37,6 +37,9 @@ public:
|
||||
|
||||
static ChannelFactory& Factory();
|
||||
|
||||
protected:
|
||||
virtual void on_disconnect();
|
||||
|
||||
private:
|
||||
void handle_mode(RedPeer::InMessage* message);
|
||||
void handle_start(RedPeer::InMessage* message);
|
||||
@ -48,6 +51,8 @@ private:
|
||||
|
||||
void set_data_handler();
|
||||
|
||||
void clear();
|
||||
|
||||
private:
|
||||
WavePlaybackAbstract* _wave_player;
|
||||
uint32_t _mode;
|
||||
@ -67,12 +72,14 @@ public:
|
||||
|
||||
static ChannelFactory& Factory();
|
||||
|
||||
protected:
|
||||
virtual void on_connect();
|
||||
virtual void on_disconnect();
|
||||
|
||||
private:
|
||||
void handle_start(RedPeer::InMessage* message);
|
||||
void handle_stop(RedPeer::InMessage* message);
|
||||
|
||||
virtual void on_connect();
|
||||
|
||||
virtual void add_event_source(EventSources::File& event_source);
|
||||
virtual void remove_event_source(EventSources::File& event_source);
|
||||
virtual void add_event_source(EventSources::Trigger& event_source);
|
||||
@ -82,6 +89,7 @@ private:
|
||||
void send_start_mark();
|
||||
void release_message(RecordSamplesMessage *message);
|
||||
RecordSamplesMessage * get_message();
|
||||
void clear();
|
||||
|
||||
private:
|
||||
WaveRecordAbstract* _wave_recorder;
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -101,14 +101,7 @@ RecordChannel::~RecordChannel(void)
|
||||
_messages.pop_front();
|
||||
delete mes;
|
||||
}
|
||||
delete _wave_recorder;
|
||||
|
||||
if (_celt_encoder) {
|
||||
celt051_encoder_destroy(_celt_encoder);
|
||||
}
|
||||
if (_celt_mode) {
|
||||
celt051_mode_destroy(_celt_mode);
|
||||
}
|
||||
clear();
|
||||
}
|
||||
|
||||
bool RecordChannel::abort(void)
|
||||
@ -128,6 +121,11 @@ void RecordChannel::on_connect()
|
||||
post_message(message);
|
||||
}
|
||||
|
||||
void RecordChannel::on_disconnect()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void RecordChannel::send_start_mark()
|
||||
{
|
||||
Message* message = new Message(SPICE_MSGC_RECORD_START_MARK);
|
||||
@ -177,6 +175,23 @@ void RecordChannel::handle_start(RedPeer::InMessage* message)
|
||||
_wave_recorder->start();
|
||||
}
|
||||
|
||||
void RecordChannel::clear()
|
||||
{
|
||||
if (_wave_recorder) {
|
||||
_wave_recorder->stop();
|
||||
delete _wave_recorder;
|
||||
_wave_recorder = NULL;
|
||||
}
|
||||
if (_celt_encoder) {
|
||||
celt051_encoder_destroy(_celt_encoder);
|
||||
_celt_encoder = NULL;
|
||||
}
|
||||
if (_celt_mode) {
|
||||
celt051_mode_destroy(_celt_mode);
|
||||
_celt_mode = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void RecordChannel::handle_stop(RedPeer::InMessage* message)
|
||||
{
|
||||
RecordHandler* handler = static_cast<RecordHandler*>(get_message_handler());
|
||||
@ -186,13 +201,7 @@ void RecordChannel::handle_stop(RedPeer::InMessage* message)
|
||||
return;
|
||||
}
|
||||
ASSERT(_celt_mode && _celt_encoder);
|
||||
_wave_recorder->stop();
|
||||
celt051_encoder_destroy(_celt_encoder);
|
||||
_celt_encoder = NULL;
|
||||
celt051_mode_destroy(_celt_mode);
|
||||
_celt_mode = NULL;
|
||||
delete _wave_recorder;
|
||||
_wave_recorder = NULL;
|
||||
clear();
|
||||
}
|
||||
|
||||
RecordSamplesMessage* RecordChannel::get_message()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user