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

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

Issue 2651883010: Adding C++ versions of currently spec'd "RtpParameters" structs. (Closed)
Patch Set: Update unit tests (due to switch from special-case values to rtc::Optional) Created 3 years, 10 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
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 6a6ba25c9635995042f4e122bf04ef4b79487d89..d3f23445d615e708049db976c0e6c8b9b50f3790 100644
--- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc
+++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc
@@ -158,6 +158,47 @@ static DataChannelInit JavaDataChannelInitToNative(
return init;
}
+static cricket::MediaType JavaMediaTypeToJsepMediaType(JNIEnv* jni,
+ jobject j_media_type) {
+ jclass j_media_type_class =
+ FindClass(jni, "org/webrtc/MediaStreamTrack$MediaType");
+ jmethodID j_name_id =
+ GetMethodID(jni, j_media_type_class, "name", "()Ljava/lang/String;");
+ jstring j_type_string =
+ (jstring)jni->CallObjectMethod(j_media_type, j_name_id);
+ CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
+ std::string type_string = JavaToStdString(jni, j_type_string);
+
+ RTC_DCHECK(type_string == "MEDIA_TYPE_AUDIO" ||
+ type_string == "MEDIA_TYPE_VIDEO")
+ << "Media type: " << type_string;
+ return type_string == "MEDIA_TYPE_AUDIO" ? cricket::MEDIA_TYPE_AUDIO
+ : cricket::MEDIA_TYPE_VIDEO;
+}
+
+static jobject JsepMediaTypeToJavaMediaType(JNIEnv* jni,
+ cricket::MediaType media_type) {
+ jclass j_media_type_class =
+ FindClass(jni, "org/webrtc/MediaStreamTrack$MediaType");
+
+ const char* media_type_str = nullptr;
+ switch (media_type) {
+ case cricket::MEDIA_TYPE_AUDIO:
+ media_type_str = "MEDIA_TYPE_AUDIO";
+ break;
+ case cricket::MEDIA_TYPE_VIDEO:
+ media_type_str = "MEDIA_TYPE_VIDEO";
+ break;
+ case cricket::MEDIA_TYPE_DATA:
+ RTC_NOTREACHED();
+ break;
+ }
+ jfieldID j_media_type_fid =
+ GetStaticFieldID(jni, j_media_type_class, media_type_str,
+ "Lorg/webrtc/MediaStreamTrack$MediaType;");
+ return GetStaticObjectField(jni, j_media_type_class, j_media_type_fid);
+}
+
class ConstraintsWrapper;
// Adapter between the C++ PeerConnectionObserver interface and the Java
@@ -917,20 +958,7 @@ class RtpReceiverObserver : public RtpReceiverObserverInterface {
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);
+ jobject JavaMediaType = JsepMediaTypeToJavaMediaType(jni, media_type);
// Trigger the callback function.
jni->CallVoidMethod(*j_observer_global_, j_on_first_packet_received_mid,
JavaMediaType);
@@ -2400,7 +2428,6 @@ static void JavaRtpParametersToJsepRtpParameters(
// Convert encodings.
jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id);
- const int kBitrateUnlimited = -1;
jclass j_encoding_parameters_class =
jni->FindClass("org/webrtc/RtpParameters$Encoding");
jfieldID active_id =
@@ -2422,9 +2449,7 @@ static void JavaRtpParametersToJsepRtpParameters(
if (!IsNull(jni, j_bitrate)) {
int bitrate_value = jni->CallIntMethod(j_bitrate, int_value_id);
CHECK_EXCEPTION(jni) << "error during CallIntMethod";
- encoding.max_bitrate_bps = bitrate_value;
- } else {
- encoding.max_bitrate_bps = kBitrateUnlimited;
+ encoding.max_bitrate_bps = rtc::Optional<int>(bitrate_value);
}
jobject j_ssrc =
GetNullableObjectField(jni, j_encoding_parameters, ssrc_id);
@@ -2440,18 +2465,33 @@ static void JavaRtpParametersToJsepRtpParameters(
jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id);
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");
+ jfieldID name_id = GetFieldID(jni, codec_class, "name", "Ljava/lang/String;");
+ jfieldID kind_id = GetFieldID(jni, codec_class, "kind",
+ "Lorg/webrtc/MediaStreamTrack$MediaType;");
+ jfieldID clock_rate_id =
+ GetFieldID(jni, codec_class, "clockRate", "Ljava/lang/Integer;");
+ jfieldID num_channels_id =
+ GetFieldID(jni, codec_class, "numChannels", "Ljava/lang/Integer;");
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);
+ codec.name = JavaToStdString(jni, GetStringField(jni, j_codec, name_id));
+ codec.kind = JavaMediaTypeToJsepMediaType(
+ jni, GetObjectField(jni, j_codec, kind_id));
+ jobject j_clock_rate = GetNullableObjectField(jni, j_codec, clock_rate_id);
+ if (!IsNull(jni, j_clock_rate)) {
+ int clock_rate_value = jni->CallIntMethod(j_clock_rate, int_value_id);
+ CHECK_EXCEPTION(jni) << "error during CallIntMethod";
+ codec.clock_rate = rtc::Optional<int>(clock_rate_value);
+ }
+ jobject j_num_channels =
+ GetNullableObjectField(jni, j_codec, num_channels_id);
+ if (!IsNull(jni, j_num_channels)) {
+ int num_channels_value = jni->CallIntMethod(j_num_channels, int_value_id);
+ CHECK_EXCEPTION(jni) << "error during CallIntMethod";
+ codec.num_channels = rtc::Optional<int>(num_channels_value);
+ }
parameters->codecs.push_back(codec);
}
}
@@ -2473,8 +2513,7 @@ static jobject JsepRtpParametersToJavaRtpParameters(
jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id);
jmethodID encodings_add = GetMethodID(jni, GetObjectClass(jni, j_encodings),
"add", "(Ljava/lang/Object;)Z");
- jfieldID active_id =
- GetFieldID(jni, encoding_class, "active", "Z");
+ jfieldID active_id = GetFieldID(jni, encoding_class, "active", "Z");
jfieldID bitrate_id =
GetFieldID(jni, encoding_class, "maxBitrateBps", "Ljava/lang/Integer;");
jfieldID ssrc_id =
@@ -2491,9 +2530,9 @@ static jobject JsepRtpParametersToJavaRtpParameters(
CHECK_EXCEPTION(jni) << "error during NewObject";
jni->SetBooleanField(j_encoding_parameters, active_id, encoding.active);
CHECK_EXCEPTION(jni) << "error during SetBooleanField";
- if (encoding.max_bitrate_bps > 0) {
- jobject j_bitrate_value =
- jni->NewObject(integer_class, integer_ctor, encoding.max_bitrate_bps);
+ if (encoding.max_bitrate_bps) {
+ jobject j_bitrate_value = jni->NewObject(integer_class, integer_ctor,
+ *(encoding.max_bitrate_bps));
CHECK_EXCEPTION(jni) << "error during NewObject";
jni->SetObjectField(j_encoding_parameters, bitrate_id, j_bitrate_value);
CHECK_EXCEPTION(jni) << "error during SetObjectField";
@@ -2517,26 +2556,42 @@ static jobject JsepRtpParametersToJavaRtpParameters(
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),
- "add", "(Ljava/lang/Object;)Z");
+ jmethodID codecs_add = GetMethodID(jni, GetObjectClass(jni, j_codecs), "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");
+ jfieldID name_id = GetFieldID(jni, codec_class, "name", "Ljava/lang/String;");
+ jfieldID kind_id = GetFieldID(jni, codec_class, "kind",
+ "Lorg/webrtc/MediaStreamTrack$MediaType;");
+ jfieldID clock_rate_id =
+ GetFieldID(jni, codec_class, "clockRate", "Ljava/lang/Integer;");
+ jfieldID num_channels_id =
+ GetFieldID(jni, codec_class, "numChannels", "Ljava/lang/Integer;");
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));
+ jni->SetObjectField(j_codec, name_id,
+ JavaStringFromStdString(jni, codec.name));
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";
+ jni->SetObjectField(j_codec, kind_id,
+ JsepMediaTypeToJavaMediaType(jni, codec.kind));
+ CHECK_EXCEPTION(jni) << "error during SetObjectField";
+ if (codec.clock_rate) {
+ jobject j_clock_rate_value =
+ jni->NewObject(integer_class, integer_ctor, *(codec.clock_rate));
+ CHECK_EXCEPTION(jni) << "error during NewObject";
+ jni->SetObjectField(j_codec, clock_rate_id, j_clock_rate_value);
+ CHECK_EXCEPTION(jni) << "error during SetObjectField";
+ }
+ if (codec.num_channels) {
+ jobject j_num_channels_value =
+ jni->NewObject(integer_class, integer_ctor, *(codec.num_channels));
+ CHECK_EXCEPTION(jni) << "error during NewObject";
+ jni->SetObjectField(j_codec, num_channels_id, j_num_channels_value);
+ CHECK_EXCEPTION(jni) << "error during SetObjectField";
+ }
jboolean added = jni->CallBooleanMethod(j_codecs, codecs_add, j_codec);
CHECK_EXCEPTION(jni) << "error during CallBooleanMethod";
RTC_CHECK(added);
« no previous file with comments | « webrtc/sdk/android/api/org/webrtc/RtpParameters.java ('k') | webrtc/sdk/objc/Framework/Classes/RTCRtpCodecParameters.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698