Diff
Modified: releases/WebKitGTK/webkit-2.32/LayoutTests/ChangeLog (276749 => 276750)
--- releases/WebKitGTK/webkit-2.32/LayoutTests/ChangeLog 2021-04-29 07:15:18 UTC (rev 276749)
+++ releases/WebKitGTK/webkit-2.32/LayoutTests/ChangeLog 2021-04-29 07:23:13 UTC (rev 276750)
@@ -1,3 +1,12 @@
+2021-04-02 Philippe Normand <[email protected]>
+
+ REGRESSION(r268176): [GStreamer] media/video-orientation-canvas.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=223850
+
+ Reviewed by Carlos Alberto Lopez Perez.
+
+ * platform/gtk/TestExpectations: Unflag now-passing test.
+
2021-04-12 Philippe Normand <[email protected]>
[MSE][GStreamer] Crash in WebCore::PlaybackPipeline::addSourceBuffer when setting duration and preload is set to none
Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog (276749 => 276750)
--- releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog 2021-04-29 07:15:18 UTC (rev 276749)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog 2021-04-29 07:23:13 UTC (rev 276750)
@@ -1,3 +1,22 @@
+2021-04-02 Philippe Normand <[email protected]>
+
+ REGRESSION(r268176): [GStreamer] media/video-orientation-canvas.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=223850
+
+ Reviewed by Carlos Alberto Lopez Perez.
+
+ The GL pipeline used by the player is now able to handle image rotation tags itself. Manual
+ handling of the image rotation tags is now performed only when the pipeline is not able to
+ do it by itself.
+
+ * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
+ (webKitGLVideoSinkConstructed):
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+ (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
+ (WebCore::getVideoOrientation):
+ (WebCore::MediaPlayerPrivateGStreamer::updateVideoSizeAndOrientationFromCaps):
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
+
2021-04-06 Philippe Normand <[email protected]>
[GStreamer][MediaStream] AudioSource triggering critical warnings
Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp (276749 => 276750)
--- releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp 2021-04-29 07:15:18 UTC (rev 276749)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp 2021-04-29 07:23:13 UTC (rev 276750)
@@ -81,9 +81,13 @@
GstElement* upload = gst_element_factory_make("glupload", nullptr);
GstElement* colorconvert = gst_element_factory_make("glcolorconvert", nullptr);
+ GstElement* videoFlip = gst_element_factory_make("glvideoflip", nullptr);
+ gst_util_set_object_arg(G_OBJECT(videoFlip), "method", "automatic");
+
ASSERT(upload);
ASSERT(colorconvert);
- gst_bin_add_many(GST_BIN_CAST(sink), upload, colorconvert, sink->priv->appSink.get(), nullptr);
+ ASSERT(videoFlip);
+ gst_bin_add_many(GST_BIN_CAST(sink), upload, colorconvert, videoFlip, sink->priv->appSink.get(), nullptr);
// Workaround until we can depend on GStreamer 1.16.2.
// https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/8d32de090554cf29fe359f83aa46000ba658a693
@@ -109,7 +113,7 @@
if (imxVideoConvertG2D)
gst_element_link(imxVideoConvertG2D, upload);
- gst_element_link_many(upload, colorconvert, sink->priv->appSink.get(), nullptr);
+ gst_element_link_many(upload, colorconvert, videoFlip, sink->priv->appSink.get(), nullptr);
GstElement* sinkElement =
[&] {
Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp (276749 => 276750)
--- releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 2021-04-29 07:15:18 UTC (rev 276749)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 2021-04-29 07:23:13 UTC (rev 276750)
@@ -2809,10 +2809,10 @@
// the image-orientation tag.
GstElement* videoFlip = gst_element_factory_make("videoflip", nullptr);
if (videoFlip) {
- g_object_set(videoFlip, "method", 8, nullptr);
+ gst_util_set_object_arg(G_OBJECT(videoFlip), "method", "automatic");
g_object_set(m_pipeline.get(), "video-filter", videoFlip, nullptr);
} else
- GST_WARNING("The videoflip element is missing, video rotation support is now disabled. Please check your gst-plugins-good installation.");
+ m_shouldHandleOrientationTags = true;
}
GRefPtr<GstPad> videoSinkPad = adoptGRef(gst_element_get_static_pad(m_videoSink.get(), "sink"));
@@ -2986,7 +2986,7 @@
GRefPtr<GstEvent> tagsEvent = adoptGRef(gst_pad_get_sticky_event(pad.get(), GST_EVENT_TAG, 0));
if (!tagsEvent) {
GST_DEBUG_OBJECT(pad.get(), "No sticky tag event, applying no rotation.");
- return ImageOrientation::OriginTopLeft;
+ return ImageOrientation::None;
}
GstTagList* tagList;
@@ -2995,18 +2995,27 @@
GUniqueOutPtr<gchar> tag;
if (!gst_tag_list_get_string(tagList, GST_TAG_IMAGE_ORIENTATION, &tag.outPtr())) {
GST_DEBUG_OBJECT(pad.get(), "No image_orientation tag, applying no rotation.");
- return ImageOrientation::OriginTopLeft;
+ return ImageOrientation::None;
}
GST_DEBUG_OBJECT(pad.get(), "Found image_orientation tag: %s", tag.get());
+ if (!g_strcmp0(tag.get(), "flip-rotate-0"))
+ return ImageOrientation::OriginTopRight;
+ if (!g_strcmp0(tag.get(), "rotate-180"))
+ return ImageOrientation::OriginBottomRight;
+ if (!g_strcmp0(tag.get(), "flip-rotate-180"))
+ return ImageOrientation::OriginBottomLeft;
+ if (!g_strcmp0(tag.get(), "flip-rotate-270"))
+ return ImageOrientation::OriginLeftTop;
if (!g_strcmp0(tag.get(), "rotate-90"))
return ImageOrientation::OriginRightTop;
- if (!g_strcmp0(tag.get(), "rotate-180"))
- return ImageOrientation::OriginBottomRight;
+ if (!g_strcmp0(tag.get(), "flip-rotate-90"))
+ return ImageOrientation::OriginRightBottom;
if (!g_strcmp0(tag.get(), "rotate-270"))
return ImageOrientation::OriginLeftBottom;
+
// Default rotation.
- return ImageOrientation::OriginTopLeft;
+ return ImageOrientation::None;
}
void MediaPlayerPrivateGStreamer::updateVideoSizeAndOrientationFromCaps(const GstCaps* caps)
@@ -3026,7 +3035,8 @@
return;
}
- setVideoSourceOrientation(getVideoOrientation(m_videoSink.get()));
+ if (m_shouldHandleOrientationTags)
+ setVideoSourceOrientation(getVideoOrientation(m_videoSink.get()));
#if USE(TEXTURE_MAPPER_GL)
// When using accelerated compositing, if the video is tagged as rotated 90 or 270 degrees, swap width and height.
Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h (276749 => 276750)
--- releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 2021-04-29 07:15:18 UTC (rev 276749)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 2021-04-29 07:23:13 UTC (rev 276750)
@@ -529,6 +529,9 @@
uint64_t m_totalVideoFrames { 0 };
uint64_t m_droppedVideoFrames { 0 };
+ // This is set to true if no videoflip element has been added to the pipeline.
+ bool m_shouldHandleOrientationTags { false };
+
private:
#if USE(WPE_VIDEO_PLANE_DISPLAY_DMABUF)
GUniquePtr<struct wpe_video_plane_display_dmabuf_source> m_wpeVideoPlaneDisplayDmaBuf;