Deprecate RTCRtpFragmentationHeader argument for objc decoders.
Bug: webrtc:6471
Change-Id: Id542360c470ed0ea13b7e963f11bcd50d52c1d43
Reviewed-on: https://webrtc-review.googlesource.com/72442
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23036}
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.mm
index 79c942a..c0eea3e 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.mm
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.mm
@@ -52,6 +52,14 @@
}
- (NSInteger)decode:(RTCEncodedImage *)encodedImage
+ missingFrames:(BOOL)missingFrames
+ codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info
+ renderTimeMs:(int64_t)renderTimeMs {
+ RTC_NOTREACHED();
+ return 0;
+}
+
+- (NSInteger)decode:(RTCEncodedImage *)encodedImage
missingFrames:(BOOL)missingFrames
fragmentationHeader:(RTCRtpFragmentationHeader *)fragmentationHeader
codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info
diff --git a/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm b/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm
index 859bf03..c39a309 100644
--- a/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm
+++ b/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm
@@ -101,11 +101,21 @@
return WEBRTC_VIDEO_CODEC_OK;
}
-- (NSInteger)decode:(RTCEncodedImage *)inputImage
+- (NSInteger)decode:(RTCEncodedImage *)encodedImage
missingFrames:(BOOL)missingFrames
fragmentationHeader:(RTCRtpFragmentationHeader *)fragmentationHeader
codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info
renderTimeMs:(int64_t)renderTimeMs {
+ return [self decode:encodedImage
+ missingFrames:missingFrames
+ codecSpecificInfo:info
+ renderTimeMs:renderTimeMs];
+}
+
+- (NSInteger)decode:(RTCEncodedImage *)inputImage
+ missingFrames:(BOOL)missingFrames
+ codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info
+ renderTimeMs:(int64_t)renderTimeMs {
RTC_DCHECK(inputImage.buffer);
if (_error != noErr) {
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h
index b30c137..c179b92 100644
--- a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h
@@ -175,13 +175,21 @@
missingFrames:(BOOL)missingFrames
fragmentationHeader:(RTCRtpFragmentationHeader *)fragmentationHeader
codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info
- renderTimeMs:(int64_t)renderTimeMs;
+ renderTimeMs:(int64_t)renderTimeMs
+ DEPRECATED_MSG_ATTRIBUTE("use decode:missingFrames:codecSpecificInfo:renderTimeMs: instead");
- (NSString *)implementationName;
// TODO(andersc): Make non-optional when `startDecodeWithSettings:numberOfCores:` is removed.
@optional
- (NSInteger)startDecodeWithNumberOfCores:(int)numberOfCores;
+// TODO(andersc): Make non-optional when `decode:...fragmentationHeader:...` is removed.
+@optional
+- (NSInteger)decode:(RTCEncodedImage *)encodedImage
+ missingFrames:(BOOL)missingFrames
+ codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info
+ renderTimeMs:(int64_t)renderTimeMs;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm
index a4047af..051f19d 100644
--- a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm
+++ b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm
@@ -55,8 +55,6 @@
int64_t render_time_ms = -1) {
RTCEncodedImage *encodedImage =
[[RTCEncodedImage alloc] initWithNativeEncodedImage:input_image];
- RTCRtpFragmentationHeader *header =
- [[RTCRtpFragmentationHeader alloc] initWithNativeFragmentationHeader:fragmentation];
// webrtc::CodecSpecificInfo only handles a hard coded list of codecs
id<RTCCodecSpecificInfo> rtcCodecSpecificInfo = nil;
@@ -69,11 +67,24 @@
}
}
- return [decoder_ decode:encodedImage
- missingFrames:missing_frames
- fragmentationHeader:header
- codecSpecificInfo:rtcCodecSpecificInfo
- renderTimeMs:render_time_ms];
+ if ([decoder_ respondsToSelector:@selector
+ (decode:missingFrames:codecSpecificInfo:renderTimeMs:)]) {
+ return [decoder_ decode:encodedImage
+ missingFrames:missing_frames
+ codecSpecificInfo:rtcCodecSpecificInfo
+ renderTimeMs:render_time_ms];
+ } else {
+ RTCRtpFragmentationHeader *header =
+ [[RTCRtpFragmentationHeader alloc] initWithNativeFragmentationHeader:fragmentation];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ return [decoder_ decode:encodedImage
+ missingFrames:missing_frames
+ fragmentationHeader:header
+ codecSpecificInfo:rtcCodecSpecificInfo
+ renderTimeMs:render_time_ms];
+#pragma clang diagnostic pop
+ }
}
int32_t RegisterDecodeCompleteCallback(DecodedImageCallback *callback) {
diff --git a/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm b/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm
index dadd7b1..d4e5ea9 100644
--- a/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm
+++ b/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm
@@ -24,12 +24,20 @@
id<RTCVideoDecoderFactory> CreateDecoderFactoryReturning(int return_code) {
id decoderMock = OCMProtocolMock(@protocol(RTCVideoDecoder));
OCMStub([decoderMock startDecodeWithNumberOfCores:1]).andReturn(return_code);
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
OCMStub([decoderMock decode:[OCMArg any]
missingFrames:NO
fragmentationHeader:[OCMArg any]
codecSpecificInfo:[OCMArg any]
renderTimeMs:0])
.andReturn(return_code);
+#pragma clang diagnostic pop
+ OCMStub([decoderMock decode:[OCMArg any]
+ missingFrames:NO
+ codecSpecificInfo:[OCMArg any]
+ renderTimeMs:0])
+ .andReturn(return_code);
OCMStub([decoderMock releaseDecoder]).andReturn(return_code);
id decoderFactoryMock = OCMProtocolMock(@protocol(RTCVideoDecoderFactory));
@@ -73,22 +81,20 @@
webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory());
webrtc::EncodedImage encoded_image;
- webrtc::RTPFragmentationHeader header;
webrtc::CodecSpecificInfo info;
info.codecType = webrtc::kVideoCodecH264;
- EXPECT_EQ(decoder->Decode(encoded_image, false, &header, &info, 0), WEBRTC_VIDEO_CODEC_OK);
+ EXPECT_EQ(decoder->Decode(encoded_image, false, nullptr, &info, 0), WEBRTC_VIDEO_CODEC_OK);
}
TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsErrorOnFail) {
webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory());
webrtc::EncodedImage encoded_image;
- webrtc::RTPFragmentationHeader header;
webrtc::CodecSpecificInfo info;
info.codecType = webrtc::kVideoCodecH264;
- EXPECT_EQ(decoder->Decode(encoded_image, false, &header, &info, 0), WEBRTC_VIDEO_CODEC_ERROR);
+ EXPECT_EQ(decoder->Decode(encoded_image, false, nullptr, &info, 0), WEBRTC_VIDEO_CODEC_ERROR);
}
TEST(ObjCVideoDecoderFactoryTest, ReleaseDecodeReturnsOKOnSuccess) {