Skip to content

Commit f5afad2

Browse files
emutavchieocanha
authored andcommitted
[GStreamer][Broadcom] fix incorrect casting of GstGhostPad to GstElement
https://bugs.webkit.org/show_bug.cgi?id=305788 Reviewed by Xabier Rodriguez-Calvar. The problem is observed when brcm audio/video filters are plugged into the "inner-parser" in WebKitThunderParser. GStreamerQuirkBroadcomBase::setupBufferingPercentageCorrection() tries and fails to cast GstGhostPad to GstElement. The gst_pad_get_parent_element() method fits better for the use case. Also, this change disables the correction of buffering percentage for MSE and MediaStream playbacks, since it only makes sense for regular playback. Original author: Eugene Mutavchi <Ievgen_Mutavchi@comcast.com> * Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Only do buffering percentage correction on regular playback (not MediaStream, not MSE). * Source/WebCore/platform/gstreamer/GStreamerQuirkBroadcomBase.cpp: (WebCore::GStreamerQuirkBroadcomBase::setupBufferingPercentageCorrection const): Use gst_pad_get_parent_element() instead of gst_pad_get_parent(), since it's more robust against the case when the parent isn't a GstElement. Canonical link: https://commits.webkit.org/305877@main
1 parent 6dc7dda commit f5afad2

2 files changed

Lines changed: 3 additions & 3 deletions

File tree

Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2166,7 +2166,7 @@ void MediaPlayerPrivateGStreamer::handleMessage(GstMessage* message)
21662166
}
21672167
}
21682168

2169-
if (quirksManager.isEnabled() && quirksManager.needsBufferingPercentageCorrection())
2169+
if (quirksManager.isEnabled() && quirksManager.needsBufferingPercentageCorrection() && !isMediaSource() && !isMediaStreamPlayer())
21702170
quirksManager.setupBufferingPercentageCorrection(this, currentState, newState, GRefPtr<GstElement>(GST_ELEMENT(GST_MESSAGE_SRC(message))));
21712171

21722172
if (!messageSourceIsPlaybin || m_isDelayingLoad)

Source/WebCore/platform/gstreamer/GStreamerQuirkBroadcomBase.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ void GStreamerQuirkBroadcomBase::setupBufferingPercentageCorrection(MediaPlayerP
141141
GRefPtr<GstPad> peerSrcPad = adoptGRef(gst_pad_get_peer(sinkPad));
142142
if (!peerSrcPad)
143143
continue; // And end the loop, because there's only one srcpad.
144-
GRefPtr<GstElement> peerElement = adoptGRef(GST_ELEMENT(gst_pad_get_parent(peerSrcPad.get())));
144+
GRefPtr<GstElement> peerElement = adoptGRef(gst_pad_get_parent_element(peerSrcPad.get()));
145145

146146
// If it's NOT a multiqueue, it's probably a parser like aacparse. We try to traverse before it.
147147
if (peerElement && g_strcmp0(G_OBJECT_TYPE_NAME(element.get()), "GstMultiQueue")) {
@@ -150,7 +150,7 @@ void GStreamerQuirkBroadcomBase::setupBufferingPercentageCorrection(MediaPlayerP
150150
if (!peerSrcPad)
151151
continue; // And end the loop.
152152
// Now we hopefully have peerElement pointing to the multiqueue.
153-
peerElement = adoptGRef(GST_ELEMENT(gst_pad_get_parent(peerSrcPad.get())));
153+
peerElement = adoptGRef(gst_pad_get_parent_element(peerSrcPad.get()));
154154
break;
155155
}
156156
}

0 commit comments

Comments
 (0)