Changeset 287617 in webkit
- Timestamp:
- Jan 5, 2022, 10:20:28 AM (5 years ago)
- Location:
- branches/safari-612-branch/Source/ThirdParty/libwebrtc
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
Source/webrtc/sdk/WebKit/WebKitEncoder.mm (modified) (1 diff)
-
Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h (modified) (1 diff)
-
Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm (modified) (1 diff)
-
Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h (modified) (1 diff)
-
Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h (modified) (1 diff)
-
Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm (modified) (1 diff)
-
Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-612-branch/Source/ThirdParty/libwebrtc/ChangeLog
r284951 r287617 1 2022-01-05 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r283610. rdar://problem/83435926 4 5 ObjectiveC WebRTC frame buffers are autoreleased late, especially on Debug builds 6 https://bugs.webkit.org/show_bug.cgi?id=231162 7 8 Reviewed by David Kilzer. 9 10 Instead of waiting for the autorelease pool to release these objects, we explicitly release them by calling close. 11 This ensures that pixel buffers get released very quickly. 12 13 * Source/webrtc/sdk/WebKit/WebKitEncoder.mm: 14 * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h: 15 * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm: 16 * Source/webrtc/sdk/objc/base/RTCI420Buffer.h: 17 * Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h: 18 * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h: 19 * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm: 20 * Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm: 21 22 23 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283610 268f45cc-cd09-0410-ab3c-d52691b4dbfc 24 25 2021-10-06 Youenn Fablet <youenn@apple.com> 26 27 ObjectiveC WebRTC frame buffers are autoreleased late, especially on Debug builds 28 https://bugs.webkit.org/show_bug.cgi?id=231162 29 30 Reviewed by David Kilzer. 31 32 Instead of waiting for the autorelease pool to release these objects, we explicitly release them by calling close. 33 This ensures that pixel buffers get released very quickly. 34 35 * Source/webrtc/sdk/WebKit/WebKitEncoder.mm: 36 * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h: 37 * Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm: 38 * Source/webrtc/sdk/objc/base/RTCI420Buffer.h: 39 * Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h: 40 * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h: 41 * Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm: 42 * Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm: 43 1 44 2021-10-26 Alan Coon <alancoon@apple.com> 2 45 -
branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm
r278701 r287617 371 371 [rtcFrameTypes addObject:@(RTCFrameType(RTCFrameTypeVideoFrameKey))]; 372 372 373 auto *videoFrame = [[RTCVideoFrame alloc] initWithBuffer:ToObjCVideoFrameBuffer(pixelBufferToFrame(pixelBuffer)) rotation:RTCVideoRotation(rotation) timeStampNs:timeStampNs]; 373 auto videoFrameBuffer = pixelBufferToFrame(pixelBuffer); 374 auto *videoFrame = [[RTCVideoFrame alloc] initWithBuffer:ToObjCVideoFrameBuffer(videoFrameBuffer) rotation:RTCVideoRotation(rotation) timeStampNs:timeStampNs]; 374 375 videoFrame.timeStamp = timeStamp; 375 376 auto *encoder = (__bridge WK_RTCLocalVideoH264H265Encoder *)(localEncoder); -
branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h
r237075 r287617 24 24 - (rtc::scoped_refptr<webrtc::I420BufferInterface>)nativeI420Buffer; 25 25 26 #if defined(WEBRTC_WEBKIT_BUILD) 27 - (void)close; 28 #endif 26 29 @end 27 30 -
branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm
r264517 r287617 110 110 } 111 111 112 #if defined(WEBRTC_WEBKIT_BUILD) 113 - (void)close { 114 _i420Buffer = nullptr; 115 } 116 #endif 117 112 118 #pragma mark - Debugging 113 119 -
branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrameBuffer.h
r252472 r287617 26 26 - (id<RTCI420Buffer>)toI420; 27 27 28 #if defined(WEBRTC_WEBKIT_BUILD) 29 - (void)close; 30 #endif 28 31 @end 29 32 -
branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h
r248077 r287617 49 49 withTempBuffer:(nullable uint8_t *)tmpBuffer; 50 50 51 #if defined(WEBRTC_WEBKIT_BUILD) 52 - (void)close; 53 #endif 51 54 @end 52 55 -
branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.mm
r237075 r287617 346 346 } 347 347 348 #if defined(WEBRTC_WEBKIT_BUILD) 349 - (void)close { 350 CVBufferRelease(_pixelBuffer); 351 _pixelBuffer = nil; 352 } 353 #endif 354 348 355 @end -
branches/safari-612-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/native/src/objc_frame_buffer.mm
r252472 r287617 23 23 explicit ObjCI420FrameBuffer(id<RTCI420Buffer> frame_buffer) 24 24 : frame_buffer_(frame_buffer), width_(frame_buffer.width), height_(frame_buffer.height) {} 25 ~ObjCI420FrameBuffer() override {} 25 ~ObjCI420FrameBuffer() override { 26 #if defined(WEBRTC_WEBKIT_BUILD) 27 [frame_buffer_ close]; 28 #endif 29 } 26 30 27 31 int width() const override { return width_; } … … 52 56 : frame_buffer_(frame_buffer), width_(frame_buffer.width), height_(frame_buffer.height) {} 53 57 54 ObjCFrameBuffer::~ObjCFrameBuffer() {} 58 ObjCFrameBuffer::~ObjCFrameBuffer() { 59 #if defined(WEBRTC_WEBKIT_BUILD) 60 [frame_buffer_ close]; 61 #endif 62 } 55 63 56 64 VideoFrameBuffer::Type ObjCFrameBuffer::type() const {
Note:
See TracChangeset
for help on using the changeset viewer.