OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 2009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2020 JOW(jlong, RtpSender_nativeGetTrack)(JNIEnv* jni, | 2020 JOW(jlong, RtpSender_nativeGetTrack)(JNIEnv* jni, |
2021 jclass, | 2021 jclass, |
2022 jlong j_rtp_sender_pointer, | 2022 jlong j_rtp_sender_pointer, |
2023 jlong j_track_pointer) { | 2023 jlong j_track_pointer) { |
2024 return jlongFromPointer( | 2024 return jlongFromPointer( |
2025 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) | 2025 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
2026 ->track() | 2026 ->track() |
2027 .release()); | 2027 .release()); |
2028 } | 2028 } |
2029 | 2029 |
2030 static bool JavaEncodingToJsepRtpEncodingParameters( | 2030 static void JavaRtpParametersToJsepRtpParameters( |
2031 JNIEnv* jni, | 2031 JNIEnv* jni, |
2032 jobject j_encodings, | 2032 jobject j_parameters, |
2033 std::vector<webrtc::RtpEncodingParameters>* encodings) { | 2033 webrtc::RtpParameters* parameters) { |
| 2034 RTC_CHECK(parameters != nullptr); |
| 2035 jclass parameters_class = jni->FindClass("org/webrtc/RtpParameters"); |
| 2036 jfieldID encodings_id = |
| 2037 GetFieldID(jni, parameters_class, "encodings", "Ljava/util/LinkedList;"); |
| 2038 jfieldID codecs_id = |
| 2039 GetFieldID(jni, parameters_class, "codecs", "Ljava/util/LinkedList;"); |
| 2040 |
| 2041 // Convert encodings. |
| 2042 jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id); |
2034 const int kBitrateUnlimited = -1; | 2043 const int kBitrateUnlimited = -1; |
2035 jclass j_encoding_parameters_class = | 2044 jclass j_encoding_parameters_class = |
2036 jni->FindClass("org/webrtc/RtpParameters$Encoding"); | 2045 jni->FindClass("org/webrtc/RtpParameters$Encoding"); |
2037 jfieldID active_id = | 2046 jfieldID active_id = |
2038 GetFieldID(jni, j_encoding_parameters_class, "active", "Z"); | 2047 GetFieldID(jni, j_encoding_parameters_class, "active", "Z"); |
2039 jfieldID bitrate_id = GetFieldID(jni, j_encoding_parameters_class, | 2048 jfieldID bitrate_id = GetFieldID(jni, j_encoding_parameters_class, |
2040 "maxBitrateBps", "Ljava/lang/Integer;"); | 2049 "maxBitrateBps", "Ljava/lang/Integer;"); |
2041 jclass j_integer_class = jni->FindClass("java/lang/Integer"); | 2050 jclass j_integer_class = jni->FindClass("java/lang/Integer"); |
2042 jmethodID int_value_id = GetMethodID(jni, j_integer_class, "intValue", "()I"); | 2051 jmethodID int_value_id = GetMethodID(jni, j_integer_class, "intValue", "()I"); |
2043 | 2052 |
2044 for (jobject j_encoding_parameters : Iterable(jni, j_encodings)) { | 2053 for (jobject j_encoding_parameters : Iterable(jni, j_encodings)) { |
2045 webrtc::RtpEncodingParameters encoding; | 2054 webrtc::RtpEncodingParameters encoding; |
2046 encoding.active = GetBooleanField(jni, j_encoding_parameters, active_id); | 2055 encoding.active = GetBooleanField(jni, j_encoding_parameters, active_id); |
2047 jobject j_bitrate = | 2056 jobject j_bitrate = |
2048 GetNullableObjectField(jni, j_encoding_parameters, bitrate_id); | 2057 GetNullableObjectField(jni, j_encoding_parameters, bitrate_id); |
2049 if (!IsNull(jni, j_bitrate)) { | 2058 if (!IsNull(jni, j_bitrate)) { |
2050 int bitrate_value = jni->CallIntMethod(j_bitrate, int_value_id); | 2059 int bitrate_value = jni->CallIntMethod(j_bitrate, int_value_id); |
2051 CHECK_EXCEPTION(jni) << "error during CallIntMethod"; | 2060 CHECK_EXCEPTION(jni) << "error during CallIntMethod"; |
2052 encoding.max_bitrate_bps = bitrate_value; | 2061 encoding.max_bitrate_bps = bitrate_value; |
2053 } else { | 2062 } else { |
2054 encoding.max_bitrate_bps = kBitrateUnlimited; | 2063 encoding.max_bitrate_bps = kBitrateUnlimited; |
2055 } | 2064 } |
2056 encodings->push_back(encoding); | 2065 parameters->encodings.push_back(encoding); |
2057 } | 2066 } |
2058 return true; | |
2059 } | |
2060 | 2067 |
2061 static bool JavaCodecToJsepRtpCodecParameters( | 2068 // Convert codecs. |
2062 JNIEnv* jni, | 2069 jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id); |
2063 jobject j_codecs, | |
2064 std::vector<webrtc::RtpCodecParameters>* codecs) { | |
2065 jclass codec_class = jni->FindClass("org/webrtc/RtpParameters$Codec"); | 2070 jclass codec_class = jni->FindClass("org/webrtc/RtpParameters$Codec"); |
2066 jfieldID payload_type_id = GetFieldID(jni, codec_class, "payloadType", "I"); | 2071 jfieldID payload_type_id = GetFieldID(jni, codec_class, "payloadType", "I"); |
2067 jfieldID mime_type_id = | 2072 jfieldID mime_type_id = |
2068 GetFieldID(jni, codec_class, "mimeType", "Ljava/lang/String;"); | 2073 GetFieldID(jni, codec_class, "mimeType", "Ljava/lang/String;"); |
2069 jfieldID clock_rate_id = GetFieldID(jni, codec_class, "clockRate", "I"); | 2074 jfieldID clock_rate_id = GetFieldID(jni, codec_class, "clockRate", "I"); |
2070 jfieldID channels_id = GetFieldID(jni, codec_class, "channels", "I"); | 2075 jfieldID channels_id = GetFieldID(jni, codec_class, "channels", "I"); |
2071 | 2076 |
2072 for (jobject j_codec : Iterable(jni, j_codecs)) { | 2077 for (jobject j_codec : Iterable(jni, j_codecs)) { |
2073 webrtc::RtpCodecParameters codec; | 2078 webrtc::RtpCodecParameters codec; |
2074 codec.payload_type = GetIntField(jni, j_codec, payload_type_id); | 2079 codec.payload_type = GetIntField(jni, j_codec, payload_type_id); |
2075 codec.mime_type = | 2080 codec.mime_type = |
2076 JavaToStdString(jni, GetStringField(jni, j_codec, mime_type_id)); | 2081 JavaToStdString(jni, GetStringField(jni, j_codec, mime_type_id)); |
2077 codec.clock_rate = GetIntField(jni, j_codec, clock_rate_id); | 2082 codec.clock_rate = GetIntField(jni, j_codec, clock_rate_id); |
2078 codec.channels = GetIntField(jni, j_codec, channels_id); | 2083 codec.channels = GetIntField(jni, j_codec, channels_id); |
2079 codecs->push_back(codec); | 2084 parameters->codecs.push_back(codec); |
2080 } | 2085 } |
2081 return true; | |
2082 } | 2086 } |
2083 | 2087 |
2084 JOW(jboolean, RtpSender_nativeSetParameters) | 2088 static jobject JsepRtpParametersToJavaRtpParameters( |
2085 (JNIEnv* jni, jclass, jlong j_rtp_sender_pointer, jobject j_parameters) { | 2089 JNIEnv* jni, |
2086 if (IsNull(jni, j_parameters)) { | 2090 const webrtc::RtpParameters& parameters) { |
2087 return false; | |
2088 } | |
2089 jclass parameters_class = jni->FindClass("org/webrtc/RtpParameters"); | |
2090 jclass encoding_class = jni->FindClass("org/webrtc/RtpParameters$Encoding"); | |
2091 jfieldID encodings_id = | |
2092 GetFieldID(jni, parameters_class, "encodings", "Ljava/util/LinkedList;"); | |
2093 jfieldID codecs_id = | |
2094 GetFieldID(jni, parameters_class, "codecs", "Ljava/util/LinkedList;"); | |
2095 | |
2096 jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id); | |
2097 jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id); | |
2098 webrtc::RtpParameters parameters; | |
2099 JavaEncodingToJsepRtpEncodingParameters(jni, j_encodings, | |
2100 ¶meters.encodings); | |
2101 JavaCodecToJsepRtpCodecParameters(jni, j_codecs, ¶meters.codecs); | |
2102 return reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) | |
2103 ->SetParameters(parameters); | |
2104 } | |
2105 | |
2106 JOW(jobject, RtpSender_nativeGetParameters) | |
2107 (JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { | |
2108 webrtc::RtpParameters parameters = | |
2109 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) | |
2110 ->GetParameters(); | |
2111 | |
2112 jclass parameters_class = jni->FindClass("org/webrtc/RtpParameters"); | 2091 jclass parameters_class = jni->FindClass("org/webrtc/RtpParameters"); |
2113 jmethodID parameters_ctor = | 2092 jmethodID parameters_ctor = |
2114 GetMethodID(jni, parameters_class, "<init>", "()V"); | 2093 GetMethodID(jni, parameters_class, "<init>", "()V"); |
2115 jobject j_parameters = jni->NewObject(parameters_class, parameters_ctor); | 2094 jobject j_parameters = jni->NewObject(parameters_class, parameters_ctor); |
2116 CHECK_EXCEPTION(jni) << "error during NewObject"; | 2095 CHECK_EXCEPTION(jni) << "error during NewObject"; |
2117 | 2096 |
| 2097 // Add encodings. |
2118 jclass encoding_class = jni->FindClass("org/webrtc/RtpParameters$Encoding"); | 2098 jclass encoding_class = jni->FindClass("org/webrtc/RtpParameters$Encoding"); |
2119 jmethodID encoding_ctor = GetMethodID(jni, encoding_class, "<init>", "()V"); | 2099 jmethodID encoding_ctor = GetMethodID(jni, encoding_class, "<init>", "()V"); |
2120 jfieldID encodings_id = | 2100 jfieldID encodings_id = |
2121 GetFieldID(jni, parameters_class, "encodings", "Ljava/util/LinkedList;"); | 2101 GetFieldID(jni, parameters_class, "encodings", "Ljava/util/LinkedList;"); |
2122 jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id); | 2102 jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id); |
2123 jmethodID encodings_add = GetMethodID(jni, GetObjectClass(jni, j_encodings), | 2103 jmethodID encodings_add = GetMethodID(jni, GetObjectClass(jni, j_encodings), |
2124 "add", "(Ljava/lang/Object;)Z"); | 2104 "add", "(Ljava/lang/Object;)Z"); |
2125 jfieldID active_id = | 2105 jfieldID active_id = |
2126 GetFieldID(jni, encoding_class, "active", "Z"); | 2106 GetFieldID(jni, encoding_class, "active", "Z"); |
2127 jfieldID bitrate_id = | 2107 jfieldID bitrate_id = |
(...skipping 14 matching lines...) Expand all Loading... |
2142 CHECK_EXCEPTION(jni) << "error during NewObject"; | 2122 CHECK_EXCEPTION(jni) << "error during NewObject"; |
2143 jni->SetObjectField(j_encoding_parameters, bitrate_id, j_bitrate_value); | 2123 jni->SetObjectField(j_encoding_parameters, bitrate_id, j_bitrate_value); |
2144 CHECK_EXCEPTION(jni) << "error during SetObjectField"; | 2124 CHECK_EXCEPTION(jni) << "error during SetObjectField"; |
2145 } | 2125 } |
2146 jboolean added = jni->CallBooleanMethod(j_encodings, encodings_add, | 2126 jboolean added = jni->CallBooleanMethod(j_encodings, encodings_add, |
2147 j_encoding_parameters); | 2127 j_encoding_parameters); |
2148 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; | 2128 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; |
2149 RTC_CHECK(added); | 2129 RTC_CHECK(added); |
2150 } | 2130 } |
2151 | 2131 |
| 2132 // Add codecs. |
2152 jclass codec_class = jni->FindClass("org/webrtc/RtpParameters$Codec"); | 2133 jclass codec_class = jni->FindClass("org/webrtc/RtpParameters$Codec"); |
2153 jmethodID codec_ctor = GetMethodID(jni, codec_class, "<init>", "()V"); | 2134 jmethodID codec_ctor = GetMethodID(jni, codec_class, "<init>", "()V"); |
2154 jfieldID codecs_id = | 2135 jfieldID codecs_id = |
2155 GetFieldID(jni, parameters_class, "codecs", "Ljava/util/LinkedList;"); | 2136 GetFieldID(jni, parameters_class, "codecs", "Ljava/util/LinkedList;"); |
2156 jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id); | 2137 jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id); |
2157 jmethodID codecs_add = GetMethodID(jni, GetObjectClass(jni, j_codecs), | 2138 jmethodID codecs_add = GetMethodID(jni, GetObjectClass(jni, j_codecs), |
2158 "add", "(Ljava/lang/Object;)Z"); | 2139 "add", "(Ljava/lang/Object;)Z"); |
2159 jfieldID payload_type_id = GetFieldID(jni, codec_class, "payloadType", "I"); | 2140 jfieldID payload_type_id = GetFieldID(jni, codec_class, "payloadType", "I"); |
2160 jfieldID mime_type_id = | 2141 jfieldID mime_type_id = |
2161 GetFieldID(jni, codec_class, "mimeType", "Ljava/lang/String;"); | 2142 GetFieldID(jni, codec_class, "mimeType", "Ljava/lang/String;"); |
(...skipping 13 matching lines...) Expand all Loading... |
2175 jni->SetIntField(j_codec, channels_id, codec.channels); | 2156 jni->SetIntField(j_codec, channels_id, codec.channels); |
2176 CHECK_EXCEPTION(jni) << "error during SetIntField"; | 2157 CHECK_EXCEPTION(jni) << "error during SetIntField"; |
2177 jboolean added = jni->CallBooleanMethod(j_codecs, codecs_add, j_codec); | 2158 jboolean added = jni->CallBooleanMethod(j_codecs, codecs_add, j_codec); |
2178 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; | 2159 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; |
2179 RTC_CHECK(added); | 2160 RTC_CHECK(added); |
2180 } | 2161 } |
2181 | 2162 |
2182 return j_parameters; | 2163 return j_parameters; |
2183 } | 2164 } |
2184 | 2165 |
| 2166 JOW(jboolean, RtpSender_nativeSetParameters) |
| 2167 (JNIEnv* jni, jclass, jlong j_rtp_sender_pointer, jobject j_parameters) { |
| 2168 if (IsNull(jni, j_parameters)) { |
| 2169 return false; |
| 2170 } |
| 2171 webrtc::RtpParameters parameters; |
| 2172 JavaRtpParametersToJsepRtpParameters(jni, j_parameters, ¶meters); |
| 2173 return reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
| 2174 ->SetParameters(parameters); |
| 2175 } |
| 2176 |
| 2177 JOW(jobject, RtpSender_nativeGetParameters) |
| 2178 (JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
| 2179 webrtc::RtpParameters parameters = |
| 2180 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
| 2181 ->GetParameters(); |
| 2182 return JsepRtpParametersToJavaRtpParameters(jni, parameters); |
| 2183 } |
| 2184 |
2185 JOW(jstring, RtpSender_nativeId)( | 2185 JOW(jstring, RtpSender_nativeId)( |
2186 JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { | 2186 JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
2187 return JavaStringFromStdString( | 2187 return JavaStringFromStdString( |
2188 jni, reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->id()); | 2188 jni, reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->id()); |
2189 } | 2189 } |
2190 | 2190 |
2191 JOW(void, RtpSender_free)(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { | 2191 JOW(void, RtpSender_free)(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
2192 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->Release(); | 2192 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->Release(); |
2193 } | 2193 } |
2194 | 2194 |
2195 JOW(jlong, RtpReceiver_nativeGetTrack)(JNIEnv* jni, | 2195 JOW(jlong, RtpReceiver_nativeGetTrack)(JNIEnv* jni, |
2196 jclass, | 2196 jclass, |
2197 jlong j_rtp_receiver_pointer, | 2197 jlong j_rtp_receiver_pointer, |
2198 jlong j_track_pointer) { | 2198 jlong j_track_pointer) { |
2199 return jlongFromPointer( | 2199 return jlongFromPointer( |
2200 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer) | 2200 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer) |
2201 ->track() | 2201 ->track() |
2202 .release()); | 2202 .release()); |
2203 } | 2203 } |
2204 | 2204 |
| 2205 JOW(jboolean, RtpReceiver_nativeSetParameters) |
| 2206 (JNIEnv* jni, jclass, jlong j_rtp_sender_pointer, jobject j_parameters) { |
| 2207 if (IsNull(jni, j_parameters)) { |
| 2208 return false; |
| 2209 } |
| 2210 webrtc::RtpParameters parameters; |
| 2211 JavaRtpParametersToJsepRtpParameters(jni, j_parameters, ¶meters); |
| 2212 return reinterpret_cast<RtpReceiverInterface*>(j_rtp_sender_pointer) |
| 2213 ->SetParameters(parameters); |
| 2214 } |
| 2215 |
| 2216 JOW(jobject, RtpReceiver_nativeGetParameters) |
| 2217 (JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
| 2218 webrtc::RtpParameters parameters = |
| 2219 reinterpret_cast<RtpReceiverInterface*>(j_rtp_sender_pointer) |
| 2220 ->GetParameters(); |
| 2221 return JsepRtpParametersToJavaRtpParameters(jni, parameters); |
| 2222 } |
| 2223 |
2205 JOW(jstring, RtpReceiver_nativeId)( | 2224 JOW(jstring, RtpReceiver_nativeId)( |
2206 JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | 2225 JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
2207 return JavaStringFromStdString( | 2226 return JavaStringFromStdString( |
2208 jni, | 2227 jni, |
2209 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); | 2228 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); |
2210 } | 2229 } |
2211 | 2230 |
2212 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | 2231 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
2213 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); | 2232 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
2214 } | 2233 } |
2215 | 2234 |
2216 } // namespace webrtc_jni | 2235 } // namespace webrtc_jni |
OLD | NEW |