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;