xref: /aosp_15_r20/external/webrtc/sdk/objc/api/peerconnection/RTCRtpParameters.mm (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker/*
2*d9f75844SAndroid Build Coastguard Worker *  Copyright 2016 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker *
4*d9f75844SAndroid Build Coastguard Worker *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker */
10*d9f75844SAndroid Build Coastguard Worker
11*d9f75844SAndroid Build Coastguard Worker#import "RTCRtpParameters+Private.h"
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Worker#import "RTCRtcpParameters+Private.h"
14*d9f75844SAndroid Build Coastguard Worker#import "RTCRtpCodecParameters+Private.h"
15*d9f75844SAndroid Build Coastguard Worker#import "RTCRtpEncodingParameters+Private.h"
16*d9f75844SAndroid Build Coastguard Worker#import "RTCRtpHeaderExtension+Private.h"
17*d9f75844SAndroid Build Coastguard Worker#import "helpers/NSString+StdString.h"
18*d9f75844SAndroid Build Coastguard Worker
19*d9f75844SAndroid Build Coastguard Worker@implementation RTC_OBJC_TYPE (RTCRtpParameters)
20*d9f75844SAndroid Build Coastguard Worker
21*d9f75844SAndroid Build Coastguard Worker@synthesize transactionId = _transactionId;
22*d9f75844SAndroid Build Coastguard Worker@synthesize rtcp = _rtcp;
23*d9f75844SAndroid Build Coastguard Worker@synthesize headerExtensions = _headerExtensions;
24*d9f75844SAndroid Build Coastguard Worker@synthesize encodings = _encodings;
25*d9f75844SAndroid Build Coastguard Worker@synthesize codecs = _codecs;
26*d9f75844SAndroid Build Coastguard Worker@synthesize degradationPreference = _degradationPreference;
27*d9f75844SAndroid Build Coastguard Worker
28*d9f75844SAndroid Build Coastguard Worker- (instancetype)init {
29*d9f75844SAndroid Build Coastguard Worker  webrtc::RtpParameters nativeParameters;
30*d9f75844SAndroid Build Coastguard Worker  return [self initWithNativeParameters:nativeParameters];
31*d9f75844SAndroid Build Coastguard Worker}
32*d9f75844SAndroid Build Coastguard Worker
33*d9f75844SAndroid Build Coastguard Worker- (instancetype)initWithNativeParameters:
34*d9f75844SAndroid Build Coastguard Worker    (const webrtc::RtpParameters &)nativeParameters {
35*d9f75844SAndroid Build Coastguard Worker  if (self = [super init]) {
36*d9f75844SAndroid Build Coastguard Worker    _transactionId = [NSString stringForStdString:nativeParameters.transaction_id];
37*d9f75844SAndroid Build Coastguard Worker    _rtcp =
38*d9f75844SAndroid Build Coastguard Worker        [[RTC_OBJC_TYPE(RTCRtcpParameters) alloc] initWithNativeParameters:nativeParameters.rtcp];
39*d9f75844SAndroid Build Coastguard Worker
40*d9f75844SAndroid Build Coastguard Worker    NSMutableArray *headerExtensions = [[NSMutableArray alloc] init];
41*d9f75844SAndroid Build Coastguard Worker    for (const auto &headerExtension : nativeParameters.header_extensions) {
42*d9f75844SAndroid Build Coastguard Worker      [headerExtensions addObject:[[RTC_OBJC_TYPE(RTCRtpHeaderExtension) alloc]
43*d9f75844SAndroid Build Coastguard Worker                                      initWithNativeParameters:headerExtension]];
44*d9f75844SAndroid Build Coastguard Worker    }
45*d9f75844SAndroid Build Coastguard Worker    _headerExtensions = headerExtensions;
46*d9f75844SAndroid Build Coastguard Worker
47*d9f75844SAndroid Build Coastguard Worker    NSMutableArray *encodings = [[NSMutableArray alloc] init];
48*d9f75844SAndroid Build Coastguard Worker    for (const auto &encoding : nativeParameters.encodings) {
49*d9f75844SAndroid Build Coastguard Worker      [encodings addObject:[[RTC_OBJC_TYPE(RTCRtpEncodingParameters) alloc]
50*d9f75844SAndroid Build Coastguard Worker                               initWithNativeParameters:encoding]];
51*d9f75844SAndroid Build Coastguard Worker    }
52*d9f75844SAndroid Build Coastguard Worker    _encodings = encodings;
53*d9f75844SAndroid Build Coastguard Worker
54*d9f75844SAndroid Build Coastguard Worker    NSMutableArray *codecs = [[NSMutableArray alloc] init];
55*d9f75844SAndroid Build Coastguard Worker    for (const auto &codec : nativeParameters.codecs) {
56*d9f75844SAndroid Build Coastguard Worker      [codecs
57*d9f75844SAndroid Build Coastguard Worker          addObject:[[RTC_OBJC_TYPE(RTCRtpCodecParameters) alloc] initWithNativeParameters:codec]];
58*d9f75844SAndroid Build Coastguard Worker    }
59*d9f75844SAndroid Build Coastguard Worker    _codecs = codecs;
60*d9f75844SAndroid Build Coastguard Worker
61*d9f75844SAndroid Build Coastguard Worker    _degradationPreference = [RTC_OBJC_TYPE(RTCRtpParameters)
62*d9f75844SAndroid Build Coastguard Worker        degradationPreferenceFromNativeDegradationPreference:nativeParameters
63*d9f75844SAndroid Build Coastguard Worker                                                                 .degradation_preference];
64*d9f75844SAndroid Build Coastguard Worker  }
65*d9f75844SAndroid Build Coastguard Worker  return self;
66*d9f75844SAndroid Build Coastguard Worker}
67*d9f75844SAndroid Build Coastguard Worker
68*d9f75844SAndroid Build Coastguard Worker- (webrtc::RtpParameters)nativeParameters {
69*d9f75844SAndroid Build Coastguard Worker  webrtc::RtpParameters parameters;
70*d9f75844SAndroid Build Coastguard Worker  parameters.transaction_id = [NSString stdStringForString:_transactionId];
71*d9f75844SAndroid Build Coastguard Worker  parameters.rtcp = [_rtcp nativeParameters];
72*d9f75844SAndroid Build Coastguard Worker  for (RTC_OBJC_TYPE(RTCRtpHeaderExtension) * headerExtension in _headerExtensions) {
73*d9f75844SAndroid Build Coastguard Worker    parameters.header_extensions.push_back(headerExtension.nativeParameters);
74*d9f75844SAndroid Build Coastguard Worker  }
75*d9f75844SAndroid Build Coastguard Worker  for (RTC_OBJC_TYPE(RTCRtpEncodingParameters) * encoding in _encodings) {
76*d9f75844SAndroid Build Coastguard Worker    parameters.encodings.push_back(encoding.nativeParameters);
77*d9f75844SAndroid Build Coastguard Worker  }
78*d9f75844SAndroid Build Coastguard Worker  for (RTC_OBJC_TYPE(RTCRtpCodecParameters) * codec in _codecs) {
79*d9f75844SAndroid Build Coastguard Worker    parameters.codecs.push_back(codec.nativeParameters);
80*d9f75844SAndroid Build Coastguard Worker  }
81*d9f75844SAndroid Build Coastguard Worker  if (_degradationPreference) {
82*d9f75844SAndroid Build Coastguard Worker    parameters.degradation_preference = [RTC_OBJC_TYPE(RTCRtpParameters)
83*d9f75844SAndroid Build Coastguard Worker        nativeDegradationPreferenceFromDegradationPreference:(RTCDegradationPreference)
84*d9f75844SAndroid Build Coastguard Worker                                                                 _degradationPreference.intValue];
85*d9f75844SAndroid Build Coastguard Worker  }
86*d9f75844SAndroid Build Coastguard Worker  return parameters;
87*d9f75844SAndroid Build Coastguard Worker}
88*d9f75844SAndroid Build Coastguard Worker
89*d9f75844SAndroid Build Coastguard Worker+ (webrtc::DegradationPreference)nativeDegradationPreferenceFromDegradationPreference:
90*d9f75844SAndroid Build Coastguard Worker    (RTCDegradationPreference)degradationPreference {
91*d9f75844SAndroid Build Coastguard Worker  switch (degradationPreference) {
92*d9f75844SAndroid Build Coastguard Worker    case RTCDegradationPreferenceDisabled:
93*d9f75844SAndroid Build Coastguard Worker      return webrtc::DegradationPreference::DISABLED;
94*d9f75844SAndroid Build Coastguard Worker    case RTCDegradationPreferenceMaintainFramerate:
95*d9f75844SAndroid Build Coastguard Worker      return webrtc::DegradationPreference::MAINTAIN_FRAMERATE;
96*d9f75844SAndroid Build Coastguard Worker    case RTCDegradationPreferenceMaintainResolution:
97*d9f75844SAndroid Build Coastguard Worker      return webrtc::DegradationPreference::MAINTAIN_RESOLUTION;
98*d9f75844SAndroid Build Coastguard Worker    case RTCDegradationPreferenceBalanced:
99*d9f75844SAndroid Build Coastguard Worker      return webrtc::DegradationPreference::BALANCED;
100*d9f75844SAndroid Build Coastguard Worker  }
101*d9f75844SAndroid Build Coastguard Worker}
102*d9f75844SAndroid Build Coastguard Worker
103*d9f75844SAndroid Build Coastguard Worker+ (NSNumber *)degradationPreferenceFromNativeDegradationPreference:
104*d9f75844SAndroid Build Coastguard Worker    (absl::optional<webrtc::DegradationPreference>)nativeDegradationPreference {
105*d9f75844SAndroid Build Coastguard Worker  if (!nativeDegradationPreference.has_value()) {
106*d9f75844SAndroid Build Coastguard Worker    return nil;
107*d9f75844SAndroid Build Coastguard Worker  }
108*d9f75844SAndroid Build Coastguard Worker
109*d9f75844SAndroid Build Coastguard Worker  switch (*nativeDegradationPreference) {
110*d9f75844SAndroid Build Coastguard Worker    case webrtc::DegradationPreference::DISABLED:
111*d9f75844SAndroid Build Coastguard Worker      return @(RTCDegradationPreferenceDisabled);
112*d9f75844SAndroid Build Coastguard Worker    case webrtc::DegradationPreference::MAINTAIN_FRAMERATE:
113*d9f75844SAndroid Build Coastguard Worker      return @(RTCDegradationPreferenceMaintainFramerate);
114*d9f75844SAndroid Build Coastguard Worker    case webrtc::DegradationPreference::MAINTAIN_RESOLUTION:
115*d9f75844SAndroid Build Coastguard Worker      return @(RTCDegradationPreferenceMaintainResolution);
116*d9f75844SAndroid Build Coastguard Worker    case webrtc::DegradationPreference::BALANCED:
117*d9f75844SAndroid Build Coastguard Worker      return @(RTCDegradationPreferenceBalanced);
118*d9f75844SAndroid Build Coastguard Worker  }
119*d9f75844SAndroid Build Coastguard Worker}
120*d9f75844SAndroid Build Coastguard Worker
121*d9f75844SAndroid Build Coastguard Worker@end
122