xref: /aosp_15_r20/external/webrtc/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.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 "RTCRtpEncodingParameters+Private.h"
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Worker#import "helpers/NSString+StdString.h"
14*d9f75844SAndroid Build Coastguard Worker
15*d9f75844SAndroid Build Coastguard Worker@implementation RTC_OBJC_TYPE (RTCRtpEncodingParameters)
16*d9f75844SAndroid Build Coastguard Worker
17*d9f75844SAndroid Build Coastguard Worker@synthesize rid = _rid;
18*d9f75844SAndroid Build Coastguard Worker@synthesize isActive = _isActive;
19*d9f75844SAndroid Build Coastguard Worker@synthesize maxBitrateBps = _maxBitrateBps;
20*d9f75844SAndroid Build Coastguard Worker@synthesize minBitrateBps = _minBitrateBps;
21*d9f75844SAndroid Build Coastguard Worker@synthesize maxFramerate = _maxFramerate;
22*d9f75844SAndroid Build Coastguard Worker@synthesize numTemporalLayers = _numTemporalLayers;
23*d9f75844SAndroid Build Coastguard Worker@synthesize scaleResolutionDownBy = _scaleResolutionDownBy;
24*d9f75844SAndroid Build Coastguard Worker@synthesize ssrc = _ssrc;
25*d9f75844SAndroid Build Coastguard Worker@synthesize bitratePriority = _bitratePriority;
26*d9f75844SAndroid Build Coastguard Worker@synthesize networkPriority = _networkPriority;
27*d9f75844SAndroid Build Coastguard Worker@synthesize adaptiveAudioPacketTime = _adaptiveAudioPacketTime;
28*d9f75844SAndroid Build Coastguard Worker
29*d9f75844SAndroid Build Coastguard Worker- (instancetype)init {
30*d9f75844SAndroid Build Coastguard Worker  webrtc::RtpEncodingParameters nativeParameters;
31*d9f75844SAndroid Build Coastguard Worker  return [self initWithNativeParameters:nativeParameters];
32*d9f75844SAndroid Build Coastguard Worker}
33*d9f75844SAndroid Build Coastguard Worker
34*d9f75844SAndroid Build Coastguard Worker- (instancetype)initWithNativeParameters:
35*d9f75844SAndroid Build Coastguard Worker    (const webrtc::RtpEncodingParameters &)nativeParameters {
36*d9f75844SAndroid Build Coastguard Worker  if (self = [super init]) {
37*d9f75844SAndroid Build Coastguard Worker    if (!nativeParameters.rid.empty()) {
38*d9f75844SAndroid Build Coastguard Worker      _rid = [NSString stringForStdString:nativeParameters.rid];
39*d9f75844SAndroid Build Coastguard Worker    }
40*d9f75844SAndroid Build Coastguard Worker    _isActive = nativeParameters.active;
41*d9f75844SAndroid Build Coastguard Worker    if (nativeParameters.max_bitrate_bps) {
42*d9f75844SAndroid Build Coastguard Worker      _maxBitrateBps =
43*d9f75844SAndroid Build Coastguard Worker          [NSNumber numberWithInt:*nativeParameters.max_bitrate_bps];
44*d9f75844SAndroid Build Coastguard Worker    }
45*d9f75844SAndroid Build Coastguard Worker    if (nativeParameters.min_bitrate_bps) {
46*d9f75844SAndroid Build Coastguard Worker      _minBitrateBps =
47*d9f75844SAndroid Build Coastguard Worker          [NSNumber numberWithInt:*nativeParameters.min_bitrate_bps];
48*d9f75844SAndroid Build Coastguard Worker    }
49*d9f75844SAndroid Build Coastguard Worker    if (nativeParameters.max_framerate) {
50*d9f75844SAndroid Build Coastguard Worker      _maxFramerate = [NSNumber numberWithInt:*nativeParameters.max_framerate];
51*d9f75844SAndroid Build Coastguard Worker    }
52*d9f75844SAndroid Build Coastguard Worker    if (nativeParameters.num_temporal_layers) {
53*d9f75844SAndroid Build Coastguard Worker      _numTemporalLayers = [NSNumber numberWithInt:*nativeParameters.num_temporal_layers];
54*d9f75844SAndroid Build Coastguard Worker    }
55*d9f75844SAndroid Build Coastguard Worker    if (nativeParameters.scale_resolution_down_by) {
56*d9f75844SAndroid Build Coastguard Worker      _scaleResolutionDownBy =
57*d9f75844SAndroid Build Coastguard Worker          [NSNumber numberWithDouble:*nativeParameters.scale_resolution_down_by];
58*d9f75844SAndroid Build Coastguard Worker    }
59*d9f75844SAndroid Build Coastguard Worker    if (nativeParameters.ssrc) {
60*d9f75844SAndroid Build Coastguard Worker      _ssrc = [NSNumber numberWithUnsignedLong:*nativeParameters.ssrc];
61*d9f75844SAndroid Build Coastguard Worker    }
62*d9f75844SAndroid Build Coastguard Worker    _bitratePriority = nativeParameters.bitrate_priority;
63*d9f75844SAndroid Build Coastguard Worker    _networkPriority = [RTC_OBJC_TYPE(RTCRtpEncodingParameters)
64*d9f75844SAndroid Build Coastguard Worker        priorityFromNativePriority:nativeParameters.network_priority];
65*d9f75844SAndroid Build Coastguard Worker    _adaptiveAudioPacketTime = nativeParameters.adaptive_ptime;
66*d9f75844SAndroid Build Coastguard Worker  }
67*d9f75844SAndroid Build Coastguard Worker  return self;
68*d9f75844SAndroid Build Coastguard Worker}
69*d9f75844SAndroid Build Coastguard Worker
70*d9f75844SAndroid Build Coastguard Worker- (webrtc::RtpEncodingParameters)nativeParameters {
71*d9f75844SAndroid Build Coastguard Worker  webrtc::RtpEncodingParameters parameters;
72*d9f75844SAndroid Build Coastguard Worker  if (_rid != nil) {
73*d9f75844SAndroid Build Coastguard Worker    parameters.rid = [NSString stdStringForString:_rid];
74*d9f75844SAndroid Build Coastguard Worker  }
75*d9f75844SAndroid Build Coastguard Worker  parameters.active = _isActive;
76*d9f75844SAndroid Build Coastguard Worker  if (_maxBitrateBps != nil) {
77*d9f75844SAndroid Build Coastguard Worker    parameters.max_bitrate_bps = absl::optional<int>(_maxBitrateBps.intValue);
78*d9f75844SAndroid Build Coastguard Worker  }
79*d9f75844SAndroid Build Coastguard Worker  if (_minBitrateBps != nil) {
80*d9f75844SAndroid Build Coastguard Worker    parameters.min_bitrate_bps = absl::optional<int>(_minBitrateBps.intValue);
81*d9f75844SAndroid Build Coastguard Worker  }
82*d9f75844SAndroid Build Coastguard Worker  if (_maxFramerate != nil) {
83*d9f75844SAndroid Build Coastguard Worker    parameters.max_framerate = absl::optional<int>(_maxFramerate.intValue);
84*d9f75844SAndroid Build Coastguard Worker  }
85*d9f75844SAndroid Build Coastguard Worker  if (_numTemporalLayers != nil) {
86*d9f75844SAndroid Build Coastguard Worker    parameters.num_temporal_layers = absl::optional<int>(_numTemporalLayers.intValue);
87*d9f75844SAndroid Build Coastguard Worker  }
88*d9f75844SAndroid Build Coastguard Worker  if (_scaleResolutionDownBy != nil) {
89*d9f75844SAndroid Build Coastguard Worker    parameters.scale_resolution_down_by =
90*d9f75844SAndroid Build Coastguard Worker        absl::optional<double>(_scaleResolutionDownBy.doubleValue);
91*d9f75844SAndroid Build Coastguard Worker  }
92*d9f75844SAndroid Build Coastguard Worker  if (_ssrc != nil) {
93*d9f75844SAndroid Build Coastguard Worker    parameters.ssrc = absl::optional<uint32_t>(_ssrc.unsignedLongValue);
94*d9f75844SAndroid Build Coastguard Worker  }
95*d9f75844SAndroid Build Coastguard Worker  parameters.bitrate_priority = _bitratePriority;
96*d9f75844SAndroid Build Coastguard Worker  parameters.network_priority =
97*d9f75844SAndroid Build Coastguard Worker      [RTC_OBJC_TYPE(RTCRtpEncodingParameters) nativePriorityFromPriority:_networkPriority];
98*d9f75844SAndroid Build Coastguard Worker  parameters.adaptive_ptime = _adaptiveAudioPacketTime;
99*d9f75844SAndroid Build Coastguard Worker  return parameters;
100*d9f75844SAndroid Build Coastguard Worker}
101*d9f75844SAndroid Build Coastguard Worker
102*d9f75844SAndroid Build Coastguard Worker+ (webrtc::Priority)nativePriorityFromPriority:(RTCPriority)networkPriority {
103*d9f75844SAndroid Build Coastguard Worker  switch (networkPriority) {
104*d9f75844SAndroid Build Coastguard Worker    case RTCPriorityVeryLow:
105*d9f75844SAndroid Build Coastguard Worker      return webrtc::Priority::kVeryLow;
106*d9f75844SAndroid Build Coastguard Worker    case RTCPriorityLow:
107*d9f75844SAndroid Build Coastguard Worker      return webrtc::Priority::kLow;
108*d9f75844SAndroid Build Coastguard Worker    case RTCPriorityMedium:
109*d9f75844SAndroid Build Coastguard Worker      return webrtc::Priority::kMedium;
110*d9f75844SAndroid Build Coastguard Worker    case RTCPriorityHigh:
111*d9f75844SAndroid Build Coastguard Worker      return webrtc::Priority::kHigh;
112*d9f75844SAndroid Build Coastguard Worker  }
113*d9f75844SAndroid Build Coastguard Worker}
114*d9f75844SAndroid Build Coastguard Worker
115*d9f75844SAndroid Build Coastguard Worker+ (RTCPriority)priorityFromNativePriority:(webrtc::Priority)nativePriority {
116*d9f75844SAndroid Build Coastguard Worker  switch (nativePriority) {
117*d9f75844SAndroid Build Coastguard Worker    case webrtc::Priority::kVeryLow:
118*d9f75844SAndroid Build Coastguard Worker      return RTCPriorityVeryLow;
119*d9f75844SAndroid Build Coastguard Worker    case webrtc::Priority::kLow:
120*d9f75844SAndroid Build Coastguard Worker      return RTCPriorityLow;
121*d9f75844SAndroid Build Coastguard Worker    case webrtc::Priority::kMedium:
122*d9f75844SAndroid Build Coastguard Worker      return RTCPriorityMedium;
123*d9f75844SAndroid Build Coastguard Worker    case webrtc::Priority::kHigh:
124*d9f75844SAndroid Build Coastguard Worker      return RTCPriorityHigh;
125*d9f75844SAndroid Build Coastguard Worker  }
126*d9f75844SAndroid Build Coastguard Worker}
127*d9f75844SAndroid Build Coastguard Worker
128*d9f75844SAndroid Build Coastguard Worker@end
129