Reland "Simple Default ObjC video codec factories."

This is a reland of 30915a742d86df55ac5c04501c0e8104675a612e
Original change's description:
> Simple Default ObjC video codec factories.
> 
> Move the simple video encoder/decoder factory from AppRTCMobile into the
> public API so users who don't have special requirements for video codecs
> can easily get started.
> 
> Also clean up the API a little.
> 
> This CL replaces the more flexible default factories in
> https://webrtc-review.googlesource.com/c/src/+/7741 and clients that
> want to implement their own codecs will have to supply their own
> encoder/decoder factories as well. The benefits of the approach in
> this CL are a simpler API and less effects on the rest of the code.
> 
> Bug: None
> Change-Id: I4ed94090d778b4fc38b49864de1d4de4ff125d6a
> Reviewed-on: https://webrtc-review.googlesource.com/15141
> Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
> Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
> Commit-Queue: Anders Carlsson <andersc@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#20441}

Bug: None
Change-Id: If0910cc540dc835dfec4eeb5bea527d88482d110
Reviewed-on: https://webrtc-review.googlesource.com/16780
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20476}
diff --git a/examples/BUILD.gn b/examples/BUILD.gn
index 0041d04..c5bc83f 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -230,10 +230,6 @@
       "objc/AppRTCMobile/ARDTURNClient+Internal.h",
       "objc/AppRTCMobile/ARDTURNClient.h",
       "objc/AppRTCMobile/ARDTURNClient.m",
-      "objc/AppRTCMobile/ARDVideoDecoderFactory.h",
-      "objc/AppRTCMobile/ARDVideoDecoderFactory.m",
-      "objc/AppRTCMobile/ARDVideoEncoderFactory.h",
-      "objc/AppRTCMobile/ARDVideoEncoderFactory.m",
       "objc/AppRTCMobile/ARDWebSocketChannel.h",
       "objc/AppRTCMobile/ARDWebSocketChannel.m",
       "objc/AppRTCMobile/RTCIceCandidate+JSON.h",
diff --git a/examples/objc/AppRTCMobile/ARDAppClient.m b/examples/objc/AppRTCMobile/ARDAppClient.m
index 8e933b9..f753828 100644
--- a/examples/objc/AppRTCMobile/ARDAppClient.m
+++ b/examples/objc/AppRTCMobile/ARDAppClient.m
@@ -22,6 +22,7 @@
 #import "WebRTC/RTCPeerConnectionFactory.h"
 #import "WebRTC/RTCRtpSender.h"
 #import "WebRTC/RTCTracing.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
 #import "WebRTC/RTCVideoTrack.h"
 
 #import "ARDAppEngineClient.h"
@@ -31,8 +32,6 @@
 #import "ARDSignalingMessage.h"
 #import "ARDTURNClient+Internal.h"
 #import "ARDUtilities.h"
-#import "ARDVideoDecoderFactory.h"
-#import "ARDVideoEncoderFactory.h"
 #import "ARDWebSocketChannel.h"
 #import "RTCIceCandidate+JSON.h"
 #import "RTCSessionDescription+JSON.h"
@@ -218,8 +217,8 @@
   _isLoopback = isLoopback;
   self.state = kARDAppClientStateConnecting;
 
-  ARDVideoDecoderFactory *decoderFactory = [[ARDVideoDecoderFactory alloc] init];
-  ARDVideoEncoderFactory *encoderFactory = [[ARDVideoEncoderFactory alloc] init];
+  RTCDefaultVideoDecoderFactory *decoderFactory = [[RTCDefaultVideoDecoderFactory alloc] init];
+  RTCDefaultVideoEncoderFactory *encoderFactory = [[RTCDefaultVideoEncoderFactory alloc] init];
   encoderFactory.preferredCodec = [settings currentVideoCodecSettingFromStore];
   _factory = [[RTCPeerConnectionFactory alloc] initWithEncoderFactory:encoderFactory
                                                        decoderFactory:decoderFactory];
diff --git a/examples/objc/AppRTCMobile/ARDSettingsModel.m b/examples/objc/AppRTCMobile/ARDSettingsModel.m
index ac265c8..0a2bee6 100644
--- a/examples/objc/AppRTCMobile/ARDSettingsModel.m
+++ b/examples/objc/AppRTCMobile/ARDSettingsModel.m
@@ -10,9 +10,9 @@
 
 #import "ARDSettingsModel+Private.h"
 #import "ARDSettingsStore.h"
-#import "ARDVideoEncoderFactory.h"
 #import "WebRTC/RTCCameraVideoCapturer.h"
 #import "WebRTC/RTCMediaConstraints.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -66,9 +66,7 @@
 }
 
 - (NSArray<RTCVideoCodecInfo *> *)availableVideoCodecs {
-  NSArray<RTCVideoCodecInfo *> *supportedCodecs =
-      [[[ARDVideoEncoderFactory alloc] init] supportedCodecs];
-  return supportedCodecs;
+  return [RTCDefaultVideoEncoderFactory supportedCodecs];
 }
 
 - (RTCVideoCodecInfo *)currentVideoCodecSettingFromStore {
diff --git a/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.h b/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.h
deleted file mode 100644
index bc8be99..0000000
--- a/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- *  Copyright 2017 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#import <Foundation/Foundation.h>
-#import "WebRTC/RTCVideoCodecFactory.h"
-
-@interface ARDVideoDecoderFactory : NSObject<RTCVideoDecoderFactory>
-
-@end
diff --git a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.h b/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.h
deleted file mode 100644
index fb3e616..0000000
--- a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *  Copyright 2017 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#import <Foundation/Foundation.h>
-#import "WebRTC/RTCVideoCodecFactory.h"
-
-@interface ARDVideoEncoderFactory : NSObject<RTCVideoEncoderFactory>
-
-@property(nonatomic, retain) RTCVideoCodecInfo* preferredCodec;
-
-@end
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index e79ebc7..4be5671 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -318,6 +318,8 @@
 
     rtc_static_library("peerconnectionfactory_objc") {
       sources = [
+        "objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m",
+        "objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm",
diff --git a/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
similarity index 62%
rename from examples/objc/AppRTCMobile/ARDVideoDecoderFactory.m
rename to sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
index 172635e..0ce0502 100644
--- a/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
@@ -8,20 +8,20 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#import "ARDVideoDecoderFactory.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
 
 #import "WebRTC/RTCVideoCodecH264.h"
 #import "WebRTC/RTCVideoDecoderVP8.h"
 #import "WebRTC/RTCVideoDecoderVP9.h"
 
-@implementation ARDVideoDecoderFactory
+@implementation RTCDefaultVideoDecoderFactory
 
 - (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info {
-  if ([info.name isEqualToString:@"H264"]) {
+  if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
     return [[RTCVideoDecoderH264 alloc] init];
-  } else if ([info.name isEqualToString:@"VP8"]) {
+  } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
     return [RTCVideoDecoderVP8 vp8Decoder];
-  } else if ([info.name isEqualToString:@"VP9"]) {
+  } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
     return [RTCVideoDecoderVP9 vp9Decoder];
   }
 
@@ -30,9 +30,9 @@
 
 - (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
   return @[
-    [[RTCVideoCodecInfo alloc] initWithName:@"H264" parameters:nil],
-    [[RTCVideoCodecInfo alloc] initWithName:@"VP8" parameters:nil],
-    [[RTCVideoCodecInfo alloc] initWithName:@"VP9" parameters:nil]
+    [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name],
+    [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name],
+    [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name]
   ];
 }
 
diff --git a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
similarity index 79%
rename from examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m
rename to sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
index d6ca592..71ffe29 100644
--- a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
@@ -8,18 +8,43 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#import "ARDVideoEncoderFactory.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
 
-#import "ARDSettingsModel.h"
 #import "WebRTC/RTCVideoCodec.h"
 #import "WebRTC/RTCVideoCodecH264.h"
 #import "WebRTC/RTCVideoEncoderVP8.h"
 #import "WebRTC/RTCVideoEncoderVP9.h"
 
-@implementation ARDVideoEncoderFactory
+@implementation RTCDefaultVideoEncoderFactory
 
 @synthesize preferredCodec;
 
++ (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
+  NSDictionary<NSString *, NSString *> *constrainedHighParams = @{
+    @"profile-level-id" : kRTCLevel31ConstrainedHigh,
+    @"level-asymmetry-allowed" : @"1",
+    @"packetization-mode" : @"1",
+  };
+  RTCVideoCodecInfo *constrainedHighInfo =
+      [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
+                                   parameters:constrainedHighParams];
+
+  NSDictionary<NSString *, NSString *> *constrainedBaselineParams = @{
+    @"profile-level-id" : kRTCLevel31ConstrainedBaseline,
+    @"level-asymmetry-allowed" : @"1",
+    @"packetization-mode" : @"1",
+  };
+  RTCVideoCodecInfo *constrainedBaselineInfo =
+      [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
+                                   parameters:constrainedBaselineParams];
+
+  RTCVideoCodecInfo *vp8Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name];
+
+  RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name];
+
+  return @[ constrainedHighInfo, constrainedBaselineInfo, vp8Info, vp9Info ];
+}
+
 - (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
   if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
     return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
@@ -33,35 +58,7 @@
 }
 
 - (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
-  NSMutableArray<RTCVideoCodecInfo *> *codecs = [NSMutableArray array];
-
-  NSDictionary<NSString *, NSString *> *constrainedHighParams = @{
-    @"profile-level-id" : kRTCLevel31ConstrainedHigh,
-    @"level-asymmetry-allowed" : @"1",
-    @"packetization-mode" : @"1",
-  };
-  RTCVideoCodecInfo *constrainedHighInfo =
-      [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
-                                   parameters:constrainedHighParams];
-  [codecs addObject:constrainedHighInfo];
-
-  NSDictionary<NSString *, NSString *> *constrainedBaselineParams = @{
-    @"profile-level-id" : kRTCLevel31ConstrainedBaseline,
-    @"level-asymmetry-allowed" : @"1",
-    @"packetization-mode" : @"1",
-  };
-  RTCVideoCodecInfo *constrainedBaselineInfo =
-      [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
-                                   parameters:constrainedBaselineParams];
-  [codecs addObject:constrainedBaselineInfo];
-
-  RTCVideoCodecInfo *vp8Info =
-      [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name parameters:nil];
-  [codecs addObject:vp8Info];
-
-  RTCVideoCodecInfo *vp9Info =
-      [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name parameters:nil];
-  [codecs addObject:vp9Info];
+  NSMutableArray<RTCVideoCodecInfo *> *codecs = [[[self class] supportedCodecs] mutableCopy];
 
   NSMutableArray<RTCVideoCodecInfo *> *orderedCodecs = [NSMutableArray array];
   NSUInteger index = [codecs indexOfObject:self.preferredCodec];
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h
index aa5f746..c77593f 100644
--- a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h
@@ -33,4 +33,22 @@
 
 @end
 
+#pragma mark - Default factories
+
+/** These codec factories include support for all codecs bundled with WebRTC. If using custom
+ *  codecs, create custom implementations of RTCVideoEncoderFactory and RTCVideoDecoderFactory.
+ */
+RTC_EXPORT
+@interface RTCDefaultVideoEncoderFactory : NSObject <RTCVideoEncoderFactory>
+
+@property(nonatomic, retain) RTCVideoCodecInfo *preferredCodec;
+
++ (NSArray<RTCVideoCodecInfo *> *)supportedCodecs;
+
+@end
+
+RTC_EXPORT
+@interface RTCDefaultVideoDecoderFactory : NSObject <RTCVideoDecoderFactory>
+@end
+
 NS_ASSUME_NONNULL_END