From 25fd4849d5a2c72c90733a1e5eb46d9b5acf1c69 Mon Sep 17 00:00:00 2001 From: Philippe Normand Date: Mon, 7 Nov 2022 03:12:44 -0800 Subject: [PATCH] [GStreamer][WebRTC] Minor cleanups in IncomingSourceGStreamer https://bugs.webkit.org/show_bug.cgi?id=247423 Reviewed by Xabier Rodriguez-Calvar. There is no need for a queue between the valve and the tee. Utility methods for opening/closing now un-needed were removed as well. * Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.cpp: (WebCore::RealtimeIncomingSourceGStreamer::RealtimeIncomingSourceGStreamer): (WebCore::RealtimeIncomingSourceGStreamer::startProducingData): (WebCore::RealtimeIncomingSourceGStreamer::stopProducingData): (WebCore::RealtimeIncomingSourceGStreamer::closeValve const): Deleted. (WebCore::RealtimeIncomingSourceGStreamer::openValve const): Deleted. * Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h: * Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.cpp: Canonical link: https://commits.webkit.org/256393@main --- .../RealtimeIncomingSourceGStreamer.cpp | 26 +++++-------------- .../RealtimeIncomingSourceGStreamer.h | 6 +---- .../RealtimeIncomingVideoSourceGStreamer.cpp | 2 +- 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.cpp b/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.cpp index b37e15e7ad3d..c2a3f865c2ff 100644 --- a/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.cpp +++ b/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.cpp @@ -39,10 +39,8 @@ RealtimeIncomingSourceGStreamer::RealtimeIncomingSourceGStreamer(const CaptureDe m_tee = gst_element_factory_make("tee", nullptr); g_object_set(m_tee.get(), "allow-not-linked", true, nullptr); - auto* queue = gst_element_factory_make("queue", nullptr); - gst_bin_add_many(GST_BIN_CAST(m_bin.get()), m_valve.get(), queue, m_tee.get(), nullptr); - - gst_element_link_many(m_valve.get(), queue, m_tee.get(), nullptr); + gst_bin_add_many(GST_BIN_CAST(m_bin.get()), m_valve.get(), m_tee.get(), nullptr); + gst_element_link(m_valve.get(), m_tee.get()); auto sinkPad = adoptGRef(gst_element_get_static_pad(m_valve.get(), "sink")); gst_element_add_pad(m_bin.get(), gst_ghost_pad_new("sink", sinkPad.get())); @@ -51,13 +49,15 @@ RealtimeIncomingSourceGStreamer::RealtimeIncomingSourceGStreamer(const CaptureDe void RealtimeIncomingSourceGStreamer::startProducingData() { GST_DEBUG_OBJECT(bin(), "Starting data flow"); - openValve(); + if (m_valve) + g_object_set(m_valve.get(), "drop", FALSE, nullptr); } void RealtimeIncomingSourceGStreamer::stopProducingData() { GST_DEBUG_OBJECT(bin(), "Stopping data flow"); - closeValve(); + if (m_valve) + g_object_set(m_valve.get(), "drop", TRUE, nullptr); } const RealtimeMediaSourceCapabilities& RealtimeIncomingSourceGStreamer::capabilities() @@ -65,20 +65,6 @@ const RealtimeMediaSourceCapabilities& RealtimeIncomingSourceGStreamer::capabili return RealtimeMediaSourceCapabilities::emptyCapabilities(); } -void RealtimeIncomingSourceGStreamer::closeValve() const -{ - GST_DEBUG_OBJECT(m_bin.get(), "Closing valve"); - if (m_valve) - g_object_set(m_valve.get(), "drop", true, nullptr); -} - -void RealtimeIncomingSourceGStreamer::openValve() const -{ - GST_DEBUG_OBJECT(m_bin.get(), "Opening valve"); - if (m_valve) - g_object_set(m_valve.get(), "drop", false, nullptr); -} - void RealtimeIncomingSourceGStreamer::registerClient() { GST_DEBUG_OBJECT(m_bin.get(), "Registering new client"); diff --git a/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h b/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h index ff6568dc3b15..82d9e35641a3 100644 --- a/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h +++ b/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h @@ -36,11 +36,6 @@ class RealtimeIncomingSourceGStreamer : public RealtimeMediaSource { protected: RealtimeIncomingSourceGStreamer(const CaptureDevice&); - void closeValve() const; - void openValve() const; - - GRefPtr m_valve; - private: // RealtimeMediaSource API void startProducingData() final; @@ -51,6 +46,7 @@ class RealtimeIncomingSourceGStreamer : public RealtimeMediaSource { void handleDownstreamEvent(GRefPtr&&); GRefPtr m_bin; + GRefPtr m_valve; GRefPtr m_tee; }; diff --git a/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.cpp b/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.cpp index 2178dfab116c..579ab92c2042 100644 --- a/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.cpp +++ b/Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.cpp @@ -45,7 +45,7 @@ RealtimeIncomingVideoSourceGStreamer::RealtimeIncomingVideoSourceGStreamer(AtomS m_currentSettings = RealtimeMediaSourceSettings { }; m_currentSettings->setSupportedConstraints(WTFMove(constraints)); - auto sinkPad = adoptGRef(gst_element_get_static_pad(m_valve.get(), "sink")); + auto sinkPad = adoptGRef(gst_element_get_static_pad(bin(), "sink")); gst_pad_add_probe(sinkPad.get(), static_cast(GST_PAD_PROBE_TYPE_BUFFER), [](GstPad*, GstPadProbeInfo* info, gpointer) -> GstPadProbeReturn { auto videoFrameTimeMetadata = std::make_optional({ }); videoFrameTimeMetadata->receiveTime = MonotonicTime::now().secondsSinceEpoch();