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 <andersc@webrtc.org>
Commit-Queue: Mirta Dvornicic <mirtad@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30164}
diff --git a/sdk/objc/api/peerconnection/RTCRtpParameters.h b/sdk/objc/api/peerconnection/RTCRtpParameters.h
index c1f2d5c..e2903cc 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 @@
/** The negotiated set of send codecs in order of preference. */
@property(nonatomic, copy) NSArray<RTCRtpCodecParameters *> *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 9b76ac5..d70f7da 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