AppRTCMobile iOS: Use video encoder factory to manage codec preference.

List codecs from factory in settings, select by changing order in factory.

Bug: webrtc:7925
Change-Id: If3c45e56713104c88705c67560325d002e6d6700
Reviewed-on: https://webrtc-review.googlesource.com/3720
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20312}
diff --git a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m b/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m
index a895011..e4aafcc 100644
--- a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m
+++ b/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m
@@ -10,6 +10,7 @@
 
 #import "ARDVideoEncoderFactory.h"
 
+#import "ARDSettingsModel.h"
 #import "WebRTC/RTCVideoCodecH264.h"
 #import "WebRTC/RTCVideoEncoderVP8.h"
 #import "WebRTC/RTCVideoEncoderVP9.h"
@@ -19,6 +20,8 @@
 
 @implementation ARDVideoEncoderFactory
 
+@synthesize preferredCodec;
+
 - (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
   if ([info.name isEqualToString:@"H264"]) {
     return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
@@ -58,7 +61,15 @@
   RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:@"VP9" parameters:nil];
   [codecs addObject:vp9Info];
 
-  return [codecs copy];
+  NSMutableArray<RTCVideoCodecInfo *> *orderedCodecs = [NSMutableArray array];
+  NSUInteger index = [codecs indexOfObject:self.preferredCodec];
+  if (index != NSNotFound) {
+    [orderedCodecs addObject:[codecs objectAtIndex:index]];
+    [codecs removeObjectAtIndex:index];
+  }
+  [orderedCodecs addObjectsFromArray:codecs];
+
+  return [orderedCodecs copy];
 }
 
 @end