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

Unified Diff: webrtc/api/java/jni/peerconnection_jni.cc

Issue 1885473004: Adding codecs to the RtpParameters returned by an RtpSender. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Responding to review comments. Created 4 years, 8 months 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/api/api.gyp ('k') | webrtc/api/java/src/org/webrtc/RtpParameters.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/java/jni/peerconnection_jni.cc
diff --git a/webrtc/api/java/jni/peerconnection_jni.cc b/webrtc/api/java/jni/peerconnection_jni.cc
index a250b707e656aeccb595ddb7bcaea8e45f527b11..76bf58ee2f96020ea82913a636e363d18e9a017a 100644
--- a/webrtc/api/java/jni/peerconnection_jni.cc
+++ b/webrtc/api/java/jni/peerconnection_jni.cc
@@ -2058,6 +2058,29 @@ static bool JavaEncodingToJsepRtpEncodingParameters(
return true;
}
+static bool JavaCodecToJsepRtpCodecParameters(
+ JNIEnv* jni,
+ jobject j_codecs,
+ std::vector<webrtc::RtpCodecParameters>* codecs) {
+ jclass codec_class = jni->FindClass("org/webrtc/RtpParameters$Codec");
+ jfieldID payload_type_id = GetFieldID(jni, codec_class, "payloadType", "I");
+ jfieldID mime_type_id =
+ GetFieldID(jni, codec_class, "mimeType", "Ljava/lang/String;");
+ jfieldID clock_rate_id = GetFieldID(jni, codec_class, "clockRate", "I");
+ jfieldID channels_id = GetFieldID(jni, codec_class, "channels", "I");
+
+ for (jobject j_codec : Iterable(jni, j_codecs)) {
+ webrtc::RtpCodecParameters codec;
+ codec.payload_type = GetIntField(jni, j_codec, payload_type_id);
+ codec.mime_type =
+ JavaToStdString(jni, GetStringField(jni, j_codec, mime_type_id));
+ codec.clock_rate = GetIntField(jni, j_codec, clock_rate_id);
+ codec.channels = GetIntField(jni, j_codec, channels_id);
+ codecs->push_back(codec);
+ }
+ return true;
+}
+
JOW(jboolean, RtpSender_nativeSetParameters)
(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer, jobject j_parameters) {
if (IsNull(jni, j_parameters)) {
@@ -2067,11 +2090,15 @@ JOW(jboolean, RtpSender_nativeSetParameters)
jclass encoding_class = jni->FindClass("org/webrtc/RtpParameters$Encoding");
jfieldID encodings_id =
GetFieldID(jni, parameters_class, "encodings", "Ljava/util/LinkedList;");
+ jfieldID codecs_id =
+ GetFieldID(jni, parameters_class, "codecs", "Ljava/util/LinkedList;");
jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id);
+ jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id);
webrtc::RtpParameters parameters;
JavaEncodingToJsepRtpEncodingParameters(jni, j_encodings,
&parameters.encodings);
+ JavaCodecToJsepRtpCodecParameters(jni, j_codecs, &parameters.codecs);
return reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
->SetParameters(parameters);
}
@@ -2093,8 +2120,8 @@ JOW(jobject, RtpSender_nativeGetParameters)
jfieldID encodings_id =
GetFieldID(jni, parameters_class, "encodings", "Ljava/util/LinkedList;");
jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id);
- jmethodID add = GetMethodID(jni, GetObjectClass(jni, j_encodings), "add",
- "(Ljava/lang/Object;)Z");
+ jmethodID encodings_add = GetMethodID(jni, GetObjectClass(jni, j_encodings),
+ "add", "(Ljava/lang/Object;)Z");
jfieldID active_id =
GetFieldID(jni, encoding_class, "active", "Z");
jfieldID bitrate_id =
@@ -2116,10 +2143,42 @@ JOW(jobject, RtpSender_nativeGetParameters)
jni->SetObjectField(j_encoding_parameters, bitrate_id, j_bitrate_value);
CHECK_EXCEPTION(jni) << "error during SetObjectField";
}
- jboolean added =
- jni->CallBooleanMethod(j_encodings, add, j_encoding_parameters);
+ jboolean added = jni->CallBooleanMethod(j_encodings, encodings_add,
AlexG 2016/04/14 22:07:50 alignment : 4 space ident
+ j_encoding_parameters);
+ CHECK_EXCEPTION(jni) << "error during CallBooleanMethod";
+ RTC_CHECK(added);
+ }
+
+ jclass codec_class = jni->FindClass("org/webrtc/RtpParameters$Codec");
+ jmethodID codec_ctor = GetMethodID(jni, codec_class, "<init>", "()V");
+ jfieldID codecs_id =
+ GetFieldID(jni, parameters_class, "codecs", "Ljava/util/LinkedList;");
+ jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id);
+ jmethodID codecs_add = GetMethodID(jni, GetObjectClass(jni, j_codecs),
AlexG 2016/04/14 22:07:50 alignment
+ "add", "(Ljava/lang/Object;)Z");
+ jfieldID payload_type_id = GetFieldID(jni, codec_class, "payloadType", "I");
+ jfieldID mime_type_id =
+ GetFieldID(jni, codec_class, "mimeType", "Ljava/lang/String;");
+ jfieldID clock_rate_id = GetFieldID(jni, codec_class, "clockRate", "I");
+ jfieldID channels_id = GetFieldID(jni, codec_class, "channels", "I");
+
+ for (const webrtc::RtpCodecParameters& codec : parameters.codecs) {
+ jobject j_codec = jni->NewObject(codec_class, codec_ctor);
+ CHECK_EXCEPTION(jni) << "error during NewObject";
+ jni->SetIntField(j_codec, payload_type_id, codec.payload_type);
+ CHECK_EXCEPTION(jni) << "error during SetIntField";
+ jni->SetObjectField(j_codec, mime_type_id,
AlexG 2016/04/14 22:07:50 alignment
+ JavaStringFromStdString(jni, codec.mime_type));
+ CHECK_EXCEPTION(jni) << "error during SetObjectField";
+ jni->SetIntField(j_codec, clock_rate_id, codec.clock_rate);
+ CHECK_EXCEPTION(jni) << "error during SetIntField";
+ jni->SetIntField(j_codec, channels_id, codec.channels);
+ CHECK_EXCEPTION(jni) << "error during SetIntField";
+ jboolean added = jni->CallBooleanMethod(j_codecs, codecs_add, j_codec);
CHECK_EXCEPTION(jni) << "error during CallBooleanMethod";
+ RTC_CHECK(added);
}
+
return j_parameters;
}
« no previous file with comments | « webrtc/api/api.gyp ('k') | webrtc/api/java/src/org/webrtc/RtpParameters.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698