From e5c829b38ccaee353cfeca412f17bbd079b593e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Wed, 20 Jan 2016 16:42:16 +0100 Subject: [Qt] use libjpeg-turbo rather than Qt's built-in JPEG decoding libjpeg-turbo is typically 2-4x faster than the built-in decoding. --- platform/qt/platform.gyp | 4 ++++ platform/qt/scripts/configure.sh | 1 + platform/qt/src/image.cpp | 9 +++++++++ 3 files changed, 14 insertions(+) diff --git a/platform/qt/platform.gyp b/platform/qt/platform.gyp index 10f69c4a61..fb73c00ce1 100644 --- a/platform/qt/platform.gyp +++ b/platform/qt/platform.gyp @@ -34,6 +34,7 @@ 'sources': [ '../default/asset_file_source.cpp', '../default/default_file_source.cpp', + '../default/jpeg_reader.cpp', '../default/log_stderr.cpp', '../default/mbgl/storage/offline.cpp', '../default/mbgl/storage/offline_database.cpp', @@ -65,6 +66,7 @@ 'variables': { 'cflags': [ '<@(boost_cflags)', + '<@(libjpeg-turbo_cflags)', '<@(nunicode_cflags)', '<@(opengl_cflags)', '<@(qt_cflags)', @@ -76,6 +78,7 @@ '-fPIC', ], 'ldflags': [ + '<@(libjpeg-turbo_ldflags)', '<@(nunicode_ldflags)', '<@(opengl_ldflags)', '<@(qt_ldflags)', @@ -86,6 +89,7 @@ 'libraries': [ '<@(nunicode_static_libs)', '<@(sqlite_static_libs)', + '<@(libjpeg-turbo_static_libs)', '<@(webp_static_libs)', '<@(zlib_static_libs)', ], diff --git a/platform/qt/scripts/configure.sh b/platform/qt/scripts/configure.sh index 164598e6ff..66ee7f1471 100644 --- a/platform/qt/scripts/configure.sh +++ b/platform/qt/scripts/configure.sh @@ -3,6 +3,7 @@ BOOST_VERSION=1.59.0 GEOJSONVT_VERSION=4.1.2 GTEST_VERSION=1.7.0 +LIBJPEG_TURBO_VERSION=1.4.2 NUNICODE_VERSION=1.6 PIXELMATCH_VERSION=0.9.0 RAPIDJSON_VERSION=1.0.2 diff --git a/platform/qt/src/image.cpp b/platform/qt/src/image.cpp index 96a5eb0eed..816b3d7aee 100644 --- a/platform/qt/src/image.cpp +++ b/platform/qt/src/image.cpp @@ -19,6 +19,7 @@ std::string encodePNG(const PremultipliedImage& pre) { return std::string(array.constData(), array.size()); } +PremultipliedImage decodeJPEG(const uint8_t*, size_t); PremultipliedImage decodeWebP(const uint8_t*, size_t); PremultipliedImage decodeImage(const std::string& string) { @@ -34,6 +35,14 @@ PremultipliedImage decodeImage(const std::string& string) { } } + // Use libjpeg-turbo rather than the built-in version of libjpeg. + if (size >= 2) { + uint16_t magic = ((data[0] << 8) | data[1]) & 0xffff; + if (magic == 0xFFD8) { + return decodeJPEG(data, size); + } + } + QImage image = QImage::fromData(data, size) .rgbSwapped() -- cgit v1.2.1