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;