diff options
Diffstat (limited to 'chromium/third_party/webrtc/sdk/android')
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)); } |