Expose setLocalDescription() in SDK for Android.

Parameterless sLD is part of perfect negotiation algo.

Bug: webrtc:12609
Change-Id: I13a6b0bf29db8b4e984da9b2645f9bfdb23e074c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/212605
Reviewed-by: Xavier Lepaul‎ <xalep@webrtc.org>
Commit-Queue: Yura Yaroshevich <yura.yaroshevich@gmail.com>
Cr-Commit-Position: refs/heads/master@{#33641}
This commit is contained in:
Yura Yaroshevich 2021-03-22 11:45:43 +03:00 committed by Commit Bot
parent d69e0709c8
commit 4e9e723dae
4 changed files with 58 additions and 27 deletions

View File

@ -883,6 +883,10 @@ public class PeerConnection {
nativeCreateAnswer(observer, constraints);
}
public void setLocalDescription(SdpObserver observer) {
nativeSetLocalDescriptionAutomatically(observer);
}
public void setLocalDescription(SdpObserver observer, SessionDescription sdp) {
nativeSetLocalDescription(observer, sdp);
}
@ -1272,6 +1276,7 @@ public class PeerConnection {
private native DataChannel nativeCreateDataChannel(String label, DataChannel.Init init);
private native void nativeCreateOffer(SdpObserver observer, MediaConstraints constraints);
private native void nativeCreateAnswer(SdpObserver observer, MediaConstraints constraints);
private native void nativeSetLocalDescriptionAutomatically(SdpObserver observer);
private native void nativeSetLocalDescription(SdpObserver observer, SessionDescription sdp);
private native void nativeSetRemoteDescription(SdpObserver observer, SessionDescription sdp);
private native void nativeRestartIce();

View File

@ -571,15 +571,24 @@ static void JNI_PeerConnection_CreateAnswer(
ExtractNativePC(jni, j_pc)->CreateAnswer(observer, options);
}
static void JNI_PeerConnection_SetLocalDescriptionAutomatically(
JNIEnv* jni,
const JavaParamRef<jobject>& j_pc,
const JavaParamRef<jobject>& j_observer) {
rtc::scoped_refptr<SetLocalSdpObserverJni> observer(
new rtc::RefCountedObject<SetLocalSdpObserverJni>(jni, j_observer));
ExtractNativePC(jni, j_pc)->SetLocalDescription(observer);
}
static void JNI_PeerConnection_SetLocalDescription(
JNIEnv* jni,
const JavaParamRef<jobject>& j_pc,
const JavaParamRef<jobject>& j_observer,
const JavaParamRef<jobject>& j_sdp) {
rtc::scoped_refptr<SetSdpObserverJni> observer(
new rtc::RefCountedObject<SetSdpObserverJni>(jni, j_observer, nullptr));
rtc::scoped_refptr<SetLocalSdpObserverJni> observer(
new rtc::RefCountedObject<SetLocalSdpObserverJni>(jni, j_observer));
ExtractNativePC(jni, j_pc)->SetLocalDescription(
observer, JavaToNativeSessionDescription(jni, j_sdp).release());
JavaToNativeSessionDescription(jni, j_sdp), observer);
}
static void JNI_PeerConnection_SetRemoteDescription(
@ -587,10 +596,10 @@ static void JNI_PeerConnection_SetRemoteDescription(
const JavaParamRef<jobject>& j_pc,
const JavaParamRef<jobject>& j_observer,
const JavaParamRef<jobject>& j_sdp) {
rtc::scoped_refptr<SetSdpObserverJni> observer(
new rtc::RefCountedObject<SetSdpObserverJni>(jni, j_observer, nullptr));
rtc::scoped_refptr<SetRemoteSdpObserverJni> observer(
new rtc::RefCountedObject<SetRemoteSdpObserverJni>(jni, j_observer));
ExtractNativePC(jni, j_pc)->SetRemoteDescription(
observer, JavaToNativeSessionDescription(jni, j_sdp).release());
JavaToNativeSessionDescription(jni, j_sdp), observer);
}
static void JNI_PeerConnection_RestartIce(JNIEnv* jni,

View File

@ -47,24 +47,34 @@ void CreateSdpObserverJni::OnFailure(webrtc::RTCError error) {
NativeToJavaString(env, error.message()));
}
SetSdpObserverJni::SetSdpObserverJni(
SetLocalSdpObserverJni::SetLocalSdpObserverJni(
JNIEnv* env,
const JavaRef<jobject>& j_observer,
std::unique_ptr<MediaConstraints> constraints)
: j_observer_global_(env, j_observer),
constraints_(std::move(constraints)) {}
const JavaRef<jobject>& j_observer)
: j_observer_global_(env, j_observer) {}
SetSdpObserverJni::~SetSdpObserverJni() = default;
void SetSdpObserverJni::OnSuccess() {
void SetLocalSdpObserverJni::OnSetLocalDescriptionComplete(RTCError error) {
JNIEnv* env = AttachCurrentThreadIfNeeded();
Java_SdpObserver_onSetSuccess(env, j_observer_global_);
if (error.ok()) {
Java_SdpObserver_onSetSuccess(env, j_observer_global_);
} else {
Java_SdpObserver_onSetFailure(env, j_observer_global_,
NativeToJavaString(env, error.message()));
}
}
void SetSdpObserverJni::OnFailure(webrtc::RTCError error) {
SetRemoteSdpObserverJni::SetRemoteSdpObserverJni(
JNIEnv* env,
const JavaRef<jobject>& j_observer)
: j_observer_global_(env, j_observer) {}
void SetRemoteSdpObserverJni::OnSetRemoteDescriptionComplete(RTCError error) {
JNIEnv* env = AttachCurrentThreadIfNeeded();
Java_SdpObserver_onSetFailure(env, j_observer_global_,
NativeToJavaString(env, error.message()));
if (error.ok()) {
Java_SdpObserver_onSetSuccess(env, j_observer_global_);
} else {
Java_SdpObserver_onSetFailure(env, j_observer_global_,
NativeToJavaString(env, error.message()));
}
}
} // namespace jni

View File

@ -39,21 +39,28 @@ class CreateSdpObserverJni : public CreateSessionDescriptionObserver {
std::unique_ptr<MediaConstraints> constraints_;
};
class SetSdpObserverJni : public SetSessionDescriptionObserver {
class SetLocalSdpObserverJni : public SetLocalDescriptionObserverInterface {
public:
SetSdpObserverJni(JNIEnv* env,
const JavaRef<jobject>& j_observer,
std::unique_ptr<MediaConstraints> constraints);
~SetSdpObserverJni() override;
SetLocalSdpObserverJni(JNIEnv* env, const JavaRef<jobject>& j_observer);
MediaConstraints* constraints() { return constraints_.get(); }
~SetLocalSdpObserverJni() override = default;
void OnSuccess() override;
void OnFailure(RTCError error) override;
virtual void OnSetLocalDescriptionComplete(RTCError error) override;
private:
const ScopedJavaGlobalRef<jobject> j_observer_global_;
};
class SetRemoteSdpObserverJni : public SetRemoteDescriptionObserverInterface {
public:
SetRemoteSdpObserverJni(JNIEnv* env, const JavaRef<jobject>& j_observer);
~SetRemoteSdpObserverJni() override = default;
virtual void OnSetRemoteDescriptionComplete(RTCError error) override;
private:
const ScopedJavaGlobalRef<jobject> j_observer_global_;
std::unique_ptr<MediaConstraints> constraints_;
};
} // namespace jni