Title: [264062] trunk/Source/WebCore
Revision
264062
Author
[email protected]
Date
2020-07-08 01:03:29 -0700 (Wed, 08 Jul 2020)

Log Message

REGRESSION(r263836): [GStreamer] Debug ASSERT hits
https://bugs.webkit.org/show_bug.cgi?id=214047

Patch by Philippe Normand <[email protected]> on 2020-07-08
Reviewed by Xabier Rodriguez-Calvar.

Reduce the element dependency on RefPtr<MediaStreamTrackPrivate> which is not MT-safe. The
data we need from it are its ID and the contents required to build a GstTagList. So we now
create this tag-list upfront and keep track of the trackID as well.

* platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
(webkitMediaStreamSrcAddPad):
(ProbeData::ProbeData):
(webkitMediaStreamSrcPadProbeCb):
(webkitMediaStreamSrcSetupSrc):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (264061 => 264062)


--- trunk/Source/WebCore/ChangeLog	2020-07-08 07:06:33 UTC (rev 264061)
+++ trunk/Source/WebCore/ChangeLog	2020-07-08 08:03:29 UTC (rev 264062)
@@ -1,3 +1,20 @@
+2020-07-08  Philippe Normand  <[email protected]>
+
+        REGRESSION(r263836): [GStreamer] Debug ASSERT hits
+        https://bugs.webkit.org/show_bug.cgi?id=214047
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        Reduce the element dependency on RefPtr<MediaStreamTrackPrivate> which is not MT-safe. The
+        data we need from it are its ID and the contents required to build a GstTagList. So we now
+        create this tag-list upfront and keep track of the trackID as well.
+
+        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
+        (webkitMediaStreamSrcAddPad):
+        (ProbeData::ProbeData):
+        (webkitMediaStreamSrcPadProbeCb):
+        (webkitMediaStreamSrcSetupSrc):
+
 2020-07-07  Andy Estes  <[email protected]>
 
         [Apple Pay] Fix the build on Catalina internal SDKs

Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp (264061 => 264062)


--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp	2020-07-08 07:06:33 UTC (rev 264061)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp	2020-07-08 08:03:29 UTC (rev 264062)
@@ -429,7 +429,7 @@
     return result;
 }
 
-static void webkitMediaStreamSrcAddPad(WebKitMediaStreamSrc* self, GstPad* target, GstStaticPadTemplate* padTemplate, MediaStreamTrackPrivate* track)
+static void webkitMediaStreamSrcAddPad(WebKitMediaStreamSrc* self, GstPad* target, GstStaticPadTemplate* padTemplate, GRefPtr<GstTagList>&& tags)
 {
     GST_DEBUG_OBJECT(self, "%s Ghosting %" GST_PTR_FORMAT, gst_object_get_path_string(GST_OBJECT_CAST(self)), target);
 
@@ -443,20 +443,22 @@
     gst_flow_combiner_add_pad(self->priv->flowCombiner.get(), proxyPad.get());
     gst_pad_set_chain_function(proxyPad.get(), static_cast<GstPadChainFunction>(webkitMediaStreamSrcChain));
 
-    auto tags = mediaStreamTrackPrivateGetTags(track);
     gst_pad_push_event(target, gst_event_new_tag(tags.leakRef()));
 }
 
 struct ProbeData {
-    WTF_MAKE_STRUCT_FAST_ALLOCATED;
-    ProbeData(GstElement* element, GstStaticPadTemplate* padTemplate, RefPtr<MediaStreamTrackPrivate> track)
+    ProbeData(GstElement* element, GstStaticPadTemplate* padTemplate, GRefPtr<GstTagList>&& tags, const char* trackId)
         : element(element)
         , padTemplate(padTemplate)
-        , track(track) { }
+        , tags(WTFMove(tags))
+    {
+        this->trackId.reset(g_strdup(trackId));
+    }
 
     GRefPtr<GstElement> element;
     GstStaticPadTemplate* padTemplate;
-    RefPtr<MediaStreamTrackPrivate> track;
+    GRefPtr<GstTagList> tags;
+    GUniquePtr<char> trackId;
 };
 
 static GstPadProbeReturn webkitMediaStreamSrcPadProbeCb(GstPad* pad, GstPadProbeInfo* info, ProbeData* data)
@@ -469,16 +471,16 @@
     case GST_EVENT_STREAM_START: {
         const char* streamId;
         gst_event_parse_stream_start(event, &streamId);
-        if (!g_strcmp0(streamId, data->track->id().utf8().data())) {
+        if (!g_strcmp0(streamId, data->trackId.get())) {
             GST_INFO_OBJECT(pad, "Event has been sticked already");
             return GST_PAD_PROBE_REMOVE;
         }
 
-        auto* streamStart = gst_event_new_stream_start(data->track->id().utf8().data());
+        auto* streamStart = gst_event_new_stream_start(data->trackId.get());
         gst_event_set_group_id(streamStart, 1);
         gst_pad_push_event(pad, streamStart);
 
-        webkitMediaStreamSrcAddPad(self, pad, data->padTemplate, data->track.get());
+        webkitMediaStreamSrcAddPad(self, pad, data->padTemplate, WTFMove(data->tags));
         return GST_PAD_PROBE_REMOVE;
     }
     default:
@@ -494,14 +496,15 @@
     gst_bin_add(GST_BIN_CAST(self), element);
 
     auto pad = adoptGRef(gst_element_get_static_pad(element, "src"));
+    auto tags = mediaStreamTrackPrivateGetTags(track);
     if (!onlyTrack) {
-        auto* data = "" ProbeData(GST_ELEMENT_CAST(self), padTemplate, track);
+        auto* data = "" ProbeData(GST_ELEMENT_CAST(self), padTemplate, WTFMove(tags), track->id().utf8().data());
         gst_pad_add_probe(pad.get(), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, reinterpret_cast<GstPadProbeCallback>(webkitMediaStreamSrcPadProbeCb), data, [](gpointer data) {
             delete reinterpret_cast<ProbeData*>(data);
         });
     } else {
         gst_pad_set_active(pad.get(), TRUE);
-        webkitMediaStreamSrcAddPad(self, pad.get(), padTemplate, track);
+        webkitMediaStreamSrcAddPad(self, pad.get(), padTemplate, WTFMove(tags));
     }
 
     auto* priv = self->priv;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to