ObjC SDK: Stop using built-in SW video codecs

This CL removes the use of default built-in SW in the ObjC layer. If a
client want to depend on the video SW codecs, they must inject them
explicitly.

Bug: webrtc:7925
Change-Id: If752e7f02109ff768dc5ec38d935203de85987c2
Reviewed-on: https://webrtc-review.googlesource.com/69800
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23073}
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 8f8027e..bc7fa36 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -407,13 +407,9 @@
         ":common_objc",
         ":native_video",
         ":videocodec_objc",
+        ":vp8",
+        ":vp9",
       ]
-      if (rtc_use_builtin_sw_codecs) {
-        deps += [
-          ":vp8",
-          ":vp9",
-        ]
-      }
     }
 
     rtc_static_library("vp8") {
@@ -826,6 +822,7 @@
           ":videosource_objc",
           ":videotoolbox_objc",
           "../../system_wrappers:system_wrappers_default",
+          "../api/video_codecs:video_codecs_api",
           "../media:rtc_media_base",
           "../modules:module_api",
           "../modules/video_coding:video_codec_interface",
@@ -902,15 +899,12 @@
           "objc/Framework/Headers/WebRTC/RTCVideoTrack.h",
           "objc/Framework/Headers/WebRTC/RTCVideoViewShading.h",
           "objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h",
+          "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h",
+          "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h",
+          "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h",
+          "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h",
         ]
-        if (rtc_use_builtin_sw_codecs) {
-          common_objc_headers += [
-            "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h",
-            "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h",
-            "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h",
-            "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h",
-          ]
-        }
+
         if (!build_with_chromium) {
           common_objc_headers += [
             "objc/Framework/Headers/WebRTC/RTCCallbackLogger.h",
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
index 405e8c8..5f292c9 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
@@ -11,11 +11,9 @@
 #import "WebRTC/RTCVideoCodecFactory.h"
 
 #import "WebRTC/RTCVideoCodecH264.h"
-#if defined(USE_BUILTIN_SW_CODECS)
-#import "WebRTC/RTCVideoDecoderVP8.h"  // nogncheck
+#import "WebRTC/RTCVideoDecoderVP8.h"
 #if !defined(RTC_DISABLE_VP9)
-#import "WebRTC/RTCVideoDecoderVP9.h"  // nogncheck
-#endif
+#import "WebRTC/RTCVideoDecoderVP9.h"
 #endif
 
 @implementation RTCDefaultVideoDecoderFactory
@@ -23,14 +21,12 @@
 - (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info {
   if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
     return [[RTCVideoDecoderH264 alloc] init];
-#if defined(USE_BUILTIN_SW_CODECS)
   } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
     return [RTCVideoDecoderVP8 vp8Decoder];
 #if !defined(RTC_DISABLE_VP9)
   } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
     return [RTCVideoDecoderVP9 vp9Decoder];
 #endif
-#endif
   }
 
   return nil;
@@ -39,12 +35,10 @@
 - (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
   return @[
     [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name],
-#if defined(USE_BUILTIN_SW_CODECS)
     [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name],
 #if !defined(RTC_DISABLE_VP9)
     [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name],
 #endif
-#endif
   ];
 }
 
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
index 60a0b5f..a4b8d71 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
@@ -12,11 +12,9 @@
 
 #import "WebRTC/RTCVideoCodec.h"
 #import "WebRTC/RTCVideoCodecH264.h"
-#if defined(USE_BUILTIN_SW_CODECS)
-#import "WebRTC/RTCVideoEncoderVP8.h"  // nogncheck
+#import "WebRTC/RTCVideoEncoderVP8.h"
 #if !defined(RTC_DISABLE_VP9)
-#import "WebRTC/RTCVideoEncoderVP9.h"  // nogncheck
-#endif
+#import "WebRTC/RTCVideoEncoderVP9.h"
 #endif
 
 @implementation RTCDefaultVideoEncoderFactory
@@ -42,37 +40,31 @@
       [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
                                    parameters:constrainedBaselineParams];
 
-#if defined(USE_BUILTIN_SW_CODECS)
   RTCVideoCodecInfo *vp8Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name];
 
 #if !defined(RTC_DISABLE_VP9)
   RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name];
 #endif
-#endif
 
   return @[
     constrainedHighInfo,
     constrainedBaselineInfo,
-#if defined(USE_BUILTIN_SW_CODECS)
     vp8Info,
 #if !defined(RTC_DISABLE_VP9)
     vp9Info,
 #endif
-#endif
   ];
 }
 
 - (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
   if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
     return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
-#if defined(USE_BUILTIN_SW_CODECS)
   } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
     return [RTCVideoEncoderVP8 vp8Encoder];
 #if !defined(RTC_DISABLE_VP9)
   } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
     return [RTCVideoEncoderVP9 vp9Encoder];
 #endif
-#endif
   }
 
   return nil;
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
index 3b0e930..3d460fe 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
@@ -23,15 +23,6 @@
 
 }  // namespace webrtc
 
-#if defined(USE_BUILTIN_SW_CODECS)
-namespace cricket {
-
-class WebRtcVideoEncoderFactory;
-class WebRtcVideoDecoderFactory;
-
-}  // namespace cricket
-#endif
-
 NS_ASSUME_NONNULL_BEGIN
 
 /**
@@ -58,20 +49,6 @@
                             audioProcessingModule:
                                 (rtc::scoped_refptr<webrtc::AudioProcessing>)audioProcessingModule;
 
-#if defined(USE_BUILTIN_SW_CODECS)
-/* Initialize object with legacy injectable native audio/video encoder/decoder factories
-   TODO(andersc): Remove this when backwards compatiblity is no longer needed.
- */
-- (instancetype)
-    initWithNativeAudioEncoderFactory:
-        (rtc::scoped_refptr<webrtc::AudioEncoderFactory>)audioEncoderFactory
-            nativeAudioDecoderFactory:
-                (rtc::scoped_refptr<webrtc::AudioDecoderFactory>)audioDecoderFactory
-      legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory*)videoEncoderFactory
-      legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory*)videoDecoderFactory
-                    audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule;
-#endif
-
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
index 31ba49e..1ae458f 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
@@ -58,7 +58,7 @@
 - (instancetype)init {
 #ifdef HAVE_NO_MEDIA
   return [self initWithNoMedia];
-#elif !defined(USE_BUILTIN_SW_CODECS)
+#else
   return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
                        nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
                        nativeVideoEncoderFactory:webrtc::ObjCToNativeVideoEncoderFactory(
@@ -67,18 +67,6 @@
                                                      [[RTCVideoDecoderFactoryH264 alloc] init])
                                audioDeviceModule:nullptr
                            audioProcessingModule:nullptr];
-#else
-  // Here we construct webrtc::ObjCVideoEncoderFactory directly because we rely
-  // on the fact that they inherit from both webrtc::VideoEncoderFactory and
-  // cricket::WebRtcVideoEncoderFactory.
-  return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
-                       nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
-                 legacyNativeVideoEncoderFactory:new webrtc::ObjCVideoEncoderFactory(
-                                                     [[RTCVideoEncoderFactoryH264 alloc] init])
-                 legacyNativeVideoDecoderFactory:new webrtc::ObjCVideoDecoderFactory(
-                                                     [[RTCVideoDecoderFactoryH264 alloc] init])
-                               audioDeviceModule:nullptr];
-
 #endif
 }
 
@@ -151,18 +139,6 @@
   return [self initWithNoMedia];
 #else
   if (self = [self initNative]) {
-#if defined(USE_BUILTIN_SW_CODECS)
-    if (!videoEncoderFactory) {
-      auto legacy_video_encoder_factory = rtc::MakeUnique<webrtc::ObjCVideoEncoderFactory>(
-          [[RTCVideoEncoderFactoryH264 alloc] init]);
-      videoEncoderFactory = ConvertVideoEncoderFactory(std::move(legacy_video_encoder_factory));
-    }
-    if (!videoDecoderFactory) {
-      auto legacy_video_decoder_factory = rtc::MakeUnique<webrtc::ObjCVideoDecoderFactory>(
-          [[RTCVideoDecoderFactoryH264 alloc] init]);
-      videoDecoderFactory = ConvertVideoDecoderFactory(std::move(legacy_video_decoder_factory));
-    }
-#endif
     _nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
                                                          _workerThread.get(),
                                                          _signalingThread.get(),
@@ -179,34 +155,6 @@
 #endif
 }
 
-#if defined(USE_BUILTIN_SW_CODECS)
-- (instancetype)
-    initWithNativeAudioEncoderFactory:
-        (rtc::scoped_refptr<webrtc::AudioEncoderFactory>)audioEncoderFactory
-            nativeAudioDecoderFactory:
-                (rtc::scoped_refptr<webrtc::AudioDecoderFactory>)audioDecoderFactory
-      legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory *)videoEncoderFactory
-      legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory *)videoDecoderFactory
-                    audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule {
-#ifdef HAVE_NO_MEDIA
-  return [self initWithNoMedia];
-#else
-  if (self = [self initNative]) {
-    _nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
-                                                         _workerThread.get(),
-                                                         _signalingThread.get(),
-                                                         audioDeviceModule,
-                                                         audioEncoderFactory,
-                                                         audioDecoderFactory,
-                                                         videoEncoderFactory,
-                                                         videoDecoderFactory);
-    NSAssert(_nativeFactory, @"Failed to initialize PeerConnectionFactory!");
-  }
-  return self;
-#endif
-}
-#endif
-
 - (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints {
   std::unique_ptr<webrtc::MediaConstraints> nativeConstraints;
   if (constraints) {
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h b/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h
index 97ee513..4a2cf52 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h
@@ -53,10 +53,6 @@
 - (instancetype)initWithNativeSdpVideoFormat:(webrtc::SdpVideoFormat)format;
 - (webrtc::SdpVideoFormat)nativeSdpVideoFormat;
 
-/* TODO(andersc): These are deprecated, remove when no longer in use. */
-- (instancetype)initWithNativeVideoCodec:(cricket::VideoCodec)videoCodec;
-- (cricket::VideoCodec)nativeVideoCodec;
-
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm
index fc2c1ce..63be2dc 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm
@@ -105,11 +105,6 @@
   return [self initWithName:[NSString stringForStdString:format.name] parameters:params];
 }
 
-- (instancetype)initWithNativeVideoCodec:(cricket::VideoCodec)videoCodec {
-  return [self
-      initWithNativeSdpVideoFormat:webrtc::SdpVideoFormat(videoCodec.name, videoCodec.params)];
-}
-
 - (BOOL)isEqualToCodecInfo:(RTCVideoCodecInfo *)info {
   if (!info ||
       ![self.name isEqualToString:info.name] ||
@@ -142,16 +137,6 @@
   return webrtc::SdpVideoFormat([NSString stdStringForString:_name], parameters);
 }
 
-- (cricket::VideoCodec)nativeVideoCodec {
-  cricket::VideoCodec codec([NSString stdStringForString:_name]);
-  for (NSString *paramKey in _parameters.allKeys) {
-    codec.SetParam([NSString stdStringForString:paramKey],
-                   [NSString stdStringForString:_parameters[paramKey]]);
-  }
-
-  return codec;
-}
-
 #pragma mark - NSCoding
 
 - (instancetype)initWithCoder:(NSCoder *)decoder {
diff --git a/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm b/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm
index 3289f01..ffdbd9d 100644
--- a/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm
+++ b/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm
@@ -167,8 +167,8 @@
                                 rotation:encodeParams->rotation];
 }
 
-// Extract VideoToolbox profile out of the cricket::VideoCodec. If there is no
-// specific VideoToolbox profile for the specified level, AutoLevel will be
+// Extract VideoToolbox profile out of the webrtc::SdpVideoFormat. If there is
+// no specific VideoToolbox profile for the specified level, AutoLevel will be
 // returned. The user must initialize the encoder with a resolution and
 // framerate conforming to the selected H264 level regardless.
 CFStringRef ExtractProfile(webrtc::SdpVideoFormat videoFormat) {
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h
index c179b92..063963d 100644
--- a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h
@@ -90,7 +90,7 @@
   RTCVideoCodecModeScreensharing,
 };
 
-/** Holds information to identify a codec. Corresponds to cricket::VideoCodec. */
+/** Holds information to identify a codec. Corresponds to webrtc::SdpVideoFormat. */
 RTC_EXPORT
 @interface RTCVideoCodecInfo : NSObject <NSCoding>
 
diff --git a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.h b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.h
index fdd6feb..2967b0a 100644
--- a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.h
+++ b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.h
@@ -13,16 +13,12 @@
 
 #include "api/video_codecs/video_decoder_factory.h"
 #include "media/base/codec.h"
-#include "media/engine/webrtcvideodecoderfactory.h"
 
 @protocol RTCVideoDecoderFactory;
 
 namespace webrtc {
 
-// TODO(andersc): Remove the inheritance from cricket::WebRtcVideoDecoderFactory
-// when the legacy path in [RTCPeerConnectionFactory init] is no longer needed.
-class ObjCVideoDecoderFactory : public VideoDecoderFactory,
-                                public cricket::WebRtcVideoDecoderFactory {
+class ObjCVideoDecoderFactory : public VideoDecoderFactory {
  public:
   explicit ObjCVideoDecoderFactory(id<RTCVideoDecoderFactory>);
   ~ObjCVideoDecoderFactory();
@@ -33,13 +29,6 @@
   std::unique_ptr<VideoDecoder> CreateVideoDecoder(
       const SdpVideoFormat& format) override;
 
-  // Needed for WebRtcVideoDecoderFactory interface.
-  VideoDecoder* CreateVideoDecoderWithParams(
-      const cricket::VideoCodec& codec,
-      cricket::VideoDecoderParams params) override;
-  VideoDecoder* CreateVideoDecoder(VideoCodecType type) override;
-  void DestroyVideoDecoder(VideoDecoder* decoder) override;
-
  private:
   id<RTCVideoDecoderFactory> decoder_factory_;
 };
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 051f19d..3d7869f 100644
--- a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm
+++ b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm
@@ -150,22 +150,4 @@
   return supported_formats;
 }
 
-// WebRtcVideoDecoderFactory
-
-VideoDecoder *ObjCVideoDecoderFactory::CreateVideoDecoderWithParams(
-    const cricket::VideoCodec &codec, cricket::VideoDecoderParams params) {
-  return CreateVideoDecoder(SdpVideoFormat(codec.name, codec.params)).release();
-}
-
-VideoDecoder *ObjCVideoDecoderFactory::CreateVideoDecoder(VideoCodecType type) {
-  // This is implemented to avoid hiding an overloaded virtual function
-  RTC_NOTREACHED();
-  return nullptr;
-}
-
-void ObjCVideoDecoderFactory::DestroyVideoDecoder(VideoDecoder *decoder) {
-  delete decoder;
-  decoder = nullptr;
-}
-
 }  // namespace webrtc
diff --git a/sdk/objc/Framework/Native/src/objc_video_encoder_factory.h b/sdk/objc/Framework/Native/src/objc_video_encoder_factory.h
index 42ffd53..8c3a5a8 100644
--- a/sdk/objc/Framework/Native/src/objc_video_encoder_factory.h
+++ b/sdk/objc/Framework/Native/src/objc_video_encoder_factory.h
@@ -14,16 +14,12 @@
 #import <Foundation/Foundation.h>
 
 #include "api/video_codecs/video_encoder_factory.h"
-#include "media/engine/webrtcvideoencoderfactory.h"
 
 @protocol RTCVideoEncoderFactory;
 
 namespace webrtc {
 
-// TODO(andersc): Remove the inheritance from cricket::WebRtcVideoEncoderFactory
-// when the legacy path in [RTCPeerConnectionFactory init] is no longer needed.
-class ObjCVideoEncoderFactory : public VideoEncoderFactory,
-                                public cricket::WebRtcVideoEncoderFactory {
+class ObjCVideoEncoderFactory : public VideoEncoderFactory {
  public:
   explicit ObjCVideoEncoderFactory(id<RTCVideoEncoderFactory>);
   ~ObjCVideoEncoderFactory();
@@ -35,16 +31,8 @@
       const SdpVideoFormat& format) override;
   CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const override;
 
-  // Needed for WebRtcVideoEncoderFactory interface.
-  VideoEncoder* CreateVideoEncoder(const cricket::VideoCodec& codec) override;
-  const std::vector<cricket::VideoCodec>& supported_codecs() const override;
-  void DestroyVideoEncoder(VideoEncoder* encoder) override;
-
  private:
   id<RTCVideoEncoderFactory> encoder_factory_;
-
-  // Needed for WebRtcVideoEncoderFactory interface.
-  mutable std::vector<cricket::VideoCodec> supported_codecs_;
 };
 
 }  // namespace webrtc
diff --git a/sdk/objc/Framework/Native/src/objc_video_encoder_factory.mm b/sdk/objc/Framework/Native/src/objc_video_encoder_factory.mm
index 59356f7..6de3d69 100644
--- a/sdk/objc/Framework/Native/src/objc_video_encoder_factory.mm
+++ b/sdk/objc/Framework/Native/src/objc_video_encoder_factory.mm
@@ -160,28 +160,4 @@
   }
 }
 
-// WebRtcVideoEncoderFactory
-
-VideoEncoder *ObjCVideoEncoderFactory::CreateVideoEncoder(const cricket::VideoCodec &codec) {
-  RTCVideoCodecInfo *info = [[RTCVideoCodecInfo alloc]
-      initWithNativeSdpVideoFormat:SdpVideoFormat(codec.name, codec.params)];
-  id<RTCVideoEncoder> encoder = [encoder_factory_ createEncoder:info];
-  return new ObjCVideoEncoder(encoder);
-}
-
-const std::vector<cricket::VideoCodec> &ObjCVideoEncoderFactory::supported_codecs() const {
-  supported_codecs_.clear();
-  for (RTCVideoCodecInfo *supportedCodec in encoder_factory_.supportedCodecs) {
-    SdpVideoFormat format = [supportedCodec nativeSdpVideoFormat];
-    supported_codecs_.push_back(cricket::VideoCodec(format));
-  }
-
-  return supported_codecs_;
-}
-
-void ObjCVideoEncoderFactory::DestroyVideoEncoder(VideoEncoder *encoder) {
-  delete encoder;
-  encoder = nullptr;
-}
-
 }  // namespace webrtc
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 d4e5ea9..b002ed2 100644
--- a/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm
+++ b/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm
@@ -55,30 +55,29 @@
   return CreateDecoderFactoryReturning(WEBRTC_VIDEO_CODEC_ERROR);
 }
 
-webrtc::VideoDecoder *GetObjCDecoder(id<RTCVideoDecoderFactory> factory) {
+std::unique_ptr<webrtc::VideoDecoder> GetObjCDecoder(id<RTCVideoDecoderFactory> factory) {
   webrtc::ObjCVideoDecoderFactory decoder_factory(factory);
-  return decoder_factory.CreateVideoDecoderWithParams(cricket::VideoCodec(cricket::kH264CodecName),
-                                                      {});
+  return decoder_factory.CreateVideoDecoder(webrtc::SdpVideoFormat(cricket::kH264CodecName));
 }
 
 #pragma mark -
 
 TEST(ObjCVideoDecoderFactoryTest, InitDecodeReturnsOKOnSuccess) {
-  webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory());
+  std::unique_ptr<webrtc::VideoDecoder> decoder = GetObjCDecoder(CreateOKDecoderFactory());
 
   auto settings = new webrtc::VideoCodec();
   EXPECT_EQ(decoder->InitDecode(settings, 1), WEBRTC_VIDEO_CODEC_OK);
 }
 
 TEST(ObjCVideoDecoderFactoryTest, InitDecodeReturnsErrorOnFail) {
-  webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory());
+  std::unique_ptr<webrtc::VideoDecoder> decoder = GetObjCDecoder(CreateErrorDecoderFactory());
 
   auto settings = new webrtc::VideoCodec();
   EXPECT_EQ(decoder->InitDecode(settings, 1), WEBRTC_VIDEO_CODEC_ERROR);
 }
 
 TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsOKOnSuccess) {
-  webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory());
+  std::unique_ptr<webrtc::VideoDecoder> decoder = GetObjCDecoder(CreateOKDecoderFactory());
 
   webrtc::EncodedImage encoded_image;
   webrtc::CodecSpecificInfo info;
@@ -88,7 +87,7 @@
 }
 
 TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsErrorOnFail) {
-  webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory());
+  std::unique_ptr<webrtc::VideoDecoder> decoder = GetObjCDecoder(CreateErrorDecoderFactory());
 
   webrtc::EncodedImage encoded_image;
   webrtc::CodecSpecificInfo info;
@@ -98,13 +97,13 @@
 }
 
 TEST(ObjCVideoDecoderFactoryTest, ReleaseDecodeReturnsOKOnSuccess) {
-  webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory());
+  std::unique_ptr<webrtc::VideoDecoder> decoder = GetObjCDecoder(CreateOKDecoderFactory());
 
   EXPECT_EQ(decoder->Release(), WEBRTC_VIDEO_CODEC_OK);
 }
 
 TEST(ObjCVideoDecoderFactoryTest, ReleaseDecodeReturnsErrorOnFail) {
-  webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory());
+  std::unique_ptr<webrtc::VideoDecoder> decoder = GetObjCDecoder(CreateErrorDecoderFactory());
 
   EXPECT_EQ(decoder->Release(), WEBRTC_VIDEO_CODEC_ERROR);
 }
diff --git a/sdk/objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm b/sdk/objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm
index b3925be..2ae1ebb 100644
--- a/sdk/objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm
+++ b/sdk/objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm
@@ -16,6 +16,7 @@
 #import "WebRTC/RTCVideoCodec.h"
 #import "WebRTC/RTCVideoCodecFactory.h"
 #import "WebRTC/RTCVideoFrameBuffer.h"
+#include "api/video_codecs/sdp_video_format.h"
 #include "modules/include/module_common_types.h"
 #include "modules/video_coding/include/video_codec_interface.h"
 #include "modules/video_coding/include/video_error_codes.h"
@@ -46,30 +47,30 @@
   return CreateEncoderFactoryReturning(WEBRTC_VIDEO_CODEC_ERROR);
 }
 
-webrtc::VideoEncoder *GetObjCEncoder(id<RTCVideoEncoderFactory> factory) {
+std::unique_ptr<webrtc::VideoEncoder> GetObjCEncoder(id<RTCVideoEncoderFactory> factory) {
   webrtc::ObjCVideoEncoderFactory encoder_factory(factory);
-  cricket::VideoCodec codec("H264");
-  return encoder_factory.CreateVideoEncoder(codec);
+  webrtc::SdpVideoFormat format("H264");
+  return encoder_factory.CreateVideoEncoder(format);
 }
 
 #pragma mark -
 
 TEST(ObjCVideoEncoderFactoryTest, InitEncodeReturnsOKOnSuccess) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateOKEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateOKEncoderFactory());
 
   auto settings = new webrtc::VideoCodec();
   EXPECT_EQ(encoder->InitEncode(settings, 1, 0), WEBRTC_VIDEO_CODEC_OK);
 }
 
 TEST(ObjCVideoEncoderFactoryTest, InitEncodeReturnsErrorOnFail) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateErrorEncoderFactory());
 
   auto settings = new webrtc::VideoCodec();
   EXPECT_EQ(encoder->InitEncode(settings, 1, 0), WEBRTC_VIDEO_CODEC_ERROR);
 }
 
 TEST(ObjCVideoEncoderFactoryTest, EncodeReturnsOKOnSuccess) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateOKEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateOKEncoderFactory());
 
   CVPixelBufferRef pixel_buffer;
   CVPixelBufferCreate(kCFAllocatorDefault, 640, 480, kCVPixelFormatType_32ARGB, nil, &pixel_buffer);
@@ -86,7 +87,7 @@
 }
 
 TEST(ObjCVideoEncoderFactoryTest, EncodeReturnsErrorOnFail) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateErrorEncoderFactory());
 
   CVPixelBufferRef pixel_buffer;
   CVPixelBufferCreate(kCFAllocatorDefault, 640, 480, kCVPixelFormatType_32ARGB, nil, &pixel_buffer);
@@ -103,31 +104,31 @@
 }
 
 TEST(ObjCVideoEncoderFactoryTest, ReleaseEncodeReturnsOKOnSuccess) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateOKEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateOKEncoderFactory());
 
   EXPECT_EQ(encoder->Release(), WEBRTC_VIDEO_CODEC_OK);
 }
 
 TEST(ObjCVideoEncoderFactoryTest, ReleaseEncodeReturnsErrorOnFail) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateErrorEncoderFactory());
 
   EXPECT_EQ(encoder->Release(), WEBRTC_VIDEO_CODEC_ERROR);
 }
 
 TEST(ObjCVideoEncoderFactoryTest, SetChannelParametersAlwaysReturnsOK) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateErrorEncoderFactory());
 
   EXPECT_EQ(encoder->SetChannelParameters(1, 1), WEBRTC_VIDEO_CODEC_OK);
 }
 
 TEST(ObjCVideoEncoderFactoryTest, SetRatesReturnsOKOnSuccess) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateOKEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateOKEncoderFactory());
 
   EXPECT_EQ(encoder->SetRates(0, 0), WEBRTC_VIDEO_CODEC_OK);
 }
 
 TEST(ObjCVideoEncoderFactoryTest, SetRatesReturnsErrorOnFail) {
-  webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory());
+  std::unique_ptr<webrtc::VideoEncoder> encoder = GetObjCEncoder(CreateErrorEncoderFactory());
 
   EXPECT_EQ(encoder->SetRates(0, 0), WEBRTC_VIDEO_CODEC_ERROR);
 }