Eliminate a use of VideoContext::Get in AudioMarkerProviderKeyframes

Originally committed to SVN as r5660.
This commit is contained in:
Thomas Goyne 2011-09-28 19:51:44 +00:00
parent 6bf4a95428
commit 77d02d269d
1 changed files with 12 additions and 6 deletions

View File

@ -117,8 +117,8 @@ class AudioMarkerProviderKeyframes : public AudioMarkerProvider {
}
public:
AudioMarkerProviderKeyframes(AudioController *controller)
: vc(VideoContext::Get())
AudioMarkerProviderKeyframes(AudioController *controller, agi::Context *c)
: vc(c->videoController)
, keyframe_slot(vc->AddKeyframesListener(&AudioMarkerProviderKeyframes::Update, this))
, audio_open_slot(controller->AddAudioOpenListener(&AudioMarkerProviderKeyframes::Update, this))
, timecode_slot(vc->AddTimecodesListener(&AudioMarkerProviderKeyframes::Update, this))
@ -146,7 +146,6 @@ AudioController::AudioController(agi::Context *context)
, subtitle_save_slot(context->ass->AddFileSaveListener(&AudioController::OnSubtitlesSave, this))
, player(0)
, provider(0)
, keyframes_marker_provider(new AudioMarkerProviderKeyframes(this))
, playback_mode(PM_NotPlaying)
, playback_timer(this)
{
@ -156,8 +155,6 @@ AudioController::AudioController(agi::Context *context)
Bind(wxEVT_POWER_SUSPENDED, &AudioController::OnComputerSuspending, this);
Bind(wxEVT_POWER_RESUME, &AudioController::OnComputerResuming, this);
#endif
keyframes_marker_provider->AddMarkerMovedListener(std::tr1::bind(std::tr1::ref(AnnounceMarkerMoved)));
}
@ -300,6 +297,15 @@ void AudioController::OpenAudio(const wxString &url)
config::mru->Add("Audio", STD_STR(url));
if (!keyframes_marker_provider.get())
{
// This is lazy-loaded as the video controller may not exist yet when
// the audio controller is created
keyframes_marker_provider.reset(new AudioMarkerProviderKeyframes(this, context));
keyframes_marker_provider->AddMarkerMovedListener(std::tr1::bind(std::tr1::ref(AnnounceMarkerMoved)));
}
// Tell listeners about this.
AnnounceAudioOpen(provider);
}
@ -458,7 +464,7 @@ SampleRange AudioController::GetPrimaryPlaybackRange() const
void AudioController::GetMarkers(const SampleRange &range, AudioMarkerVector &markers) const
{
/// @todo Find all sources of markers
keyframes_marker_provider->GetMarkers(range, markers);
if (keyframes_marker_provider.get()) keyframes_marker_provider->GetMarkers(range, markers);
if (timing_controller.get()) timing_controller->GetMarkers(range, markers);
}