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) {