ensure frame rate and sample rate changes ripple through widgets
This commit is contained in:
@@ -431,10 +431,20 @@ void ViewerOutput::InputValueChangedEvent(const QString &input, int element)
|
||||
|
||||
} else if (input == kAudioParamsInput) {
|
||||
|
||||
AudioParams new_audio_params = GetAudioParams();
|
||||
|
||||
bool sample_rate_changed = new_audio_params.sample_rate() != cached_audio_params_.sample_rate();
|
||||
|
||||
if (sample_rate_changed) {
|
||||
emit SampleRateChanged(new_audio_params.sample_rate());
|
||||
}
|
||||
|
||||
emit AudioParamsChanged();
|
||||
|
||||
audio_playback_cache_.SetParameters(GetAudioParams());
|
||||
|
||||
cached_audio_params_ = new_audio_params;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -167,6 +167,8 @@ signals:
|
||||
|
||||
void TextureInputChanged();
|
||||
|
||||
void SampleRateChanged(int sr);
|
||||
|
||||
public slots:
|
||||
void VerifyLength();
|
||||
|
||||
@@ -200,6 +202,8 @@ private:
|
||||
|
||||
VideoParams cached_video_params_;
|
||||
|
||||
AudioParams cached_audio_params_;
|
||||
|
||||
TimelinePoints timeline_points_;
|
||||
|
||||
private slots:
|
||||
|
||||
@@ -86,6 +86,10 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node)
|
||||
// Disconnect length changed signal
|
||||
disconnect(viewer_node_, &ViewerOutput::LengthChanged, this, &TimeBasedWidget::UpdateMaximumScroll);
|
||||
|
||||
// Disconnect rate change signals if they were connected
|
||||
disconnect(viewer_node_, &ViewerOutput::FrameRateChanged, this, &TimeBasedWidget::AutoUpdateTimebase);
|
||||
disconnect(viewer_node_, &ViewerOutput::SampleRateChanged, this, &TimeBasedWidget::AutoUpdateTimebase);
|
||||
|
||||
// Reset timebase to null
|
||||
SetTimebase(rational());
|
||||
|
||||
@@ -112,19 +116,9 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node)
|
||||
|
||||
// If we're setting the timebase, set it automatically based on the video and audio parameters
|
||||
if (auto_set_timebase_) {
|
||||
rational video_tb = viewer_node_->GetVideoParams().frame_rate_as_time_base();
|
||||
|
||||
if (!video_tb.isNull()) {
|
||||
SetTimebase(video_tb);
|
||||
} else {
|
||||
rational audio_tb = viewer_node_->GetAudioParams().sample_rate_as_time_base();
|
||||
|
||||
if (!audio_tb.isNull()) {
|
||||
SetTimebase(audio_tb);
|
||||
} else {
|
||||
SetTimebase(rational());
|
||||
}
|
||||
}
|
||||
AutoUpdateTimebase();
|
||||
connect(viewer_node_, &ViewerOutput::FrameRateChanged, this, &TimeBasedWidget::AutoUpdateTimebase);
|
||||
connect(viewer_node_, &ViewerOutput::SampleRateChanged, this, &TimeBasedWidget::AutoUpdateTimebase);
|
||||
}
|
||||
|
||||
// Call derivatives
|
||||
@@ -205,6 +199,23 @@ void TimeBasedWidget::CatchUpScrollToPoint(int point)
|
||||
PageScrollInternal(point, false);
|
||||
}
|
||||
|
||||
void TimeBasedWidget::AutoUpdateTimebase()
|
||||
{
|
||||
rational video_tb = viewer_node_->GetVideoParams().frame_rate_as_time_base();
|
||||
|
||||
if (!video_tb.isNull()) {
|
||||
SetTimebase(video_tb);
|
||||
} else {
|
||||
rational audio_tb = viewer_node_->GetAudioParams().sample_rate_as_time_base();
|
||||
|
||||
if (!audio_tb.isNull()) {
|
||||
SetTimebase(audio_tb);
|
||||
} else {
|
||||
SetTimebase(rational());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TimeRuler *TimeBasedWidget::ruler() const
|
||||
{
|
||||
return ruler_;
|
||||
|
||||
@@ -228,6 +228,8 @@ private slots:
|
||||
|
||||
void CatchUpScrollToPoint(int point);
|
||||
|
||||
void AutoUpdateTimebase();
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -224,6 +224,8 @@ void TimelineWidget::ConnectNodeEvent(ViewerOutput *n)
|
||||
|
||||
connect(s, &Sequence::TrackAdded, this, &TimelineWidget::AddTrack);
|
||||
connect(s, &Sequence::TrackRemoved, this, &TimelineWidget::RemoveTrack);
|
||||
connect(s, &Sequence::FrameRateChanged, this, &TimelineWidget::FrameRateChanged);
|
||||
connect(s, &Sequence::SampleRateChanged, this, &TimelineWidget::SampleRateChanged);
|
||||
|
||||
ruler()->SetPlaybackCache(n->video_frame_cache());
|
||||
|
||||
@@ -252,6 +254,8 @@ void TimelineWidget::DisconnectNodeEvent(ViewerOutput *n)
|
||||
|
||||
disconnect(s, &Sequence::TrackAdded, this, &TimelineWidget::AddTrack);
|
||||
disconnect(s, &Sequence::TrackRemoved, this, &TimelineWidget::RemoveTrack);
|
||||
disconnect(s, &Sequence::FrameRateChanged, this, &TimelineWidget::FrameRateChanged);
|
||||
disconnect(s, &Sequence::SampleRateChanged, this, &TimelineWidget::SampleRateChanged);
|
||||
|
||||
DeselectAll();
|
||||
|
||||
@@ -1035,6 +1039,16 @@ void TimelineWidget::SetViewWaveformsEnabled(bool e)
|
||||
}
|
||||
}
|
||||
|
||||
void TimelineWidget::FrameRateChanged()
|
||||
{
|
||||
SetTimebase(GetConnectedNode()->GetVideoParams().frame_rate_as_time_base());
|
||||
}
|
||||
|
||||
void TimelineWidget::SampleRateChanged()
|
||||
{
|
||||
UpdateViewTimebases();
|
||||
}
|
||||
|
||||
void TimelineWidget::AddGhost(TimelineViewGhostItem *ghost)
|
||||
{
|
||||
ghost_items_.append(ghost);
|
||||
|
||||
@@ -347,6 +347,10 @@ private slots:
|
||||
|
||||
void SetViewWaveformsEnabled(bool e);
|
||||
|
||||
void FrameRateChanged();
|
||||
|
||||
void SampleRateChanged();
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user