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