Listen for timecode load signals in AudioMarkerProviderKeyframes

Originally committed to SVN as r5084.
This commit is contained in:
Thomas Goyne 2010-12-31 23:53:30 +00:00
parent 4fdad923ad
commit cf89403a5b

View file

@ -79,37 +79,46 @@ class AudioMarkerProviderKeyframes : public AudioMarkerProvider {
agi::signal::Connection keyframe_slot; agi::signal::Connection keyframe_slot;
agi::signal::Connection audio_open_slot; agi::signal::Connection audio_open_slot;
agi::signal::Connection timecode_slot;
std::vector<AudioMarkerKeyframe> keyframe_samples; std::vector<AudioMarkerKeyframe> keyframe_samples;
AudioController *controller; AudioController *controller;
void OnKeyframesOpen(std::vector<int> const& raw_keyframes) void Update()
{ {
keyframe_samples.clear(); std::vector<int> const& keyframes = vc->GetKeyFrames();
keyframe_samples.reserve(raw_keyframes.size()); agi::vfr::Framerate const& timecodes = vc->FPS();
for (size_t i = 0; i < raw_keyframes.size(); ++i)
if (keyframes.empty() || !timecodes.IsLoaded())
{ {
keyframe_samples.push_back(AudioMarkerKeyframe( if (keyframe_samples.empty())
controller->SamplesFromMilliseconds(vc->TimeAtFrame(raw_keyframes[i])))); {
return;
} }
keyframe_samples.clear();
AnnounceMarkerMoved(); AnnounceMarkerMoved();
return;
} }
private: keyframe_samples.clear();
// AudioControllerAudioEventListener implementation keyframe_samples.reserve(keyframes.size());
void OnAudioOpen(AudioProvider *) for (size_t i = 0; i < keyframes.size(); ++i)
{ {
OnKeyframesOpen(vc->GetKeyFrames()); keyframe_samples.push_back(AudioMarkerKeyframe(
controller->SamplesFromMilliseconds(timecodes.TimeAtFrame(keyframes[i]))));
}
AnnounceMarkerMoved();
} }
public: public:
AudioMarkerProviderKeyframes(AudioController *controller) AudioMarkerProviderKeyframes(AudioController *controller)
: vc(VideoContext::Get()) : vc(VideoContext::Get())
, keyframe_slot(vc->AddKeyframesListener(&AudioMarkerProviderKeyframes::OnKeyframesOpen, this)) , keyframe_slot(vc->AddKeyframesListener(&AudioMarkerProviderKeyframes::Update, this))
, audio_open_slot(controller->AddAudioOpenListener(&AudioMarkerProviderKeyframes::OnAudioOpen, this)) , audio_open_slot(controller->AddAudioOpenListener(&AudioMarkerProviderKeyframes::Update, this))
, timecode_slot(vc->AddTimecodesListener(&AudioMarkerProviderKeyframes::Update, this))
, controller(controller) , controller(controller)
{ {
OnKeyframesOpen(vc->GetKeyFrames()); Update();
} }
void GetMarkers(const SampleRange &range, AudioMarkerVector &out) const void GetMarkers(const SampleRange &range, AudioMarkerVector &out) const