ensure frame rate and sample rate changes ripple through widgets

This commit is contained in:
itsmattkc
2021-04-08 10:44:32 +10:00
parent ea29ffef96
commit 2dc27de37c
6 changed files with 58 additions and 13 deletions
+10
View File
@@ -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;
}
}
+4
View File
@@ -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:
+24 -13
View File
@@ -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_;
+2
View File
@@ -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();
};
}