summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-01-20 16:42:16 +0100
committerThiago Marcos P. Santos <thiago@mapbox.com>2016-04-20 20:55:51 +0300
commite5c829b38ccaee353cfeca412f17bbd079b593e2 (patch)
tree855779641e375cd7977391246c6b1fd8d7eceed6
parent01b06c230174e1088d1703d67d92072ab72d9a02 (diff)
downloadqtlocation-mapboxgl-e5c829b38ccaee353cfeca412f17bbd079b593e2.tar.gz
[Qt] use libjpeg-turbo rather than Qt's built-in JPEG decoding
libjpeg-turbo is typically 2-4x faster than the built-in decoding.
-rw-r--r--platform/qt/platform.gyp4
-rw-r--r--platform/qt/scripts/configure.sh1
-rw-r--r--platform/qt/src/image.cpp9
3 files changed, 14 insertions, 0 deletions
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()