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