Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Side by Side Diff: webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodecH264.mm

Issue 2989803002: ObjC style fix for injectable video codecs (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2017 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 18 matching lines...) Expand all
29 29
30 bool IsHighProfileEnabled() { 30 bool IsHighProfileEnabled() {
31 return webrtc::field_trial::IsEnabled(kHighProfileExperiment); 31 return webrtc::field_trial::IsEnabled(kHighProfileExperiment);
32 } 32 }
33 33
34 // H264 specific settings. 34 // H264 specific settings.
35 @implementation RTCCodecSpecificInfoH264 35 @implementation RTCCodecSpecificInfoH264
36 36
37 @synthesize packetizationMode = _packetizationMode; 37 @synthesize packetizationMode = _packetizationMode;
38 38
39 - (webrtc::CodecSpecificInfo)toCpp { 39 - (webrtc::CodecSpecificInfo)nativeCodecSpecificInfo {
40 webrtc::CodecSpecificInfo codecSpecificInfo; 40 webrtc::CodecSpecificInfo codecSpecificInfo;
41 codecSpecificInfo.codecType = webrtc::kVideoCodecH264; 41 codecSpecificInfo.codecType = webrtc::kVideoCodecH264;
42 codecSpecificInfo.codec_name = "H264"; 42 codecSpecificInfo.codec_name = "H264";
43 codecSpecificInfo.codecSpecific.H264.packetization_mode = 43 codecSpecificInfo.codecSpecific.H264.packetization_mode =
44 (webrtc::H264PacketizationMode)_packetizationMode; 44 (webrtc::H264PacketizationMode)_packetizationMode;
45 45
46 return codecSpecificInfo; 46 return codecSpecificInfo;
47 } 47 }
48 48
49 @end 49 @end
50 50
51 namespace { 51 namespace {
52 52
53 class H264VideoToolboxEncodeCompleteCallback : public webrtc::EncodedImageCallba ck { 53 class H264VideoToolboxEncodeCompleteCallback : public webrtc::EncodedImageCallba ck {
54 public: 54 public:
55 Result OnEncodedImage(const webrtc::EncodedImage &encoded_image, 55 Result OnEncodedImage(const webrtc::EncodedImage &encoded_image,
56 const webrtc::CodecSpecificInfo *codec_specific_info, 56 const webrtc::CodecSpecificInfo *codec_specific_info,
57 const webrtc::RTPFragmentationHeader *fragmentation) { 57 const webrtc::RTPFragmentationHeader *fragmentation) {
58 RTCEncodedImage *image = [[RTCEncodedImage alloc] initWithNativeEncodedImage :encoded_image]; 58 RTCEncodedImage *image = [[RTCEncodedImage alloc] initWithNativeEncodedImage :encoded_image];
59 59
60 RTCCodecSpecificInfoH264 *info = [[RTCCodecSpecificInfoH264 alloc] init]; 60 RTCCodecSpecificInfoH264 *info = [[RTCCodecSpecificInfoH264 alloc] init];
61 info.packetizationMode = 61 info.packetizationMode =
62 (RTCH264PacketizationMode)codec_specific_info->codecSpecific.H264.packet ization_mode; 62 (RTCH264PacketizationMode)codec_specific_info->codecSpecific.H264.packet ization_mode;
63 63
64 RTCRtpFragmentationHeader *header = 64 RTCRtpFragmentationHeader *header =
65 [[RTCRtpFragmentationHeader alloc] initWithFragmentationHeader:fragmenta tion]; 65 [[RTCRtpFragmentationHeader alloc] initWithNativeFragmentationHeader:fra gmentation];
66 66
67 callback(image, info, header); 67 callback(image, info, header);
68 return Result(Result::OK, 0); 68 return Result(Result::OK, 0);
69 } 69 }
70 70
71 RTCVideoEncoderCallback callback; 71 RTCVideoEncoderCallback callback;
72 }; 72 };
73 73
74 class H264VideoToolboxDecodeCompleteCallback : public webrtc::DecodedImageCallba ck { 74 class H264VideoToolboxDecodeCompleteCallback : public webrtc::DecodedImageCallba ck {
75 public: 75 public:
(...skipping 22 matching lines...) Expand all
98 } // namespace 98 } // namespace
99 99
100 // Encoder. 100 // Encoder.
101 @implementation RTCVideoEncoderH264 { 101 @implementation RTCVideoEncoderH264 {
102 webrtc::H264VideoToolboxEncoder *_videoToolboxEncoder; 102 webrtc::H264VideoToolboxEncoder *_videoToolboxEncoder;
103 H264VideoToolboxEncodeCompleteCallback *_toolboxCallback; 103 H264VideoToolboxEncodeCompleteCallback *_toolboxCallback;
104 } 104 }
105 105
106 - (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo { 106 - (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo {
107 if (self = [super init]) { 107 if (self = [super init]) {
108 cricket::VideoCodec codec = [codecInfo toCpp]; 108 cricket::VideoCodec codec = [codecInfo nativeVideoCodec];
109 _videoToolboxEncoder = new webrtc::H264VideoToolboxEncoder(codec); 109 _videoToolboxEncoder = new webrtc::H264VideoToolboxEncoder(codec);
110 } 110 }
111 return self; 111 return self;
112 } 112 }
113 113
114 - (void)setCallback:(RTCVideoEncoderCallback)callback { 114 - (void)setCallback:(RTCVideoEncoderCallback)callback {
115 if (!_toolboxCallback) _toolboxCallback = new H264VideoToolboxEncodeCompleteCa llback(); 115 if (!_toolboxCallback) _toolboxCallback = new H264VideoToolboxEncodeCompleteCa llback();
116 _toolboxCallback->callback = callback; 116 _toolboxCallback->callback = callback;
117 _videoToolboxEncoder->RegisterEncodeCompleteCallback(_toolboxCallback); 117 _videoToolboxEncoder->RegisterEncodeCompleteCallback(_toolboxCallback);
118 } 118 }
119 119
120 - (void)destroy { 120 - (void)destroy {
121 delete _videoToolboxEncoder; 121 delete _videoToolboxEncoder;
122 _videoToolboxEncoder = nullptr; 122 _videoToolboxEncoder = nullptr;
123 delete _toolboxCallback; 123 delete _toolboxCallback;
124 _toolboxCallback = nullptr; 124 _toolboxCallback = nullptr;
125 } 125 }
126 126
127 -(void)dealloc { 127 -(void)dealloc {
128 // Make sure C++ objects have been properly cleaned up before this 128 // Make sure C++ objects have been properly cleaned up before this
129 // is dealloc'd. 129 // is dealloc'd.
130 RTC_DCHECK(!_videoToolboxEncoder); 130 RTC_DCHECK(!_videoToolboxEncoder);
131 RTC_DCHECK(!_toolboxCallback); 131 RTC_DCHECK(!_toolboxCallback);
132 } 132 }
133 133
134 - (NSInteger)startEncodeWithSettings:(RTCVideoEncoderSettings *)settings 134 - (NSInteger)startEncodeWithSettings:(RTCVideoEncoderSettings *)settings
135 numberOfCores:(int)numberOfCores { 135 numberOfCores:(int)numberOfCores {
136 std::unique_ptr<webrtc::VideoCodec> codecSettings = [settings toCpp]; 136 std::unique_ptr<webrtc::VideoCodec> codecSettings = [settings createNativeVide oEncoderSettings];
137 return _videoToolboxEncoder->InitEncode( 137 return _videoToolboxEncoder->InitEncode(
138 codecSettings.release(), numberOfCores, kDefaultPayloadSize); 138 codecSettings.release(), numberOfCores, kDefaultPayloadSize);
139 } 139 }
140 140
141 - (NSInteger)releaseEncoder { 141 - (NSInteger)releaseEncoder {
142 return _videoToolboxEncoder->Release(); 142 return _videoToolboxEncoder->Release();
143 } 143 }
144 144
145 - (NSInteger)encode:(RTCVideoFrame *)frame 145 - (NSInteger)encode:(RTCVideoFrame *)frame
146 codecSpecificInfo:(id<RTCCodecSpecificInfo>)info 146 codecSpecificInfo:(id<RTCCodecSpecificInfo>)info
147 frameTypes:(NSArray<NSNumber *> *)frameTypes { 147 frameTypes:(NSArray<NSNumber *> *)frameTypes {
148 rtc::scoped_refptr<webrtc::VideoFrameBuffer> frameBuffer = 148 rtc::scoped_refptr<webrtc::VideoFrameBuffer> frameBuffer =
149 new rtc::RefCountedObject<webrtc::ObjCFrameBuffer>(frame.buffer); 149 new rtc::RefCountedObject<webrtc::ObjCFrameBuffer>(frame.buffer);
150 webrtc::VideoFrame videoFrame(frameBuffer, 150 webrtc::VideoFrame videoFrame(frameBuffer,
151 (webrtc::VideoRotation)frame.rotation, 151 (webrtc::VideoRotation)frame.rotation,
152 frame.timeStampNs / rtc::kNumNanosecsPerMicrosec ); 152 frame.timeStampNs / rtc::kNumNanosecsPerMicrosec );
153 videoFrame.set_timestamp(frame.timeStamp); 153 videoFrame.set_timestamp(frame.timeStamp);
154 154
155 // Handle types than can be converted into one of webrtc::CodecSpecificInfo's hard coded cases. 155 // Handle types than can be converted into one of webrtc::CodecSpecificInfo's hard coded cases.
156 webrtc::CodecSpecificInfo codecSpecificInfo; 156 webrtc::CodecSpecificInfo codecSpecificInfo;
157 if ([info isKindOfClass:[RTCCodecSpecificInfoH264 class]]) { 157 if ([info isKindOfClass:[RTCCodecSpecificInfoH264 class]]) {
158 codecSpecificInfo = [(RTCCodecSpecificInfoH264 *)info toCpp]; 158 codecSpecificInfo = [(RTCCodecSpecificInfoH264 *)info nativeCodecSpecificInf o];
159 } 159 }
160 160
161 std::vector<webrtc::FrameType> nativeFrameTypes; 161 std::vector<webrtc::FrameType> nativeFrameTypes;
162 for (NSNumber *frameType in frameTypes) { 162 for (NSNumber *frameType in frameTypes) {
163 RTCFrameType rtcFrameType = (RTCFrameType)frameType.unsignedIntegerValue; 163 RTCFrameType rtcFrameType = (RTCFrameType)frameType.unsignedIntegerValue;
164 nativeFrameTypes.push_back((webrtc::FrameType)rtcFrameType); 164 nativeFrameTypes.push_back((webrtc::FrameType)rtcFrameType);
165 } 165 }
166 166
167 return _videoToolboxEncoder->Encode(videoFrame, &codecSpecificInfo, &nativeFra meTypes); 167 return _videoToolboxEncoder->Encode(videoFrame, &codecSpecificInfo, &nativeFra meTypes);
168 } 168 }
(...skipping 13 matching lines...) Expand all
182 - (instancetype)init { 182 - (instancetype)init {
183 if (self = [super init]) { 183 if (self = [super init]) {
184 cricket::VideoCodec codec(cricket::kH264CodecName); 184 cricket::VideoCodec codec(cricket::kH264CodecName);
185 _videoToolboxDecoder = new webrtc::H264VideoToolboxDecoder(); 185 _videoToolboxDecoder = new webrtc::H264VideoToolboxDecoder();
186 } 186 }
187 return self; 187 return self;
188 } 188 }
189 189
190 - (NSInteger)startDecodeWithSettings:(RTCVideoEncoderSettings *)settings 190 - (NSInteger)startDecodeWithSettings:(RTCVideoEncoderSettings *)settings
191 numberOfCores:(int)numberOfCores { 191 numberOfCores:(int)numberOfCores {
192 std::unique_ptr<webrtc::VideoCodec> codecSettings = [settings toCpp]; 192 std::unique_ptr<webrtc::VideoCodec> codecSettings = [settings createNativeVide oEncoderSettings];
193 return _videoToolboxDecoder->InitDecode(codecSettings.release(), numberOfCores ); 193 return _videoToolboxDecoder->InitDecode(codecSettings.release(), numberOfCores );
194 } 194 }
195 195
196 - (void)setCallback:(RTCVideoDecoderCallback)callback { 196 - (void)setCallback:(RTCVideoDecoderCallback)callback {
197 if (!_toolboxCallback) _toolboxCallback = new H264VideoToolboxDecodeCompleteCa llback(); 197 if (!_toolboxCallback) _toolboxCallback = new H264VideoToolboxDecodeCompleteCa llback();
198 _toolboxCallback->callback = callback; 198 _toolboxCallback->callback = callback;
199 _videoToolboxDecoder->RegisterDecodeCompleteCallback(_toolboxCallback); 199 _videoToolboxDecoder->RegisterDecodeCompleteCallback(_toolboxCallback);
200 } 200 }
201 201
202 - (NSInteger)releaseDecoder { 202 - (NSInteger)releaseDecoder {
(...skipping 12 matching lines...) Expand all
215 // is dealloc'd. 215 // is dealloc'd.
216 RTC_DCHECK(!_videoToolboxDecoder); 216 RTC_DCHECK(!_videoToolboxDecoder);
217 RTC_DCHECK(!_toolboxCallback); 217 RTC_DCHECK(!_toolboxCallback);
218 } 218 }
219 219
220 - (NSInteger)decode:(RTCEncodedImage *)encodedImage 220 - (NSInteger)decode:(RTCEncodedImage *)encodedImage
221 missingFrames:(BOOL)missingFrames 221 missingFrames:(BOOL)missingFrames
222 fragmentationHeader:(RTCRtpFragmentationHeader *)fragmentationHeader 222 fragmentationHeader:(RTCRtpFragmentationHeader *)fragmentationHeader
223 codecSpecificInfo:(__nullable id<RTCCodecSpecificInfo>)info 223 codecSpecificInfo:(__nullable id<RTCCodecSpecificInfo>)info
224 renderTimeMs:(int64_t)renderTimeMs { 224 renderTimeMs:(int64_t)renderTimeMs {
225 webrtc::EncodedImage image = [encodedImage toCpp]; 225 webrtc::EncodedImage image = [encodedImage nativeEncodedImage];
226 226
227 // Handle types than can be converted into one of webrtc::CodecSpecificInfo's hard coded cases. 227 // Handle types than can be converted into one of webrtc::CodecSpecificInfo's hard coded cases.
228 webrtc::CodecSpecificInfo codecSpecificInfo; 228 webrtc::CodecSpecificInfo codecSpecificInfo;
229 if ([info isKindOfClass:[RTCCodecSpecificInfoH264 class]]) { 229 if ([info isKindOfClass:[RTCCodecSpecificInfoH264 class]]) {
230 codecSpecificInfo = [(RTCCodecSpecificInfoH264 *)info toCpp]; 230 codecSpecificInfo = [(RTCCodecSpecificInfoH264 *)info nativeCodecSpecificInf o];
231 } 231 }
232 232
233 std::unique_ptr<webrtc::RTPFragmentationHeader> header = [fragmentationHeader toCpp]; 233 std::unique_ptr<webrtc::RTPFragmentationHeader> header =
234 [fragmentationHeader createNativeFragmentationHeader];
234 235
235 return _videoToolboxDecoder->Decode( 236 return _videoToolboxDecoder->Decode(
236 image, missingFrames, header.release(), &codecSpecificInfo, renderTimeMs); 237 image, missingFrames, header.release(), &codecSpecificInfo, renderTimeMs);
237 } 238 }
238 239
239 @end 240 @end
240 241
241 // Encoder factory. 242 // Encoder factory.
242 @implementation RTCVideoEncoderFactoryH264 243 @implementation RTCVideoEncoderFactoryH264
243 244
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 - (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info { 285 - (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info {
285 return [[RTCVideoDecoderH264 alloc] init]; 286 return [[RTCVideoDecoderH264 alloc] init];
286 } 287 }
287 288
288 - (NSArray<RTCVideoCodecInfo *> *)supportedCodecs { 289 - (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
289 NSString *codecName = [NSString stringWithUTF8String:cricket::kH264CodecName]; 290 NSString *codecName = [NSString stringWithUTF8String:cricket::kH264CodecName];
290 return @[ [[RTCVideoCodecInfo alloc] initWithPayload:0 name:codecName paramete rs:@{}] ]; 291 return @[ [[RTCVideoCodecInfo alloc] initWithPayload:0 name:codecName paramete rs:@{}] ];
291 } 292 }
292 293
293 @end 294 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698