| 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..2f4995daceef529dca6ae0f16441318195884b4a 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,
|
| ¶meters.encodings);
|
| + JavaCodecToJsepRtpCodecParameters(jni, j_codecs, ¶meters.codecs);
|
| return reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
|
| ->SetParameters(parameters);
|
| }
|
| @@ -2119,7 +2146,37 @@ JOW(jobject, RtpSender_nativeGetParameters)
|
| jboolean added =
|
| jni->CallBooleanMethod(j_encodings, add, j_encoding_parameters);
|
| CHECK_EXCEPTION(jni) << "error during CallBooleanMethod";
|
| + RTC_DCHECK(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);
|
| + 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,
|
| + 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, add, j_codec);
|
| + CHECK_EXCEPTION(jni) << "error during CallBooleanMethod";
|
| + RTC_DCHECK(added);
|
| }
|
| +
|
| return j_parameters;
|
| }
|
|
|
|
|