summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-08-03 12:09:47 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-08-03 12:09:47 (GMT)
commit73956dde054abb6504c3e5609778bf16548768b9 (patch)
tree5a071389332cfe2ae20dffa2f5180d92eed59542 /src
parentdfb56c408b2561c194922f36a0d08c2dc7c43f9b (diff)
parent57d4e5aae33d27f4989c76269f23e837b8dff451 (diff)
downloadQt-73956dde054abb6504c3e5609778bf16548768b9.zip
Qt-73956dde054abb6504c3e5609778bf16548768b9.tar.gz
Qt-73956dde054abb6504c3e5609778bf16548768b9.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2: Use the fast conversion from RGB888 to RGB32 for Jpeg images Move the SIMD defines to the common declaration of Qt symbols Fixed: QT_DEPRECATED_WARNINGS defines QT3_SUPPORT
Diffstat (limited to 'src')
-rw-r--r--src/corelib/corelib.pro37
-rw-r--r--src/corelib/global/qglobal.h6
-rw-r--r--src/gui/gui.pro11
-rw-r--r--src/gui/image/qimage_ssse3.cpp3
-rw-r--r--src/gui/image/qjpeghandler.cpp29
5 files changed, 31 insertions, 55 deletions
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index bbf445f..bc8ef9f 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -53,39 +53,6 @@ symbian: {
DEPLOYMENT = partial_upgrade $$DEPLOYMENT
}
-mmx {
- DEFINES += QT_HAVE_MMX
-}
-3dnow {
- DEFINES += QT_HAVE_3DNOW
-}
-sse {
- DEFINES += QT_HAVE_SSE
- DEFINES += QT_HAVE_MMXEXT
-}
-sse2 {
- DEFINES += QT_HAVE_SSE2
-}
-sse3 {
- DEFINES += QT_HAVE_SSE3
-}
-ssse3 {
- DEFINES += QT_HAVE_SSSE3
-}
-sse4_1 {
- DEFINES += QT_HAVE_SSE4_1
-}
-sse4_2 {
- DEFINES += QT_HAVE_SSE4_2
-}
-avx {
- DEFINES += QT_HAVE_AVX
-}
-iwmmxt {
- DEFINES += QT_HAVE_IWMMXT
-}
-neon {
- DEFINES += QT_HAVE_NEON
- QMAKE_CXXFLAGS *= -mfpu=neon
-}
+neon: QMAKE_CXXFLAGS *= -mfpu=neon
+
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 7b915cd..8f27b03 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -981,9 +981,11 @@ redefine to built-in booleans to make autotests work properly */
# undef QT_DEPRECATED_VARIABLE
# undef QT_DEPRECATED_CONSTRUCTOR
#elif defined(QT_DEPRECATED_WARNINGS)
+# ifdef QT3_SUPPORT
/* enable Qt3 support warnings as well */
-# undef QT3_SUPPORT_WARNINGS
-# define QT3_SUPPORT_WARNINGS
+# undef QT3_SUPPORT_WARNINGS
+# define QT3_SUPPORT_WARNINGS
+# endif
# undef QT_DEPRECATED
# define QT_DEPRECATED Q_DECL_DEPRECATED
# undef QT_DEPRECATED_VARIABLE
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index 1b43ef2..28440cc 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -80,17 +80,6 @@ symbian {
contains(QMAKE_MAC_XARCH, no) {
DEFINES += QT_NO_MAC_XARCH
} else {
- mmx:DEFINES += QT_HAVE_MMX
- 3dnow:DEFINES += QT_HAVE_3DNOW
- sse:DEFINES += QT_HAVE_SSE QT_HAVE_MMXEXT
- sse2:DEFINES += QT_HAVE_SSE2
- sse3:DEFINES += QT_HAVE_SSE3
- ssse3:DEFINES += QT_HAVE_SSSE3
- sse4_1:DEFINES += QT_HAVE_SSE4_1
- sse4_2:DEFINES += QT_HAVE_SSE4_2
- avx:DEFINES += QT_HAVE_AVX
- iwmmxt:DEFINES += QT_HAVE_IWMMXT
-
win32-g++*|!win32:!*-icc* {
mmx {
mmx_compiler.commands = $$QMAKE_CXX -c -Winline
diff --git a/src/gui/image/qimage_ssse3.cpp b/src/gui/image/qimage_ssse3.cpp
index 1c664f2..cc4ac5e 100644
--- a/src/gui/image/qimage_ssse3.cpp
+++ b/src/gui/image/qimage_ssse3.cpp
@@ -45,13 +45,12 @@
#ifdef QT_HAVE_SSSE3
-#include <stdio.h>
QT_BEGIN_NAMESPACE
// Convert a scanline of RGB888 (src) to RGB32 (dst)
// src must be at least len * 3 bytes
// dst must be at least len * 4 bytes
-inline void convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len)
+Q_GUI_EXPORT void QT_FASTCALL convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len)
{
quint32 *const end = dst + len;
diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp
index 972dd65..0b731cb 100644
--- a/src/gui/image/qjpeghandler.cpp
+++ b/src/gui/image/qjpeghandler.cpp
@@ -45,6 +45,7 @@
#include <qvariant.h>
#include <qvector.h>
#include <qbuffer.h>
+#include <private/qsimd_p.h>
#include <stdio.h> // jpeglib needs this to be pre-included
#include <setjmp.h>
@@ -75,6 +76,19 @@ extern "C" {
QT_BEGIN_NAMESPACE
+void QT_FASTCALL convert_rgb888_to_rgb32_C(quint32 *dst, const uchar *src, int len)
+{
+ // Expand 24->32 bpp.
+ for (int i = 0; i < len; ++i) {
+ *dst++ = qRgb(src[0], src[1], src[2]);
+ src += 3;
+ }
+}
+
+typedef void (QT_FASTCALL *Rgb888ToRgb32Converter)(quint32 *dst, const uchar *src, int len);
+
+static Rgb888ToRgb32Converter rgb888ToRgb32ConverterPtr = convert_rgb888_to_rgb32_C;
+
struct my_error_mgr : public jpeg_error_mgr {
jmp_buf setjmp_buffer;
};
@@ -393,13 +407,9 @@ static bool read_jpeg_image(QImage *outImage,
continue; // Haven't reached the starting line yet.
if (info->output_components == 3) {
- // Expand 24->32 bpp.
uchar *in = rows[0] + clip.x() * 3;
QRgb *out = (QRgb*)outImage->scanLine(y);
- for (int i = 0; i < clip.width(); ++i) {
- *out++ = qRgb(in[0], in[1], in[2]);
- in += 3;
- }
+ rgb888ToRgb32ConverterPtr(out, in, clip.width());
} else if (info->out_color_space == JCS_CMYK) {
// Convert CMYK->RGB.
uchar *in = rows[0] + clip.x() * 4;
@@ -793,6 +803,15 @@ bool QJpegHandlerPrivate::read(QImage *image)
QJpegHandler::QJpegHandler()
: d(new QJpegHandlerPrivate(this))
{
+#if defined(QT_HAVE_SSSE3)
+ const uint features = qDetectCPUFeatures();
+
+ // from qimage_ssse3.cpp
+ Q_GUI_EXPORT void QT_FASTCALL convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len);
+
+ if (features & SSSE3)
+ rgb888ToRgb32ConverterPtr = convert_rgb888_to_rgb32_ssse3;
+#endif // QT_HAVE_SSSE3
}
QJpegHandler::~QJpegHandler()