summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/graphics/qt/ImageDecoderQt.cpp')
-rw-r--r--WebCore/platform/graphics/qt/ImageDecoderQt.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/WebCore/platform/graphics/qt/ImageDecoderQt.cpp b/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
index cc707da..fb3d621 100644
--- a/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
+++ b/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
@@ -78,9 +78,6 @@ void ImageDecoderQt::setData(SharedBuffer* data, bool allDataReceived)
m_buffer->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
m_reader.set(new QImageReader(m_buffer.get(), m_format));
- // This will force the JPEG decoder to use JDCT_IFAST
- m_reader->setQuality(49);
-
// QImageReader only allows retrieving the format before reading the image
m_format = m_reader->format();
}
@@ -188,9 +185,21 @@ void ImageDecoderQt::internalReadImage(size_t frameIndex)
bool ImageDecoderQt::internalHandleCurrentImage(size_t frameIndex)
{
- // Now get the QImage from Qt and place it in the RGBA32Buffer
- QImage img;
- if (!m_reader->read(&img)) {
+ QPixmap pixmap;
+ bool pixmapLoaded;
+ const int imageCount = m_reader->imageCount();
+ if (imageCount == 0 || imageCount == 1)
+ pixmapLoaded = pixmap.loadFromData((const uchar*)(m_data->data()), m_data->size(), m_format);
+ else {
+ QImage img;
+ const bool imageLoaded = m_reader->read(&img);
+ if (imageLoaded) {
+ pixmap = QPixmap::fromImage(img);
+ pixmapLoaded = true;
+ }
+ }
+
+ if (!pixmapLoaded) {
frameCount();
repetitionCount();
clearPointers();
@@ -198,12 +207,11 @@ bool ImageDecoderQt::internalHandleCurrentImage(size_t frameIndex)
}
// now into the RGBA32Buffer - even if the image is not
- QSize imageSize = img.size();
RGBA32Buffer* const buffer = &m_frameBufferCache[frameIndex];
buffer->setRect(m_reader->currentImageRect());
buffer->setStatus(RGBA32Buffer::FrameComplete);
buffer->setDuration(m_reader->nextImageDelay());
- buffer->setDecodedImage(img);
+ buffer->setPixmap(pixmap);
return true;
}