diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-02-19 11:20:52 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-03-03 13:38:17 +0000 |
commit | 59f168c5e5eec7ac247e6154a65f85a7ccc6e7ad (patch) | |
tree | 6c80267788ca979465fe7ea3cb921947c05a4476 /src/gui/image/qjpeghandler.cpp | |
parent | bfb92c03e0d8e7a3a65b64d1f2f5b89f442e2b8a (diff) |
Optimize fallback RGB888 to RGB32 conversion
Improves the conversion from RGB888 to RGB32 on platforms without SIMD
versions. This includes the fallback used on non-neon ARM devices.
Besides image conversion the routine is also used for decoding JPEG.
On x86 this version is within 0.7x of the speed of the SSSE3 version.
Change-Id: Id131994d7c3c4f879d89e80f9d6c435bb5535ed7
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Diffstat (limited to 'src/gui/image/qjpeghandler.cpp')
-rw-r--r-- | src/gui/image/qjpeghandler.cpp | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp index 13ac59ec26..b1146c4297 100644 --- a/src/gui/image/qjpeghandler.cpp +++ b/src/gui/image/qjpeghandler.cpp @@ -69,18 +69,10 @@ 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; - } -} - +Q_GUI_EXPORT void QT_FASTCALL qt_convert_rgb888_to_rgb32(quint32 *dst, const uchar *src, int len); typedef void (QT_FASTCALL *Rgb888ToRgb32Converter)(quint32 *dst, const uchar *src, int len); -static Rgb888ToRgb32Converter rgb888ToRgb32ConverterPtr = convert_rgb888_to_rgb32_C; +static Rgb888ToRgb32Converter rgb888ToRgb32ConverterPtr = qt_convert_rgb888_to_rgb32; struct my_error_mgr : public jpeg_error_mgr { jmp_buf setjmp_buffer; @@ -1008,10 +1000,8 @@ QJpegHandler::QJpegHandler() #endif #if defined(QT_COMPILER_SUPPORTS_SSSE3) - // from qimage_ssse3.cpp - - if (false) { - } else if (qCpuHasFeature(SSSE3)) { + // from qimage_ssse3.cpps + if (qCpuHasFeature(SSSE3)) { rgb888ToRgb32ConverterPtr = qt_convert_rgb888_to_rgb32_ssse3; } #endif // QT_COMPILER_SUPPORTS_SSSE3 |