[oe-commits] org.oe.dev packages/webkit: Apply the qtwebkit-use-image-decoders.patch to WebKit/Qt, WebKit/Qtopia

freyther commit openembedded-commits at lists.openembedded.org
Mon Oct 29 15:04:49 UTC 2007


packages/webkit: Apply the qtwebkit-use-image-decoders.patch to WebKit/Qt, WebKit/Qtopia
    -Use the built-in webcore decoders because of better RAM performance
    -Move the PR into the .inc

Author: freyther at openembedded.org
Branch: org.openembedded.dev
Revision: 1d191d57e609530bf7d6ccd6705f7e63b0c24231
ViewMTN: http://monotone.openembedded.org/revision/info/1d191d57e609530bf7d6ccd6705f7e63b0c24231
Files:
1
packages/webkit/files/qtwebkit-use-image-decoders.patch
packages/webkit/webkit-qt.inc
packages/webkit/webkit-qt_svn.bb
packages/webkit/webkit-qtopia_svn.bb
Diffs:

#
# mt diff -rd9bbb1a5a35b5b4b04aaea962cc8f3bd26ac834f -r1d191d57e609530bf7d6ccd6705f7e63b0c24231
#
# 
# 
# add_file "packages/webkit/files/qtwebkit-use-image-decoders.patch"
#  content [5c7100d7b0b40430d195105c7a43d3c29824c001]
# 
# patch "packages/webkit/webkit-qt.inc"
#  from [cf87668b6c6100c92f3789cfdab99d05b6699d3d]
#    to [11f8e3a520d20c819272c86da12f31ad12ab451a]
# 
# patch "packages/webkit/webkit-qt_svn.bb"
#  from [98285c7285a74018daa1107a3757b71a0a8767bd]
#    to [8a7e0008b0321d228d80e15a433d3a8b60cd718c]
# 
# patch "packages/webkit/webkit-qtopia_svn.bb"
#  from [ccce4fbb6f4178fbe8f5c34728cd43ed24d10433]
#    to [b5dc044dff172085223b8193424139312f8cf5e7]
# 
============================================================
--- packages/webkit/files/qtwebkit-use-image-decoders.patch	5c7100d7b0b40430d195105c7a43d3c29824c001
+++ packages/webkit/files/qtwebkit-use-image-decoders.patch	5c7100d7b0b40430d195105c7a43d3c29824c001
@@ -0,0 +1,280 @@
+diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
+index bb34e44..23a1cd0 100644
+--- a/WebCore/WebCore.pro
++++ b/WebCore/WebCore.pro
+@@ -6,6 +6,7 @@ CONFIG += building-libs
+ CONFIG += no_batch
+ include($$PWD/../WebKit.pri)
+ gtk-port:LIBS -= -lWebKitGtk
++qt-port:LIBS += -lpng -ljpeg
+ 
+ TEMPLATE = lib
+ qt-port:TARGET = QtWebKit
+@@ -74,6 +75,12 @@ qt-port {
+ INCLUDEPATH += \
+                 $$PWD/platform/qt \
+                 $$PWD/platform/network/qt \
++                $$PWD/platform/image-decoders/bmp \
++                $$PWD/platform/image-decoders/gif \
++                $$PWD/platform/image-decoders/ico \
++                $$PWD/platform/image-decoders/jpeg \
++                $$PWD/platform/image-decoders/png \
++                $$PWD/platform/image-decoders/xbm \
+                 $$PWD/platform/graphics/qt \
+                 $$PWD/platform/graphics/svg/qt \
+                 $$PWD/loader/qt \
+@@ -777,6 +784,13 @@ qt-port {
+     page/qt/EventHandlerQt.cpp \
+     page/qt/FrameQt.cpp \
+     loader/qt/DocumentLoaderQt.cpp \
++    platform/image-decoders/gif/GIFImageDecoder.cpp \
++    platform/image-decoders/gif/GIFImageReader.cpp  \
++    platform/image-decoders/png/PNGImageDecoder.cpp \
++    platform/image-decoders/jpeg/JPEGImageDecoder.cpp \
++    platform/image-decoders/bmp/BMPImageDecoder.cpp \
++    platform/image-decoders/ico/ICOImageDecoder.cpp \
++    platform/image-decoders/xbm/XBMImageDecoder.cpp \
+     platform/graphics/qt/AffineTransformQt.cpp \
+     platform/graphics/qt/ColorQt.cpp \
+     platform/graphics/qt/FloatPointQt.cpp \
+diff --git a/WebCore/platform/graphics/ImageSource.h b/WebCore/platform/graphics/ImageSource.h
+index a75f1d6..2af8c1e 100644
+--- a/WebCore/platform/graphics/ImageSource.h
++++ b/WebCore/platform/graphics/ImageSource.h
+@@ -49,8 +49,8 @@ class SharedBuffer;
+ typedef CGImageSourceRef NativeImageSourcePtr;
+ typedef CGImageRef NativeImagePtr;
+ #elif PLATFORM(QT)
+-class ImageDecoderQt;
+-typedef ImageDecoderQt* NativeImageSourcePtr;
++class ImageDecoder;
++typedef ImageDecoder* NativeImageSourcePtr;
+ typedef QPixmap* NativeImagePtr;
+ #else
+ class ImageDecoder;
+diff --git a/WebCore/platform/graphics/qt/ImageSourceQt.cpp b/WebCore/platform/graphics/qt/ImageSourceQt.cpp
+index 264f90f..d1fd340 100644
+--- a/WebCore/platform/graphics/qt/ImageSourceQt.cpp
++++ b/WebCore/platform/graphics/qt/ImageSourceQt.cpp
+@@ -1,6 +1,7 @@
+ /*
+  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved. 
+  * Copyright (C) 2006 Trolltech ASA
++ * Copyright (C) 2007 Alp Toker <alp.toker at collabora.co.uk>
+  *
+  * All rights reserved.
+  *
+@@ -28,76 +29,78 @@
+ 
+ #include "config.h"
+ #include "ImageSource.h"
+-#include "ImageDecoderQt.h"
+ #include "SharedBuffer.h"
+ 
+-#include <QImage>
+-#include <qdebug.h>
++#include "GIFImageDecoder.h"
++#include "JPEGImageDecoder.h"
++#include "PNGImageDecoder.h"
++#include "BMPImageDecoder.h"
++#include "ICOImageDecoder.h"
++#include "XBMImageDecoder.h"
+ 
++#include <QImage>
++#include <QPixmap>
+ 
+ namespace WebCore {
+-    enum ImageFormat { ImageFormat_None, ImageFormat_GIF, ImageFormat_PNG, ImageFormat_JPEG,
+-                       ImageFormat_BMP,  ImageFormat_ICO,  ImageFormat_XBM };
+ 
+-ImageFormat detectImageFormat(const SharedBuffer& data)
++ImageDecoder* createDecoder(const Vector<char>& data)
+ {
+     // We need at least 4 bytes to figure out what kind of image we're dealing with.
+     int length = data.size();
+     if (length < 4)
+-        return ImageFormat_None;
++        return 0;
+ 
+-    const unsigned char* uContents = (const unsigned char*) data.data();
++    const unsigned char* uContents = (const unsigned char*)data.data();
+     const char* contents = data.data();
+ 
+     // GIFs begin with GIF8(7 or 9).
+     if (strncmp(contents, "GIF8", 4) == 0)
+-        return ImageFormat_GIF;
++        return new GIFImageDecoder();
+ 
+     // Test for PNG.
+-    if (uContents[0] == 0x89 &&
+-        uContents[1] == 0x50 &&
+-        uContents[2] == 0x4E &&
+-        uContents[3] == 0x47)
+-        return ImageFormat_PNG;
++    if (uContents[0]==0x89 &&
++        uContents[1]==0x50 &&
++        uContents[2]==0x4E &&
++        uContents[3]==0x47)
++        return new PNGImageDecoder();
+ 
+     // JPEG
+-    if (uContents[0] == 0xFF &&
+-        uContents[1] == 0xD8 &&
+-        uContents[2] == 0xFF)
+-        return ImageFormat_JPEG;
++    if (uContents[0]==0xFF &&
++        uContents[1]==0xD8 &&
++        uContents[2]==0xFF)
++        return new JPEGImageDecoder();
+ 
+     // BMP
+     if (strncmp(contents, "BM", 2) == 0)
+-        return ImageFormat_BMP;
++        return new BMPImageDecoder();
+ 
+     // ICOs always begin with a 2-byte 0 followed by a 2-byte 1.
+     // CURs begin with 2-byte 0 followed by 2-byte 2.
+     if (!memcmp(contents, "\000\000\001\000", 4) ||
+         !memcmp(contents, "\000\000\002\000", 4))
+-        return ImageFormat_ICO;
+-
++        return new ICOImageDecoder();
++   
+     // XBMs require 8 bytes of info.
+     if (length >= 8 && strncmp(contents, "#define ", 8) == 0)
+-        return ImageFormat_XBM;
++        return new XBMImageDecoder();
+ 
+     // Give up. We don't know what the heck this is.
+-    return ImageFormat_None;
+-}
+-    
+-ImageDecoderQt* createDecoder(const SharedBuffer& data) {
+-    if (detectImageFormat(data) != ImageFormat_None) 
+-        return new ImageDecoderQt();
+     return 0;
+ }
+ 
+ ImageSource::ImageSource()
+-    : m_decoder(0)
++  : m_decoder(0)
++{}
++
++ImageSource::~ImageSource()
+ {
++    clear();
+ }
+ 
+-ImageSource::~ImageSource()
++void ImageSource::clear()
+ {
+     delete m_decoder;
++    m_decoder = 0;
+ }
+ 
+ bool ImageSource::initialized() const
+@@ -111,13 +114,11 @@ void ImageSource::setData(SharedBuffer* data, bool allDataReceived)
+     // This method will examine the data and instantiate an instance of the appropriate decoder plugin.
+     // If insufficient bytes are available to determine the image type, no decoder plugin will be
+     // made.
+-    if (!m_decoder)
+-        m_decoder = createDecoder(*data);
+-
++    delete m_decoder;
++    m_decoder = createDecoder(data->buffer());
+     if (!m_decoder)
+         return;
+-
+-    m_decoder->setData(data->buffer(), allDataReceived);
++    m_decoder->setData(data, allDataReceived);
+ }
+ 
+ bool ImageSource::isSizeAvailable()
+@@ -146,10 +147,7 @@ int ImageSource::repetitionCount()
+ 
+ size_t ImageSource::frameCount() const
+ {
+-    if (!m_decoder)
+-        return 0;
+-
+-    return m_decoder->frameCount();
++    return m_decoder ? m_decoder->frameCount() : 0;
+ }
+ 
+ NativeImagePtr ImageSource::createFrameAtIndex(size_t index)
+@@ -157,25 +155,38 @@ NativeImagePtr ImageSource::createFrameAtIndex(size_t index)
+     if (!m_decoder)
+         return 0;
+ 
+-    
+-    const QPixmap* source = m_decoder->imageAtIndex(index);
+-    if (!source)
++    RGBA32Buffer* buffer = m_decoder->frameBufferAtIndex(index);
++    if (!buffer || buffer->status() == RGBA32Buffer::FrameEmpty)
+         return 0;
+ 
+-    return new QPixmap(*source);
++    return new QPixmap(QPixmap::fromImage(QImage(reinterpret_cast<unsigned char*>(buffer->bytes().data()),
++						 size().width(), size().height(), size().width()*4, QImage::Format_ARGB32)));
++}
++
++bool ImageSource::frameIsCompleteAtIndex(size_t index)
++{
++    if (!m_decoder)
++        return false;
++
++    RGBA32Buffer* buffer = m_decoder->frameBufferAtIndex(index);
++    return buffer && buffer->status() == RGBA32Buffer::FrameComplete;
+ }
+ 
+ float ImageSource::frameDurationAtIndex(size_t index)
+ {
+     if (!m_decoder)
+         return 0;
+-    
++
++    RGBA32Buffer* buffer = m_decoder->frameBufferAtIndex(index);
++    if (!buffer || buffer->status() == RGBA32Buffer::FrameEmpty)
++        return 0;
++
+     // Many annoying ads specify a 0 duration to make an image flash as quickly
+     // as possible.  We follow WinIE's behavior and use a duration of 100 ms
+     // for any frames that specify a duration of <= 50 ms.  See
+     // <http://bugs.webkit.org/show_bug.cgi?id=14413> or Radar 4051389 for
+     // more.
+-    const float duration = m_decoder->duration(index) / 1000.0f;
++    const float duration = buffer->duration() / 1000.0f;
+     return (duration < 0.051f) ? 0.100f : duration;
+ }
+ 
+@@ -183,26 +194,13 @@ bool ImageSource::frameHasAlphaAtIndex(size_t index)
+ {
+     if (!m_decoder || !m_decoder->supportsAlpha())
+         return false;
+-    
+-    const QPixmap* source = m_decoder->imageAtIndex( index);
+-    if (!source)
+-        return false;
+-    
+-    return source->hasAlphaChannel();
+-}
+ 
+-bool ImageSource::frameIsCompleteAtIndex(size_t index)
+-{
+-    return (m_decoder && m_decoder->imageAtIndex(index) != 0);
+-}
++    RGBA32Buffer* buffer = m_decoder->frameBufferAtIndex(index);
++    if (!buffer || buffer->status() == RGBA32Buffer::FrameEmpty)
++        return false;
+ 
+-void ImageSource::clear()
+-{
+-    delete  m_decoder;
+-    m_decoder = 0;
++    return buffer->hasAlpha();
+ }
+-
+-
+ }
+ 
+ // vim: ts=4 sw=4 et
============================================================
--- packages/webkit/webkit-qt.inc	cf87668b6c6100c92f3789cfdab99d05b6699d3d
+++ packages/webkit/webkit-qt.inc	11f8e3a520d20c819272c86da12f31ad12ab451a
@@ -8,7 +8,9 @@ require webkit.inc
 
 require webkit.inc
 
-SRC_URI += " file://qt-api-changes.diff;patch=0;pnum=0 "
+PR = "r6"
+SRC_URI += " file://qt-api-changes.diff;patch=0;pnum=0 \
+             file://qtwebkit-use-image-decoders.patch;patch=0 "
 
 do_install() {
 	install -d ${D}${bindir}
============================================================
--- packages/webkit/webkit-qt_svn.bb	98285c7285a74018daa1107a3757b71a0a8767bd
+++ packages/webkit/webkit-qt_svn.bb	8a7e0008b0321d228d80e15a433d3a8b60cd718c
@@ -1,4 +1,2 @@ inherit qt4x11
 require webkit-qt.inc
 inherit qt4x11
-
-PR = "r5"
============================================================
--- packages/webkit/webkit-qtopia_svn.bb	ccce4fbb6f4178fbe8f5c34728cd43ed24d10433
+++ packages/webkit/webkit-qtopia_svn.bb	b5dc044dff172085223b8193424139312f8cf5e7
@@ -1,6 +1,5 @@ WEBKIT_EXTRA_OPTIONS += "QT+=xml QT+=net
 require webkit-qt.inc
 inherit qtopia4core
 
 WEBKIT_EXTRA_OPTIONS += "QT+=xml QT+=network"
 
-PR = "r5"






More information about the Openembedded-commits mailing list