Title: [185506] trunk/Source/WebCore
Revision
185506
Author
[email protected]
Date
2015-06-12 09:45:15 -0700 (Fri, 12 Jun 2015)

Log Message

[EFL] canvas/philip/tests/toDataURL.jpeg.foo tests have been failed since r185417.
https://bugs.webkit.org/show_bug.cgi?id=145878

Reviewed by Gyuyoung Kim.

Fix input buffer alignment issue.

No new tests, canvas/philip/tests/toDataURL.jpeg.foo can be used.

* platform/graphics/efl/ImageBufferEfl.cpp:
(WebCore::encodeImagePNG):
(WebCore::encodeImageJPEG):
(WebCore::ImageBuffer::toDataURL):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (185505 => 185506)


--- trunk/Source/WebCore/ChangeLog	2015-06-12 16:33:37 UTC (rev 185505)
+++ trunk/Source/WebCore/ChangeLog	2015-06-12 16:45:15 UTC (rev 185506)
@@ -1,3 +1,19 @@
+2015-06-12  KwangHyuk Kim  <[email protected]>
+
+        [EFL] canvas/philip/tests/toDataURL.jpeg.foo tests have been failed since r185417.
+        https://bugs.webkit.org/show_bug.cgi?id=145878
+
+        Reviewed by Gyuyoung Kim.
+
+        Fix input buffer alignment issue.
+
+        No new tests, canvas/philip/tests/toDataURL.jpeg.foo can be used.
+
+        * platform/graphics/efl/ImageBufferEfl.cpp:
+        (WebCore::encodeImagePNG):
+        (WebCore::encodeImageJPEG):
+        (WebCore::ImageBuffer::toDataURL):
+
 2015-06-12  Zan Dobersek  <[email protected]>
 
         Add missing override specifiers under Source/WebCore/svg/

Modified: trunk/Source/WebCore/platform/graphics/efl/ImageBufferEfl.cpp (185505 => 185506)


--- trunk/Source/WebCore/platform/graphics/efl/ImageBufferEfl.cpp	2015-06-12 16:33:37 UTC (rev 185505)
+++ trunk/Source/WebCore/platform/graphics/efl/ImageBufferEfl.cpp	2015-06-12 16:45:15 UTC (rev 185506)
@@ -42,22 +42,14 @@
     return CAIRO_STATUS_SUCCESS;
 }
 
-static bool encodeImage(cairo_surface_t* image, const String& mimeType, Vector<char>* output, const double* quality)
+static bool encodeImagePNG(cairo_surface_t* image, Vector<char>* output)
 {
-    ASSERT_UNUSED(mimeType, mimeType == "image/png" || mimeType == "image/jpeg"); // Only PNG  and JPEG output are supported for now.
-    bool result = false;    
+    return cairo_surface_write_to_png_stream(image, writeFunction, output) == CAIRO_STATUS_SUCCESS;
+}
 
-    if (mimeType == "image/png")
-        result = cairo_surface_write_to_png_stream(image, writeFunction, output) == CAIRO_STATUS_SUCCESS;
-
-    if (mimeType == "image/jpeg") {
-        unsigned char* imageData = cairo_image_surface_get_data(image);
-        int width = cairo_image_surface_get_width(image);
-        int height = cairo_image_surface_get_height(image);
-        result = compressRGBABigEndianToJPEG(imageData, IntSize(width, height), *output, quality);
-    }
-
-    return result;
+static bool encodeImageJPEG(unsigned char* data, IntSize size, Vector<char>* output, const double* quality)
+{    
+    return compressRGBABigEndianToJPEG(data, size, *output, quality);
 }
 
 String ImageBuffer::toDataURL(const String& mimeType, const double* quality, CoordinateSystem) const
@@ -67,9 +59,27 @@
     cairo_surface_t* image = cairo_get_target(context()->platformContext()->cr());
 
     Vector<char> encodedImage;
-    if (!image || !encodeImage(image, mimeType, &encodedImage, quality))
+
+    if (!image)
         return "data:,";
 
+    if (mimeType == "image/png") {
+        if (!encodeImagePNG(image, &encodedImage))
+            return "data:,";
+    }
+
+    if (mimeType == "image/jpeg") {
+        int width = cairo_image_surface_get_width(image);
+        int height = cairo_image_surface_get_height(image);
+
+        IntSize size(width, height);
+        IntRect dataRect(IntPoint(), size);
+        RefPtr<Uint8ClampedArray> myData = getPremultipliedImageData(dataRect);
+
+        if (!encodeImageJPEG(myData->data(), size, &encodedImage, quality))
+            return "data:,";
+    }
+
     Vector<char> base64Data;
     base64Encode(encodedImage, base64Data);
 

Modified: trunk/Source/WebCore/platform/image-encoders/JPEGImageEncoder.cpp (185505 => 185506)


--- trunk/Source/WebCore/platform/image-encoders/JPEGImageEncoder.cpp	2015-06-12 16:33:37 UTC (rev 185505)
+++ trunk/Source/WebCore/platform/image-encoders/JPEGImageEncoder.cpp	2015-06-12 16:45:15 UTC (rev 185506)
@@ -104,10 +104,12 @@
     compressData.in_color_space = JCS_RGB;
     jpeg_set_defaults(&compressData);
     int compressionQuality = 65;
+
     if (quality && *quality >= 0.0 && *quality <= 1.0)
         compressionQuality = static_cast<int>(*quality * 100 + 0.5);
-    jpeg_set_quality(&compressData, compressionQuality, FALSE);
 
+    jpeg_set_quality(&compressData, compressionQuality, TRUE);
+
     // rowBuffer must be defined here so that its destructor is always called even when "setjmp" catches an error.
     Vector<JSAMPLE, 600 * 3> rowBuffer;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to