blob: 2baf0ecd80fdb24f3a8b2e264ed0358aad8ff43b [file] [log] [blame]
skvlad79b4b872016-04-08 17:28:55 -07001/*
2 * Copyright 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#import "RTCRtpParameters+Private.h"
Taylor Brandstetter0cd086b2016-04-20 16:23:10 -070012
Florent Castellidacec712018-05-24 16:24:21 +020013#import "RTCRtcpParameters+Private.h"
Taylor Brandstetter0cd086b2016-04-20 16:23:10 -070014#import "RTCRtpCodecParameters+Private.h"
skvlad79b4b872016-04-08 17:28:55 -070015#import "RTCRtpEncodingParameters+Private.h"
Florent Castelliabe301f2018-06-12 18:33:49 +020016#import "RTCRtpHeaderExtension+Private.h"
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020017#import "helpers/NSString+StdString.h"
skvlad79b4b872016-04-08 17:28:55 -070018
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020019@implementation RTC_OBJC_TYPE (RTCRtpParameters)
skvlad79b4b872016-04-08 17:28:55 -070020
Florent Castellicebf50f2018-05-03 15:31:53 +020021@synthesize transactionId = _transactionId;
Florent Castellidacec712018-05-24 16:24:21 +020022@synthesize rtcp = _rtcp;
Florent Castelliabe301f2018-06-12 18:33:49 +020023@synthesize headerExtensions = _headerExtensions;
skvlad79b4b872016-04-08 17:28:55 -070024@synthesize encodings = _encodings;
Taylor Brandstetter0cd086b2016-04-20 16:23:10 -070025@synthesize codecs = _codecs;
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +010026@synthesize degradationPreference = _degradationPreference;
skvlad79b4b872016-04-08 17:28:55 -070027
28- (instancetype)init {
Yura Yaroshevich9aec8c22021-04-14 12:41:21 +030029 webrtc::RtpParameters nativeParameters;
30 return [self initWithNativeParameters:nativeParameters];
skvlad79b4b872016-04-08 17:28:55 -070031}
32
33- (instancetype)initWithNativeParameters:
34 (const webrtc::RtpParameters &)nativeParameters {
Yura Yaroshevich9aec8c22021-04-14 12:41:21 +030035 if (self = [super init]) {
Florent Castellicebf50f2018-05-03 15:31:53 +020036 _transactionId = [NSString stringForStdString:nativeParameters.transaction_id];
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020037 _rtcp =
38 [[RTC_OBJC_TYPE(RTCRtcpParameters) alloc] initWithNativeParameters:nativeParameters.rtcp];
Florent Castelliabe301f2018-06-12 18:33:49 +020039
40 NSMutableArray *headerExtensions = [[NSMutableArray alloc] init];
41 for (const auto &headerExtension : nativeParameters.header_extensions) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020042 [headerExtensions addObject:[[RTC_OBJC_TYPE(RTCRtpHeaderExtension) alloc]
43 initWithNativeParameters:headerExtension]];
Florent Castelliabe301f2018-06-12 18:33:49 +020044 }
45 _headerExtensions = headerExtensions;
46
skvlad79b4b872016-04-08 17:28:55 -070047 NSMutableArray *encodings = [[NSMutableArray alloc] init];
48 for (const auto &encoding : nativeParameters.encodings) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020049 [encodings addObject:[[RTC_OBJC_TYPE(RTCRtpEncodingParameters) alloc]
skvlad79b4b872016-04-08 17:28:55 -070050 initWithNativeParameters:encoding]];
51 }
52 _encodings = encodings;
Taylor Brandstetter0cd086b2016-04-20 16:23:10 -070053
54 NSMutableArray *codecs = [[NSMutableArray alloc] init];
55 for (const auto &codec : nativeParameters.codecs) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020056 [codecs
57 addObject:[[RTC_OBJC_TYPE(RTCRtpCodecParameters) alloc] initWithNativeParameters:codec]];
Taylor Brandstetter0cd086b2016-04-20 16:23:10 -070058 }
59 _codecs = codecs;
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +010060
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020061 _degradationPreference = [RTC_OBJC_TYPE(RTCRtpParameters)
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +010062 degradationPreferenceFromNativeDegradationPreference:nativeParameters
Florent Castellib05ca4b2020-03-05 13:39:55 +010063 .degradation_preference];
skvlad79b4b872016-04-08 17:28:55 -070064 }
65 return self;
66}
67
68- (webrtc::RtpParameters)nativeParameters {
Florent Castellicebf50f2018-05-03 15:31:53 +020069 webrtc::RtpParameters parameters;
70 parameters.transaction_id = [NSString stdStringForString:_transactionId];
Florent Castellidacec712018-05-24 16:24:21 +020071 parameters.rtcp = [_rtcp nativeParameters];
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020072 for (RTC_OBJC_TYPE(RTCRtpHeaderExtension) * headerExtension in _headerExtensions) {
Florent Castelliabe301f2018-06-12 18:33:49 +020073 parameters.header_extensions.push_back(headerExtension.nativeParameters);
74 }
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020075 for (RTC_OBJC_TYPE(RTCRtpEncodingParameters) * encoding in _encodings) {
skvlad79b4b872016-04-08 17:28:55 -070076 parameters.encodings.push_back(encoding.nativeParameters);
77 }
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020078 for (RTC_OBJC_TYPE(RTCRtpCodecParameters) * codec in _codecs) {
Taylor Brandstetter0cd086b2016-04-20 16:23:10 -070079 parameters.codecs.push_back(codec.nativeParameters);
80 }
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +010081 if (_degradationPreference) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020082 parameters.degradation_preference = [RTC_OBJC_TYPE(RTCRtpParameters)
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +010083 nativeDegradationPreferenceFromDegradationPreference:(RTCDegradationPreference)
84 _degradationPreference.intValue];
85 }
skvlad79b4b872016-04-08 17:28:55 -070086 return parameters;
87}
88
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +010089+ (webrtc::DegradationPreference)nativeDegradationPreferenceFromDegradationPreference:
90 (RTCDegradationPreference)degradationPreference {
91 switch (degradationPreference) {
92 case RTCDegradationPreferenceDisabled:
93 return webrtc::DegradationPreference::DISABLED;
94 case RTCDegradationPreferenceMaintainFramerate:
95 return webrtc::DegradationPreference::MAINTAIN_FRAMERATE;
96 case RTCDegradationPreferenceMaintainResolution:
97 return webrtc::DegradationPreference::MAINTAIN_RESOLUTION;
98 case RTCDegradationPreferenceBalanced:
99 return webrtc::DegradationPreference::BALANCED;
100 }
101}
102
Florent Castellib05ca4b2020-03-05 13:39:55 +0100103+ (NSNumber *)degradationPreferenceFromNativeDegradationPreference:
104 (absl::optional<webrtc::DegradationPreference>)nativeDegradationPreference {
105 if (!nativeDegradationPreference.has_value()) {
106 return nil;
107 }
108
109 switch (*nativeDegradationPreference) {
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +0100110 case webrtc::DegradationPreference::DISABLED:
Florent Castellib05ca4b2020-03-05 13:39:55 +0100111 return @(RTCDegradationPreferenceDisabled);
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +0100112 case webrtc::DegradationPreference::MAINTAIN_FRAMERATE:
Florent Castellib05ca4b2020-03-05 13:39:55 +0100113 return @(RTCDegradationPreferenceMaintainFramerate);
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +0100114 case webrtc::DegradationPreference::MAINTAIN_RESOLUTION:
Florent Castellib05ca4b2020-03-05 13:39:55 +0100115 return @(RTCDegradationPreferenceMaintainResolution);
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +0100116 case webrtc::DegradationPreference::BALANCED:
Florent Castellib05ca4b2020-03-05 13:39:55 +0100117 return @(RTCDegradationPreferenceBalanced);
Mirta Dvornicic4cdd7fb2020-01-03 16:07:28 +0100118 }
119}
120
skvlad79b4b872016-04-08 17:28:55 -0700121@end