Title: [287617] branches/safari-612-branch/Source/ThirdParty/libwebrtc
Revision
287617
Author
repst...@apple.com
Date
2022-01-05 10:20:28 -0800 (Wed, 05 Jan 2022)

Log Message

Cherry-pick r283610. rdar://problem/83435926

    ObjectiveC WebRTC frame buffers are autoreleased late, especially on Debug builds
    https://bugs.webkit.org/show_bug.cgi?id=231162

    Reviewed by David Kilzer.

    Instead of waiting for the autorelease pool to release these objects, we explicitly release them by calling close.
    This ensures that pixel buffers get released very quickly.

    * Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
    * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h:
    * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm:
    * Source/webrtc/sdk/objc/base/RTCI420Buffer.h:
    * Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h:
    * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h:
    * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm:
    * Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm:

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

Modified Paths

Diff

Modified: branches/safari-612-branch/Source/ThirdParty/libwebrtc/ChangeLog (287616 => 287617)


--- branches/safari-612-branch/Source/ThirdParty/libwebrtc/ChangeLog	2022-01-05 18:10:55 UTC (rev 287616)
+++ branches/safari-612-branch/Source/ThirdParty/libwebrtc/ChangeLog	2022-01-05 18:20:28 UTC (rev 287617)
@@ -1,3 +1,46 @@
+2022-01-05  Russell Epstein  <repst...@apple.com>
+
+        Cherry-pick r283610. rdar://problem/83435926
+
+    ObjectiveC WebRTC frame buffers are autoreleased late, especially on Debug builds
+    https://bugs.webkit.org/show_bug.cgi?id=231162
+    
+    Reviewed by David Kilzer.
+    
+    Instead of waiting for the autorelease pool to release these objects, we explicitly release them by calling close.
+    This ensures that pixel buffers get released very quickly.
+    
+    * Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
+    * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h:
+    * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm:
+    * Source/webrtc/sdk/objc/base/RTCI420Buffer.h:
+    * Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h:
+    * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h:
+    * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm:
+    * Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm:
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283610 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-10-06  Youenn Fablet  <you...@apple.com>
+
+            ObjectiveC WebRTC frame buffers are autoreleased late, especially on Debug builds
+            https://bugs.webkit.org/show_bug.cgi?id=231162
+
+            Reviewed by David Kilzer.
+
+            Instead of waiting for the autorelease pool to release these objects, we explicitly release them by calling close.
+            This ensures that pixel buffers get released very quickly.
+
+            * Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
+            * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h:
+            * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm:
+            * Source/webrtc/sdk/objc/base/RTCI420Buffer.h:
+            * Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h:
+            * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h:
+            * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm:
+            * Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm:
+
 2021-10-26  Alan Coon  <alanc...@apple.com>
 
         Cherry-pick r284523. rdar://problem/83763291

Modified: branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm (287616 => 287617)


--- branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm	2022-01-05 18:10:55 UTC (rev 287616)
+++ branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm	2022-01-05 18:20:28 UTC (rev 287617)
@@ -370,7 +370,8 @@
     if (isKeyframeRequired)
         [rtcFrameTypes addObject:@(RTCFrameType(RTCFrameTypeVideoFrameKey))];
 
-    auto *videoFrame = [[RTCVideoFrame alloc] initWithBuffer:ToObjCVideoFrameBuffer(pixelBufferToFrame(pixelBuffer)) rotation:RTCVideoRotation(rotation) timeStampNs:timeStampNs];
+    auto videoFrameBuffer = pixelBufferToFrame(pixelBuffer);
+    auto *videoFrame = [[RTCVideoFrame alloc] initWithBuffer:ToObjCVideoFrameBuffer(videoFrameBuffer) rotation:RTCVideoRotation(rotation) timeStampNs:timeStampNs];
     videoFrame.timeStamp = timeStamp;
     auto *encoder = (__bridge WK_RTCLocalVideoH264H265Encoder *)(localEncoder);
     [encoder encode:videoFrame codecSpecificInfo:nil frameTypes:rtcFrameTypes];

Modified: branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h (287616 => 287617)


--- branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h	2022-01-05 18:10:55 UTC (rev 287616)
+++ branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h	2022-01-05 18:20:28 UTC (rev 287617)
@@ -23,6 +23,9 @@
 - (instancetype)initWithFrameBuffer:(rtc::scoped_refptr<webrtc::I420BufferInterface>)i420Buffer;
 - (rtc::scoped_refptr<webrtc::I420BufferInterface>)nativeI420Buffer;
 
+#if defined(WEBRTC_WEBKIT_BUILD)
+- (void)close;
+#endif
 @end
 
 NS_ASSUME_NONNULL_END

Modified: branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm (287616 => 287617)


--- branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm	2022-01-05 18:10:55 UTC (rev 287616)
+++ branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm	2022-01-05 18:20:28 UTC (rev 287617)
@@ -109,6 +109,12 @@
   return _i420Buffer;
 }
 
+#if defined(WEBRTC_WEBKIT_BUILD)
+- (void)close {
+  _i420Buffer = nullptr;
+}
+#endif
+
 #pragma mark - Debugging
 
 #if !defined(NDEBUG) && defined(WEBRTC_IOS)

Modified: branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h (287616 => 287617)


--- branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h	2022-01-05 18:10:55 UTC (rev 287616)
+++ branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h	2022-01-05 18:20:28 UTC (rev 287617)
@@ -25,6 +25,9 @@
 
 - (id<RTCI420Buffer>)toI420;
 
+#if defined(WEBRTC_WEBKIT_BUILD)
+- (void)close;
+#endif
 @end
 
 NS_ASSUME_NONNULL_END

Modified: branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h (287616 => 287617)


--- branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h	2022-01-05 18:10:55 UTC (rev 287616)
+++ branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h	2022-01-05 18:20:28 UTC (rev 287617)
@@ -48,6 +48,9 @@
 - (BOOL)cropAndScaleTo:(CVPixelBufferRef)outputPixelBuffer
         withTempBuffer:(nullable uint8_t *)tmpBuffer;
 
+#if defined(WEBRTC_WEBKIT_BUILD)
+- (void)close;
+#endif
 @end
 
 NS_ASSUME_NONNULL_END

Modified: branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm (287616 => 287617)


--- branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm	2022-01-05 18:10:55 UTC (rev 287616)
+++ branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm	2022-01-05 18:20:28 UTC (rev 287617)
@@ -345,4 +345,11 @@
   CVPixelBufferUnlockBaseAddress(outputPixelBuffer, 0);
 }
 
+#if defined(WEBRTC_WEBKIT_BUILD)
+- (void)close {
+    CVBufferRelease(_pixelBuffer);
+    _pixelBuffer = nil;
+}
+#endif
+
 @end

Modified: branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm (287616 => 287617)


--- branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm	2022-01-05 18:10:55 UTC (rev 287616)
+++ branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm	2022-01-05 18:20:28 UTC (rev 287617)
@@ -22,7 +22,11 @@
  public:
   explicit ObjCI420FrameBuffer(id<RTCI420Buffer> frame_buffer)
       : frame_buffer_(frame_buffer), width_(frame_buffer.width), height_(frame_buffer.height) {}
-  ~ObjCI420FrameBuffer() override {}
+  ~ObjCI420FrameBuffer() override {
+#if defined(WEBRTC_WEBKIT_BUILD)
+    [frame_buffer_ close];
+#endif
+  }
 
   int width() const override { return width_; }
 
@@ -51,7 +55,11 @@
 ObjCFrameBuffer::ObjCFrameBuffer(id<RTCVideoFrameBuffer> frame_buffer)
     : frame_buffer_(frame_buffer), width_(frame_buffer.width), height_(frame_buffer.height) {}
 
-ObjCFrameBuffer::~ObjCFrameBuffer() {}
+ObjCFrameBuffer::~ObjCFrameBuffer() {
+#if defined(WEBRTC_WEBKIT_BUILD)
+  [frame_buffer_ close];
+#endif
+}
 
 VideoFrameBuffer::Type ObjCFrameBuffer::type() const {
   return Type::kNative;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to