mirror of https://github.com/qt/qtbase.git
Avoid unnecessary double conversion over ARGB32 and ARGB32PM
Currently if the converter_map does not have an entry for how to do a direct conversion, the image is first converted to ARGB32 and then to the final format. In most cases the conversion to ARGB32 is the generic converter which convert over ARGB32PM, which mean the data is converted to ARGB32PM then to ARGB32, then to ARBG32PM and then to final format. This patch uses the generic converter directly everywhere there isn't an optimized converter declared and it is valid. Change-Id: Ibad57432ef8c58025e63a032b09f92dad4a559ee Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
This commit is contained in:
parent
8bd238041e
commit
db73862302
|
@ -1877,8 +1877,9 @@ QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) co
|
|||
if (format == Format_Invalid || d->format == Format_Invalid)
|
||||
return QImage();
|
||||
|
||||
const Image_Converter *converterPtr = &converter_map[d->format][format];
|
||||
Image_Converter converter = *converterPtr;
|
||||
Image_Converter converter = qimage_converter_map[d->format][format];
|
||||
if (!converter && format > QImage::Format_Indexed8 && d->format > QImage::Format_Indexed8)
|
||||
converter = convert_generic;
|
||||
if (converter) {
|
||||
QImage image(d->width, d->height, format);
|
||||
|
||||
|
@ -1894,15 +1895,13 @@ QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) co
|
|||
return image;
|
||||
}
|
||||
|
||||
// Convert indexed formats over ARGB32 to the final format.
|
||||
Q_ASSERT(format != QImage::Format_ARGB32);
|
||||
Q_ASSERT(d->format != QImage::Format_ARGB32);
|
||||
|
||||
QImage image = convertToFormat(Format_ARGB32, flags);
|
||||
return image.convertToFormat(format, flags);
|
||||
return convertToFormat(Format_ARGB32, flags).convertToFormat(format, flags);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static inline int pixel_distance(QRgb p1, QRgb p2) {
|
||||
int r1 = qRed(p1);
|
||||
int g1 = qGreen(p1);
|
||||
|
|
|
@ -1595,15 +1595,15 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
mask_alpha_converter,
|
||||
mask_alpha_converter,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
convert_RGB_to_RGBA,
|
||||
convert_RGB_to_RGBA,
|
||||
convert_RGB_to_RGBA
|
||||
|
@ -1617,15 +1617,15 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
mask_alpha_converter,
|
||||
0,
|
||||
convert_ARGB_to_ARGB_PM,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
convert_ARGB_to_RGBx,
|
||||
convert_ARGB_to_RGBA,
|
||||
convert_ARGB_to_RGBA_PM,
|
||||
|
@ -1658,18 +1658,14 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#if defined(QT_QWS_DEPTH_15) && defined(QT_QWS_DEPTH_16)
|
||||
convert_generic,
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
@ -1684,9 +1680,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
@ -1706,9 +1702,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
@ -1728,9 +1724,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
@ -1750,14 +1746,10 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
#if defined(QT_QWS_DEPTH_15) && defined(QT_QWS_DEPTH_16)
|
||||
convert_generic,
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
@ -1776,9 +1768,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
@ -1798,9 +1790,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
@ -1820,9 +1812,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
@ -1842,9 +1834,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
|
|||
0,
|
||||
0,
|
||||
0,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
convert_generic,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
|
|
@ -114,6 +114,8 @@ typedef bool (*InPlace_Image_Converter)(QImageData *data, Qt::ImageConversionFla
|
|||
extern Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormats];
|
||||
extern InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QImage::NImageFormats];
|
||||
|
||||
void convert_generic(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags);
|
||||
|
||||
void dither_to_Mono(QImageData *dst, const QImageData *src, Qt::ImageConversionFlags flags, bool fromalpha);
|
||||
|
||||
void qInitImageConversions();
|
||||
|
|
Loading…
Reference in New Issue