WebKit Bugzilla
Attachment 342940 Details for
Bug 186678
: [GStreamer] Some media stream tests are crashing
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch.
GStreamer-Avoid-sending-SELECTSTREAM-events-when-n.patch (text/plain), 5.50 KB, created by
Thibault Saunier
on 2018-06-18 08:54:41 PDT
(
hide
)
Description:
Patch.
Filename:
MIME Type:
Creator:
Thibault Saunier
Created:
2018-06-18 08:54:41 PDT
Size:
5.50 KB
patch
obsolete
>From b0e07736aba1f94801efc874ab2bab322790fd63 Mon Sep 17 00:00:00 2001 >From: Thibault Saunier <tsaunier@igalia.com> >Date: Mon, 18 Jun 2018 10:34:50 -0400 >Subject: [PATCH xserver] [GStreamer] Avoid sending SELECT_STREAM events when > nothing changed > >https://bugs.webkit.org/show_bug.cgi?id=186678 >--- > Source/WebCore/ChangeLog | 22 ++++++++++++ > .../gstreamer/MediaPlayerPrivateGStreamer.cpp | 34 +++++++++++++++---- > 2 files changed, 49 insertions(+), 7 deletions(-) > >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index f84388bac66..950537b8ed1 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,25 @@ >+2018-06-18 Thibault Saunier <tsaunier@igalia.com> >+ >+ [GStreamer] Avoid sending SELECT_STREAM events when nothing changed >+ https://bugs.webkit.org/show_bug.cgi?id=186678 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This avoid extra work in decodebin3 and should work around a crash >+ in decodebin3 when we send spurious SELECT_STREAM in the mediastream >+ layout tests. >+ >+ GStreamer was also missing safe guards in the GstStream APIs which have been >+ added in gstreamer core in 8833ca942ea21c58c0f63822f0e2b61695b39447 >+ "stream: Add some missing API safe guards". >+ >+ Should fix following flaks: >+ * fast/mediastream/MediaStream-video-element-track-stop.html >+ * fast/mediastream/change-tracks-media-stream-being-played.html >+ >+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: >+ (WebCore::MediaPlayerPrivateGStreamer::enableTrack): >+ > 2018-06-18 Philippe Normand <pnormand@igalia.com> > > [GStreamer] Crash when adding in-band text track with playbin3 enabled >diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >index 9a0711e73dd..ca7dae3b500 100644 >--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >@@ -742,11 +742,27 @@ void MediaPlayerPrivateGStreamer::enableTrack(TrackPrivateBaseGStreamer::TrackTy > const char* propertyName; > const char* trackTypeAsString; > GList* selectedStreams = nullptr; >+ String selectedStreamId; >+ >+#if GST_CHECK_VERSION(1, 10, 0) >+ GstStream* stream = gst_stream_collection_get_stream(m_streamCollection.get(), index); >+ if (!stream) { >+ GST_WARNING_OBJECT(pipeline(), "No stream to select at index %u", index); >+ goto done; >+ } >+ selectedStreamId = String::fromUTF8(gst_stream_get_stream_id(stream)); >+ selectedStreams = g_list_append(selectedStreams, g_strdup(selectedStreamId.utf8().data())); >+#endif // GST_CHECK_VERSION(1,0,0) > > switch (trackType) { > case TrackPrivateBaseGStreamer::TrackType::Audio: > propertyName = "current-audio"; > trackTypeAsString = "audio"; >+ if (!selectedStreamId.isEmpty() && selectedStreamId == m_currentAudioStreamId) { >+ GST_INFO_OBJECT(pipeline(), "%s stream: %s already selected, not doing anything.", trackTypeAsString, selectedStreamId.utf8().data()); >+ goto done; >+ } >+ > if (!m_currentTextStreamId.isEmpty()) > selectedStreams = g_list_append(selectedStreams, g_strdup(m_currentTextStreamId.utf8().data())); > if (!m_currentVideoStreamId.isEmpty()) >@@ -755,12 +771,22 @@ void MediaPlayerPrivateGStreamer::enableTrack(TrackPrivateBaseGStreamer::TrackTy > case TrackPrivateBaseGStreamer::TrackType::Video: > propertyName = "current-video"; > trackTypeAsString = "video"; >+ if (!selectedStreamId.isEmpty() && selectedStreamId == m_currentVideoStreamId) { >+ GST_INFO_OBJECT(pipeline(), "%s stream: %s already selected, not doing anything.", trackTypeAsString, selectedStreamId.utf8().data()); >+ goto done; >+ } >+ > if (!m_currentAudioStreamId.isEmpty()) > selectedStreams = g_list_append(selectedStreams, g_strdup(m_currentAudioStreamId.utf8().data())); > if (!m_currentTextStreamId.isEmpty()) > selectedStreams = g_list_append(selectedStreams, g_strdup(m_currentTextStreamId.utf8().data())); > break; > case TrackPrivateBaseGStreamer::TrackType::Text: >+ if (!selectedStreamId.isEmpty() && selectedStreamId == m_currentTextStreamId) { >+ GST_INFO_OBJECT(pipeline(), "%s stream: %s already selected, not doing anything.", trackTypeAsString, selectedStreamId.utf8().data()); >+ goto done; >+ } >+ > propertyName = "current-text"; > trackTypeAsString = "text"; > if (!m_currentAudioStreamId.isEmpty()) >@@ -781,18 +807,12 @@ void MediaPlayerPrivateGStreamer::enableTrack(TrackPrivateBaseGStreamer::TrackTy > } > #if GST_CHECK_VERSION(1, 10, 0) > else { >- GstStream* stream = gst_stream_collection_get_stream(m_streamCollection.get(), index); >- if (stream) { >- String streamId = gst_stream_get_stream_id(stream); >- selectedStreams = g_list_append(selectedStreams, g_strdup(streamId.utf8().data())); >- } else >- GST_WARNING("%s stream %u not found", trackTypeAsString, index); >- > // TODO: MSE GstStream API support: https://bugs.webkit.org/show_bug.cgi?id=182531 > gst_element_send_event(m_pipeline.get(), gst_event_new_select_streams(selectedStreams)); > } > #endif > >+done: > if (selectedStreams) > g_list_free_full(selectedStreams, reinterpret_cast<GDestroyNotify>(g_free)); > } >-- >2.17.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186678
:
342940
|
342941
|
342970
|
343044
|
343328