Pass-by-reference instead of value to initWithNativeEncodedImage
Previously, the use of pass-by-value caused an issue in ObjCVideoDecoder::Decode, where the EncodedImage was being copied upon calling initWithNativeEncodedImage, which then created an NSData using the copy's pointer; then the copy was destroyed, invalidating that pointer. Bug: webrtc:9378 Change-Id: Iac28b890c9902108ffc5ec54a607a99034159153 Reviewed-on: https://webrtc-review.googlesource.com/c/121922 Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Commit-Queue: Rasmus Brandt <brandtr@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26598}
This commit is contained in:
@ -17,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/* Interfaces for converting to/from internal C++ formats. */
|
||||
@interface RTCEncodedImage (Private)
|
||||
|
||||
- (instancetype)initWithNativeEncodedImage:(webrtc::EncodedImage)encodedImage;
|
||||
- (instancetype)initWithNativeEncodedImage:(const webrtc::EncodedImage &)encodedImage;
|
||||
- (webrtc::EncodedImage)nativeEncodedImage;
|
||||
|
||||
@end
|
||||
|
@ -14,10 +14,10 @@
|
||||
|
||||
@implementation RTCEncodedImage (Private)
|
||||
|
||||
- (instancetype)initWithNativeEncodedImage:(webrtc::EncodedImage)encodedImage {
|
||||
- (instancetype)initWithNativeEncodedImage:(const webrtc::EncodedImage &)encodedImage {
|
||||
if (self = [super init]) {
|
||||
// Wrap the buffer in NSData without copying, do not take ownership.
|
||||
self.buffer = [NSData dataWithBytesNoCopy:encodedImage.data()
|
||||
self.buffer = [NSData dataWithBytesNoCopy:encodedImage.mutable_data()
|
||||
length:encodedImage.size()
|
||||
freeWhenDone:NO];
|
||||
self.encodedWidth = rtc::dchecked_cast<int32_t>(encodedImage._encodedWidth);
|
||||
|
Reference in New Issue
Block a user