From 8b4cfd80e8ca2fb7ef20903284725b50df05c232 Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Thu, 4 Oct 2018 12:10:02 +0200 Subject: GraphicsVideoItem: Interpret ARGB32 as premultiplied Do not convert ARG32 to premultiplied. Rather interpret it as premultiplied. Should be better even if SSE2 is disabled. Task-number: QTBUG-52114 Change-Id: Ic63f59dc8a940d6d73c618ef3a75b47a0950fff3 Reviewed-by: Christian Stromme --- src/multimediawidgets/qpaintervideosurface.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/multimediawidgets') diff --git a/src/multimediawidgets/qpaintervideosurface.cpp b/src/multimediawidgets/qpaintervideosurface.cpp index 0396f9fc0..e4762a7e1 100644 --- a/src/multimediawidgets/qpaintervideosurface.cpp +++ b/src/multimediawidgets/qpaintervideosurface.cpp @@ -143,6 +143,11 @@ QAbstractVideoSurface::Error QVideoSurfaceGenericPainter::start(const QVideoSurf { m_frame = QVideoFrame(); m_imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat()); + // Do not render into ARGB32 images using QPainter. + // Using QImage::Format_ARGB32_Premultiplied is significantly faster. + if (m_imageFormat == QImage::Format_ARGB32) + m_imageFormat = QImage::Format_ARGB32_Premultiplied; + m_imageSize = format.frameSize(); m_scanLineDirection = format.scanLineDirection(); m_mirrored = format.property("mirrored").toBool(); @@ -191,10 +196,6 @@ QAbstractVideoSurface::Error QVideoSurfaceGenericPainter::paint( m_imageSize.height(), m_frame.bytesPerLine(), m_imageFormat); - // Do not render into ARGB32 images using QPainter. - // Using QImage::Format_ARGB32_Premultiplied is significantly faster. - if (m_imageFormat == QImage::Format_ARGB32) - image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); const QTransform oldTransform = painter->transform(); QTransform transform = oldTransform; -- cgit v1.2.3