From 03e85d2b3bd38bfea02560661cf947e058f9d361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1ri=20Tristan=20Helgason?= Date: Thu, 25 Apr 2019 08:57:41 +0200 Subject: [PATCH] Add property to RTCEncodedImage to own underlying EncodedImage. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: None Change-Id: Ic07b880c3a29789e2e74cb311267c05eb776a38a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/134104 Commit-Queue: Kári Helgason Reviewed-by: Anders Carlsson Cr-Commit-Position: refs/heads/master@{#27753} --- .../peerconnection/RTCEncodedImage+Private.mm | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) 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.