diff --git a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm index dda8aac80e..53a5c5c630 100644 --- a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm +++ b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm @@ -10,10 +10,41 @@ #import "RTCEncodedImage+Private.h" +#import + #include "rtc_base/numerics/safe_conversions.h" +// A simple wrapper around rtc::CopyOnWriteBuffer to make it usable with +// associated objects. +@interface RTCWrappedCOWBuffer : NSObject +@property(nonatomic) rtc::CopyOnWriteBuffer buffer; +- (instancetype)initWithCOWBuffer:(rtc::CopyOnWriteBuffer)buffer; +@end +@implementation RTCWrappedCOWBuffer +@synthesize buffer = _buffer; +- (instancetype)initWithCOWBuffer:(rtc::CopyOnWriteBuffer)buffer { + self = [super init]; + if (self) { + _buffer = buffer; + } + return self; +} +@end + @implementation RTCEncodedImage (Private) +- (rtc::CopyOnWriteBuffer)encodedData { + RTCWrappedCOWBuffer *wrappedBuffer = objc_getAssociatedObject(self, @selector(encodedData)); + return wrappedBuffer.buffer; +} + +- (void)setEncodedData:(rtc::CopyOnWriteBuffer)buffer { + return objc_setAssociatedObject(self, + @selector(encodedData), + [[RTCWrappedCOWBuffer alloc] initWithCOWBuffer:buffer], + OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + - (instancetype)initWithNativeEncodedImage:(const webrtc::EncodedImage &)encodedImage { if (self = [super init]) { // Wrap the buffer in NSData without copying, do not take ownership.