Title: [276349] trunk/Source
Revision
276349
Author
[email protected]
Date
2021-04-21 00:33:00 -0700 (Wed, 21 Apr 2021)

Log Message

[ BigSur wk2 ARM64 ] http/wpt/webrtc/change-encoded-transform.html is a flakey crash
https://bugs.webkit.org/show_bug.cgi?id=224696
<rdar://problem/76780020>

Reviewed by Eric Carlson.

Source/ThirdParty/libwebrtc:

On stream recreation, the new delegate may have to process a transformed frame before receiving one from the encoder.
Check for encoder_queue to not be null in that case.

* Source/webrtc/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc:

Source/WebCore:

Sometimes the video sender delegate will be recreated on the fly.
In that case, it might receive a frame from the old delegate before processing an existing frame.
This makes the encoder queue being null.
To prevent this we update backends to only register once.

Covered by tests no longer crashing.

* Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.cpp:
(WebCore::LibWebRTCRtpReceiverTransformBackend::setTransformableFrameCallback):
* Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.h:
* Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.cpp:
(WebCore::LibWebRTCRtpSenderTransformBackend::setTransformableFrameCallback):
* Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.h:

Modified Paths

Diff

Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (276348 => 276349)


--- trunk/Source/ThirdParty/libwebrtc/ChangeLog	2021-04-21 07:21:40 UTC (rev 276348)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog	2021-04-21 07:33:00 UTC (rev 276349)
@@ -1,3 +1,16 @@
+2021-04-21  Youenn Fablet  <[email protected]>
+
+        [ BigSur wk2 ARM64 ] http/wpt/webrtc/change-encoded-transform.html is a flakey crash
+        https://bugs.webkit.org/show_bug.cgi?id=224696
+        <rdar://problem/76780020>
+
+        Reviewed by Eric Carlson.
+
+        On stream recreation, the new delegate may have to process a transformed frame before receiving one from the encoder.
+        Check for encoder_queue to not be null in that case.
+
+        * Source/webrtc/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc:
+
 2021-04-15  Philippe Normand  <[email protected]>
 
         [WebRTC][GStreamer] Build and use the openh264 based encoder if present on the system

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc (276348 => 276349)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc	2021-04-21 07:21:40 UTC (rev 276348)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc	2021-04-21 07:33:00 UTC (rev 276349)
@@ -133,6 +133,13 @@
   // alive, it's safe to post.
   if (!sender_)
     return;
+
+#if defined(WEBRTC_WEBKIT_BUILD)
+  // In case we recreate webrtc streams, the new delegate may be requested to process frames from the previous delegate.
+  if (!encoder_queue_)
+    return;
+#endif
+
   rtc::scoped_refptr<RTPSenderVideoFrameTransformerDelegate> delegate = this;
   encoder_queue_->PostTask(ToQueuedTask(
       [delegate = std::move(delegate), frame = std::move(frame)]() mutable {

Modified: trunk/Source/WebCore/ChangeLog (276348 => 276349)


--- trunk/Source/WebCore/ChangeLog	2021-04-21 07:21:40 UTC (rev 276348)
+++ trunk/Source/WebCore/ChangeLog	2021-04-21 07:33:00 UTC (rev 276349)
@@ -1,3 +1,25 @@
+2021-04-21  Youenn Fablet  <[email protected]>
+
+        [ BigSur wk2 ARM64 ] http/wpt/webrtc/change-encoded-transform.html is a flakey crash
+        https://bugs.webkit.org/show_bug.cgi?id=224696
+        <rdar://problem/76780020>
+
+        Reviewed by Eric Carlson.
+
+        Sometimes the video sender delegate will be recreated on the fly.
+        In that case, it might receive a frame from the old delegate before processing an existing frame.
+        This makes the encoder queue being null.
+        To prevent this we update backends to only register once.
+
+        Covered by tests no longer crashing.
+
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.cpp:
+        (WebCore::LibWebRTCRtpReceiverTransformBackend::setTransformableFrameCallback):
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.h:
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.cpp:
+        (WebCore::LibWebRTCRtpSenderTransformBackend::setTransformableFrameCallback):
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.h:
+
 2021-04-21  Wenson Hsieh  <[email protected]>
 
         [macOS] Avoid triggering image extraction for animated images

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.cpp (276348 => 276349)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.cpp	2021-04-21 07:21:40 UTC (rev 276348)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.cpp	2021-04-21 07:33:00 UTC (rev 276349)
@@ -49,6 +49,10 @@
 void LibWebRTCRtpReceiverTransformBackend::setTransformableFrameCallback(Callback&& callback)
 {
     setInputCallback(WTFMove(callback));
+    if (m_isRegistered)
+        return;
+
+    m_isRegistered = true;
     m_rtcReceiver->SetDepacketizerToDecoderFrameTransformer(this);
 }
 

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.h (276348 => 276349)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.h	2021-04-21 07:21:40 UTC (rev 276348)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverTransformBackend.h	2021-04-21 07:33:00 UTC (rev 276349)
@@ -55,6 +55,7 @@
     void setTransformableFrameCallback(Callback&&) final;
     void requestKeyFrame() final;
 
+    bool m_isRegistered { false };
     rtc::scoped_refptr<webrtc::RtpReceiverInterface> m_rtcReceiver;
 };
 

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.cpp (276348 => 276349)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.cpp	2021-04-21 07:21:40 UTC (rev 276348)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.cpp	2021-04-21 07:33:00 UTC (rev 276349)
@@ -49,6 +49,10 @@
 void LibWebRTCRtpSenderTransformBackend::setTransformableFrameCallback(Callback&& callback)
 {
     setInputCallback(WTFMove(callback));
+    if (m_isRegistered)
+        return;
+
+    m_isRegistered = true;
     m_rtcSender->SetEncoderToPacketizerFrameTransformer(this);
 }
 

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.h (276348 => 276349)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.h	2021-04-21 07:21:40 UTC (rev 276348)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.h	2021-04-21 07:33:00 UTC (rev 276349)
@@ -58,6 +58,7 @@
     void setTransformableFrameCallback(Callback&&) final;
     void requestKeyFrame() final;
 
+    bool m_isRegistered { false };
     rtc::scoped_refptr<webrtc::RtpSenderInterface> m_rtcSender;
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to