diff --git a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm index f1df13e554..80fabd8ca6 100644 --- a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm +++ b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm @@ -51,9 +51,10 @@ - (instancetype)initWithNativeEncodedImage:(const webrtc::EncodedImage &)encodedImage { if (self = [super init]) { + self.encodedData = encodedImage.GetEncodedData(); // Wrap the buffer in NSData without copying, do not take ownership. - self.buffer = [NSData dataWithBytesNoCopy:encodedImage.mutable_data() - length:encodedImage.size() + self.buffer = [NSData dataWithBytesNoCopy:self.encodedData->data() + length:self.encodedData->size() freeWhenDone:NO]; self.encodedWidth = rtc::dchecked_cast(encodedImage._encodedWidth); self.encodedHeight = rtc::dchecked_cast(encodedImage._encodedHeight); @@ -77,8 +78,10 @@ - (webrtc::EncodedImage)nativeEncodedImage { // Return the pointer without copying. - webrtc::EncodedImage encodedImage( - (uint8_t *)self.buffer.bytes, (size_t)self.buffer.length, (size_t)self.buffer.length); + webrtc::EncodedImage encodedImage; + RTC_DCHECK_EQ(self.buffer.bytes, self.encodedData->data()); + encodedImage.SetEncodedData(self.encodedData); + encodedImage.set_size(self.buffer.length); encodedImage._encodedWidth = rtc::dchecked_cast(self.encodedWidth); encodedImage._encodedHeight = rtc::dchecked_cast(self.encodedHeight); encodedImage.SetTimestamp(self.timeStamp); diff --git a/sdk/objc/unittests/objc_video_decoder_factory_tests.mm b/sdk/objc/unittests/objc_video_decoder_factory_tests.mm index 2246eaaf5c..bd31a6eb0d 100644 --- a/sdk/objc/unittests/objc_video_decoder_factory_tests.mm +++ b/sdk/objc/unittests/objc_video_decoder_factory_tests.mm @@ -70,6 +70,7 @@ TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsOKOnSuccess) { std::unique_ptr decoder = GetObjCDecoder(CreateOKDecoderFactory()); webrtc::EncodedImage encoded_image; + encoded_image.SetEncodedData(webrtc::EncodedImageBuffer::Create()); EXPECT_EQ(decoder->Decode(encoded_image, false, 0), WEBRTC_VIDEO_CODEC_OK); } @@ -78,6 +79,7 @@ TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsErrorOnFail) { std::unique_ptr decoder = GetObjCDecoder(CreateErrorDecoderFactory()); webrtc::EncodedImage encoded_image; + encoded_image.SetEncodedData(webrtc::EncodedImageBuffer::Create()); EXPECT_EQ(decoder->Decode(encoded_image, false, 0), WEBRTC_VIDEO_CODEC_ERROR); }