From 589b41e743db232fabde3f24653c76db45d6cedf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1ri=20Tristan=20Helgason?= Date: Wed, 4 Mar 2020 13:45:38 +0100 Subject: [PATCH] Change ownership of encoded data buffer in H264 encoder. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: None Change-Id: I92b5acacf6bb3a81f8d67043674ea63b4898cbd9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169721 Commit-Queue: Kári Helgason Reviewed-by: Niels Moller Cr-Commit-Position: refs/heads/master@{#30680} --- .../components/video_codec/RTCVideoEncoderH264.mm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm b/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm index 6584c88c61..5b90922fca 100644 --- a/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm +++ b/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm @@ -782,9 +782,7 @@ NSUInteger GetMaxSampleRate(const webrtc::H264::ProfileLevelId &profile_level_id RTC_LOG(LS_INFO) << "Generated keyframe"; } - // Convert the sample buffer into a buffer suitable for RTP packetization. - // TODO(tkchin): Allocate buffers through a pool. - std::unique_ptr buffer(new rtc::Buffer()); + __block std::unique_ptr buffer = std::make_unique(); RTCRtpFragmentationHeader *header; { std::unique_ptr header_cpp; @@ -797,7 +795,12 @@ NSUInteger GetMaxSampleRate(const webrtc::H264::ProfileLevelId &profile_level_id } RTCEncodedImage *frame = [[RTCEncodedImage alloc] init]; - frame.buffer = [NSData dataWithBytesNoCopy:buffer->data() length:buffer->size() freeWhenDone:NO]; + // This assumes ownership of `buffer` and is responsible for freeing it when done. + frame.buffer = [[NSData alloc] initWithBytesNoCopy:buffer->data() + length:buffer->size() + deallocator:^(void *bytes, NSUInteger size) { + buffer.reset(); + }]; frame.encodedWidth = width; frame.encodedHeight = height; frame.completeFrame = YES;