Changeset 261685 in webkit
- Timestamp:
- May 14, 2020 5:07:18 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r261678 r261685 1 2020-05-14 Philippe Normand <pnormand@igalia.com> 2 3 [GStreamer] webrtc/disable-encryption.html is a crashing flaky 4 https://bugs.webkit.org/show_bug.cgi?id=211166 5 6 Reviewed by Xabier Rodriguez-Calvar. 7 8 * platform/gtk/TestExpectations: Marking webrtc/disable-encryption.html as no longer flaky. 9 1 10 2020-05-13 Myles C. Maxfield <mmaxfield@apple.com> 2 11 -
trunk/LayoutTests/platform/gtk/TestExpectations
r261613 r261685 2902 2902 webkit.org/b/210541 imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/require-corp-load-from-cache-storage.https.html [ Failure Pass ] 2903 2903 2904 webkit.org/b/211166 webrtc/disable-encryption.html [ Crash Pass ]2905 2906 2904 webkit.org/b/211614 imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate.any.worker.html [ Failure Pass ] 2907 2905 -
trunk/Source/WebCore/ChangeLog
r261684 r261685 1 2020-05-14 Philippe Normand <pnormand@igalia.com> 2 3 [GStreamer] webrtc/disable-encryption.html is a crashing flaky 4 https://bugs.webkit.org/show_bug.cgi?id=211166 5 6 Reviewed by Xabier Rodriguez-Calvar. 7 8 Make sure the audio and video mediastream source elements are correctly removed and disposed 9 from their parent bin when resetting the track sources. Before this change there was a 10 possibility of disposing the elements while they were still in PLAYING state. 11 12 * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: 13 (WebCore::_WebKitMediaStreamSrc::SourceData::reset): 14 (WebCore::webkitMediaStreamSrcDispose): 15 (WebCore::webkitMediaStreamSrcRemoveTrackByType): 16 1 17 2020-05-14 Adrian Perez de Castro <aperez@igalia.com> 2 18 -
trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp
r261553 r261685 192 192 m_firstBufferPts = GST_CLOCK_TIME_NONE; 193 193 m_isVideo = isVideo; 194 195 if (!m_src) 196 return; 197 198 gst_element_set_locked_state(m_src.get(), true); 199 gst_element_set_state(m_src.get(), GST_STATE_NULL); 200 auto parent = adoptGRef(gst_object_get_parent(GST_OBJECT_CAST(m_src.get()))); 201 if (parent) 202 gst_bin_remove(GST_BIN_CAST(parent.get()), m_src.get()); 203 gst_element_set_locked_state(m_src.get(), false); 194 204 m_src = nullptr; 195 205 } … … 200 210 } 201 211 202 static void needDataC b(GstElement*, guint, WebKitMediaStreamSrc::SourceData *self)212 static void needDataCallback(WebKitMediaStreamSrc::SourceData* self, unsigned) 203 213 { 204 214 self->setEnoughData(false); 205 215 } 206 216 207 static void enoughDataC b(GstElement*, WebKitMediaStreamSrc::SourceData *self)217 static void enoughDataCallback(WebKitMediaStreamSrc::SourceData* self) 208 218 { 209 219 self->setEnoughData(true); 210 220 } 211 221 212 void setSrc(G stElement *src)222 void setSrc(GRefPtr<GstElement>&& src) 213 223 { 214 m_src = adoptGRef(GST_ELEMENT(g_object_ref_sink(src))); 215 if (GST_IS_APP_SRC(src)) { 216 g_object_set(src, "is-live", true, "format", GST_FORMAT_TIME, "emit-signals", TRUE, "min-percent", 100, nullptr); 217 g_signal_connect(src, "enough-data", G_CALLBACK(enoughDataCb), this); 218 g_signal_connect(src, "need-data", G_CALLBACK(needDataCb), this); 219 } 224 m_src = WTFMove(src); 225 if (!GST_IS_APP_SRC(m_src.get())) 226 return; 227 228 g_object_set(m_src.get(), "is-live", true, "format", GST_FORMAT_TIME, "emit-signals", true, "min-percent", 100, nullptr); 229 g_signal_connect_swapped(m_src.get(), "enough-data", G_CALLBACK(enoughDataCallback), this); 230 g_signal_connect_swapped(m_src.get(), "need-data", G_CALLBACK(needDataCallback), this); 220 231 } 221 232 … … 370 381 WebKitMediaStreamSrc* self = WEBKIT_MEDIA_STREAM_SRC(object); 371 382 372 if (self->audioSrc.isUsed()) { 373 gst_bin_remove(GST_BIN(self), self->audioSrc.src()); 374 self->audioSrc.reset(false); 375 } 376 377 if (self->videoSrc.isUsed()) { 378 gst_bin_remove(GST_BIN(self), self->videoSrc.src()); 379 self->videoSrc.reset(true); 380 } 383 self->audioSrc.reset(false); 384 self->videoSrc.reset(true); 381 385 } 382 386 … … 585 589 GstStaticPadTemplate* pad_template, bool onlyTrack) 586 590 { 587 data->setSrc(gst_element_factory_make("appsrc", nullptr)); 591 GRefPtr<GstElement> src = gst_element_factory_make("appsrc", nullptr); 592 data->setSrc(WTFMove(src)); 588 593 if (track->isCaptureTrack()) 589 594 g_object_set(data->src(), "do-timestamp", true, nullptr); … … 625 630 static void webkitMediaStreamSrcRemoveTrackByType(WebKitMediaStreamSrc* self, RealtimeMediaSource::Type trackType) 626 631 { 627 if (trackType == RealtimeMediaSource::Type::Audio) { 628 if (self->audioSrc.isUsed()) { 629 gst_element_set_state(self->audioSrc.src(), GST_STATE_NULL); 630 gst_bin_remove(GST_BIN(self), self->audioSrc.src()); 631 self->audioSrc.reset(false); 632 } 633 } else if (trackType == RealtimeMediaSource::Type::Video) { 634 if (self->videoSrc.isUsed()) { 635 gst_element_set_state(self->videoSrc.src(), GST_STATE_NULL); 636 gst_bin_remove(GST_BIN(self), self->videoSrc.src()); 637 self->videoSrc.reset(true); 638 } 639 } else 632 if (trackType == RealtimeMediaSource::Type::Audio) 633 self->audioSrc.reset(false); 634 else if (trackType == RealtimeMediaSource::Type::Video) 635 self->videoSrc.reset(true); 636 else 640 637 GST_INFO("Unsupported track type: %d", static_cast<int>(trackType)); 641 638 }
Note: See TracChangeset
for help on using the changeset viewer.