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