Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Unified Diff: webrtc/sdk/android/src/jni/peerconnection_jni.cc

Issue 2531333003: Create the Java Wrapper of RtpReceiverObserverInterface. (Closed)
Patch Set: Fix the failed test. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/sdk/android/src/jni/jni_helpers.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/sdk/android/src/jni/peerconnection_jni.cc
diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc
index 6416a1748987f8ea39bfaa282624e7d961c16310..d22c0a32e7ce63ee9996bf13476949b7b96544a7 100644
--- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc
+++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc
@@ -99,6 +99,7 @@ using webrtc::PeerConnectionFactoryInterface;
using webrtc::PeerConnectionInterface;
using webrtc::PeerConnectionObserver;
using webrtc::RtpReceiverInterface;
+using webrtc::RtpReceiverObserverInterface;
using webrtc::RtpSenderInterface;
using webrtc::SessionDescriptionInterface;
using webrtc::SetSessionDescriptionObserver;
@@ -829,6 +830,46 @@ class JavaVideoRendererWrapper
ScopedGlobalRef<jclass> j_byte_buffer_class_;
};
+// Adapter between the C++ RtpReceiverObserverInterface and the Java
+// RtpReceiver.Observer interface. Wraps an instance of the Java interface and
+// dispatches C++ callbacks to Java.
+class RtpReceiverObserver : public RtpReceiverObserverInterface {
+ public:
+ RtpReceiverObserver(JNIEnv* jni, jobject j_observer)
+ : j_observer_global_(jni, j_observer) {}
+
+ ~RtpReceiverObserver() override {}
+
+ void OnFirstPacketReceived(cricket::MediaType media_type) override {
+ JNIEnv* const jni = AttachCurrentThreadIfNeeded();
+
+ jmethodID j_on_first_packet_received_mid = GetMethodID(
+ jni, GetObjectClass(jni, *j_observer_global_), "onFirstPacketReceived",
+ "(Lorg/webrtc/MediaStreamTrack$MediaType;)V");
+ // Get the Java version of media type.
+ jclass j_media_type_class =
+ FindClass(jni, "org/webrtc/MediaStreamTrack$MediaType");
+
+ RTC_DCHECK(media_type == cricket::MEDIA_TYPE_AUDIO ||
+ media_type == cricket::MEDIA_TYPE_VIDEO)
+ << "Media type: " << media_type;
+ const char* media_type_str = media_type == cricket::MEDIA_TYPE_AUDIO
+ ? "MEDIA_TYPE_AUDIO"
+ : "MEDIA_TYPE_VIDEO";
+ jfieldID j_media_type_fid =
+ GetStaticFieldID(jni, j_media_type_class, media_type_str,
+ "Lorg/webrtc/MediaStreamTrack$MediaType;");
+ jobject JavaMediaType =
+ GetStaticObjectField(jni, j_media_type_class, j_media_type_fid);
+ // Trigger the callback function.
+ jni->CallVoidMethod(*j_observer_global_, j_on_first_packet_received_mid,
+ JavaMediaType);
+ CHECK_EXCEPTION(jni) << "error during CallVoidMethod";
+ }
+
+ private:
+ const ScopedGlobalRef<jobject> j_observer_global_;
+};
static DataChannelInterface* ExtractNativeDC(JNIEnv* jni, jobject j_dc) {
jfieldID native_dc_id = GetFieldID(jni,
@@ -2382,20 +2423,20 @@ JOW(jlong, RtpReceiver_nativeGetTrack)(JNIEnv* jni,
}
JOW(jboolean, RtpReceiver_nativeSetParameters)
-(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer, jobject j_parameters) {
+(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer, jobject j_parameters) {
if (IsNull(jni, j_parameters)) {
return false;
}
webrtc::RtpParameters parameters;
JavaRtpParametersToJsepRtpParameters(jni, j_parameters, &parameters);
- return reinterpret_cast<RtpReceiverInterface*>(j_rtp_sender_pointer)
+ return reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)
->SetParameters(parameters);
}
JOW(jobject, RtpReceiver_nativeGetParameters)
-(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) {
+(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) {
webrtc::RtpParameters parameters =
- reinterpret_cast<RtpReceiverInterface*>(j_rtp_sender_pointer)
+ reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)
->GetParameters();
return JsepRtpParametersToJavaRtpParameters(jni, parameters);
}
@@ -2407,8 +2448,29 @@ JOW(jstring, RtpReceiver_nativeId)(
reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id());
}
-JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) {
+JOW(void, RtpReceiver_free)
+(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) {
reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release();
}
+JOW(jlong, RtpReceiver_nativeSetObserver)
+(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer, jobject j_observer) {
+ RtpReceiverObserver* rtpReceiverObserver =
+ new RtpReceiverObserver(jni, j_observer);
+ reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)
+ ->SetObserver(rtpReceiverObserver);
+ return jlongFromPointer(rtpReceiverObserver);
+}
+
+JOW(void, RtpReceiver_nativeUnsetObserver)
+(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer, jlong j_observer_pointer) {
+ reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)
+ ->SetObserver(nullptr);
+ RtpReceiverObserver* observer =
+ reinterpret_cast<RtpReceiverObserver*>(j_observer_pointer);
+ if (observer) {
+ delete observer;
+ }
+}
+
} // namespace webrtc_jni
« no previous file with comments | « webrtc/sdk/android/src/jni/jni_helpers.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698