From 3e48aef88c99186952b33041aa41e407366c3b46 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 22 Nov 2020 10:32:58 +1100 Subject: [PATCH] renderer: only divide as much as necessary to get within maximum sequence resolution Prevents lower res images from becoming too low res --- app/render/renderprocessor.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/render/renderprocessor.cpp b/app/render/renderprocessor.cpp index 299cc9394..1ea3024cd 100644 --- a/app/render/renderprocessor.cpp +++ b/app/render/renderprocessor.cpp @@ -270,12 +270,19 @@ QVariant RenderProcessor::ProcessVideoFootage(StreamPtr stream, const rational & ColorManager* color_manager = Node::ValueToPtr(ticket_->property("colormanager")); + // Calculate footage divider that still fits in the divider chosen + int footage_divider = 1; + while (VideoParams::GetScaledDimension(video_stream->width(), footage_divider) > video_params.effective_width() + || VideoParams::GetScaledDimension(video_stream->height(), footage_divider) > video_params.effective_height()) { + footage_divider++; + } + StillImageCache::EntryPtr want_entry = std::make_shared( nullptr, stream, ColorProcessor::GenerateID(color_manager, video_stream->colorspace(), color_manager->GetReferenceColorSpace()), video_stream->premultiplied_alpha(), - video_params.divider(), + footage_divider, (video_stream->video_type() == VideoStream::kVideoTypeStill) ? 0 : input_time, true); @@ -317,7 +324,7 @@ QVariant RenderProcessor::ProcessVideoFootage(StreamPtr stream, const rational & if (decoder) { FramePtr frame = decoder->RetrieveVideo(input_time, - video_params.divider()); + footage_divider); if (frame) { // Return a texture from the derived class