From a1504e8ecfc683691eb4be1f81b6a6e7920d85ab Mon Sep 17 00:00:00 2001
From: Eirik Aavitsland <eirik.aavitsland@qt.io>
Date: Mon, 13 Nov 2017 11:40:25 +0100
Subject: [PATCH] WebP: Fix wrong default quality level for writing

If a negative (i.e. illegal/unset) quality value was set to the WebP
handler, it would just bound it to 0 (minimum quality level). This
would happen on every save where no explicit quality level had been
requested on the QImageWriter.
Fix by copying the jpeg handler's behavior: If a negative value is
set, use the default level (75) when storing.

[ChangeLog][WebP handler] Fixed default quality level for writing

Task-number: QTBUG-64437
Change-Id: I0f1cabba6cea6851c6a813bf5bf7ab8e8c49ddfb
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
---
 src/plugins/imageformats/webp/qwebphandler.cpp | 8 +++-----
 src/plugins/imageformats/webp/qwebphandler_p.h | 1 -
 2 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/src/plugins/imageformats/webp/qwebphandler.cpp b/src/plugins/imageformats/webp/qwebphandler.cpp
index 7f7bdd9b..c59bc402 100644
--- a/src/plugins/imageformats/webp/qwebphandler.cpp
+++ b/src/plugins/imageformats/webp/qwebphandler.cpp
@@ -48,7 +48,6 @@
 static const int riffHeaderSize = 12; // RIFF_HEADER_SIZE from webp/format_constants.h
 
 QWebpHandler::QWebpHandler() :
-    m_lossless(false),
     m_quality(75),
     m_scanState(ScanNotScanned),
     m_features(),
@@ -250,8 +249,8 @@ bool QWebpHandler::write(const QImage &image)
         return false;
     }
 
-    config.lossless = m_lossless;
-    config.quality = m_quality;
+    config.quality = m_quality < 0 ? 75 : qMin(m_quality, 100);
+    config.lossless = (config.quality >= 100);
     picture.writer = pictureWriter;
     picture.custom_ptr = device();
 
@@ -289,8 +288,7 @@ void QWebpHandler::setOption(ImageOption option, const QVariant &value)
 {
     switch (option) {
     case Quality:
-        m_quality = qBound(0, value.toInt(), 100);
-        m_lossless = (m_quality >= 100);
+        m_quality = value.toInt();
         return;
     default:
         break;
diff --git a/src/plugins/imageformats/webp/qwebphandler_p.h b/src/plugins/imageformats/webp/qwebphandler_p.h
index 99a7c210..950b5015 100644
--- a/src/plugins/imageformats/webp/qwebphandler_p.h
+++ b/src/plugins/imageformats/webp/qwebphandler_p.h
@@ -85,7 +85,6 @@ private:
         ScanSuccess = 1,
     };
 
-    bool m_lossless;
     int m_quality;
     mutable ScanState m_scanState;
     WebPBitstreamFeatures m_features;
-- 
GitLab