diff --git a/app/node/input/media/media.cpp b/app/node/input/media/media.cpp index 4bedce46b..a200717cc 100644 --- a/app/node/input/media/media.cpp +++ b/app/node/input/media/media.cpp @@ -235,17 +235,17 @@ QVariant MediaInput::Value(NodeOutput *output, const rational &time) QMatrix4x4 transform; - float sequence_aspect_ratio = static_cast(renderer->width()) / static_cast(renderer->height()); - float media_aspect_ratio = static_cast(frame_->width()) / static_cast(frame_->height()); + // Scale texture to a square for incoming matrix transformation + transform.scale(static_cast(renderer->height()) / static_cast(renderer->width()), 1.0f); - transform.scale(1.0f / sequence_aspect_ratio, 1.0f); - - // Input transform + // Multiply by input transformation transform *= matrix_input_->get_value(time).value(); - transform.scale(media_aspect_ratio, 1.0f); - /*transform.scale(static_cast(frame_->width()) / static_cast(renderer->width()), - static_cast(frame_->height()) / static_cast(renderer->height()));*/ + // Scale texture to the media's aspect ratio + transform.scale(static_cast(frame_->width()) / static_cast(frame_->height()), 1.0f); + + float media_size = static_cast(frame_->height()) / static_cast(renderer->height() * renderer->divider()); + transform.scale(media_size, media_size); // Use pipeline to blit using transformation matrix from input if (renderer->mode() == olive::RenderMode::kOffline) { diff --git a/app/node/processor/renderer/renderer.cpp b/app/node/processor/renderer/renderer.cpp index e2bab1bb6..9371d4425 100644 --- a/app/node/processor/renderer/renderer.cpp +++ b/app/node/processor/renderer/renderer.cpp @@ -257,7 +257,7 @@ void RendererProcessor::Start() threads_.resize(background_thread_count); for (int i=0;i(this, ctx, effective_width_, effective_height_, format_, mode_); + threads_[i] = std::make_shared(this, ctx, effective_width_, effective_height_, divider_, format_, mode_); threads_[i]->StartThread(QThread::LowPriority); // Ensure this connection is "Queued" so that it always runs in this object's threaded rather than any of the @@ -290,7 +290,7 @@ void RendererProcessor::Start() for (int i=0;i(ctx, effective_width_, effective_height_, format_, mode_); + download_threads_[i] = std::make_shared(ctx, effective_width_, effective_height_, divider_, format_, mode_); download_threads_[i]->StartThread(QThread::LowPriority); connect(download_threads_[i].get(), diff --git a/app/node/processor/renderer/rendererdownloadthread.cpp b/app/node/processor/renderer/rendererdownloadthread.cpp index 7249366bc..3da1069eb 100644 --- a/app/node/processor/renderer/rendererdownloadthread.cpp +++ b/app/node/processor/renderer/rendererdownloadthread.cpp @@ -10,9 +10,10 @@ RendererDownloadThread::RendererDownloadThread(QOpenGLContext *share_ctx, const int &width, const int &height, + const int ÷r, const olive::PixelFormat &format, const olive::RenderMode &mode) : - RendererThreadBase(share_ctx, width, height, format, mode), + RendererThreadBase(share_ctx, width, height, divider, format, mode), cancelled_(false) { } diff --git a/app/node/processor/renderer/rendererdownloadthread.h b/app/node/processor/renderer/rendererdownloadthread.h index 24a97cdc3..376a69232 100644 --- a/app/node/processor/renderer/rendererdownloadthread.h +++ b/app/node/processor/renderer/rendererdownloadthread.h @@ -9,7 +9,7 @@ class RendererDownloadThread : public RendererThreadBase public: RendererDownloadThread(QOpenGLContext* share_ctx, const int& width, - const int& height, + const int& height, const int ÷r, const olive::PixelFormat& format, const olive::RenderMode& mode); diff --git a/app/node/processor/renderer/rendererprocessthread.cpp b/app/node/processor/renderer/rendererprocessthread.cpp index 1bc4ba36b..253b5d10b 100644 --- a/app/node/processor/renderer/rendererprocessthread.cpp +++ b/app/node/processor/renderer/rendererprocessthread.cpp @@ -26,9 +26,10 @@ RendererProcessThread::RendererProcessThread(RendererProcessor* parent, QOpenGLContext *share_ctx, const int &width, const int &height, + const int ÷r, const olive::PixelFormat &format, const olive::RenderMode &mode) : - RendererThreadBase(share_ctx, width, height, format, mode), + RendererThreadBase(share_ctx, width, height, divider, format, mode), parent_(parent), cancelled_(false) { diff --git a/app/node/processor/renderer/rendererprocessthread.h b/app/node/processor/renderer/rendererprocessthread.h index 4956f3cc2..a9eedaa38 100644 --- a/app/node/processor/renderer/rendererprocessthread.h +++ b/app/node/processor/renderer/rendererprocessthread.h @@ -32,7 +32,7 @@ public: RendererProcessThread(RendererProcessor* parent, QOpenGLContext* share_ctx, const int& width, - const int& height, + const int& height, const int ÷r, const olive::PixelFormat& format, const olive::RenderMode& mode); diff --git a/app/node/processor/renderer/rendererthreadbase.cpp b/app/node/processor/renderer/rendererthreadbase.cpp index f6d58c464..6a20a237a 100644 --- a/app/node/processor/renderer/rendererthreadbase.cpp +++ b/app/node/processor/renderer/rendererthreadbase.cpp @@ -22,10 +22,11 @@ #include -RendererThreadBase::RendererThreadBase(QOpenGLContext *share_ctx, const int &width, const int &height, const olive::PixelFormat &format, const olive::RenderMode &mode) : +RendererThreadBase::RendererThreadBase(QOpenGLContext *share_ctx, const int &width, const int &height, const int ÷r, const olive::PixelFormat &format, const olive::RenderMode &mode) : share_ctx_(share_ctx), width_(width), height_(height), + divider_(divider), format_(format), mode_(mode), render_instance_(nullptr) @@ -48,7 +49,7 @@ void RendererThreadBase::run() wait_cond_.wakeAll(); caller_mutex_.unlock(); - RenderInstance instance(width_, height_, format_, mode_); + RenderInstance instance(width_, height_, divider_, format_, mode_); render_instance_ = &instance; instance.SetShareContext(share_ctx_); diff --git a/app/node/processor/renderer/rendererthreadbase.h b/app/node/processor/renderer/rendererthreadbase.h index 12a9d35fc..311f626d1 100644 --- a/app/node/processor/renderer/rendererthreadbase.h +++ b/app/node/processor/renderer/rendererthreadbase.h @@ -36,6 +36,7 @@ public: RendererThreadBase(QOpenGLContext* share_ctx, const int& width, const int& height, + const int& divider, const olive::PixelFormat& format, const olive::RenderMode& mode); @@ -64,6 +65,8 @@ private: const int& height_; + const int& divider_; + const olive::PixelFormat& format_; const olive::RenderMode& mode_; diff --git a/app/render/renderinstance.cpp b/app/render/renderinstance.cpp index d4ebc2122..f0cbc93ea 100644 --- a/app/render/renderinstance.cpp +++ b/app/render/renderinstance.cpp @@ -26,13 +26,15 @@ RenderInstance::RenderInstance(const int& width, const int& height, + const int ÷r, const olive::PixelFormat& format, const olive::RenderMode& mode) : share_ctx_(nullptr), width_(width), height_(height), format_(format), - mode_(mode) + mode_(mode), + divider_(divider) { } @@ -130,6 +132,11 @@ const int &RenderInstance::height() const return height_; } +const int &RenderInstance::divider() const +{ + return divider_; +} + const olive::PixelFormat &RenderInstance::format() const { return format_; diff --git a/app/render/renderinstance.h b/app/render/renderinstance.h index 5d7dc9f4a..a7edf005b 100644 --- a/app/render/renderinstance.h +++ b/app/render/renderinstance.h @@ -41,6 +41,7 @@ class RenderInstance : public QObject public: RenderInstance(const int& width, const int& height, + const int& divider, const olive::PixelFormat& format, const olive::RenderMode& mode); @@ -60,6 +61,8 @@ public: const int& height() const; + const int& divider() const; + const olive::PixelFormat& format() const; const olive::RenderMode& mode() const;