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:
Dillon Cower
2019-02-07 16:17:43 -08:00
committed by Commit Bot
parent 108f20fd45
commit 5963fddac2
2 changed files with 3 additions and 3 deletions

View File

@ -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

View File

@ -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);