summaryrefslogtreecommitdiff
path: root/chromium/third_party/webrtc/sdk/android
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/webrtc/sdk/android')
-rw-r--r--chromium/third_party/webrtc/sdk/android/BUILD.gn37
-rw-r--r--chromium/third_party/webrtc/sdk/android/api/org/webrtc/MediaTransportFactoryFactory.java22
-rw-r--r--chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnection.java24
-rw-r--r--chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java13
-rw-r--r--chromium/third_party/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java11
-rw-r--r--chromium/third_party/webrtc/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java20
-rw-r--r--chromium/third_party/webrtc/sdk/android/src/jni/audio_device/audio_track_jni.cc28
-rw-r--r--chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection.cc5
-rw-r--r--chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection_factory.cc11
9 files changed, 81 insertions, 90 deletions
diff --git a/chromium/third_party/webrtc/sdk/android/BUILD.gn b/chromium/third_party/webrtc/sdk/android/BUILD.gn
index f4d05c1fde3..3c824dbe756 100644
--- a/chromium/third_party/webrtc/sdk/android/BUILD.gn
+++ b/chromium/third_party/webrtc/sdk/android/BUILD.gn
@@ -272,7 +272,6 @@ if (is_android) {
"api/org/webrtc/MediaSource.java",
"api/org/webrtc/MediaStream.java",
"api/org/webrtc/MediaStreamTrack.java",
- "api/org/webrtc/MediaTransportFactoryFactory.java",
"api/org/webrtc/NativeLibraryLoader.java",
"api/org/webrtc/NativePeerConnectionFactory.java",
"api/org/webrtc/NetEqFactoryFactory.java",
@@ -326,7 +325,7 @@ if (is_android) {
"//third_party/android_deps:com_android_support_support_annotations_java",
]
srcjar_deps = [
- "//api:rtp_parameters_enums",
+ "//api:priority_enums",
"//api/video:video_frame_enums",
]
}
@@ -558,8 +557,8 @@ if (current_os == "linux" || is_android) {
"../../rtc_base:rtc_base_approved",
"../../system_wrappers:field_trial",
"../../system_wrappers:metrics",
- "//third_party/abseil-cpp/absl/types:optional",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("audio_jni") {
@@ -655,9 +654,9 @@ if (current_os == "linux" || is_android) {
"../../rtc_base:checks",
"../../rtc_base:rtc_task_queue",
"../../rtc_base/task_utils:to_queued_task",
- "//third_party/abseil-cpp/absl/types:optional",
"//third_party/libyuv",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("peerconnection_jni") {
@@ -745,6 +744,8 @@ if (current_os == "linux" || is_android) {
"../../rtc_base:rtc_task_queue",
"../../rtc_base/system:thread_registry",
"../../system_wrappers:field_trial",
+ ]
+ absl_deps = [
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/types:optional",
]
@@ -837,8 +838,8 @@ if (current_os == "linux" || is_android) {
"//api:array_view",
"//rtc_base:checks",
"//rtc_base:rtc_base_approved",
- "//third_party/abseil-cpp/absl/types:optional",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("native_api_base") {
@@ -932,8 +933,8 @@ if (current_os == "linux" || is_android) {
"../../rtc_base:criticalsection",
"../../rtc_base:logging",
"../../rtc_base:stringutils",
- "//third_party/abseil-cpp/absl/base:core_headers",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers" ]
}
# API for creating C++ wrapper implementations of api/mediastreaminterface.h
@@ -1042,8 +1043,8 @@ if (current_os == "linux" || is_android) {
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
"../../system_wrappers:metrics",
- "//third_party/abseil-cpp/absl/types:optional",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("java_audio_device_module") {
@@ -1065,8 +1066,8 @@ if (current_os == "linux" || is_android) {
"../../rtc_base:rtc_base_approved",
"../../system_wrappers:field_trial",
"../../system_wrappers:metrics",
- "//third_party/abseil-cpp/absl/types:optional",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
if (rtc_enable_android_aaudio) {
@@ -1092,8 +1093,8 @@ if (current_os == "linux" || is_android) {
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
"../../system_wrappers",
- "//third_party/abseil-cpp/absl/types:optional",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
}
@@ -1118,8 +1119,8 @@ if (current_os == "linux" || is_android) {
"../../modules/audio_device:audio_device_buffer",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
- "//third_party/abseil-cpp/absl/types:optional",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
#########################
@@ -1344,9 +1345,16 @@ if (is_android) {
deps = [
":base_java",
+ ":builtin_audio_codecs_java",
+ ":camera_java",
":default_video_codec_factory_java",
+ ":filevideo_java",
+ ":hwcodecs_java",
":libjingle_peerconnection_java",
":libjingle_peerconnection_metrics_default_java",
+ ":peerconnection_java",
+ ":surfaceviewrenderer_java",
+ ":swcodecs_java",
":video_api_java",
":video_java",
"//base:base_java_test_support",
@@ -1354,6 +1362,7 @@ if (is_android) {
"//third_party/android_support_test_runner:rules_java",
"//third_party/android_support_test_runner:runner_java",
"//third_party/google-truth:google_truth_java",
+ "//third_party/hamcrest:hamcrest_library_java",
"//third_party/junit",
"//third_party/mockito:mockito_java",
]
@@ -1450,8 +1459,8 @@ if (is_android) {
"../../test:fileutils",
"../../test:test_support",
"../../testing/gtest",
- "//third_party/abseil-cpp/absl/memory",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
}
rtc_android_library("native_unittests_java") {
@@ -1508,7 +1517,13 @@ if (is_android) {
]
deps = [
+ ":base_java",
+ ":camera_java",
+ ":hwcodecs_java",
":libjingle_peerconnection_java",
+ ":peerconnection_java",
+ ":video_api_java",
+ ":video_java",
"//base:base_java_test_support",
"//third_party/google-truth:google_truth_java",
]
diff --git a/chromium/third_party/webrtc/sdk/android/api/org/webrtc/MediaTransportFactoryFactory.java b/chromium/third_party/webrtc/sdk/android/api/org/webrtc/MediaTransportFactoryFactory.java
deleted file mode 100644
index c16a37a6d77..00000000000
--- a/chromium/third_party/webrtc/sdk/android/api/org/webrtc/MediaTransportFactoryFactory.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2018 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-package org.webrtc;
-
-/**
- * Factory for creating webrtc::MediaTransportFactory instances.
- */
-public interface MediaTransportFactoryFactory {
- /**
- * Dynamically allocates a webrtc::MediaTransportFactory instance and returns a pointer to it.
- * The caller takes ownership of the object.
- */
- public long createNativeMediaTransportFactory();
-}
diff --git a/chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnection.java b/chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnection.java
index bf0a2e94413..920e2f12c96 100644
--- a/chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnection.java
+++ b/chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnection.java
@@ -536,18 +536,6 @@ public class PeerConnection {
// Null indicates no change to currently configured value.
@Nullable public Boolean allowCodecSwitching;
- /*
- * Experimental flag that enables a use of media transport. If this is true, the media transport
- * factory MUST be provided to the PeerConnectionFactory.
- */
- public boolean useMediaTransport;
-
- /*
- * Experimental flag that enables a use of media transport for data channels. If this is true,
- * the media transport factory MUST be provided to the PeerConnectionFactory.
- */
- public boolean useMediaTransportForDataChannels;
-
/**
* Defines advanced optional cryptographic settings related to SRTP and
* frame encryption for native WebRTC. Setting this will overwrite any
@@ -602,8 +590,6 @@ public class PeerConnection {
networkPreference = AdapterType.UNKNOWN;
sdpSemantics = SdpSemantics.PLAN_B;
activeResetSrtpParams = false;
- useMediaTransport = false;
- useMediaTransportForDataChannels = false;
cryptoOptions = null;
turnLoggingId = null;
allowCodecSwitching = null;
@@ -816,16 +802,6 @@ public class PeerConnection {
return allowCodecSwitching;
}
- @CalledByNative("RTCConfiguration")
- boolean getUseMediaTransport() {
- return useMediaTransport;
- }
-
- @CalledByNative("RTCConfiguration")
- boolean getUseMediaTransportForDataChannels() {
- return useMediaTransportForDataChannels;
- }
-
@Nullable
@CalledByNative("RTCConfiguration")
CryptoOptions getCryptoOptions() {
diff --git a/chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java
index decdc0cc427..c87e639f235 100644
--- a/chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java
+++ b/chromium/third_party/webrtc/sdk/android/api/org/webrtc/PeerConnectionFactory.java
@@ -175,7 +175,6 @@ public class PeerConnectionFactory {
@Nullable private FecControllerFactoryFactoryInterface fecControllerFactoryFactory;
@Nullable private NetworkControllerFactoryFactory networkControllerFactoryFactory;
@Nullable private NetworkStatePredictorFactoryFactory networkStatePredictorFactoryFactory;
- @Nullable private MediaTransportFactoryFactory mediaTransportFactoryFactory;
@Nullable private NetEqFactoryFactory neteqFactoryFactory;
private Builder() {}
@@ -247,13 +246,6 @@ public class PeerConnectionFactory {
return this;
}
- /** Sets a MediaTransportFactoryFactory for a PeerConnectionFactory. */
- public Builder setMediaTransportFactoryFactory(
- MediaTransportFactoryFactory mediaTransportFactoryFactory) {
- this.mediaTransportFactoryFactory = mediaTransportFactoryFactory;
- return this;
- }
-
/**
* Sets a NetEqFactoryFactory for the PeerConnectionFactory. When using a
* custom NetEqFactoryFactory, the AudioDecoderFactoryFactory will be set
@@ -284,9 +276,6 @@ public class PeerConnectionFactory {
networkStatePredictorFactoryFactory == null
? 0
: networkStatePredictorFactoryFactory.createNativeNetworkStatePredictorFactory(),
- mediaTransportFactoryFactory == null
- ? 0
- : mediaTransportFactoryFactory.createNativeMediaTransportFactory(),
neteqFactoryFactory == null ? 0 : neteqFactoryFactory.createNativeNetEqFactory());
}
}
@@ -607,7 +596,7 @@ public class PeerConnectionFactory {
long audioDecoderFactory, VideoEncoderFactory encoderFactory,
VideoDecoderFactory decoderFactory, long nativeAudioProcessor,
long nativeFecControllerFactory, long nativeNetworkControllerFactory,
- long nativeNetworkStatePredictorFactory, long mediaTransportFactory, long neteqFactory);
+ long nativeNetworkStatePredictorFactory, long neteqFactory);
private static native long nativeCreatePeerConnection(long factory,
PeerConnection.RTCConfiguration rtcConfig, MediaConstraints constraints, long nativeObserver,
diff --git a/chromium/third_party/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java b/chromium/third_party/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
index 3522a874879..b7b028f5aeb 100644
--- a/chromium/third_party/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
+++ b/chromium/third_party/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
@@ -263,6 +263,17 @@ public class SurfaceTextureHelper {
});
}
+ /**
+ * Forces a frame to be produced. If no new frame is available, the last frame is sent to the
+ * listener again.
+ */
+ public void forceFrame() {
+ handler.post(() -> {
+ hasPendingTexture = true;
+ tryDeliverTextureFrame();
+ });
+ }
+
/** Set the rotation of the delivered frames. */
public void setFrameRotation(int rotation) {
handler.post(() -> this.frameRotation = rotation);
diff --git a/chromium/third_party/webrtc/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java b/chromium/third_party/webrtc/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java
index edc9dd179df..94eb2a4357a 100644
--- a/chromium/third_party/webrtc/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java
+++ b/chromium/third_party/webrtc/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java
@@ -183,7 +183,7 @@ class WebRtcAudioTrack {
}
@CalledByNative
- private boolean initPlayout(int sampleRate, int channels, double bufferSizeFactor) {
+ private int initPlayout(int sampleRate, int channels, double bufferSizeFactor) {
threadChecker.checkIsOnValidThread();
Logging.d(TAG,
"initPlayout(sampleRate=" + sampleRate + ", channels=" + channels
@@ -212,14 +212,14 @@ class WebRtcAudioTrack {
// can happen that |minBufferSizeInBytes| contains an invalid value.
if (minBufferSizeInBytes < byteBuffer.capacity()) {
reportWebRtcAudioTrackInitError("AudioTrack.getMinBufferSize returns an invalid value.");
- return false;
+ return -1;
}
// Ensure that prevision audio session was stopped correctly before trying
// to create a new AudioTrack.
if (audioTrack != null) {
reportWebRtcAudioTrackInitError("Conflict with existing AudioTrack.");
- return false;
+ return -1;
}
try {
// Create an AudioTrack object and initialize its associated audio buffer.
@@ -241,7 +241,7 @@ class WebRtcAudioTrack {
} catch (IllegalArgumentException e) {
reportWebRtcAudioTrackInitError(e.getMessage());
releaseAudioResources();
- return false;
+ return -1;
}
// It can happen that an AudioTrack is created but it was not successfully
@@ -250,11 +250,11 @@ class WebRtcAudioTrack {
if (audioTrack == null || audioTrack.getState() != AudioTrack.STATE_INITIALIZED) {
reportWebRtcAudioTrackInitError("Initialization of audio track failed.");
releaseAudioResources();
- return false;
+ return -1;
}
logMainParameters();
logMainParametersExtended();
- return true;
+ return minBufferSizeInBytes;
}
@CalledByNative
@@ -423,6 +423,14 @@ class WebRtcAudioTrack {
}
}
+ @CalledByNative
+ private int getBufferSizeInFrames() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ return audioTrack.getBufferSizeInFrames();
+ }
+ return -1;
+ }
+
private void logBufferCapacityInFrames() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Logging.d(TAG,
diff --git a/chromium/third_party/webrtc/sdk/android/src/jni/audio_device/audio_track_jni.cc b/chromium/third_party/webrtc/sdk/android/src/jni/audio_device/audio_track_jni.cc
index 8f0a0417110..d5b880b1b0f 100644
--- a/chromium/third_party/webrtc/sdk/android/src/jni/audio_device/audio_track_jni.cc
+++ b/chromium/third_party/webrtc/sdk/android/src/jni/audio_device/audio_track_jni.cc
@@ -20,6 +20,7 @@
#include "sdk/android/generated_java_audio_device_module_native_jni/WebRtcAudioTrack_jni.h"
#include "sdk/android/src/jni/jni_helpers.h"
#include "system_wrappers/include/field_trial.h"
+#include "system_wrappers/include/metrics.h"
namespace webrtc {
@@ -89,12 +90,33 @@ int32_t AudioTrackJni::InitPlayout() {
nullptr);
if (buffer_size_factor == 0)
buffer_size_factor = 1.0;
- if (!Java_WebRtcAudioTrack_initPlayout(
- env_, j_audio_track_, audio_parameters_.sample_rate(),
- static_cast<int>(audio_parameters_.channels()), buffer_size_factor)) {
+ int requested_buffer_size_bytes = Java_WebRtcAudioTrack_initPlayout(
+ env_, j_audio_track_, audio_parameters_.sample_rate(),
+ static_cast<int>(audio_parameters_.channels()), buffer_size_factor);
+ if (requested_buffer_size_bytes < 0) {
RTC_LOG(LS_ERROR) << "InitPlayout failed";
return -1;
}
+ // Update UMA histograms for both the requested and actual buffer size.
+ // To avoid division by zero, we assume the sample rate is 48k if an invalid
+ // value is found.
+ const int sample_rate = audio_parameters_.sample_rate() <= 0
+ ? 48000
+ : audio_parameters_.sample_rate();
+ // This calculation assumes that audio is mono.
+ const int requested_buffer_size_ms =
+ (requested_buffer_size_bytes * 1000) / (2 * sample_rate);
+ RTC_HISTOGRAM_COUNTS("WebRTC.Audio.AndroidNativeRequestedAudioBufferSizeMs",
+ requested_buffer_size_ms, 0, 1000, 100);
+ int actual_buffer_size_frames =
+ Java_WebRtcAudioTrack_getBufferSizeInFrames(env_, j_audio_track_);
+ if (actual_buffer_size_frames >= 0) {
+ const int actual_buffer_size_ms =
+ actual_buffer_size_frames * 1000 / sample_rate;
+ RTC_HISTOGRAM_COUNTS("WebRTC.Audio.AndroidNativeAudioBufferSizeMs",
+ actual_buffer_size_ms, 0, 1000, 100);
+ }
+
initialized_ = true;
return 0;
}
diff --git a/chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection.cc b/chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection.cc
index 0ae39fbf661..05e940ee806 100644
--- a/chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection.cc
+++ b/chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection.cc
@@ -264,11 +264,6 @@ void JavaToNativeRTCConfiguration(
rtc_config->sdp_semantics = JavaToNativeSdpSemantics(jni, j_sdp_semantics);
rtc_config->active_reset_srtp_params =
Java_RTCConfiguration_getActiveResetSrtpParams(jni, j_rtc_config);
- rtc_config->use_media_transport =
- Java_RTCConfiguration_getUseMediaTransport(jni, j_rtc_config);
- rtc_config->use_media_transport_for_data_channels =
- Java_RTCConfiguration_getUseMediaTransportForDataChannels(jni,
- j_rtc_config);
rtc_config->crypto_options =
JavaToNativeOptionalCryptoOptions(jni, j_crypto_options);
diff --git a/chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection_factory.cc b/chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection_factory.cc
index 48dd6e41d89..32382fe5216 100644
--- a/chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection_factory.cc
+++ b/chromium/third_party/webrtc/sdk/android/src/jni/pc/peer_connection_factory.cc
@@ -82,7 +82,9 @@ void PostJavaCallback(JNIEnv* env,
JavaAsyncCallback(JNIEnv* env,
const JavaRef<jobject>& j_object,
JavaMethodPointer java_method_pointer)
- : j_object_(env, j_object), java_method_pointer_(java_method_pointer) {}
+ : rtc::MessageHandler(false),
+ j_object_(env, j_object),
+ java_method_pointer_(java_method_pointer) {}
void OnMessage(rtc::Message*) override {
java_method_pointer_(AttachCurrentThreadIfNeeded(), j_object_);
@@ -246,7 +248,7 @@ static void JNI_PeerConnectionFactory_ShutdownInternalTracer(JNIEnv* jni) {
// Following parameters are optional:
// |audio_device_module|, |jencoder_factory|, |jdecoder_factory|,
-// |audio_processor|, |media_transport_factory|, |fec_controller_factory|,
+// |audio_processor|, |fec_controller_factory|,
// |network_state_predictor_factory|, |neteq_factory|.
ScopedJavaLocalRef<jobject> CreatePeerConnectionFactoryForJava(
JNIEnv* jni,
@@ -263,7 +265,6 @@ ScopedJavaLocalRef<jobject> CreatePeerConnectionFactoryForJava(
network_controller_factory,
std::unique_ptr<NetworkStatePredictorFactoryInterface>
network_state_predictor_factory,
- std::unique_ptr<MediaTransportFactory> media_transport_factory,
std::unique_ptr<NetEqFactory> neteq_factory) {
// talk/ assumes pretty widely that the current Thread is ThreadManager'd, but
// ThreadManager only WrapCurrentThread()s the thread where it is first
@@ -310,7 +311,6 @@ ScopedJavaLocalRef<jobject> CreatePeerConnectionFactoryForJava(
std::move(network_controller_factory);
dependencies.network_state_predictor_factory =
std::move(network_state_predictor_factory);
- dependencies.media_transport_factory = std::move(media_transport_factory);
dependencies.neteq_factory = std::move(neteq_factory);
cricket::MediaEngineDependencies media_dependencies;
@@ -355,7 +355,6 @@ JNI_PeerConnectionFactory_CreatePeerConnectionFactory(
jlong native_fec_controller_factory,
jlong native_network_controller_factory,
jlong native_network_state_predictor_factory,
- jlong native_media_transport_factory,
jlong native_neteq_factory) {
rtc::scoped_refptr<AudioProcessing> audio_processor =
reinterpret_cast<AudioProcessing*>(native_audio_processor);
@@ -372,8 +371,6 @@ JNI_PeerConnectionFactory_CreatePeerConnectionFactory(
native_network_controller_factory),
TakeOwnershipOfUniquePtr<NetworkStatePredictorFactoryInterface>(
native_network_state_predictor_factory),
- TakeOwnershipOfUniquePtr<MediaTransportFactory>(
- native_media_transport_factory),
TakeOwnershipOfUniquePtr<NetEqFactory>(native_neteq_factory));
}