summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-01-19 18:34:32 +0200
committerThiago Marcos P. Santos <thiago@mapbox.com>2016-04-20 20:55:51 +0300
commit01b06c230174e1088d1703d67d92072ab72d9a02 (patch)
tree0ded8f35d75f12bec50bc0257356005fc8dd4fb3 /platform
parent8ff17ffc9af865b1a1735e4759d234c7e62ba79e (diff)
downloadqtlocation-mapboxgl-01b06c230174e1088d1703d67d92072ab72d9a02.tar.gz
[Qt] WebP support
Diffstat (limited to 'platform')
-rw-r--r--platform/qt/platform.gyp4
-rw-r--r--platform/qt/scripts/configure.sh1
-rw-r--r--platform/qt/src/image.cpp25
3 files changed, 21 insertions, 9 deletions
diff --git a/platform/qt/platform.gyp b/platform/qt/platform.gyp
index 41b4c7ad4a..10f69c4a61 100644
--- a/platform/qt/platform.gyp
+++ b/platform/qt/platform.gyp
@@ -42,6 +42,7 @@
'../default/sqlite3.cpp',
'../default/string_stdlib.cpp',
'../default/thread.cpp',
+ '../default/webp_reader.cpp',
'include/qmapbox.hpp',
'include/qmapboxgl.hpp',
'qmapbox.qrc',
@@ -70,6 +71,7 @@
'<@(rapidjson_cflags)',
'<@(sqlite_cflags)',
'<@(variant_cflags)',
+ '<@(webp_cflags)',
'-Wno-error', # TODO: eliminate
'-fPIC',
],
@@ -78,11 +80,13 @@
'<@(opengl_ldflags)',
'<@(qt_ldflags)',
'<@(sqlite_ldflags)',
+ '<@(webp_ldflags)',
'<@(zlib_ldflags)',
],
'libraries': [
'<@(nunicode_static_libs)',
'<@(sqlite_static_libs)',
+ '<@(webp_static_libs)',
'<@(zlib_static_libs)',
],
},
diff --git a/platform/qt/scripts/configure.sh b/platform/qt/scripts/configure.sh
index 701207eaeb..164598e6ff 100644
--- a/platform/qt/scripts/configure.sh
+++ b/platform/qt/scripts/configure.sh
@@ -9,6 +9,7 @@ RAPIDJSON_VERSION=1.0.2
SQLITE_VERSION=3.9.1
VARIANT_VERSION=1.1.0
ZLIB_VERSION=system
+WEBP_VERSION=0.5.0
if [ "$MASON_PLATFORM" == "osx" ]; then
function print_opengl_flags {
diff --git a/platform/qt/src/image.cpp b/platform/qt/src/image.cpp
index 60ea84e50f..96a5eb0eed 100644
--- a/platform/qt/src/image.cpp
+++ b/platform/qt/src/image.cpp
@@ -19,10 +19,23 @@ std::string encodePNG(const PremultipliedImage& pre) {
return std::string(array.constData(), array.size());
}
+PremultipliedImage decodeWebP(const uint8_t*, size_t);
+
+PremultipliedImage decodeImage(const std::string& string) {
+ const uint8_t* data = reinterpret_cast<const uint8_t*>(string.data());
+ const size_t size = string.size();
+
+ // FIXME: Use Qt WebP decoder plugin.
+ if (size >= 12) {
+ uint32_t riff_magic = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
+ uint32_t webp_magic = (data[8] << 24) | (data[9] << 16) | (data[10] << 8) | data[11];
+ if (riff_magic == 0x52494646 && webp_magic == 0x57454250) {
+ return decodeWebP(data, size);
+ }
+ }
-PremultipliedImage decodeImage(const std::string& data) {
QImage image =
- QImage::fromData(reinterpret_cast<const uint8_t*>(data.data()), data.size())
+ QImage::fromData(data, size)
.rgbSwapped()
.convertToFormat(QImage::Format_ARGB32_Premultiplied);
@@ -30,16 +43,10 @@ PremultipliedImage decodeImage(const std::string& data) {
throw std::runtime_error("Unsupported image type");
}
- PremultipliedImage pre;
- pre.width = image.width();
- pre.height = image.height();
-
auto img = std::make_unique<uint8_t[]>(image.byteCount());
memcpy(img.get(), image.constBits(), image.byteCount());
- pre.data = std::move(img);
-
- return pre;
+ return { size_t(image.width()), size_t(image.height()), std::move(img) };
}
}