From a64f066e2ee4e065248417791567b3f2d6234c4c Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 27 Feb 2020 17:18:39 +1100 Subject: [PATCH] renderer: don't upconvert to RGBA if the source image is only RGB --- app/render/backend/opengl/openglproxy.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/render/backend/opengl/openglproxy.cpp b/app/render/backend/opengl/openglproxy.cpp index 76bf19cbb..c1e6cf72d 100644 --- a/app/render/backend/opengl/openglproxy.cpp +++ b/app/render/backend/opengl/openglproxy.cpp @@ -86,22 +86,26 @@ void OpenGLProxy::FrameToValue(DecoderPtr decoder, StreamPtr stream, const TimeR // OCIO's CPU conversion is more accurate, so for online we render on CPU but offline we render GPU if (ocio_method == ColorManager::kOCIOAccurate) { + bool has_alpha = PixelFormat::FormatHasAlphaChannel(frame->format()); + // If alpha is associated, disassociate for the color transform - if (video_stream->premultiplied_alpha()) { + if (has_alpha && video_stream->premultiplied_alpha()) { ColorManager::DisassociateAlpha(frame); } // Convert frame to float for OCIO - frame = PixelFormat::ConvertPixelFormat(frame, PixelFormat::PIX_FMT_RGBA32F); + frame = PixelFormat::ConvertPixelFormat(frame, has_alpha ? PixelFormat::PIX_FMT_RGBA32F : PixelFormat::PIX_FMT_RGB32F); // Perform color transform color_processor->ConvertFrame(frame); // Associate alpha - if (video_stream->premultiplied_alpha()) { - ColorManager::ReassociateAlpha(frame); - } else { - ColorManager::AssociateAlpha(frame); + if (has_alpha) { + if (video_stream->premultiplied_alpha()) { + ColorManager::ReassociateAlpha(frame); + } else { + ColorManager::AssociateAlpha(frame); + } } }