From 4cdd7fb898ba36d0ae72afdf5d61f099059b00f9 Mon Sep 17 00:00:00 2001 From: Mirta Dvornicic Date: Fri, 3 Jan 2020 16:07:28 +0100 Subject: [PATCH] Add degradationPreference to RTCRtpParameters in ObjC SDK. Bug: None Change-Id: I64daf9ac142f960a13f9e69705ba8d3b865578e0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/164527 Reviewed-by: Anders Carlsson Commit-Queue: Mirta Dvornicic Cr-Commit-Position: refs/heads/master@{#30164} --- .../api/peerconnection/RTCRtpParameters.h | 14 +++++++ .../api/peerconnection/RTCRtpParameters.mm | 38 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/sdk/objc/api/peerconnection/RTCRtpParameters.h b/sdk/objc/api/peerconnection/RTCRtpParameters.h index c1f2d5cea9..e2903cc515 100644 --- a/sdk/objc/api/peerconnection/RTCRtpParameters.h +++ b/sdk/objc/api/peerconnection/RTCRtpParameters.h @@ -18,6 +18,14 @@ NS_ASSUME_NONNULL_BEGIN +/** Corresponds to webrtc::DegradationPreference. */ +typedef NS_ENUM(NSInteger, RTCDegradationPreference) { + RTCDegradationPreferenceDisabled, + RTCDegradationPreferenceMaintainFramerate, + RTCDegradationPreferenceMaintainResolution, + RTCDegradationPreferenceBalanced +}; + RTC_OBJC_EXPORT @interface RTCRtpParameters : NSObject @@ -36,6 +44,12 @@ RTC_OBJC_EXPORT /** The negotiated set of send codecs in order of preference. */ @property(nonatomic, copy) NSArray *codecs; +/** + * Degradation preference in case of CPU adaptation or constrained bandwidth. + * If nil, implementation default degradation preference will be used. + */ +@property(nonatomic, copy) NSNumber *degradationPreference; + - (instancetype)init NS_DESIGNATED_INITIALIZER; @end diff --git a/sdk/objc/api/peerconnection/RTCRtpParameters.mm b/sdk/objc/api/peerconnection/RTCRtpParameters.mm index 9b76ac525f..d70f7da323 100644 --- a/sdk/objc/api/peerconnection/RTCRtpParameters.mm +++ b/sdk/objc/api/peerconnection/RTCRtpParameters.mm @@ -23,6 +23,7 @@ @synthesize headerExtensions = _headerExtensions; @synthesize encodings = _encodings; @synthesize codecs = _codecs; +@synthesize degradationPreference = _degradationPreference; - (instancetype)init { return [super init]; @@ -54,6 +55,10 @@ initWithNativeParameters:codec]]; } _codecs = codecs; + + _degradationPreference = @([RTCRtpParameters + degradationPreferenceFromNativeDegradationPreference:nativeParameters + .degradation_preference]); } return self; } @@ -71,7 +76,40 @@ for (RTCRtpCodecParameters *codec in _codecs) { parameters.codecs.push_back(codec.nativeParameters); } + if (_degradationPreference) { + parameters.degradation_preference = [RTCRtpParameters + nativeDegradationPreferenceFromDegradationPreference:(RTCDegradationPreference) + _degradationPreference.intValue]; + } return parameters; } ++ (webrtc::DegradationPreference)nativeDegradationPreferenceFromDegradationPreference: + (RTCDegradationPreference)degradationPreference { + switch (degradationPreference) { + case RTCDegradationPreferenceDisabled: + return webrtc::DegradationPreference::DISABLED; + case RTCDegradationPreferenceMaintainFramerate: + return webrtc::DegradationPreference::MAINTAIN_FRAMERATE; + case RTCDegradationPreferenceMaintainResolution: + return webrtc::DegradationPreference::MAINTAIN_RESOLUTION; + case RTCDegradationPreferenceBalanced: + return webrtc::DegradationPreference::BALANCED; + } +} + ++ (RTCDegradationPreference)degradationPreferenceFromNativeDegradationPreference: + (webrtc::DegradationPreference)nativeDegradationPreference { + switch (nativeDegradationPreference) { + case webrtc::DegradationPreference::DISABLED: + return RTCDegradationPreferenceDisabled; + case webrtc::DegradationPreference::MAINTAIN_FRAMERATE: + return RTCDegradationPreferenceMaintainFramerate; + case webrtc::DegradationPreference::MAINTAIN_RESOLUTION: + return RTCDegradationPreferenceMaintainResolution; + case webrtc::DegradationPreference::BALANCED: + return RTCDegradationPreferenceBalanced; + } +} + @end