From 8014c75931a72a704fa890b884e63a98e9aa8c03 Mon Sep 17 00:00:00 2001 From: deadbeef Date: Fri, 6 Jan 2017 16:53:00 -0800 Subject: [PATCH] Adding Java and Obj-C bindings for RtpEncodingParameters.ssrc. BUG=webrtc:6903 Review-Url: https://codereview.webrtc.org/2581913002 Cr-Commit-Position: refs/heads/master@{#15936} --- .../android/api/org/webrtc/RtpParameters.java | 1 + .../sdk/android/src/jni/peerconnection_jni.cc | 22 +++++++++++++++++++ .../Classes/RTCRtpEncodingParameters.mm | 7 ++++++ .../Headers/WebRTC/RTCRtpEncodingParameters.h | 3 +++ 4 files changed, 33 insertions(+) diff --git a/webrtc/sdk/android/api/org/webrtc/RtpParameters.java b/webrtc/sdk/android/api/org/webrtc/RtpParameters.java index 170874b974..a50cf550f5 100644 --- a/webrtc/sdk/android/api/org/webrtc/RtpParameters.java +++ b/webrtc/sdk/android/api/org/webrtc/RtpParameters.java @@ -21,6 +21,7 @@ public class RtpParameters { public boolean active = true; // A null value means "no maximum bitrate". public Integer maxBitrateBps; + public Long ssrc; } public static class Codec { diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc index 88c4f3ff46..e729cc4ecb 100644 --- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc +++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc @@ -2335,8 +2335,12 @@ static void JavaRtpParametersToJsepRtpParameters( GetFieldID(jni, j_encoding_parameters_class, "active", "Z"); jfieldID bitrate_id = GetFieldID(jni, j_encoding_parameters_class, "maxBitrateBps", "Ljava/lang/Integer;"); + jfieldID ssrc_id = + GetFieldID(jni, j_encoding_parameters_class, "ssrc", "Ljava/lang/Long;"); jclass j_integer_class = jni->FindClass("java/lang/Integer"); + jclass j_long_class = jni->FindClass("java/lang/Long"); jmethodID int_value_id = GetMethodID(jni, j_integer_class, "intValue", "()I"); + jmethodID long_value_id = GetMethodID(jni, j_long_class, "longValue", "()J"); for (jobject j_encoding_parameters : Iterable(jni, j_encodings)) { webrtc::RtpEncodingParameters encoding; @@ -2350,6 +2354,13 @@ static void JavaRtpParametersToJsepRtpParameters( } else { encoding.max_bitrate_bps = kBitrateUnlimited; } + jobject j_ssrc = + GetNullableObjectField(jni, j_encoding_parameters, ssrc_id); + if (!IsNull(jni, j_ssrc)) { + jlong ssrc_value = jni->CallLongMethod(j_ssrc, long_value_id); + CHECK_EXCEPTION(jni) << "error during CallLongMethod"; + encoding.ssrc = rtc::Optional(ssrc_value); + } parameters->encodings.push_back(encoding); } @@ -2394,9 +2405,13 @@ static jobject JsepRtpParametersToJavaRtpParameters( GetFieldID(jni, encoding_class, "active", "Z"); jfieldID bitrate_id = GetFieldID(jni, encoding_class, "maxBitrateBps", "Ljava/lang/Integer;"); + jfieldID ssrc_id = + GetFieldID(jni, encoding_class, "ssrc", "Ljava/lang/Long;"); jclass integer_class = jni->FindClass("java/lang/Integer"); + jclass long_class = jni->FindClass("java/lang/Long"); jmethodID integer_ctor = GetMethodID(jni, integer_class, "", "(I)V"); + jmethodID long_ctor = GetMethodID(jni, long_class, "", "(J)V"); for (const webrtc::RtpEncodingParameters& encoding : parameters.encodings) { jobject j_encoding_parameters = @@ -2411,6 +2426,13 @@ static jobject JsepRtpParametersToJavaRtpParameters( jni->SetObjectField(j_encoding_parameters, bitrate_id, j_bitrate_value); CHECK_EXCEPTION(jni) << "error during SetObjectField"; } + if (encoding.ssrc) { + jobject j_ssrc_value = jni->NewObject(long_class, long_ctor, + static_cast(*encoding.ssrc)); + CHECK_EXCEPTION(jni) << "error during NewObject"; + jni->SetObjectField(j_encoding_parameters, ssrc_id, j_ssrc_value); + CHECK_EXCEPTION(jni) << "error during SetObjectField"; + } jboolean added = jni->CallBooleanMethod(j_encodings, encodings_add, j_encoding_parameters); CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; diff --git a/webrtc/sdk/objc/Framework/Classes/RTCRtpEncodingParameters.mm b/webrtc/sdk/objc/Framework/Classes/RTCRtpEncodingParameters.mm index af07a0485d..be47894a8f 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCRtpEncodingParameters.mm +++ b/webrtc/sdk/objc/Framework/Classes/RTCRtpEncodingParameters.mm @@ -14,6 +14,7 @@ @synthesize isActive = _isActive; @synthesize maxBitrateBps = _maxBitrateBps; +@synthesize ssrc = _ssrc; static const int kBitrateUnlimited = -1; @@ -30,6 +31,9 @@ static const int kBitrateUnlimited = -1; _maxBitrateBps = [NSNumber numberWithInt:nativeParameters.max_bitrate_bps]; } + if (nativeParameters.ssrc) { + _ssrc = [NSNumber numberWithUnsignedLong:*nativeParameters.ssrc]; + } } return self; } @@ -40,6 +44,9 @@ static const int kBitrateUnlimited = -1; if (_maxBitrateBps != nil) { parameters.max_bitrate_bps = _maxBitrateBps.intValue; } + if (_ssrc != nil) { + parameters.ssrc = rtc::Optional(_ssrc.unsignedLongValue); + } return parameters; } diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h index 65b8deafc0..a956f0d4c3 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h @@ -25,6 +25,9 @@ RTC_EXPORT */ @property(nonatomic, copy, nullable) NSNumber *maxBitrateBps; +/** The SSRC being used by this encoding. */ +@property(nonatomic, readonly, nullable) NSNumber *ssrc; + - (instancetype)init NS_DESIGNATED_INITIALIZER; @end