Reload audio when the player or provider is changed

Originally committed to SVN as r5892.
This commit is contained in:
Thomas Goyne 2011-11-19 01:14:42 +00:00
parent 43d41def4f
commit 236ea4261d
2 changed files with 37 additions and 0 deletions

View file

@ -151,6 +151,9 @@ AudioController::AudioController(agi::Context *context)
Bind(wxEVT_POWER_SUSPENDED, &AudioController::OnComputerSuspending, this); Bind(wxEVT_POWER_SUSPENDED, &AudioController::OnComputerSuspending, this);
Bind(wxEVT_POWER_RESUME, &AudioController::OnComputerResuming, this); Bind(wxEVT_POWER_RESUME, &AudioController::OnComputerResuming, this);
#endif #endif
OPT_SUB("Audio/Player", &AudioController::OnAudioPlayerChanged, this);
OPT_SUB("Audio/Provider", &AudioController::OnAudioProviderChanged, this);
} }
@ -193,6 +196,34 @@ void AudioController::OnComputerResuming(wxPowerEvent &event)
} }
#endif #endif
void AudioController::OnAudioPlayerChanged()
{
if (!IsAudioOpen()) return;
Stop();
delete player;
try
{
player = AudioPlayerFactory::GetAudioPlayer();
player->SetProvider(provider);
player->OpenStream();
}
catch (...)
{
CloseAudio();
throw;
}
}
void AudioController::OnAudioProviderChanged()
{
if (IsAudioOpen())
// url is cloned because CloseAudio clears it and OpenAudio takes a const reference
OpenAudio(audio_url.Clone());
}
void AudioController::OpenAudio(const wxString &url) void AudioController::OpenAudio(const wxString &url)
{ {

View file

@ -248,6 +248,12 @@ class AudioController : public wxEvtHandler, public AudioMarkerProvider, public
/// Subtitles save slot which adds the audio uri to the subtitles /// Subtitles save slot which adds the audio uri to the subtitles
void OnSubtitlesSave(); void OnSubtitlesSave();
/// Handler for the current audio player changing
void OnAudioPlayerChanged();
/// Handler for the current audio provider changing
void OnAudioProviderChanged();
#ifdef wxHAS_POWER_EVENTS #ifdef wxHAS_POWER_EVENTS
/// Handle computer going into suspend mode by stopping audio and closing device /// Handle computer going into suspend mode by stopping audio and closing device
void OnComputerSuspending(wxPowerEvent &event); void OnComputerSuspending(wxPowerEvent &event);