Title: [120964] trunk/Source/WebCore
Revision
120964
Author
[email protected]
Date
2012-06-21 14:23:56 -0700 (Thu, 21 Jun 2012)

Log Message

[Qt] REGRESSION(r120790): broke video rendering
https://bugs.webkit.org/show_bug.cgi?id=89619

Reviewed by Alexis Menard.

Invert the pixel components of the Image on little endian architectures.

* platform/graphics/gstreamer/ImageGStreamerQt.cpp:
(ImageGStreamer::ImageGStreamer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (120963 => 120964)


--- trunk/Source/WebCore/ChangeLog	2012-06-21 21:23:28 UTC (rev 120963)
+++ trunk/Source/WebCore/ChangeLog	2012-06-21 21:23:56 UTC (rev 120964)
@@ -1,3 +1,15 @@
+2012-06-21  Philippe Normand  <[email protected]>
+
+        [Qt] REGRESSION(r120790): broke video rendering
+        https://bugs.webkit.org/show_bug.cgi?id=89619
+
+        Reviewed by Alexis Menard.
+
+        Invert the pixel components of the Image on little endian architectures.
+
+        * platform/graphics/gstreamer/ImageGStreamerQt.cpp:
+        (ImageGStreamer::ImageGStreamer):
+
 2012-06-21  James Simonsen  <[email protected]>
 
         [Resource Timing] Implement Resource Timing interface

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp (120963 => 120964)


--- trunk/Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp	2012-06-21 21:23:28 UTC (rev 120963)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp	2012-06-21 21:23:56 UTC (rev 120964)
@@ -50,18 +50,32 @@
     uchar* bufferData = reinterpret_cast<uchar*>(GST_BUFFER_DATA(buffer));
 #endif
     QImage::Format imageFormat;
+    QImage::InvertMode invertMode;
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
-    imageFormat = (format == GST_VIDEO_FORMAT_BGRA) ? QImage::Format_RGB32 : QImage::Format_RGB888;
+    if (format == GST_VIDEO_FORMAT_BGRA) {
+        imageFormat = QImage::Format_ARGB32;
+        invertMode = QImage::InvertRgba;
+    } else {
+        imageFormat = QImage::Format_RGB32;
+        invertMode = QImage::InvertRgb;
+    }
 #else
-    imageFormat = (format == GST_VIDEO_FORMAT_ARGB) ? QImage::Format_ARGB32 : QImage::Format_RGB888;
+    imageFormat = (format == GST_VIDEO_FORMAT_ARGB) ? QImage::Format_ARGB32 : QImage::Format_RGB32;
 #endif
 
     QImage image(bufferData, size.width(), size.height(), imageFormat);
 
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    image.invertPixels(invertMode);
+#endif
+
     surface->convertFromImage(image);
     m_image = BitmapImage::create(surface);
 
 #ifdef GST_API_VERSION_1
+    if (GstVideoCropMeta* cropMeta = gst_buffer_get_video_crop_meta(buffer))
+        setCropRect(FloatRect(cropMeta->x, cropMeta->y, cropMeta->width, cropMeta->height));
+
     gst_buffer_unmap(buffer, &info);
 #endif
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to