[GStreamer][WebRTC] Do not try to handle framerate modulation in the encoder
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Nov 2018 14:23:24 +0000 (14:23 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Nov 2018 14:23:24 +0000 (14:23 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190683

Patch by Thibault Saunier <tsaunier@igalia.com> on 2018-11-06
Reviewed by Philippe Normand.

This has to already be handled in capturing pipeline or in libwebrtc itself.

No other encoder implementation do that, and libwebrtc is not happy with encoder that do not output the exact number of frames that have been passed in.

No regressions detected and libwebrtc is happier this way, less warning output and no more frame corruption in H264 streams found.

* platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
(WebCore::GStreamerVideoEncoder::InitEncode):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237860 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp

index 641c4fd..566e89c 100644 (file)
@@ -1,3 +1,19 @@
+2018-11-06  Thibault Saunier  <tsaunier@igalia.com>
+
+        [GStreamer][WebRTC] Do not try to handle framerate modulation in the encoder
+        https://bugs.webkit.org/show_bug.cgi?id=190683
+
+        Reviewed by Philippe Normand.
+
+        This has to already be handled in capturing pipeline or in libwebrtc itself.
+
+        No other encoder implementation do that, and libwebrtc is not happy with encoder that do not output the exact number of frames that have been passed in.
+
+        No regressions detected and libwebrtc is happier this way, less warning output and no more frame corruption in H264 streams found.
+
+        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
+        (WebCore::GStreamerVideoEncoder::InitEncode):
+
 2018-11-06  Frederic Wang  <fwang@igalia.com>
 
         Unreviewed, follow-up of previous commit.
index 7d76ed3..2cadf24 100644 (file)
@@ -83,7 +83,6 @@ public:
             newBitrate, frameRate);
 
         auto caps = adoptGRef(gst_caps_copy(m_restrictionCaps.get()));
-        gst_caps_set_simple(caps.get(), "framerate", GST_TYPE_FRACTION, frameRate, 1, nullptr);
 
         SetRestrictionCaps(WTFMove(caps));
 
@@ -136,7 +135,6 @@ public:
         g_object_set(m_src, "is-live", true, "format", GST_FORMAT_TIME, nullptr);
 
         auto videoconvert = makeElement("videoconvert");
-        auto videorate = makeElement("videorate");
         auto sink = makeElement("appsink");
         gst_app_sink_set_emit_signals(GST_APP_SINK(sink), TRUE);
         g_signal_connect(sink, "new-sample", G_CALLBACK(newSampleCallbackTramp), this);
@@ -146,8 +144,8 @@ public:
         if (m_restrictionCaps)
             g_object_set(m_capsFilter, "caps", m_restrictionCaps.get(), nullptr);
 
-        gst_bin_add_many(GST_BIN(m_pipeline.get()), m_src, videorate, videoconvert, m_capsFilter, encoder.leakRef(), sink, nullptr);
-        if (!gst_element_link_many(m_src, videorate, videoconvert, m_capsFilter, m_encoder, sink, nullptr))
+        gst_bin_add_many(GST_BIN(m_pipeline.get()), m_src, videoconvert, m_capsFilter, encoder.leakRef(), sink, nullptr);
+        if (!gst_element_link_many(m_src, videoconvert, m_capsFilter, m_encoder, sink, nullptr))
             ASSERT_NOT_REACHED();
 
         gst_element_set_state(m_pipeline.get(), GST_STATE_PLAYING);