viewer: re-render both video and audio if parameters change
This commit is contained in:
@@ -77,6 +77,26 @@ const RenderMode::Mode &VideoRenderingParams::mode() const
|
|||||||
return mode_;
|
return mode_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool VideoRenderingParams::operator==(const VideoRenderingParams &rhs) const
|
||||||
|
{
|
||||||
|
return width() == rhs.width()
|
||||||
|
&& height() == rhs.height()
|
||||||
|
&& time_base() == rhs.time_base()
|
||||||
|
&& format() == rhs.format()
|
||||||
|
&& mode() == rhs.mode()
|
||||||
|
&& divider() == rhs.divider();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VideoRenderingParams::operator!=(const VideoRenderingParams &rhs) const
|
||||||
|
{
|
||||||
|
return width() != rhs.width()
|
||||||
|
|| height() != rhs.height()
|
||||||
|
|| time_base() != rhs.time_base()
|
||||||
|
|| format() != rhs.format()
|
||||||
|
|| mode() != rhs.mode()
|
||||||
|
|| divider() != rhs.divider();
|
||||||
|
}
|
||||||
|
|
||||||
void VideoRenderingParams::calculate_effective_size()
|
void VideoRenderingParams::calculate_effective_size()
|
||||||
{
|
{
|
||||||
effective_width_ = width() / divider_;
|
effective_width_ = width() / divider_;
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ public:
|
|||||||
const PixelFormat::Format& format() const;
|
const PixelFormat::Format& format() const;
|
||||||
const RenderMode::Mode& mode() const;
|
const RenderMode::Mode& mode() const;
|
||||||
|
|
||||||
|
bool operator==(const VideoRenderingParams& rhs) const;
|
||||||
|
bool operator!=(const VideoRenderingParams& rhs) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void calculate_effective_size();
|
void calculate_effective_size();
|
||||||
|
|
||||||
|
|||||||
@@ -295,14 +295,23 @@ void ViewerWidget::UpdateRendererParameters()
|
|||||||
|
|
||||||
RenderMode::Mode render_mode = RenderMode::kOffline;
|
RenderMode::Mode render_mode = RenderMode::kOffline;
|
||||||
|
|
||||||
video_renderer_->SetParameters(VideoRenderingParams(GetConnectedNode()->video_params(),
|
VideoRenderingParams vparam(GetConnectedNode()->video_params(),
|
||||||
PixelService::instance()->GetConfiguredFormatForMode(render_mode),
|
PixelService::instance()->GetConfiguredFormatForMode(render_mode),
|
||||||
render_mode,
|
render_mode,
|
||||||
divider_));
|
divider_);
|
||||||
audio_renderer_->SetParameters(AudioRenderingParams(GetConnectedNode()->audio_params(),
|
|
||||||
SampleFormat::GetConfiguredFormatForMode(render_mode)));
|
|
||||||
|
|
||||||
video_renderer_->InvalidateCache(TimeRange(0, GetConnectedNode()->Length()));
|
if (video_renderer_->params() != vparam) {
|
||||||
|
video_renderer_->SetParameters(vparam);
|
||||||
|
video_renderer_->InvalidateCache(TimeRange(0, GetConnectedNode()->Length()));
|
||||||
|
}
|
||||||
|
|
||||||
|
AudioRenderingParams aparam(GetConnectedNode()->audio_params(),
|
||||||
|
SampleFormat::GetConfiguredFormatForMode(render_mode));
|
||||||
|
|
||||||
|
if (audio_renderer_->params() != aparam) {
|
||||||
|
audio_renderer_->SetParameters(aparam);
|
||||||
|
audio_renderer_->InvalidateCache(TimeRange(0, GetConnectedNode()->Length()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewerWidget::ShowContextMenu(const QPoint &pos)
|
void ViewerWidget::ShowContextMenu(const QPoint &pos)
|
||||||
|
|||||||
Reference in New Issue
Block a user